reflex 0.7.14a5__py3-none-any.whl → 0.8.0a1__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 (205) 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/utils/context.js.jinja2 +25 -6
  7. reflex/.templates/web/app/entry.client.js +8 -0
  8. reflex/.templates/web/app/routes.js +10 -0
  9. reflex/.templates/web/components/reflex/radix_themes_color_mode_provider.js +12 -32
  10. reflex/.templates/web/postcss.config.js +1 -1
  11. reflex/.templates/web/react-router.config.js +6 -0
  12. reflex/.templates/web/utils/client_side_routing.js +21 -19
  13. reflex/.templates/web/utils/react-theme.js +89 -0
  14. reflex/.templates/web/utils/state.js +155 -67
  15. reflex/.templates/web/vite.config.js +32 -0
  16. reflex/__init__.py +1 -6
  17. reflex/__init__.pyi +0 -4
  18. reflex/app.py +69 -132
  19. reflex/base.py +1 -87
  20. reflex/compiler/compiler.py +40 -3
  21. reflex/compiler/utils.py +54 -28
  22. reflex/components/__init__.py +0 -2
  23. reflex/components/__init__.pyi +0 -3
  24. reflex/components/base/__init__.py +1 -5
  25. reflex/components/base/__init__.pyi +4 -6
  26. reflex/components/base/app_wrap.pyi +5 -4
  27. reflex/components/base/body.pyi +5 -4
  28. reflex/components/base/document.py +18 -14
  29. reflex/components/base/document.pyi +83 -27
  30. reflex/components/base/error_boundary.pyi +5 -4
  31. reflex/components/base/fragment.pyi +5 -4
  32. reflex/components/base/link.pyi +9 -7
  33. reflex/components/base/meta.pyi +17 -13
  34. reflex/components/base/script.py +60 -58
  35. reflex/components/base/script.pyi +246 -31
  36. reflex/components/base/strict_mode.pyi +5 -4
  37. reflex/components/component.py +109 -194
  38. reflex/components/core/__init__.py +1 -0
  39. reflex/components/core/__init__.pyi +1 -0
  40. reflex/components/core/auto_scroll.pyi +5 -4
  41. reflex/components/core/banner.pyi +25 -19
  42. reflex/components/core/client_side_routing.py +7 -6
  43. reflex/components/core/client_side_routing.pyi +6 -56
  44. reflex/components/core/clipboard.pyi +5 -4
  45. reflex/components/core/debounce.py +1 -0
  46. reflex/components/core/debounce.pyi +5 -4
  47. reflex/components/core/foreach.py +3 -2
  48. reflex/components/core/helmet.py +14 -0
  49. reflex/components/{next/base.pyi → core/helmet.pyi} +10 -7
  50. reflex/components/core/html.pyi +5 -4
  51. reflex/components/core/sticky.pyi +17 -13
  52. reflex/components/core/upload.py +2 -1
  53. reflex/components/core/upload.pyi +21 -16
  54. reflex/components/datadisplay/code.pyi +9 -7
  55. reflex/components/datadisplay/dataeditor.pyi +5 -4
  56. reflex/components/datadisplay/shiki_code_block.pyi +13 -10
  57. reflex/components/dynamic.py +4 -5
  58. reflex/components/el/element.pyi +5 -4
  59. reflex/components/el/elements/base.pyi +5 -4
  60. reflex/components/el/elements/forms.pyi +69 -52
  61. reflex/components/el/elements/inline.pyi +113 -85
  62. reflex/components/el/elements/media.pyi +105 -79
  63. reflex/components/el/elements/metadata.pyi +25 -19
  64. reflex/components/el/elements/other.pyi +29 -22
  65. reflex/components/el/elements/scripts.pyi +13 -10
  66. reflex/components/el/elements/sectioning.pyi +61 -46
  67. reflex/components/el/elements/tables.pyi +41 -31
  68. reflex/components/el/elements/typography.pyi +61 -46
  69. reflex/components/field.py +175 -0
  70. reflex/components/gridjs/datatable.py +2 -2
  71. reflex/components/gridjs/datatable.pyi +11 -9
  72. reflex/components/lucide/icon.py +6 -2
  73. reflex/components/lucide/icon.pyi +15 -10
  74. reflex/components/markdown/markdown.pyi +5 -4
  75. reflex/components/moment/moment.pyi +5 -4
  76. reflex/components/plotly/plotly.pyi +19 -10
  77. reflex/components/props.py +376 -27
  78. reflex/components/radix/primitives/accordion.py +8 -1
  79. reflex/components/radix/primitives/accordion.pyi +29 -22
  80. reflex/components/radix/primitives/base.pyi +9 -7
  81. reflex/components/radix/primitives/drawer.pyi +45 -34
  82. reflex/components/radix/primitives/form.pyi +41 -31
  83. reflex/components/radix/primitives/progress.pyi +21 -16
  84. reflex/components/radix/primitives/slider.pyi +21 -16
  85. reflex/components/radix/themes/base.py +3 -3
  86. reflex/components/radix/themes/base.pyi +33 -25
  87. reflex/components/radix/themes/color_mode.pyi +13 -10
  88. reflex/components/radix/themes/components/alert_dialog.pyi +29 -22
  89. reflex/components/radix/themes/components/aspect_ratio.pyi +5 -4
  90. reflex/components/radix/themes/components/avatar.pyi +5 -4
  91. reflex/components/radix/themes/components/badge.pyi +5 -4
  92. reflex/components/radix/themes/components/button.pyi +5 -4
  93. reflex/components/radix/themes/components/callout.pyi +21 -16
  94. reflex/components/radix/themes/components/card.pyi +5 -4
  95. reflex/components/radix/themes/components/checkbox.pyi +13 -10
  96. reflex/components/radix/themes/components/checkbox_cards.pyi +9 -7
  97. reflex/components/radix/themes/components/checkbox_group.pyi +9 -7
  98. reflex/components/radix/themes/components/context_menu.pyi +53 -40
  99. reflex/components/radix/themes/components/data_list.pyi +17 -13
  100. reflex/components/radix/themes/components/dialog.pyi +29 -22
  101. reflex/components/radix/themes/components/dropdown_menu.pyi +33 -25
  102. reflex/components/radix/themes/components/hover_card.pyi +17 -13
  103. reflex/components/radix/themes/components/icon_button.pyi +5 -4
  104. reflex/components/radix/themes/components/inset.pyi +5 -4
  105. reflex/components/radix/themes/components/popover.pyi +17 -13
  106. reflex/components/radix/themes/components/progress.pyi +5 -4
  107. reflex/components/radix/themes/components/radio.pyi +5 -4
  108. reflex/components/radix/themes/components/radio_cards.pyi +9 -7
  109. reflex/components/radix/themes/components/radio_group.pyi +17 -13
  110. reflex/components/radix/themes/components/scroll_area.pyi +5 -4
  111. reflex/components/radix/themes/components/segmented_control.pyi +9 -7
  112. reflex/components/radix/themes/components/select.pyi +37 -28
  113. reflex/components/radix/themes/components/separator.pyi +5 -4
  114. reflex/components/radix/themes/components/skeleton.pyi +5 -4
  115. reflex/components/radix/themes/components/slider.pyi +5 -4
  116. reflex/components/radix/themes/components/spinner.pyi +5 -4
  117. reflex/components/radix/themes/components/switch.pyi +5 -4
  118. reflex/components/radix/themes/components/table.pyi +29 -22
  119. reflex/components/radix/themes/components/tabs.pyi +21 -16
  120. reflex/components/radix/themes/components/text_area.pyi +5 -4
  121. reflex/components/radix/themes/components/text_field.pyi +13 -10
  122. reflex/components/radix/themes/components/tooltip.pyi +5 -4
  123. reflex/components/radix/themes/layout/base.pyi +5 -4
  124. reflex/components/radix/themes/layout/box.pyi +5 -4
  125. reflex/components/radix/themes/layout/center.pyi +5 -4
  126. reflex/components/radix/themes/layout/container.pyi +5 -4
  127. reflex/components/radix/themes/layout/flex.pyi +5 -4
  128. reflex/components/radix/themes/layout/grid.pyi +5 -4
  129. reflex/components/radix/themes/layout/list.pyi +21 -16
  130. reflex/components/radix/themes/layout/section.pyi +5 -4
  131. reflex/components/radix/themes/layout/spacer.pyi +5 -4
  132. reflex/components/radix/themes/layout/stack.pyi +13 -10
  133. reflex/components/radix/themes/typography/blockquote.pyi +5 -4
  134. reflex/components/radix/themes/typography/code.pyi +5 -4
  135. reflex/components/radix/themes/typography/heading.pyi +5 -4
  136. reflex/components/radix/themes/typography/link.py +42 -9
  137. reflex/components/radix/themes/typography/link.pyi +311 -6
  138. reflex/components/radix/themes/typography/text.pyi +29 -22
  139. reflex/components/react_player/audio.pyi +5 -4
  140. reflex/components/react_player/react_player.pyi +5 -4
  141. reflex/components/react_player/video.pyi +5 -4
  142. reflex/components/recharts/cartesian.py +2 -1
  143. reflex/components/recharts/cartesian.pyi +65 -46
  144. reflex/components/recharts/charts.py +4 -2
  145. reflex/components/recharts/charts.pyi +36 -24
  146. reflex/components/recharts/general.pyi +24 -18
  147. reflex/components/recharts/polar.py +8 -4
  148. reflex/components/recharts/polar.pyi +16 -10
  149. reflex/components/recharts/recharts.pyi +9 -7
  150. reflex/components/sonner/toast.py +2 -2
  151. reflex/components/sonner/toast.pyi +7 -6
  152. reflex/config.py +3 -77
  153. reflex/constants/__init__.py +1 -0
  154. reflex/constants/base.py +38 -8
  155. reflex/constants/compiler.py +4 -2
  156. reflex/constants/event.py +1 -0
  157. reflex/constants/installer.py +23 -16
  158. reflex/constants/state.py +2 -0
  159. reflex/custom_components/custom_components.py +0 -14
  160. reflex/environment.py +1 -1
  161. reflex/event.py +178 -81
  162. reflex/experimental/__init__.py +0 -30
  163. reflex/istate/proxy.py +5 -3
  164. reflex/page.py +0 -27
  165. reflex/plugins/__init__.py +3 -2
  166. reflex/plugins/base.py +5 -1
  167. reflex/plugins/shared_tailwind.py +158 -0
  168. reflex/plugins/sitemap.py +206 -0
  169. reflex/plugins/tailwind_v3.py +13 -106
  170. reflex/plugins/tailwind_v4.py +15 -108
  171. reflex/reflex.py +1 -0
  172. reflex/state.py +134 -140
  173. reflex/testing.py +57 -9
  174. reflex/utils/build.py +9 -69
  175. reflex/utils/exec.py +59 -161
  176. reflex/utils/export.py +1 -1
  177. reflex/utils/imports.py +0 -4
  178. reflex/utils/misc.py +28 -0
  179. reflex/utils/prerequisites.py +62 -59
  180. reflex/utils/processes.py +6 -6
  181. reflex/utils/pyi_generator.py +21 -9
  182. reflex/utils/serializers.py +14 -1
  183. reflex/utils/types.py +196 -61
  184. reflex/vars/__init__.py +2 -0
  185. reflex/vars/base.py +367 -134
  186. {reflex-0.7.14a5.dist-info → reflex-0.8.0a1.dist-info}/METADATA +12 -5
  187. {reflex-0.7.14a5.dist-info → reflex-0.8.0a1.dist-info}/RECORD +190 -196
  188. reflex/.templates/web/next.config.js +0 -7
  189. reflex/components/base/head.py +0 -20
  190. reflex/components/base/head.pyi +0 -116
  191. reflex/components/next/__init__.py +0 -10
  192. reflex/components/next/base.py +0 -7
  193. reflex/components/next/image.py +0 -117
  194. reflex/components/next/image.pyi +0 -94
  195. reflex/components/next/link.py +0 -20
  196. reflex/components/next/link.pyi +0 -67
  197. reflex/components/next/video.py +0 -38
  198. reflex/components/next/video.pyi +0 -68
  199. reflex/components/suneditor/__init__.py +0 -5
  200. reflex/components/suneditor/editor.py +0 -269
  201. reflex/components/suneditor/editor.pyi +0 -199
  202. reflex/experimental/layout.py +0 -254
  203. {reflex-0.7.14a5.dist-info → reflex-0.8.0a1.dist-info}/WHEEL +0 -0
  204. {reflex-0.7.14a5.dist-info → reflex-0.8.0a1.dist-info}/entry_points.txt +0 -0
  205. {reflex-0.7.14a5.dist-info → reflex-0.8.0a1.dist-info}/licenses/LICENSE +0 -0
