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.
- reflex/.templates/jinja/app/rxconfig.py.jinja2 +4 -1
- reflex/.templates/jinja/web/package.json.jinja2 +1 -1
- reflex/.templates/jinja/web/pages/_app.js.jinja2 +16 -10
- reflex/.templates/jinja/web/pages/_document.js.jinja2 +1 -1
- reflex/.templates/jinja/web/pages/base_page.js.jinja2 +0 -1
- reflex/.templates/jinja/web/pages/stateful_component.js.jinja2 +4 -0
- reflex/.templates/jinja/web/utils/context.js.jinja2 +25 -8
- reflex/.templates/web/app/entry.client.js +8 -0
- reflex/.templates/web/app/routes.js +10 -0
- reflex/.templates/web/components/reflex/radix_themes_color_mode_provider.js +12 -37
- reflex/.templates/web/postcss.config.js +1 -1
- reflex/.templates/web/react-router.config.js +6 -0
- reflex/.templates/web/utils/client_side_routing.js +21 -19
- reflex/.templates/web/utils/react-theme.js +92 -0
- reflex/.templates/web/utils/state.js +160 -67
- reflex/.templates/web/vite.config.js +32 -0
- reflex/__init__.py +1 -6
- reflex/__init__.pyi +0 -4
- reflex/app.py +53 -116
- reflex/base.py +1 -87
- reflex/compiler/compiler.py +41 -8
- reflex/compiler/templates.py +3 -3
- reflex/compiler/utils.py +73 -33
- reflex/components/__init__.py +0 -2
- reflex/components/__init__.pyi +0 -3
- reflex/components/base/__init__.py +1 -5
- reflex/components/base/__init__.pyi +4 -6
- reflex/components/base/app_wrap.pyi +5 -4
- reflex/components/base/body.pyi +5 -4
- reflex/components/base/document.py +18 -14
- reflex/components/base/document.pyi +83 -27
- reflex/components/base/error_boundary.pyi +5 -4
- reflex/components/base/fragment.pyi +5 -4
- reflex/components/base/link.pyi +9 -7
- reflex/components/base/meta.pyi +17 -13
- reflex/components/base/script.py +60 -58
- reflex/components/base/script.pyi +246 -31
- reflex/components/base/strict_mode.pyi +5 -4
- reflex/components/component.py +146 -217
- reflex/components/core/__init__.py +1 -0
- reflex/components/core/__init__.pyi +1 -0
- reflex/components/core/auto_scroll.pyi +5 -4
- reflex/components/core/banner.pyi +25 -19
- reflex/components/core/client_side_routing.py +7 -6
- reflex/components/core/client_side_routing.pyi +6 -56
- reflex/components/core/clipboard.pyi +5 -4
- reflex/components/core/debounce.py +1 -0
- reflex/components/core/debounce.pyi +5 -4
- reflex/components/core/foreach.py +3 -2
- reflex/components/core/helmet.py +14 -0
- reflex/components/{next/base.pyi → core/helmet.pyi} +10 -7
- reflex/components/core/html.pyi +5 -4
- reflex/components/core/sticky.pyi +17 -13
- reflex/components/core/upload.py +2 -1
- reflex/components/core/upload.pyi +21 -16
- reflex/components/datadisplay/code.py +2 -72
- reflex/components/datadisplay/code.pyi +9 -10
- reflex/components/datadisplay/dataeditor.pyi +11 -6
- reflex/components/datadisplay/shiki_code_block.pyi +13 -10
- reflex/components/dynamic.py +5 -5
- reflex/components/el/element.pyi +5 -4
- reflex/components/el/elements/base.pyi +5 -4
- reflex/components/el/elements/forms.pyi +69 -52
- reflex/components/el/elements/inline.pyi +113 -85
- reflex/components/el/elements/media.pyi +105 -79
- reflex/components/el/elements/metadata.pyi +25 -19
- reflex/components/el/elements/other.pyi +29 -22
- reflex/components/el/elements/scripts.pyi +13 -10
- reflex/components/el/elements/sectioning.pyi +61 -46
- reflex/components/el/elements/tables.pyi +41 -31
- reflex/components/el/elements/typography.pyi +61 -46
- reflex/components/field.py +175 -0
- reflex/components/gridjs/datatable.py +2 -2
- reflex/components/gridjs/datatable.pyi +11 -9
- reflex/components/lucide/icon.py +6 -2
- reflex/components/lucide/icon.pyi +15 -10
- reflex/components/markdown/markdown.pyi +5 -4
- reflex/components/moment/moment.pyi +5 -4
- reflex/components/plotly/plotly.pyi +19 -10
- reflex/components/props.py +376 -27
- reflex/components/radix/primitives/accordion.py +8 -1
- reflex/components/radix/primitives/accordion.pyi +29 -22
- reflex/components/radix/primitives/base.pyi +9 -7
- reflex/components/radix/primitives/drawer.pyi +45 -34
- reflex/components/radix/primitives/form.pyi +41 -31
- reflex/components/radix/primitives/progress.pyi +21 -16
- reflex/components/radix/primitives/slider.pyi +21 -16
- reflex/components/radix/themes/base.py +3 -3
- reflex/components/radix/themes/base.pyi +33 -25
- reflex/components/radix/themes/color_mode.pyi +13 -10
- reflex/components/radix/themes/components/alert_dialog.pyi +29 -22
- reflex/components/radix/themes/components/aspect_ratio.pyi +5 -4
- reflex/components/radix/themes/components/avatar.pyi +5 -4
- reflex/components/radix/themes/components/badge.pyi +5 -4
- reflex/components/radix/themes/components/button.pyi +5 -4
- reflex/components/radix/themes/components/callout.pyi +21 -16
- reflex/components/radix/themes/components/card.pyi +5 -4
- reflex/components/radix/themes/components/checkbox.pyi +13 -10
- reflex/components/radix/themes/components/checkbox_cards.pyi +9 -7
- reflex/components/radix/themes/components/checkbox_group.pyi +9 -7
- reflex/components/radix/themes/components/context_menu.pyi +53 -40
- reflex/components/radix/themes/components/data_list.pyi +17 -13
- reflex/components/radix/themes/components/dialog.pyi +29 -22
- reflex/components/radix/themes/components/dropdown_menu.pyi +33 -25
- reflex/components/radix/themes/components/hover_card.pyi +17 -13
- reflex/components/radix/themes/components/icon_button.pyi +5 -4
- reflex/components/radix/themes/components/inset.pyi +5 -4
- reflex/components/radix/themes/components/popover.pyi +17 -13
- reflex/components/radix/themes/components/progress.pyi +5 -4
- reflex/components/radix/themes/components/radio.pyi +5 -4
- reflex/components/radix/themes/components/radio_cards.pyi +9 -7
- reflex/components/radix/themes/components/radio_group.pyi +17 -13
- reflex/components/radix/themes/components/scroll_area.pyi +5 -4
- reflex/components/radix/themes/components/segmented_control.pyi +9 -7
- reflex/components/radix/themes/components/select.pyi +37 -28
- reflex/components/radix/themes/components/separator.pyi +5 -4
- reflex/components/radix/themes/components/skeleton.pyi +5 -4
- reflex/components/radix/themes/components/slider.pyi +5 -4
- reflex/components/radix/themes/components/spinner.pyi +5 -4
- reflex/components/radix/themes/components/switch.pyi +5 -4
- reflex/components/radix/themes/components/table.pyi +29 -22
- reflex/components/radix/themes/components/tabs.pyi +21 -16
- reflex/components/radix/themes/components/text_area.pyi +5 -4
- reflex/components/radix/themes/components/text_field.pyi +13 -10
- reflex/components/radix/themes/components/tooltip.pyi +5 -4
- reflex/components/radix/themes/layout/base.pyi +5 -4
- reflex/components/radix/themes/layout/box.pyi +5 -4
- reflex/components/radix/themes/layout/center.pyi +5 -4
- reflex/components/radix/themes/layout/container.pyi +5 -4
- reflex/components/radix/themes/layout/flex.pyi +5 -4
- reflex/components/radix/themes/layout/grid.pyi +5 -4
- reflex/components/radix/themes/layout/list.pyi +21 -16
- reflex/components/radix/themes/layout/section.pyi +5 -4
- reflex/components/radix/themes/layout/spacer.pyi +5 -4
- reflex/components/radix/themes/layout/stack.pyi +13 -10
- reflex/components/radix/themes/typography/blockquote.pyi +5 -4
- reflex/components/radix/themes/typography/code.pyi +5 -4
- reflex/components/radix/themes/typography/heading.pyi +5 -4
- reflex/components/radix/themes/typography/link.py +46 -11
- reflex/components/radix/themes/typography/link.pyi +311 -6
- reflex/components/radix/themes/typography/text.pyi +29 -22
- reflex/components/react_player/audio.pyi +5 -4
- reflex/components/react_player/react_player.pyi +5 -4
- reflex/components/react_player/video.pyi +5 -4
- reflex/components/recharts/cartesian.py +2 -1
- reflex/components/recharts/cartesian.pyi +65 -46
- reflex/components/recharts/charts.py +4 -2
- reflex/components/recharts/charts.pyi +36 -24
- reflex/components/recharts/general.pyi +24 -18
- reflex/components/recharts/polar.py +8 -4
- reflex/components/recharts/polar.pyi +16 -10
- reflex/components/recharts/recharts.pyi +9 -7
- reflex/components/sonner/toast.py +2 -2
- reflex/components/sonner/toast.pyi +10 -8
- reflex/config.py +3 -77
- reflex/constants/__init__.py +2 -2
- reflex/constants/base.py +28 -11
- reflex/constants/compiler.py +5 -3
- reflex/constants/event.py +1 -0
- reflex/constants/installer.py +22 -16
- reflex/constants/route.py +19 -7
- reflex/constants/state.py +2 -0
- reflex/custom_components/custom_components.py +0 -14
- reflex/environment.py +1 -1
- reflex/event.py +178 -81
- reflex/experimental/__init__.py +0 -30
- reflex/istate/proxy.py +5 -3
- reflex/page.py +0 -27
- reflex/plugins/__init__.py +3 -2
- reflex/plugins/base.py +5 -1
- reflex/plugins/shared_tailwind.py +158 -0
- reflex/plugins/sitemap.py +206 -0
- reflex/plugins/tailwind_v3.py +13 -106
- reflex/plugins/tailwind_v4.py +15 -108
- reflex/reflex.py +1 -0
- reflex/route.py +15 -21
- reflex/state.py +134 -140
- reflex/testing.py +58 -10
- reflex/utils/build.py +38 -82
- reflex/utils/exec.py +59 -161
- reflex/utils/export.py +2 -2
- reflex/utils/imports.py +0 -4
- reflex/utils/misc.py +28 -0
- reflex/utils/prerequisites.py +65 -62
- reflex/utils/processes.py +8 -7
- reflex/utils/pyi_generator.py +21 -9
- reflex/utils/serializers.py +14 -1
- reflex/utils/types.py +196 -61
- reflex/vars/__init__.py +2 -0
- reflex/vars/base.py +367 -134
- {reflex-0.7.14a6.dist-info → reflex-0.8.0a2.dist-info}/METADATA +12 -5
- {reflex-0.7.14a6.dist-info → reflex-0.8.0a2.dist-info}/RECORD +195 -202
- reflex/.templates/web/next.config.js +0 -7
- reflex/components/base/head.py +0 -20
- reflex/components/base/head.pyi +0 -116
- reflex/components/next/__init__.py +0 -10
- reflex/components/next/base.py +0 -7
- reflex/components/next/image.py +0 -117
- reflex/components/next/image.pyi +0 -94
- reflex/components/next/link.py +0 -20
- reflex/components/next/link.pyi +0 -67
- reflex/components/next/video.py +0 -38
- reflex/components/next/video.pyi +0 -68
- reflex/components/suneditor/__init__.py +0 -5
- reflex/components/suneditor/editor.py +0 -269
- reflex/components/suneditor/editor.pyi +0 -199
- reflex/experimental/layout.py +0 -254
- reflex/experimental/layout.pyi +0 -814
- {reflex-0.7.14a6.dist-info → reflex-0.8.0a2.dist-info}/WHEEL +0 -0
- {reflex-0.7.14a6.dist-info → reflex-0.8.0a2.dist-info}/entry_points.txt +0 -0
- {reflex-0.7.14a6.dist-info → reflex-0.8.0a2.dist-info}/licenses/LICENSE +0 -0
reflex/compiler/utils.py
CHANGED
|
@@ -5,28 +5,21 @@ from __future__ import annotations
|
|
|
5
5
|
import asyncio
|
|
6
6
|
import concurrent.futures
|
|
7
7
|
import traceback
|
|
8
|
-
from collections.abc import Sequence
|
|
8
|
+
from collections.abc import Mapping, Sequence
|
|
9
9
|
from datetime import datetime
|
|
10
10
|
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
|
-
|
|
19
|
-
|
|
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
|
|
@@ -181,6 +174,18 @@ def save_error(error: Exception) -> str:
|
|
|
181
174
|
return str(log_path)
|
|
182
175
|
|
|
183
176
|
|
|
177
|
+
def _sorted_keys(d: Mapping[str, Any]) -> dict[str, Any]:
|
|
178
|
+
"""Sort the keys of a dictionary.
|
|
179
|
+
|
|
180
|
+
Args:
|
|
181
|
+
d: The dictionary to sort.
|
|
182
|
+
|
|
183
|
+
Returns:
|
|
184
|
+
A new dictionary with sorted keys.
|
|
185
|
+
"""
|
|
186
|
+
return dict(sorted(d.items(), key=lambda kv: kv[0]))
|
|
187
|
+
|
|
188
|
+
|
|
184
189
|
def compile_state(state: type[BaseState]) -> dict:
|
|
185
190
|
"""Compile the state of the app.
|
|
186
191
|
|
|
@@ -205,14 +210,14 @@ def compile_state(state: type[BaseState]) -> dict:
|
|
|
205
210
|
console.warn(
|
|
206
211
|
f"Had to get initial state in a thread 🤮 {resolved_initial_state}",
|
|
207
212
|
)
|
|
208
|
-
return resolved_initial_state
|
|
213
|
+
return _sorted_keys(resolved_initial_state)
|
|
209
214
|
|
|
210
215
|
# Normally the compile runs before any event loop starts, we asyncio.run is available for calling.
|
|
211
|
-
return asyncio.run(_resolve_delta(initial_state))
|
|
216
|
+
return _sorted_keys(asyncio.run(_resolve_delta(initial_state)))
|
|
212
217
|
|
|
213
218
|
|
|
214
219
|
def _compile_client_storage_field(
|
|
215
|
-
field:
|
|
220
|
+
field: Field,
|
|
216
221
|
) -> tuple[
|
|
217
222
|
type[Cookie] | type[LocalStorage] | type[SessionStorage] | None,
|
|
218
223
|
dict[str, Any] | None,
|
|
@@ -260,7 +265,7 @@ def _compile_client_storage_recursive(
|
|
|
260
265
|
if name in state.inherited_vars:
|
|
261
266
|
# only include vars defined in this state
|
|
262
267
|
continue
|
|
263
|
-
state_key = f"{state_name}.{name}"
|
|
268
|
+
state_key = f"{state_name}.{name}" + FIELD_MARKER
|
|
264
269
|
field_type, options = _compile_client_storage_field(field)
|
|
265
270
|
if field_type is Cookie:
|
|
266
271
|
cookies[state_key] = options
|
|
@@ -320,6 +325,8 @@ def compile_custom_component(
|
|
|
320
325
|
if lib != component.library
|
|
321
326
|
}
|
|
322
327
|
|
|
328
|
+
imports.setdefault("@emotion/react", []).append(ImportVar("jsx"))
|
|
329
|
+
|
|
323
330
|
# Concatenate the props.
|
|
324
331
|
props = list(component.props)
|
|
325
332
|
|
|
@@ -352,12 +359,27 @@ def create_document_root(
|
|
|
352
359
|
Returns:
|
|
353
360
|
The document root.
|
|
354
361
|
"""
|
|
355
|
-
head_components =
|
|
362
|
+
head_components = [
|
|
363
|
+
*(
|
|
364
|
+
head_components
|
|
365
|
+
or [
|
|
366
|
+
# Default meta tags if user does not provide.
|
|
367
|
+
Meta.create(char_set="utf-8"),
|
|
368
|
+
Meta.create(
|
|
369
|
+
name="viewport", content="width=device-width, initial-scale=1"
|
|
370
|
+
),
|
|
371
|
+
]
|
|
372
|
+
),
|
|
373
|
+
# Always include the framework meta and link tags.
|
|
374
|
+
ReactMeta.create(),
|
|
375
|
+
Links.create(),
|
|
376
|
+
]
|
|
356
377
|
return Html.create(
|
|
357
|
-
|
|
378
|
+
Head.create(*head_components),
|
|
358
379
|
Body.create(
|
|
359
|
-
|
|
360
|
-
|
|
380
|
+
Var("children"),
|
|
381
|
+
ScrollRestoration.create(),
|
|
382
|
+
Scripts.create(),
|
|
361
383
|
),
|
|
362
384
|
lang=html_lang or "en",
|
|
363
385
|
custom_attrs=html_custom_attrs or {},
|
|
@@ -391,6 +413,23 @@ def create_theme(style: ComponentStyle) -> dict:
|
|
|
391
413
|
return {"styles": {"global": root_style}}
|
|
392
414
|
|
|
393
415
|
|
|
416
|
+
def _format_route_part(part: str) -> str:
|
|
417
|
+
if part.startswith("[") and part.endswith("]"):
|
|
418
|
+
if part.startswith(("[...", "[[...")):
|
|
419
|
+
return "$"
|
|
420
|
+
# We don't add [] here since we are reusing them from the input
|
|
421
|
+
return "$" + part + "_"
|
|
422
|
+
return "[" + part + "]_"
|
|
423
|
+
|
|
424
|
+
|
|
425
|
+
def _path_to_file_stem(path: str) -> str:
|
|
426
|
+
if path == "index":
|
|
427
|
+
return "_index"
|
|
428
|
+
path = path if path != "index" else "/"
|
|
429
|
+
name = ".".join([_format_route_part(part) for part in path.split("/")]).lstrip(".")
|
|
430
|
+
return name + "._index" if not name.endswith("$") else name
|
|
431
|
+
|
|
432
|
+
|
|
394
433
|
def get_page_path(path: str) -> str:
|
|
395
434
|
"""Get the path of the compiled JS file for the given page.
|
|
396
435
|
|
|
@@ -400,7 +439,12 @@ def get_page_path(path: str) -> str:
|
|
|
400
439
|
Returns:
|
|
401
440
|
The path of the compiled JS file.
|
|
402
441
|
"""
|
|
403
|
-
return str(
|
|
442
|
+
return str(
|
|
443
|
+
get_web_dir()
|
|
444
|
+
/ constants.Dirs.PAGES
|
|
445
|
+
/ constants.Dirs.ROUTES
|
|
446
|
+
/ (_path_to_file_stem(path) + constants.Ext.JSX)
|
|
447
|
+
)
|
|
404
448
|
|
|
405
449
|
|
|
406
450
|
def get_theme_path() -> str:
|
|
@@ -447,7 +491,7 @@ def get_components_path() -> str:
|
|
|
447
491
|
return str(
|
|
448
492
|
get_web_dir()
|
|
449
493
|
/ constants.Dirs.UTILS
|
|
450
|
-
/ (constants.PageNames.COMPONENTS + constants.Ext.
|
|
494
|
+
/ (constants.PageNames.COMPONENTS + constants.Ext.JSX),
|
|
451
495
|
)
|
|
452
496
|
|
|
453
497
|
|
|
@@ -460,7 +504,7 @@ def get_stateful_components_path() -> str:
|
|
|
460
504
|
return str(
|
|
461
505
|
get_web_dir()
|
|
462
506
|
/ constants.Dirs.UTILS
|
|
463
|
-
/ (constants.PageNames.STATEFUL_COMPONENTS + constants.Ext.
|
|
507
|
+
/ (constants.PageNames.STATEFUL_COMPONENTS + constants.Ext.JSX)
|
|
464
508
|
)
|
|
465
509
|
|
|
466
510
|
|
|
@@ -492,12 +536,8 @@ def add_meta(
|
|
|
492
536
|
children.append(Description.create(content=description))
|
|
493
537
|
children.append(Image.create(content=image))
|
|
494
538
|
|
|
495
|
-
page.children.
|
|
496
|
-
|
|
497
|
-
*children,
|
|
498
|
-
*meta_tags,
|
|
499
|
-
)
|
|
500
|
-
)
|
|
539
|
+
page.children.extend(children)
|
|
540
|
+
page.children.extend(meta_tags)
|
|
501
541
|
|
|
502
542
|
return page
|
|
503
543
|
|
reflex/components/__init__.py
CHANGED
|
@@ -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__,
|
reflex/components/__init__.pyi
CHANGED
|
@@ -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": ["
|
|
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
|
|
10
|
-
from .document import
|
|
11
|
-
from .document import
|
|
12
|
-
from .document import
|
|
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:
|
reflex/components/base/body.pyi
CHANGED
|
@@ -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
|
|
6
|
+
class ReactRouterLib(Component):
|
|
7
7
|
"""Root document components."""
|
|
8
8
|
|
|
9
|
-
library = "
|
|
9
|
+
library = "react-router"
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
class
|
|
13
|
-
"""The document
|
|
12
|
+
class Meta(ReactRouterLib):
|
|
13
|
+
"""The document meta tags."""
|
|
14
14
|
|
|
15
|
-
tag = "
|
|
15
|
+
tag = "Meta"
|
|
16
16
|
|
|
17
|
-
lang: str | None
|
|
18
17
|
|
|
18
|
+
class Links(ReactRouterLib):
|
|
19
|
+
"""The document link tags."""
|
|
19
20
|
|
|
20
|
-
|
|
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
|
-
|
|
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
|
-
|
|
33
|
+
tag = "Outlet"
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class Scripts(ReactRouterLib):
|
|
33
37
|
"""The document main scripts."""
|
|
34
38
|
|
|
35
|
-
tag = "
|
|
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
|
|
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
|
-
) ->
|
|
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
|
|
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
|
-
) ->
|
|
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
|
|
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
|
-
) ->
|
|
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
|
|
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
|
-
) ->
|
|
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
|
|
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
|
-
) ->
|
|
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:
|