reflex/compiler/utils.py CHANGED
@@ -11,22 +11,15 @@ from pathlib import Path
11
11
  from typing import Any
12
12
  from urllib.parse import urlparse
13
13
 
14
- from pydantic.v1.fields import ModelField
15
-
16
14
  from reflex import constants
17
- from reflex.components.base import (
18
- Body,
19
- Description,
20
- DocumentHead,
21
- Head,
22
- Html,
23
- Image,
24
- Main,
25
- Meta,
26
- NextScript,
27
- Title,
28
- )
15
+ from reflex.components.base import Description, Image, Scripts
16
+ from reflex.components.base.document import Links, ScrollRestoration
17
+ from reflex.components.base.document import Meta as ReactMeta
29
18
  from reflex.components.component import Component, ComponentStyle, CustomComponent
19
+ from reflex.components.el.elements.metadata import Head, Meta, Title
20
+ from reflex.components.el.elements.other import Html
21
+ from reflex.components.el.elements.sectioning import Body
22
+ from reflex.constants.state import FIELD_MARKER
30
23
  from reflex.istate.storage import Cookie, LocalStorage, SessionStorage
31
24
  from reflex.state import BaseState, _resolve_delta
32
25
  from reflex.style import Style
@@ -34,7 +27,7 @@ from reflex.utils import console, format, imports, path_ops
34
27
  from reflex.utils.exec import is_in_app_harness
35
28
  from reflex.utils.imports import ImportVar, ParsedImportDict
36
29
  from reflex.utils.prerequisites import get_web_dir
37
- from reflex.vars.base import Var
30
+ from reflex.vars.base import Field, Var
38
31
 
39
32
  # To re-export this function.
40
33
  merge_imports = imports.merge_imports
@@ -212,7 +205,7 @@ def compile_state(state: type[BaseState]) -> dict:
212
205
 
213
206
 
214
207
  def _compile_client_storage_field(
215
- field: ModelField,
208
+ field: Field,
216
209
  ) -> tuple[
217
210
  type[Cookie] | type[LocalStorage] | type[SessionStorage] | None,
218
211
  dict[str, Any] | None,
@@ -260,7 +253,7 @@ def _compile_client_storage_recursive(
260
253
  if name in state.inherited_vars:
261
254
  # only include vars defined in this state
262
255
  continue
263
- state_key = f"{state_name}.{name}"
256
+ state_key = f"{state_name}.{name}" + FIELD_MARKER
264
257
  field_type, options = _compile_client_storage_field(field)
265
258
  if field_type is Cookie:
266
259
  cookies[state_key] = options
@@ -320,6 +313,8 @@ def compile_custom_component(
320
313
  if lib != component.library
321
314
  }
322
315
 
316
+ imports.setdefault("@emotion/react", []).append(ImportVar("jsx"))
317
+
323
318
  # Concatenate the props.
324
319
  props = list(component.props)
325
320
 
@@ -352,12 +347,27 @@ def create_document_root(
352
347
  Returns:
353
348
  The document root.
354
349
  """
355
- head_components = head_components or []
350
+ head_components = [
351
+ *(
352
+ head_components
353
+ or [
354
+ # Default meta tags if user does not provide.
355
+ Meta.create(char_set="utf-8"),
356
+ Meta.create(
357
+ name="viewport", content="width=device-width, initial-scale=1"
358
+ ),
359
+ ]
360
+ ),
361
+ # Always include the framework meta and link tags.
362
+ ReactMeta.create(),
363
+ Links.create(),
364
+ ]
356
365
  return Html.create(
357
- DocumentHead.create(*head_components),
366
+ Head.create(*head_components),
358
367
  Body.create(
359
- Main.create(),
360
- NextScript.create(),
368
+ Var("children"),
369
+ ScrollRestoration.create(),
370
+ Scripts.create(),
361
371
  ),
362
372
  lang=html_lang or "en",
363
373
  custom_attrs=html_custom_attrs or {},
@@ -391,6 +401,21 @@ def create_theme(style: ComponentStyle) -> dict:
391
401
  return {"styles": {"global": root_style}}
392
402
 
393
403
 
404
+ def _format_route_part(part: str) -> str:
405
+ if part.startswith("[") and part.endswith("]"):
406
+ return f"${part}_"
407
+ return "[" + part + "]_"
408
+
409
+
410
+ def _path_to_file_stem(path: str) -> str:
411
+ if path == "index":
412
+ return "_index"
413
+ path = path if path != "index" else "/"
414
+ return (
415
+ ".".join([_format_route_part(part) for part in path.split("/")]) + "._index"
416
+ ).lstrip(".")
417
+
418
+
394
419
  def get_page_path(path: str) -> str:
395
420
  """Get the path of the compiled JS file for the given page.
396
421
 
@@ -400,7 +425,12 @@ def get_page_path(path: str) -> str:
400
425
  Returns:
401
426
  The path of the compiled JS file.
402
427
  """
403
- return str(get_web_dir() / constants.Dirs.PAGES / (path + constants.Ext.JS))
428
+ return str(
429
+ get_web_dir()
430
+ / constants.Dirs.PAGES
431
+ / constants.Dirs.ROUTES
432
+ / (_path_to_file_stem(path) + constants.Ext.JS)
433
+ )
404
434
 
405
435
 
406
436
  def get_theme_path() -> str:
@@ -492,12 +522,8 @@ def add_meta(
492
522
  children.append(Description.create(content=description))
493
523
  children.append(Image.create(content=image))
494
524
 
495
- page.children.append(
496
- Head.create(
497
- *children,
498
- *meta_tags,
499
- )
500
- )
525
+ page.children.extend(children)
526
+ page.children.extend(meta_tags)
501
527
 
502
528
  return page
503
529
 
@@ -15,7 +15,6 @@ _SUBMODULES: set[str] = {
15
15
  "radix",
16
16
  "react_player",
17
17
  "sonner",
18
- "suneditor",
19
18
  "el",
20
19
  "base",
21
20
  "recharts",
@@ -26,7 +25,6 @@ _SUBMOD_ATTRS: dict[str, list[str]] = {
26
25
  "Component",
27
26
  "NoSSRComponent",
28
27
  ],
29
- "next": ["NextLink", "next_link"],
30
28
  }
31
29
  __getattr__, __dir__, __all__ = lazy_loader.attach(
32
30
  __name__,
@@ -16,8 +16,5 @@ from . import radix as radix
16
16
  from . import react_player as react_player
17
17
  from . import recharts as recharts
18
18
  from . import sonner as sonner
19
- from . import suneditor as suneditor
20
19
  from .component import Component as Component
21
20
  from .component import NoSSRComponent as NoSSRComponent
22
- from .next import NextLink as NextLink
23
- from .next import next_link as next_link
@@ -8,7 +8,7 @@ _SUBMODULES: set[str] = {"app_wrap", "bare"}
8
8
 
9
9
  _SUBMOD_ATTRS: dict[str, list[str]] = {
10
10
  "body": ["Body"],
11
- "document": ["DocumentHead", "Html", "Main", "NextScript"],
11
+ "document": ["Scripts", "Outlet", "ScrollRestoration", "Links", "Meta"],
12
12
  "fragment": [
13
13
  "Fragment",
14
14
  "fragment",
@@ -17,10 +17,6 @@ _SUBMOD_ATTRS: dict[str, list[str]] = {
17
17
  "ErrorBoundary",
18
18
  "error_boundary",
19
19
  ],
20
- "head": [
21
- "head",
22
- "Head",
23
- ],
24
20
  "link": ["RawLink", "ScriptTag"],
25
21
  "meta": ["Description", "Image", "Meta", "Title"],
26
22
  "script": ["Script", "script"],
@@ -6,16 +6,14 @@
6
6
  from . import app_wrap as app_wrap
7
7
  from . import bare as bare
8
8
  from .body import Body as Body
9
- from .document import DocumentHead as DocumentHead
10
- from .document import Html as Html
11
- from .document import Main as Main
12
- from .document import NextScript as NextScript
9
+ from .document import Links as Links
10
+ from .document import Outlet as Outlet
11
+ from .document import Scripts as Scripts
12
+ from .document import ScrollRestoration as ScrollRestoration
13
13
  from .error_boundary import ErrorBoundary as ErrorBoundary
14
14
  from .error_boundary import error_boundary as error_boundary
15
15
  from .fragment import Fragment as Fragment
16
16
  from .fragment import fragment as fragment
17
- from .head import Head as Head
18
- from .head import head as head
19
17
  from .link import RawLink as RawLink
20
18
  from .link import ScriptTag as ScriptTag
21
19
  from .meta import Description as Description
@@ -8,7 +8,7 @@ from typing import Any, overload
8
8
 
9
9
  from reflex.components.base.fragment import Fragment
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 AppWrap(Fragment):
@@ -29,9 +29,9 @@ class AppWrap(Fragment):
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 AppWrap(Fragment):
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
  ) -> AppWrap:
@@ -8,7 +8,7 @@ from typing import Any, Literal, overload
8
8
 
9
9
  from reflex.components.core.breakpoints import Breakpoints
10
10
  from reflex.components.el import elements
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 Body(elements.Body):
@@ -207,9 +207,9 @@ class Body(elements.Body):
207
207
  autofocus: bool | None = None,
208
208
  custom_attrs: dict[str, Var | Any] | None = None,
209
209
  on_blur: EventType[()] | None = None,
210
- on_click: EventType[()] | None = None,
211
- on_context_menu: EventType[()] | None = None,
212
- on_double_click: EventType[()] | None = None,
210
+ on_click: EventType[()] | EventType[PointerEventInfo] | None = None,
211
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
212
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
213
213
  on_focus: EventType[()] | None = None,
214
214
  on_mount: EventType[()] | None = None,
215
215
  on_mouse_down: EventType[()] | None = None,
@@ -220,6 +220,7 @@ class Body(elements.Body):
220
220
  on_mouse_over: EventType[()] | None = None,
221
221
  on_mouse_up: EventType[()] | None = None,
222
222
  on_scroll: EventType[()] | None = None,
223
+ on_scroll_end: EventType[()] | None = None,
223
224
  on_unmount: EventType[()] | None = None,
224
225
  **props,
225
226
  ) -> Body:
@@ -3,33 +3,37 @@
3
3
  from reflex.components.component import Component
4
4
 
5
5
 
6
- class NextDocumentLib(Component):
6
+ class ReactRouterLib(Component):
7
7
  """Root document components."""
8
8
 
9
- library = "next/document"
9
+ library = "react-router"
10
10
 
11
11
 
12
- class Html(NextDocumentLib):
13
- """The document html."""
12
+ class Meta(ReactRouterLib):
13
+ """The document meta tags."""
14
14
 
15
- tag = "Html"
15
+ tag = "Meta"
16
16
 
17
- lang: str | None
18
17
 
18
+ class Links(ReactRouterLib):
19
+ """The document link tags."""
19
20
 
20
- class DocumentHead(NextDocumentLib):
21
- """The document head."""
21
+ tag = "Links"
22
22
 
23
- tag = "Head"
24
23
 
24
+ class ScrollRestoration(ReactRouterLib):
25
+ """The document scroll restoration."""
25
26
 
26
- class Main(NextDocumentLib):
27
- """The document main section."""
27
+ tag = "ScrollRestoration"
28
28
 
29
- tag = "Main"
30
29
 
30
+ class Outlet(ReactRouterLib):
31
+ """The document outlet."""
31
32
 
32
- class NextScript(NextDocumentLib):
33
+ tag = "Outlet"
34
+
35
+
36
+ class Scripts(ReactRouterLib):
33
37
  """The document main scripts."""
34
38
 
35
- tag = "NextScript"
39
+ tag = "Scripts"
@@ -8,10 +8,10 @@ from typing import Any, overload
8
8
 
9
9
  from reflex.components.component import Component
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
- class NextDocumentLib(Component):
14
+ class ReactRouterLib(Component):
15
15
  @overload
16
16
  @classmethod
17
17
  def create( # type: ignore
@@ -29,9 +29,9 @@ class NextDocumentLib(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,9 +42,10 @@ class NextDocumentLib(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
- ) -> NextDocumentLib:
48
+ ) -> ReactRouterLib:
48
49
  """Create the component.
49
50
 
50
51
  Args:
@@ -62,13 +63,12 @@ class NextDocumentLib(Component):
62
63
  The component.
63
64
  """
64
65
 
65
- class Html(NextDocumentLib):
66
+ class Meta(ReactRouterLib):
66
67
  @overload
67
68
  @classmethod
68
69
  def create( # type: ignore
69
70
  cls,
70
71
  *children,
71
- lang: str | None = None,
72
72
  style: Sequence[Mapping[str, Any]]
73
73
  | Mapping[str, Any]
74
74
  | Var[Mapping[str, Any]]
@@ -81,9 +81,9 @@ class Html(NextDocumentLib):
81
81
  autofocus: bool | None = None,
82
82
  custom_attrs: dict[str, Var | Any] | None = None,
83
83
  on_blur: EventType[()] | None = None,
84
- on_click: EventType[()] | None = None,
85
- on_context_menu: EventType[()] | None = None,
86
- 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,
87
87
  on_focus: EventType[()] | None = None,
88
88
  on_mount: EventType[()] | None = None,
89
89
  on_mouse_down: EventType[()] | None = None,
@@ -94,9 +94,10 @@ class Html(NextDocumentLib):
94
94
  on_mouse_over: EventType[()] | None = None,
95
95
  on_mouse_up: EventType[()] | None = None,
96
96
  on_scroll: EventType[()] | None = None,
97
+ on_scroll_end: EventType[()] | None = None,
97
98
  on_unmount: EventType[()] | None = None,
98
99
  **props,
99
- ) -> Html:
100
+ ) -> Meta:
100
101
  """Create the component.
101
102
 
102
103
  Args:
@@ -114,7 +115,7 @@ class Html(NextDocumentLib):
114
115
  The component.
115
116
  """
116
117
 
117
- class DocumentHead(NextDocumentLib):
118
+ class Links(ReactRouterLib):
118
119
  @overload
119
120
  @classmethod
120
121
  def create( # type: ignore
@@ -132,9 +133,9 @@ class DocumentHead(NextDocumentLib):
132
133
  autofocus: bool | None = None,
133
134
  custom_attrs: dict[str, Var | Any] | None = None,
134
135
  on_blur: EventType[()] | None = None,
135
- on_click: EventType[()] | None = None,
136
- on_context_menu: EventType[()] | None = None,
137
- on_double_click: EventType[()] | None = None,
136
+ on_click: EventType[()] | EventType[PointerEventInfo] | None = None,
137
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
138
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
138
139
  on_focus: EventType[()] | None = None,
139
140
  on_mount: EventType[()] | None = None,
140
141
  on_mouse_down: EventType[()] | None = None,
@@ -145,9 +146,10 @@ class DocumentHead(NextDocumentLib):
145
146
  on_mouse_over: EventType[()] | None = None,
146
147
  on_mouse_up: EventType[()] | None = None,
147
148
  on_scroll: EventType[()] | None = None,
149
+ on_scroll_end: EventType[()] | None = None,
148
150
  on_unmount: EventType[()] | None = None,
149
151
  **props,
150
- ) -> DocumentHead:
152
+ ) -> Links:
151
153
  """Create the component.
152
154
 
153
155
  Args:
@@ -165,7 +167,7 @@ class DocumentHead(NextDocumentLib):
165
167
  The component.
166
168
  """
167
169
 
168
- class Main(NextDocumentLib):
170
+ class ScrollRestoration(ReactRouterLib):
169
171
  @overload
170
172
  @classmethod
171
173
  def create( # type: ignore
@@ -183,9 +185,9 @@ class Main(NextDocumentLib):
183
185
  autofocus: bool | None = None,
184
186
  custom_attrs: dict[str, Var | Any] | None = None,
185
187
  on_blur: EventType[()] | None = None,
186
- on_click: EventType[()] | None = None,
187
- on_context_menu: EventType[()] | None = None,
188
- on_double_click: EventType[()] | None = None,
188
+ on_click: EventType[()] | EventType[PointerEventInfo] | None = None,
189
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
190
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
189
191
  on_focus: EventType[()] | None = None,
190
192
  on_mount: EventType[()] | None = None,
191
193
  on_mouse_down: EventType[()] | None = None,
@@ -196,9 +198,10 @@ class Main(NextDocumentLib):
196
198
  on_mouse_over: EventType[()] | None = None,
197
199
  on_mouse_up: EventType[()] | None = None,
198
200
  on_scroll: EventType[()] | None = None,
201
+ on_scroll_end: EventType[()] | None = None,
199
202
  on_unmount: EventType[()] | None = None,
200
203
  **props,
201
- ) -> Main:
204
+ ) -> ScrollRestoration:
202
205
  """Create the component.
203
206
 
204
207
  Args:
@@ -216,7 +219,7 @@ class Main(NextDocumentLib):
216
219
  The component.
217
220
  """
218
221
 
219
- class NextScript(NextDocumentLib):
222
+ class Outlet(ReactRouterLib):
220
223
  @overload
221
224
  @classmethod
222
225
  def create( # type: ignore
@@ -234,9 +237,9 @@ class NextScript(NextDocumentLib):
234
237
  autofocus: bool | None = None,
235
238
  custom_attrs: dict[str, Var | Any] | None = None,
236
239
  on_blur: EventType[()] | None = None,
237
- on_click: EventType[()] | None = None,
238
- on_context_menu: EventType[()] | None = None,
239
- on_double_click: EventType[()] | None = None,
240
+ on_click: EventType[()] | EventType[PointerEventInfo] | None = None,
241
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
242
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
240
243
  on_focus: EventType[()] | None = None,
241
244
  on_mount: EventType[()] | None = None,
242
245
  on_mouse_down: EventType[()] | None = None,
@@ -247,9 +250,62 @@ class NextScript(NextDocumentLib):
247
250
  on_mouse_over: EventType[()] | None = None,
248
251
  on_mouse_up: EventType[()] | None = None,
249
252
  on_scroll: EventType[()] | None = None,
253
+ on_scroll_end: EventType[()] | None = None,
250
254
  on_unmount: EventType[()] | None = None,
251
255
  **props,
252
- ) -> NextScript:
256
+ ) -> Outlet:
257
+ """Create the component.
258
+
259
+ Args:
260
+ *children: The children of the component.
261
+ style: The style of the component.
262
+ key: A unique key for the component.
263
+ id: The id for the component.
264
+ ref: The Var to pass as the ref to the component.
265
+ class_name: The class name for the component.
266
+ autofocus: Whether the component should take the focus once the page is loaded
267
+ custom_attrs: custom attribute
268
+ **props: The props of the component.
269
+
270
+ Returns:
271
+ The component.
272
+ """
273
+
274
+ class Scripts(ReactRouterLib):
275
+ @overload
276
+ @classmethod
277
+ def create( # type: ignore
278
+ cls,
279
+ *children,
280
+ style: Sequence[Mapping[str, Any]]
281
+ | Mapping[str, Any]
282
+ | Var[Mapping[str, Any]]
283
+ | Breakpoints
284
+ | None = None,
285
+ key: Any | None = None,
286
+ id: Any | None = None,
287
+ ref: Var | None = None,
288
+ class_name: Any | None = None,
289
+ autofocus: bool | None = None,
290
+ custom_attrs: dict[str, Var | Any] | None = None,
291
+ on_blur: EventType[()] | None = None,
292
+ on_click: EventType[()] | EventType[PointerEventInfo] | None = None,
293
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
294
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
295
+ on_focus: EventType[()] | None = None,
296
+ on_mount: EventType[()] | None = None,
297
+ on_mouse_down: EventType[()] | None = None,
298
+ on_mouse_enter: EventType[()] | None = None,
299
+ on_mouse_leave: EventType[()] | None = None,
300
+ on_mouse_move: EventType[()] | None = None,
301
+ on_mouse_out: EventType[()] | None = None,
302
+ on_mouse_over: EventType[()] | None = None,
303
+ on_mouse_up: EventType[()] | None = None,
304
+ on_scroll: EventType[()] | None = None,
305
+ on_scroll_end: EventType[()] | None = None,
306
+ on_unmount: EventType[()] | None = None,
307
+ **props,
308
+ ) -> Scripts:
253
309
  """Create the component.
254
310
 
255
311
  Args:
@@ -8,7 +8,7 @@ from typing import Any, overload
8
8
 
9
9
  from reflex.components.component import Component
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
  from reflex.vars.object import ObjectVar
14
14
 
@@ -35,9 +35,9 @@ class ErrorBoundary(Component):
35
35
  autofocus: bool | None = None,
36
36
  custom_attrs: dict[str, Var | Any] | None = None,
37
37
  on_blur: EventType[()] | None = None,
38
- on_click: EventType[()] | None = None,
39
- on_context_menu: EventType[()] | None = None,
40
- on_double_click: EventType[()] | None = None,
38
+ on_click: EventType[()] | EventType[PointerEventInfo] | None = None,
39
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
40
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
41
41
  on_error: EventType[()] | EventType[str] | EventType[str, str] | None = None,
42
42
  on_focus: EventType[()] | None = None,
43
43
  on_mount: EventType[()] | None = None,
@@ -49,6 +49,7 @@ class ErrorBoundary(Component):
49
49
  on_mouse_over: EventType[()] | None = None,
50
50
  on_mouse_up: EventType[()] | None = None,
51
51
  on_scroll: EventType[()] | None = None,
52
+ on_scroll_end: EventType[()] | None = None,
52
53
  on_unmount: EventType[()] | None = None,
53
54
  **props,
54
55
  ) -> ErrorBoundary:
@@ -8,7 +8,7 @@ from typing import Any, overload
8
8
 
9
9
  from reflex.components.component import Component
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 Fragment(Component):
@@ -29,9 +29,9 @@ class Fragment(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 Fragment(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
  ) -> Fragment:
@@ -8,7 +8,7 @@ from typing import Any, Literal, overload
8
8
 
9
9
  from reflex.components.core.breakpoints import Breakpoints
10
10
  from reflex.components.el.elements.base import BaseHTML
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 RawLink(BaseHTML):
@@ -209,9 +209,9 @@ class RawLink(BaseHTML):
209
209
  autofocus: bool | None = None,
210
210
  custom_attrs: dict[str, Var | Any] | None = None,
211
211
  on_blur: EventType[()] | None = None,
212
- on_click: EventType[()] | None = None,
213
- on_context_menu: EventType[()] | None = None,
214
- on_double_click: EventType[()] | None = None,
212
+ on_click: EventType[()] | EventType[PointerEventInfo] | None = None,
213
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
214
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
215
215
  on_focus: EventType[()] | None = None,
216
216
  on_mount: EventType[()] | None = None,
217
217
  on_mouse_down: EventType[()] | None = None,
@@ -222,6 +222,7 @@ class RawLink(BaseHTML):
222
222
  on_mouse_over: EventType[()] | None = None,
223
223
  on_mouse_up: EventType[()] | None = None,
224
224
  on_scroll: EventType[()] | None = None,
225
+ on_scroll_end: EventType[()] | None = None,
225
226
  on_unmount: EventType[()] | None = None,
226
227
  **props,
227
228
  ) -> RawLink:
@@ -463,9 +464,9 @@ class ScriptTag(BaseHTML):
463
464
  autofocus: bool | None = None,
464
465
  custom_attrs: dict[str, Var | Any] | None = None,
465
466
  on_blur: EventType[()] | None = None,
466
- on_click: EventType[()] | None = None,
467
- on_context_menu: EventType[()] | None = None,
468
- on_double_click: EventType[()] | None = None,
467
+ on_click: EventType[()] | EventType[PointerEventInfo] | None = None,
468
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
469
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
469
470
  on_focus: EventType[()] | None = None,
470
471
  on_mount: EventType[()] | None = None,
471
472
  on_mouse_down: EventType[()] | None = None,
@@ -476,6 +477,7 @@ class ScriptTag(BaseHTML):
476
477
  on_mouse_over: EventType[()] | None = None,
477
478
  on_mouse_up: EventType[()] | None = None,
478
479
  on_scroll: EventType[()] | None = None,
480
+ on_scroll_end: EventType[()] | None = None,
479
481
  on_unmount: EventType[()] | None = None,
480
482
  **props,
481
483
  ) -> ScriptTag: