diff --git a/packages/reflex-base/src/reflex_base/components/component.py b/packages/reflex-base/src/reflex_base/components/component.py index d7903c5c9e2..a1d6c8c8956 100644 --- a/packages/reflex-base/src/reflex_base/components/component.py +++ b/packages/reflex-base/src/reflex_base/components/component.py @@ -702,7 +702,9 @@ class Component(BaseComponent, ABC): _rename_props: ClassVar[dict[str, str]] = {} custom_attrs: dict[str, Var | Any] = field( - doc="custom attribute", default_factory=dict, is_javascript_property=False + doc="Attributes passed directly to the component.", + default_factory=dict, + is_javascript_property=False, ) _memoization_mode: MemoizationMode = field( diff --git a/packages/reflex-base/src/reflex_base/utils/lazy_loader.py b/packages/reflex-base/src/reflex_base/utils/lazy_loader.py index 3b1dd42798e..eed28e0d2ec 100644 --- a/packages/reflex-base/src/reflex_base/utils/lazy_loader.py +++ b/packages/reflex-base/src/reflex_base/utils/lazy_loader.py @@ -17,16 +17,18 @@ from __future__ import annotations -import copy import importlib import os import sys +from collections.abc import Mapping, Sequence + +SubmodAttrsType = Mapping[str, Sequence[str | tuple[str, str]]] def attach( package_name: str, submodules: set[str] | None = None, - submod_attrs: dict[str, list[str]] | None = None, + submod_attrs: SubmodAttrsType | None = None, **extra_mappings: str, ): """Replaces a package's __getattr__, __dir__, and __all__ attributes using lazy.attach. @@ -45,24 +47,21 @@ def attach( Returns: __getattr__, __dir__, __all__ """ - submod_attrs = copy.deepcopy(submod_attrs) - if submod_attrs: - for k, v in submod_attrs.items(): - # when flattening the list, only keep the alias in the tuple(mod[1]) - submod_attrs[k] = [ - mod if not isinstance(mod, tuple) else mod[1] for mod in v - ] - if submod_attrs is None: submod_attrs = {} submodules = set(submodules) if submodules is not None else set() - attr_to_modules = { - attr: mod for mod, attrs in submod_attrs.items() for attr in attrs + alias_to_module_and_attr = { + comp_alias(attr): (mod, comp_name(attr)) + for mod, attrs in submod_attrs.items() + for attr in attrs } - __all__ = sorted([*(submodules | attr_to_modules.keys()), *(extra_mappings or [])]) + __all__ = sorted([ + *(submodules | alias_to_module_and_attr.keys()), + *(extra_mappings or []), + ]) def __getattr__(name: str): # noqa: N807 if name in extra_mappings: @@ -74,15 +73,15 @@ def __getattr__(name: str): # noqa: N807 return getattr(submod, attr) if name in submodules: return importlib.import_module(f"{package_name}.{name}") - if name in attr_to_modules: - submod_path = f"{package_name}.{attr_to_modules[name]}" - submod = importlib.import_module(submod_path) - attr = getattr(submod, name) + if name in alias_to_module_and_attr: + module, attr_name = alias_to_module_and_attr[name] + submod = importlib.import_module(f"{package_name}.{module}") + attr = getattr(submod, attr_name) # If the attribute lives in a file (module) with the same # name as the attribute, ensure that the attribute and *not* # the module is accessible on the package. - if name == attr_to_modules[name]: + if name == module: pkg = sys.modules[package_name] pkg.__dict__[name] = attr @@ -94,7 +93,50 @@ def __dir__(): # noqa: N807 return __all__ if os.environ.get("EAGER_IMPORT", ""): - for attr in set(attr_to_modules.keys()) | submodules: + for attr in set(alias_to_module_and_attr.keys()) | submodules: __getattr__(attr) return __getattr__, __dir__, list(__all__) + + +def comp_name(comp: str | tuple[str, str]) -> str: + """Get the component name from the mapping value. + + This is the name used internally in the codebase. + + Args: + comp: The component name or a tuple of (component name, alias). + + Returns: + The component name. + """ + return comp[0] if isinstance(comp, tuple) else comp + + +def comp_alias(comp: str | tuple[str, str]) -> str: + """Get the component alias from the mapping value. + + This is the name external users will import. + + Args: + comp: The component name or a tuple of (component name, alias). + + Returns: + The component alias, or the compoenent name if there is no alias. + """ + return comp[1] if isinstance(comp, tuple) else comp + + +def comp_path(path: str, comp: str | tuple[str, str]) -> str: + """Get the component path from the mapping key and value. + + This is the internal path that will be imported. + + Args: + path: The base path of the component. + comp: The component name or a tuple of (component name, alias). + + Returns: + The component path. + """ + return path + "." + comp_name(comp) diff --git a/packages/reflex-base/src/reflex_base/utils/pyi_generator.py b/packages/reflex-base/src/reflex_base/utils/pyi_generator.py index 3479f10f321..5c916a61943 100644 --- a/packages/reflex-base/src/reflex_base/utils/pyi_generator.py +++ b/packages/reflex-base/src/reflex_base/utils/pyi_generator.py @@ -13,6 +13,7 @@ import subprocess import sys import typing +from collections import deque from collections.abc import Callable, Iterable, Mapping, Sequence from concurrent.futures import ProcessPoolExecutor from functools import cache @@ -21,9 +22,9 @@ from itertools import chain from pathlib import Path from types import MappingProxyType, ModuleType, SimpleNamespace, UnionType -from typing import Any, get_args, get_origin +from typing import Any, ClassVar, get_args, get_origin -from reflex_base.components.component import Component +from reflex_base.components.component import DEFAULT_TRIGGERS_AND_DESC, Component from reflex_base.vars.base import Var @@ -270,8 +271,21 @@ def _get_type_hint( _get_type_hint(arg, type_hint_globals, _is_optional(arg)) for arg in value ] return f"[{', '.join(res)}]" + elif (visible_name := _get_visible_type_name(value, type_hint_globals)) is not None: + res = visible_name else: - res = value.__name__ + # Best effort to find a submodule path in the globals. + for ix, part in enumerate(value.__module__.split(".")): + if part in type_hint_globals: + res = ".".join([ + part, + *value.__module__.split(".")[ix + 1 :], + value.__name__, + ]) + break + else: + # Fallback to the type name. + res = value.__name__ if is_optional and not res.startswith("Optional") and not res.endswith("| None"): res = f"{res} | None" return res @@ -330,7 +344,7 @@ def _get_class_prop_comments(clz: type[Component]) -> Mapping[str, tuple[str, .. prop = match.group(0).strip(":") if comments: props_comments[prop] = tuple( - comment.strip().strip("#") for comment in comments + comment.strip().lstrip("#").strip() for comment in comments ) comments.clear() @@ -450,6 +464,24 @@ def _generate_imports( ] +def _maybe_default_event_handler_docstring( + prop_name: str, fallback: str = "no description" +) -> tuple[str, ...]: + """Add a docstring for default event handler prop. + + Args: + prop_name: The name of the prop. + fallback: The fallback docstring to use if the prop is not a default event handler and has no description. + + Returns: + The event handler description or the fallback if the prop is not a default event handler. + """ + try: + return (DEFAULT_TRIGGERS_AND_DESC[prop_name].description,) + except KeyError: + return (fallback,) + + def _generate_docstrings(clzs: list[type[Component]], props: list[str]) -> str: """Generate the docstrings for the create method. @@ -465,13 +497,17 @@ def _generate_docstrings(clzs: list[type[Component]], props: list[str]) -> str: for prop, comment_lines in _get_class_prop_comments(clz).items(): if prop in props: props_comments[prop] = list(comment_lines) + for prop, field in clz._fields.items(): + if prop in props and field.doc: + props_comments[prop] = [field.doc] clz = clzs[0] new_docstring = [] for line in (clz.create.__doc__ or "").splitlines(): if "**" in line: indent = line.split("**")[0] new_docstring.extend([ - f"{indent}{n}:{' '.join(c)}" for n, c in props_comments.items() + f"{indent}{prop_name}: {' '.join(props_comments.get(prop_name, _maybe_default_event_handler_docstring(prop_name)))}" + for prop_name in props ]) new_docstring.append(line) return "\n".join(new_docstring) @@ -511,7 +547,7 @@ def _extract_class_props_as_ast_nodes( clzs: list[type], type_hint_globals: dict[str, Any], extract_real_default: bool = False, -) -> list[tuple[ast.arg, ast.Constant | None]]: +) -> Sequence[tuple[ast.arg, ast.Constant | None]]: """Get the props defined on the class and all parents. Args: @@ -522,13 +558,13 @@ def _extract_class_props_as_ast_nodes( pydantic field definition. Returns: - The list of props as ast arg nodes + The sequence of props as ast arg nodes """ spec = _get_full_argspec(func) func_kwonlyargs = set(spec.kwonlyargs) all_props: set[str] = set() - kwargs = [] - for target_class in clzs: + kwargs = deque() + for target_class in reversed(clzs): event_triggers = _get_class_event_triggers(target_class) # Import from the target class to ensure type hints are resolvable. type_hint_globals.update(_get_module_star_imports(target_class.__module__)) @@ -536,13 +572,16 @@ def _extract_class_props_as_ast_nodes( **type_hint_globals, **_get_class_annotation_globals(target_class), } - for name, value in target_class.__annotations__.items(): + # State attr isn't really a prop and cannot be resolved, so pop it off. + target_class.__annotations__.pop("State", None) + type_hints = typing.get_type_hints(target_class, globalns=annotation_globals) + for name, value in reversed(type_hints.items()): if ( name in func_kwonlyargs or name in EXCLUDED_PROPS or name in all_props or name in event_triggers - or (isinstance(value, str) and "ClassVar" in value) + or get_origin(value) is ClassVar ): continue all_props.add(name) @@ -557,7 +596,7 @@ def _extract_class_props_as_ast_nodes( if isinstance(default, Var): default = default._decode() - kwargs.append(( + kwargs.appendleft(( ast.arg( arg=name, annotation=ast.Name( @@ -1596,8 +1635,8 @@ def scan_all( # Fix generated pyi files with ruff. if file_paths: - subprocess.run(["ruff", "check", "--fix", *file_paths]) subprocess.run(["ruff", "format", *file_paths]) + subprocess.run(["ruff", "check", "--fix", *file_paths]) if use_json: if file_paths and changed_files is None: diff --git a/packages/reflex-components-core/src/reflex_components_core/core/debounce.py b/packages/reflex-components-core/src/reflex_components_core/core/debounce.py index 9c86c861941..500cd1f96a6 100644 --- a/packages/reflex-components-core/src/reflex_components_core/core/debounce.py +++ b/packages/reflex-components-core/src/reflex_components_core/core/debounce.py @@ -65,8 +65,8 @@ def create(cls, *children: Component, **props: Any) -> Component: the child, and then neuter the child's render method so it produces no output. Args: - children: The child component to wrap. - props: The component props. + *children: The child component to wrap. + **props: The component props. Returns: The DebounceInput component. diff --git a/packages/reflex-components-core/src/reflex_components_core/core/markdown_component_map.py b/packages/reflex-components-core/src/reflex_components_core/core/markdown_component_map.py index 16a539d4d9f..a5f17c73a27 100644 --- a/packages/reflex-components-core/src/reflex_components_core/core/markdown_component_map.py +++ b/packages/reflex-components-core/src/reflex_components_core/core/markdown_component_map.py @@ -4,6 +4,7 @@ import dataclasses from collections.abc import Sequence +from typing import ClassVar from reflex_base.vars.base import Var, VarData from reflex_base.vars.function import ArgsFunctionOperation, DestructuredArg @@ -17,7 +18,7 @@ class MarkdownComponentMap: """Mixin class for handling custom component maps in Markdown components.""" - _explicit_return: bool = dataclasses.field(default=False) + _explicit_return: ClassVar[bool] = False @classmethod def get_component_map_custom_code(cls) -> Var: diff --git a/packages/reflex-components-moment/src/reflex_components_moment/moment.py b/packages/reflex-components-moment/src/reflex_components_moment/moment.py index 908917b2093..d1753fcfece 100644 --- a/packages/reflex-components-moment/src/reflex_components_moment/moment.py +++ b/packages/reflex-components-moment/src/reflex_components_moment/moment.py @@ -3,7 +3,7 @@ from __future__ import annotations import dataclasses -from datetime import date, datetime, time, timedelta +import datetime from reflex_base.components.component import NoSSRComponent, field from reflex_base.event import EventHandler, passthrough_event_spec @@ -94,9 +94,9 @@ class Moment(NoSSRComponent): doc="Shows the duration (elapsed time) between two dates. duration property should be behind date property time-wise." ) - date: Var[str | datetime | date | time | timedelta] = field( - doc="The date to display (also work if passed as children)." - ) + date: Var[ + str | datetime.datetime | datetime.date | datetime.time | datetime.timedelta + ] = field(doc="The date to display (also work if passed as children).") duration_from_now: Var[bool] = field( doc="Shows the duration (elapsed time) between now and the provided datetime." diff --git a/packages/reflex-components-radix/src/reflex_components_radix/__init__.py b/packages/reflex-components-radix/src/reflex_components_radix/__init__.py index 6d1a990f380..4aafd3d9711 100644 --- a/packages/reflex-components-radix/src/reflex_components_radix/__init__.py +++ b/packages/reflex-components-radix/src/reflex_components_radix/__init__.py @@ -8,7 +8,7 @@ _SUBMODULES: set[str] = {"themes", "primitives"} -_SUBMOD_ATTRS: dict[str, list[str]] = { +_SUBMOD_ATTRS: lazy_loader.SubmodAttrsType = { "".join(k.split("reflex_components_radix.")[-1]): v for k, v in RADIX_MAPPING.items() } diff --git a/packages/reflex-components-radix/src/reflex_components_radix/mappings.py b/packages/reflex-components-radix/src/reflex_components_radix/mappings.py index 141dc6ac59c..df2c6682501 100644 --- a/packages/reflex-components-radix/src/reflex_components_radix/mappings.py +++ b/packages/reflex-components-radix/src/reflex_components_radix/mappings.py @@ -1,10 +1,12 @@ """Radix component mappings for lazy loading.""" -RADIX_THEMES_MAPPING: dict[str, list[str]] = { +from reflex_base.utils.lazy_loader import SubmodAttrsType + +RADIX_THEMES_MAPPING: SubmodAttrsType = { "reflex_components_radix.themes.base": ["color_mode", "theme", "theme_panel"], "reflex_components_radix.themes.color_mode": ["color_mode"], } -RADIX_THEMES_COMPONENTS_MAPPING: dict[str, list[str]] = { +RADIX_THEMES_COMPONENTS_MAPPING: SubmodAttrsType = { **{ f"reflex_components_radix.themes.components.{mod}": [mod] for mod in [ @@ -50,7 +52,7 @@ "reflex_components_radix.themes.components.progress": ["progress"], } -RADIX_THEMES_LAYOUT_MAPPING: dict[str, list[str]] = { +RADIX_THEMES_LAYOUT_MAPPING: SubmodAttrsType = { "reflex_components_radix.themes.layout.box": [ "box", ], @@ -78,14 +80,14 @@ "vstack", ], "reflex_components_radix.themes.layout.list": [ - "list", + ("list_ns", "list"), "list_item", "ordered_list", "unordered_list", ], } -RADIX_THEMES_TYPOGRAPHY_MAPPING: dict[str, list[str]] = { +RADIX_THEMES_TYPOGRAPHY_MAPPING: SubmodAttrsType = { "reflex_components_radix.themes.typography.blockquote": [ "blockquote", ], @@ -103,7 +105,7 @@ ], } -RADIX_PRIMITIVES_MAPPING: dict[str, list[str]] = { +RADIX_PRIMITIVES_MAPPING: SubmodAttrsType = { "reflex_components_radix.primitives.accordion": [ "accordion", ], @@ -118,11 +120,11 @@ ], } -RADIX_PRIMITIVES_SHORTCUT_MAPPING: dict[str, list[str]] = { +RADIX_PRIMITIVES_SHORTCUT_MAPPING: SubmodAttrsType = { k: v for k, v in RADIX_PRIMITIVES_MAPPING.items() if "progress" not in k } -RADIX_MAPPING: dict[str, list[str]] = { +RADIX_MAPPING: SubmodAttrsType = { **RADIX_THEMES_MAPPING, **RADIX_THEMES_COMPONENTS_MAPPING, **RADIX_THEMES_TYPOGRAPHY_MAPPING, diff --git a/packages/reflex-components-radix/src/reflex_components_radix/primitives/__init__.py b/packages/reflex-components-radix/src/reflex_components_radix/primitives/__init__.py index 47ef68a0b71..b8676a1e70b 100644 --- a/packages/reflex-components-radix/src/reflex_components_radix/primitives/__init__.py +++ b/packages/reflex-components-radix/src/reflex_components_radix/primitives/__init__.py @@ -6,7 +6,7 @@ from reflex_components_radix.mappings import RADIX_PRIMITIVES_MAPPING -_SUBMOD_ATTRS: dict[str, list[str]] = { +_SUBMOD_ATTRS: lazy_loader.SubmodAttrsType = { "".join(k.split("reflex_components_radix.primitives.")[-1]): v for k, v in RADIX_PRIMITIVES_MAPPING.items() } | {"dialog": ["dialog"]} diff --git a/packages/reflex-components-radix/src/reflex_components_radix/primitives/base.py b/packages/reflex-components-radix/src/reflex_components_radix/primitives/base.py index d2d895984b7..8ec5e8531e6 100644 --- a/packages/reflex-components-radix/src/reflex_components_radix/primitives/base.py +++ b/packages/reflex-components-radix/src/reflex_components_radix/primitives/base.py @@ -43,8 +43,8 @@ def create(cls, *children: Any, **props: Any) -> Component: """Create a new RadixPrimitiveTriggerComponent instance. Args: - children: The children of the component. - props: The properties of the component. + *children: The children of the component. + **props: The properties of the component. Returns: The new RadixPrimitiveTriggerComponent instance. diff --git a/packages/reflex-components-radix/src/reflex_components_radix/themes/base.py b/packages/reflex-components-radix/src/reflex_components_radix/themes/base.py index 1b5fb5a0483..136f77721e8 100644 --- a/packages/reflex-components-radix/src/reflex_components_radix/themes/base.py +++ b/packages/reflex-components-radix/src/reflex_components_radix/themes/base.py @@ -148,8 +148,8 @@ def create(cls, *children: Any, **props: Any) -> Component: """Create a new RadixThemesTriggerComponent instance. Args: - children: The children of the component. - props: The properties of the component. + *children: The children of the component. + **props: The properties of the component. Returns: The new RadixThemesTriggerComponent instance. diff --git a/packages/reflex-components-radix/src/reflex_components_radix/themes/components/__init__.py b/packages/reflex-components-radix/src/reflex_components_radix/themes/components/__init__.py index bafdd75296b..99f45cc1a1f 100644 --- a/packages/reflex-components-radix/src/reflex_components_radix/themes/components/__init__.py +++ b/packages/reflex-components-radix/src/reflex_components_radix/themes/components/__init__.py @@ -6,7 +6,7 @@ from reflex_components_radix.mappings import RADIX_THEMES_COMPONENTS_MAPPING -_SUBMOD_ATTRS: dict[str, list[str]] = { +_SUBMOD_ATTRS: lazy_loader.SubmodAttrsType = { "".join(k.split("reflex_components_radix.themes.components.")[-1]): v for k, v in RADIX_THEMES_COMPONENTS_MAPPING.items() } diff --git a/packages/reflex-components-radix/src/reflex_components_radix/themes/layout/__init__.py b/packages/reflex-components-radix/src/reflex_components_radix/themes/layout/__init__.py index 214f923696a..765ccb7f203 100644 --- a/packages/reflex-components-radix/src/reflex_components_radix/themes/layout/__init__.py +++ b/packages/reflex-components-radix/src/reflex_components_radix/themes/layout/__init__.py @@ -6,7 +6,7 @@ from reflex_components_radix.mappings import RADIX_THEMES_LAYOUT_MAPPING -_SUBMOD_ATTRS: dict[str, list[str]] = { +_SUBMOD_ATTRS: lazy_loader.SubmodAttrsType = { "".join(k.split("reflex_components_radix.themes.layout.")[-1]): v for k, v in RADIX_THEMES_LAYOUT_MAPPING.items() } diff --git a/packages/reflex-components-radix/src/reflex_components_radix/themes/layout/container.py b/packages/reflex-components-radix/src/reflex_components_radix/themes/layout/container.py index b98e30faf5f..d9ef24a186b 100644 --- a/packages/reflex-components-radix/src/reflex_components_radix/themes/layout/container.py +++ b/packages/reflex-components-radix/src/reflex_components_radix/themes/layout/container.py @@ -39,10 +39,10 @@ def create( """Create the container component. Args: - children: The children components. + *children: The children components. padding: The padding of the container. stack_children_full_width: If True, any vstack/hstack children will have 100% width. - props: The properties of the container. + **props: The properties of the container. Returns: The container component. diff --git a/packages/reflex-components-radix/src/reflex_components_radix/themes/layout/list.py b/packages/reflex-components-radix/src/reflex_components_radix/themes/layout/list.py index 427760c804a..9ba8e1e747c 100644 --- a/packages/reflex-components-radix/src/reflex_components_radix/themes/layout/list.py +++ b/packages/reflex-components-radix/src/reflex_components_radix/themes/layout/list.py @@ -189,7 +189,7 @@ class List(ComponentNamespace): __call__ = staticmethod(BaseList.create) -list = list_ns = List() +list_ns = List() list_item = list_ns.item ordered_list = list_ns.ordered unordered_list = list_ns.unordered diff --git a/packages/reflex-components-radix/src/reflex_components_radix/themes/typography/__init__.py b/packages/reflex-components-radix/src/reflex_components_radix/themes/typography/__init__.py index be914b414af..2bf232d92dd 100644 --- a/packages/reflex-components-radix/src/reflex_components_radix/themes/typography/__init__.py +++ b/packages/reflex-components-radix/src/reflex_components_radix/themes/typography/__init__.py @@ -6,7 +6,7 @@ from reflex_components_radix.mappings import RADIX_THEMES_TYPOGRAPHY_MAPPING -_SUBMOD_ATTRS: dict[str, list[str]] = { +_SUBMOD_ATTRS: lazy_loader.SubmodAttrsType = { "".join(k.split("reflex_components_radix.themes.typography.")[-1]): v for k, v in RADIX_THEMES_TYPOGRAPHY_MAPPING.items() } diff --git a/packages/reflex-components-react-player/src/reflex_components_react_player/react_player.py b/packages/reflex-components-react-player/src/reflex_components_react_player/react_player.py index c3a72bd6e71..77a4cdea940 100644 --- a/packages/reflex-components-react-player/src/reflex_components_react_player/react_player.py +++ b/packages/reflex-components-react-player/src/reflex_components_react_player/react_player.py @@ -236,8 +236,8 @@ def create(cls, *children, **props) -> ReactPlayer: """Create a component. Args: - children: The children of the component. - props: The props of the component. + *children: The children of the component. + **props: The props of the component. Returns: The created component. diff --git a/pyi_hashes.json b/pyi_hashes.json index f7900836abd..01d72078c49 100644 --- a/pyi_hashes.json +++ b/pyi_hashes.json @@ -1,124 +1,124 @@ { - "packages/reflex-components-code/src/reflex_components_code/code.pyi": "2797061144c4199f57848f6673a05a7f", - "packages/reflex-components-code/src/reflex_components_code/shiki_code_block.pyi": "db0de2879d57870831a030a69b5282b7", + "packages/reflex-components-code/src/reflex_components_code/code.pyi": "714688c5b43deb05a65ff66e042c8c09", + "packages/reflex-components-code/src/reflex_components_code/shiki_code_block.pyi": "1aaa72237f8f000967a34bc3e2196b5e", "packages/reflex-components-core/src/reflex_components_core/__init__.pyi": "82b29d23f2490161d42fd21021bd39c3", "packages/reflex-components-core/src/reflex_components_core/base/__init__.pyi": "7009187aaaf191814d031e5462c48318", - "packages/reflex-components-core/src/reflex_components_core/base/app_wrap.pyi": "e7dfa98f5df5e30cb6d01d61b6974bef", - "packages/reflex-components-core/src/reflex_components_core/base/body.pyi": "0f98a7c1247e35059b76ae2985b7c81b", - "packages/reflex-components-core/src/reflex_components_core/base/document.pyi": "80a3090e5b7a46de6daa8e97e68e8638", - "packages/reflex-components-core/src/reflex_components_core/base/error_boundary.pyi": "f36f27e580041af842d348adbddcd600", - "packages/reflex-components-core/src/reflex_components_core/base/fragment.pyi": "39abed241f2def793dd0c59328bb0470", - "packages/reflex-components-core/src/reflex_components_core/base/link.pyi": "05d96de8a1d5f7be08de831b99663e67", - "packages/reflex-components-core/src/reflex_components_core/base/meta.pyi": "b83e94900f988ef5d2fdf121b01be7fa", - "packages/reflex-components-core/src/reflex_components_core/base/script.pyi": "cfb0d5bcfe67f7c2b40868cdf3a5f7c1", - "packages/reflex-components-core/src/reflex_components_core/base/strict_mode.pyi": "8a69093c8d40b10b1f0b1c4e851e9d53", + "packages/reflex-components-core/src/reflex_components_core/base/app_wrap.pyi": "c0c6564e0f3f025551e02b3e9458200b", + "packages/reflex-components-core/src/reflex_components_core/base/body.pyi": "9c572ab4973b716b023bb26711292389", + "packages/reflex-components-core/src/reflex_components_core/base/document.pyi": "9b66e0cc4579a406dfc6a671025c84b1", + "packages/reflex-components-core/src/reflex_components_core/base/error_boundary.pyi": "ee2b2b4997eb87649bf571c28b8c7f2f", + "packages/reflex-components-core/src/reflex_components_core/base/fragment.pyi": "4330310dc8a32ec823c69105aa9445ef", + "packages/reflex-components-core/src/reflex_components_core/base/link.pyi": "fd3eb0f9943cb52b65c226f6efdbd211", + "packages/reflex-components-core/src/reflex_components_core/base/meta.pyi": "2e21e059ac87dc9897e09e5dff248fd6", + "packages/reflex-components-core/src/reflex_components_core/base/script.pyi": "d94c585877539b4c0f35973fa30ca92a", + "packages/reflex-components-core/src/reflex_components_core/base/strict_mode.pyi": "b42bd1c1978454d06d783d630e1d6a63", "packages/reflex-components-core/src/reflex_components_core/core/__init__.pyi": "dd5142b3c9087bf2bf22651adf6f2724", - "packages/reflex-components-core/src/reflex_components_core/core/auto_scroll.pyi": "29f5c106b98ddac94cf7c1244a02cfb1", - "packages/reflex-components-core/src/reflex_components_core/core/banner.pyi": "9af2721b01868b24a48c7899ad6b1c69", - "packages/reflex-components-core/src/reflex_components_core/core/clipboard.pyi": "20a3f4f500d44ac4365b6d831c6816ff", - "packages/reflex-components-core/src/reflex_components_core/core/debounce.pyi": "eb606cf8151e6769df7f2443ece739cd", - "packages/reflex-components-core/src/reflex_components_core/core/helmet.pyi": "5e28d554d2b4d7fae1ba35809c24f4fc", - "packages/reflex-components-core/src/reflex_components_core/core/html.pyi": "28bd59898f0402b33c34e14f3eef1282", - "packages/reflex-components-core/src/reflex_components_core/core/sticky.pyi": "4b34eca0e7338ec80ac5985345717bc9", - "packages/reflex-components-core/src/reflex_components_core/core/upload.pyi": "6f3cdef9956dbe5c917edeefdffd1b0e", - "packages/reflex-components-core/src/reflex_components_core/core/window_events.pyi": "28e901ee970bec806ee766d0d126d739", + "packages/reflex-components-core/src/reflex_components_core/core/auto_scroll.pyi": "5bd2e4aa0d32b6f76fdca5ecdd208922", + "packages/reflex-components-core/src/reflex_components_core/core/banner.pyi": "e2c488332e3f0accf1cf3a1a8e9e6419", + "packages/reflex-components-core/src/reflex_components_core/core/clipboard.pyi": "ec0e3f6c104520b3621559c833cb9ed2", + "packages/reflex-components-core/src/reflex_components_core/core/debounce.pyi": "e2233bf39fdcf74a795b7e3ff6736b5d", + "packages/reflex-components-core/src/reflex_components_core/core/helmet.pyi": "257b7d1ff394d7dfb79fc6e9bf583463", + "packages/reflex-components-core/src/reflex_components_core/core/html.pyi": "0515ecd0f7a1e6175b5781ee2a15a519", + "packages/reflex-components-core/src/reflex_components_core/core/sticky.pyi": "c13b4c9ddeccc854f7d4f735b6b8bf35", + "packages/reflex-components-core/src/reflex_components_core/core/upload.pyi": "f5529c6cb678c5287d5b06c7e288bce6", + "packages/reflex-components-core/src/reflex_components_core/core/window_events.pyi": "ccbd7f4c55eb499a058b4822db3639a3", "packages/reflex-components-core/src/reflex_components_core/datadisplay/__init__.pyi": "c96fed4da42a13576d64f84e3c7cb25c", "packages/reflex-components-core/src/reflex_components_core/el/__init__.pyi": "f09129ddefb57ab4c7769c86dc9a3153", - "packages/reflex-components-core/src/reflex_components_core/el/element.pyi": "1a8824cdd243efc876157b97f9f1b714", + "packages/reflex-components-core/src/reflex_components_core/el/element.pyi": "3250cce0348494dac0075468bdc6daae", "packages/reflex-components-core/src/reflex_components_core/el/elements/__init__.pyi": "e6c845f2f29eb079697a2e31b0c2f23a", - "packages/reflex-components-core/src/reflex_components_core/el/elements/base.pyi": "7c74980207dc1a5cac14083f2edd31ba", - "packages/reflex-components-core/src/reflex_components_core/el/elements/forms.pyi": "da7ef00fd67699eeeb55e33279c2eb8d", - "packages/reflex-components-core/src/reflex_components_core/el/elements/inline.pyi": "0ea0058ea7b6ae03138c7c85df963c32", - "packages/reflex-components-core/src/reflex_components_core/el/elements/media.pyi": "97f7f6c66533bb3947a43ceefe160d49", - "packages/reflex-components-core/src/reflex_components_core/el/elements/metadata.pyi": "7ea09671a42d75234a0464fc3601577c", - "packages/reflex-components-core/src/reflex_components_core/el/elements/other.pyi": "869dca86b783149f9c59e1ae0d2900c1", - "packages/reflex-components-core/src/reflex_components_core/el/elements/scripts.pyi": "c3a5a4f2d0594414a160fe59b13ccc26", - "packages/reflex-components-core/src/reflex_components_core/el/elements/sectioning.pyi": "b2acdc964feabe78154be141dc978555", - "packages/reflex-components-core/src/reflex_components_core/el/elements/tables.pyi": "e75fbe0454df06abf462ab579b698897", - "packages/reflex-components-core/src/reflex_components_core/el/elements/typography.pyi": "f88089a2f4270b981a28e385d07460b5", - "packages/reflex-components-core/src/reflex_components_core/react_router/dom.pyi": "c5ac8ba14fdce557063a832a79f43f68", - "packages/reflex-components-dataeditor/src/reflex_components_dataeditor/dataeditor.pyi": "e10210239ce7dc18980e70eec19b9353", - "packages/reflex-components-gridjs/src/reflex_components_gridjs/datatable.pyi": "2a93782c63e82a6939411273fe2486d9", - "packages/reflex-components-lucide/src/reflex_components_lucide/icon.pyi": "f654cc9cb305712b485fcd676935c0c1", - "packages/reflex-components-markdown/src/reflex_components_markdown/markdown.pyi": "2d6efa2d5f2586a7036d606a24fb425d", - "packages/reflex-components-moment/src/reflex_components_moment/moment.pyi": "ad4b084d94e50311f761d69b3173e357", - "packages/reflex-components-plotly/src/reflex_components_plotly/plotly.pyi": "241b80584f3e029145e6e003d1c476f2", - "packages/reflex-components-radix/src/reflex_components_radix/__init__.pyi": "b2f485bfde4978047b7b944cf15d92cb", + "packages/reflex-components-core/src/reflex_components_core/el/elements/base.pyi": "b494fbc3c0127645c8ec26bb3433f649", + "packages/reflex-components-core/src/reflex_components_core/el/elements/forms.pyi": "2b245f1839036fe0df71074ab84f98c0", + "packages/reflex-components-core/src/reflex_components_core/el/elements/inline.pyi": "07cb9aea9d31875fc8dcaf29eb1ffd4b", + "packages/reflex-components-core/src/reflex_components_core/el/elements/media.pyi": "ff3a9d9046048b282dd70aa4d7402e3c", + "packages/reflex-components-core/src/reflex_components_core/el/elements/metadata.pyi": "ea0643eae0be461db99618fea05967e2", + "packages/reflex-components-core/src/reflex_components_core/el/elements/other.pyi": "9e9a63318f10cc160ae9e5b6697babb4", + "packages/reflex-components-core/src/reflex_components_core/el/elements/scripts.pyi": "239b3e3c1a9f8602de1cff1987eda874", + "packages/reflex-components-core/src/reflex_components_core/el/elements/sectioning.pyi": "db2ab8f3fff84d638516bf2d49de703d", + "packages/reflex-components-core/src/reflex_components_core/el/elements/tables.pyi": "5ec710535671e9fab2ff7761fd0b980d", + "packages/reflex-components-core/src/reflex_components_core/el/elements/typography.pyi": "611a3addf30eed59b53d0a08c3e13662", + "packages/reflex-components-core/src/reflex_components_core/react_router/dom.pyi": "2b039f5a8661c2664921e145bbae9a65", + "packages/reflex-components-dataeditor/src/reflex_components_dataeditor/dataeditor.pyi": "19d114e89d15fd4e7549c12f00da3cdb", + "packages/reflex-components-gridjs/src/reflex_components_gridjs/datatable.pyi": "2813be430faa16707e1dba1523248035", + "packages/reflex-components-lucide/src/reflex_components_lucide/icon.pyi": "1ff690ec1e210d74e1b110a53e2c2be7", + "packages/reflex-components-markdown/src/reflex_components_markdown/markdown.pyi": "b055fb85e46a7f7b3222d3946fc5e1c5", + "packages/reflex-components-moment/src/reflex_components_moment/moment.pyi": "0080f856cb7385d2a60d262475aa9b55", + "packages/reflex-components-plotly/src/reflex_components_plotly/plotly.pyi": "109f735eaa418fd88821775111ed4f0e", + "packages/reflex-components-radix/src/reflex_components_radix/__init__.pyi": "19216eb3618f68c8a76e5e43801cf4af", "packages/reflex-components-radix/src/reflex_components_radix/primitives/__init__.pyi": "5404a8da97e8b5129133d7f300e3f642", - "packages/reflex-components-radix/src/reflex_components_radix/primitives/accordion.pyi": "18ed34323f671fcf655639dc78d7c549", - "packages/reflex-components-radix/src/reflex_components_radix/primitives/base.pyi": "9c80e740d177b4a805dee3038d580941", - "packages/reflex-components-radix/src/reflex_components_radix/primitives/dialog.pyi": "b47313aefc9a740851ee332656446afd", - "packages/reflex-components-radix/src/reflex_components_radix/primitives/drawer.pyi": "d6a4f88f2988fa50fbed8a9026f5ef8b", - "packages/reflex-components-radix/src/reflex_components_radix/primitives/form.pyi": "00c0e0b6c8190f2db7fd847a25b5c03d", - "packages/reflex-components-radix/src/reflex_components_radix/primitives/progress.pyi": "577ec9714a4d8bc9f7dd7eca22fe5252", - "packages/reflex-components-radix/src/reflex_components_radix/primitives/slider.pyi": "bc69b9443d04ae7856c0a411a90755a9", + "packages/reflex-components-radix/src/reflex_components_radix/primitives/accordion.pyi": "f43b5cd28126ec0290f7054f73251fc8", + "packages/reflex-components-radix/src/reflex_components_radix/primitives/base.pyi": "02044350cb13430f4ed2ee731251a066", + "packages/reflex-components-radix/src/reflex_components_radix/primitives/dialog.pyi": "0c4df70b06d647a3ddd5dba70c43f34f", + "packages/reflex-components-radix/src/reflex_components_radix/primitives/drawer.pyi": "ce7fc5bce729b8e114d0655cd4994f9d", + "packages/reflex-components-radix/src/reflex_components_radix/primitives/form.pyi": "96a11cfd7262e4b5d3d92d5bcbec7c96", + "packages/reflex-components-radix/src/reflex_components_radix/primitives/progress.pyi": "8e4f2567cfdedae599426af7caecc05a", + "packages/reflex-components-radix/src/reflex_components_radix/primitives/slider.pyi": "4c6187c3e8b6b3a6be362ffba61fa8ad", "packages/reflex-components-radix/src/reflex_components_radix/themes/__init__.pyi": "b433b9a099dc5b0ab008d02c85d38059", - "packages/reflex-components-radix/src/reflex_components_radix/themes/base.pyi": "90a182a1444b73c006e52ea67c2b3db1", - "packages/reflex-components-radix/src/reflex_components_radix/themes/color_mode.pyi": "3a419f78071b0dd6be55dc55e7334a1b", + "packages/reflex-components-radix/src/reflex_components_radix/themes/base.pyi": "06d8d8014eba38c1ea173c53002a63e3", + "packages/reflex-components-radix/src/reflex_components_radix/themes/color_mode.pyi": "b6c9fcb1a2ff029d05b9d658b50b4d11", "packages/reflex-components-radix/src/reflex_components_radix/themes/components/__init__.pyi": "f10f0169f81c78290333da831915762f", - "packages/reflex-components-radix/src/reflex_components_radix/themes/components/alert_dialog.pyi": "2b8c68239c9e9646e71ef8e81d7b5f69", - "packages/reflex-components-radix/src/reflex_components_radix/themes/components/aspect_ratio.pyi": "0f981ee0589f5501ab3c57e0aec01316", - "packages/reflex-components-radix/src/reflex_components_radix/themes/components/avatar.pyi": "d30f1bfb42198177ea08d7d358e99339", - "packages/reflex-components-radix/src/reflex_components_radix/themes/components/badge.pyi": "c3bb335b309177ff03d2cadcaf623744", - "packages/reflex-components-radix/src/reflex_components_radix/themes/components/button.pyi": "6a01812d601e8bf3dcd30dcccc75cb79", - "packages/reflex-components-radix/src/reflex_components_radix/themes/components/callout.pyi": "9b853e851805addacc2fcd995119f857", - "packages/reflex-components-radix/src/reflex_components_radix/themes/components/card.pyi": "67a71ec6ed4945a9ce270bd51d40b94e", - "packages/reflex-components-radix/src/reflex_components_radix/themes/components/checkbox.pyi": "0c975a4812efc267c87119f10880e1a9", - "packages/reflex-components-radix/src/reflex_components_radix/themes/components/checkbox_cards.pyi": "6425aae44ffe78f48699910906d16285", - "packages/reflex-components-radix/src/reflex_components_radix/themes/components/checkbox_group.pyi": "d0029ee04a971d8a51be0c99e414a139", - "packages/reflex-components-radix/src/reflex_components_radix/themes/components/context_menu.pyi": "1ee25c7dd27fece9881800226e322d6b", - "packages/reflex-components-radix/src/reflex_components_radix/themes/components/data_list.pyi": "924addbc155a178709f5fd38af4eb547", - "packages/reflex-components-radix/src/reflex_components_radix/themes/components/dialog.pyi": "e315e9779663f2f2fc9c2ca322a5645f", - "packages/reflex-components-radix/src/reflex_components_radix/themes/components/dropdown_menu.pyi": "ec6cb8830971b2a04bebe7459c059b15", - "packages/reflex-components-radix/src/reflex_components_radix/themes/components/hover_card.pyi": "28384945a53620ad6075797f8ada7354", - "packages/reflex-components-radix/src/reflex_components_radix/themes/components/icon_button.pyi": "6a3a37bdc9136f8c19fb3a7f55e76d64", - "packages/reflex-components-radix/src/reflex_components_radix/themes/components/inset.pyi": "05cfece835e2660bbc1b096529dfdec0", - "packages/reflex-components-radix/src/reflex_components_radix/themes/components/popover.pyi": "3033070773e8e32de283ad917367b386", - "packages/reflex-components-radix/src/reflex_components_radix/themes/components/progress.pyi": "798eadec25895a56e36d23203a4e0444", - "packages/reflex-components-radix/src/reflex_components_radix/themes/components/radio.pyi": "f6140dbf7ad4c25595c6983dcacc2a60", - "packages/reflex-components-radix/src/reflex_components_radix/themes/components/radio_cards.pyi": "e16ca79a2ad4c2919f56efb54830c1ef", - "packages/reflex-components-radix/src/reflex_components_radix/themes/components/radio_group.pyi": "473703616ed18d983dda3600899710a5", - "packages/reflex-components-radix/src/reflex_components_radix/themes/components/scroll_area.pyi": "12eb86d24886764bf1a5815e87ea519c", - "packages/reflex-components-radix/src/reflex_components_radix/themes/components/segmented_control.pyi": "6319f89d046b0fce8e9efb51e50dda9f", - "packages/reflex-components-radix/src/reflex_components_radix/themes/components/select.pyi": "c6da1db236da70dc40815a404d2e29b3", - "packages/reflex-components-radix/src/reflex_components_radix/themes/components/separator.pyi": "d2dabb895d7fc63a556d3c3220e38b4d", - "packages/reflex-components-radix/src/reflex_components_radix/themes/components/skeleton.pyi": "55b003f62cc3e5c85c90c82f8f595bc6", - "packages/reflex-components-radix/src/reflex_components_radix/themes/components/slider.pyi": "c204f30612bfa35a62cb9f525a913f77", - "packages/reflex-components-radix/src/reflex_components_radix/themes/components/spinner.pyi": "faeddfd0e3dc0e3bbcfdeaa6e42cb755", - "packages/reflex-components-radix/src/reflex_components_radix/themes/components/switch.pyi": "70f1d8fc55398d3cbb01f157c768419e", - "packages/reflex-components-radix/src/reflex_components_radix/themes/components/table.pyi": "a4c3052bc449924a630dad911f975e26", - "packages/reflex-components-radix/src/reflex_components_radix/themes/components/tabs.pyi": "ec4e4ed03bd892c6f7d50ae4b490adb9", - "packages/reflex-components-radix/src/reflex_components_radix/themes/components/text_area.pyi": "06549c800759ae541cc3c3a74240af59", - "packages/reflex-components-radix/src/reflex_components_radix/themes/components/text_field.pyi": "dcb6a8ff4668082fc9406579098abf87", - "packages/reflex-components-radix/src/reflex_components_radix/themes/components/tooltip.pyi": "69e4ce4eeaa60ac90ef120331cb8601c", - "packages/reflex-components-radix/src/reflex_components_radix/themes/layout/__init__.pyi": "dcbb1dc8e860379188924c15dd21605b", - "packages/reflex-components-radix/src/reflex_components_radix/themes/layout/base.pyi": "28e6cd3869c9cbad886b69b339e3ecf6", - "packages/reflex-components-radix/src/reflex_components_radix/themes/layout/box.pyi": "004cae8160c3a91ae6c12b54205f5112", - "packages/reflex-components-radix/src/reflex_components_radix/themes/layout/center.pyi": "9dbe595eddc2ec731beeb3a98743be36", - "packages/reflex-components-radix/src/reflex_components_radix/themes/layout/container.pyi": "1fb9d0ce37de9c64f681ad70375b9e42", - "packages/reflex-components-radix/src/reflex_components_radix/themes/layout/flex.pyi": "a729044bfe2d82404de07c4570262b55", - "packages/reflex-components-radix/src/reflex_components_radix/themes/layout/grid.pyi": "74b017b63728ce328e110bc64f20a205", - "packages/reflex-components-radix/src/reflex_components_radix/themes/layout/list.pyi": "3a595ec7faf95645ab52bdad1bf9dc4a", - "packages/reflex-components-radix/src/reflex_components_radix/themes/layout/section.pyi": "f3e44e291f3d96d06850d262de5d43a8", - "packages/reflex-components-radix/src/reflex_components_radix/themes/layout/spacer.pyi": "a0a59ca93ea1e3a0e5136b9692a68d18", - "packages/reflex-components-radix/src/reflex_components_radix/themes/layout/stack.pyi": "6ab750e790f0687b735d7464fa289c1f", + "packages/reflex-components-radix/src/reflex_components_radix/themes/components/alert_dialog.pyi": "f3026c5404ccb481cc46d4526d19e825", + "packages/reflex-components-radix/src/reflex_components_radix/themes/components/aspect_ratio.pyi": "48a00650a3a155e7f1bd09a09bd89543", + "packages/reflex-components-radix/src/reflex_components_radix/themes/components/avatar.pyi": "3f5e46fb7bae6b22c54b2134bd78a568", + "packages/reflex-components-radix/src/reflex_components_radix/themes/components/badge.pyi": "a7fd56b738b2b07ae5596836da6ede3c", + "packages/reflex-components-radix/src/reflex_components_radix/themes/components/button.pyi": "4b0481818b2d37243a00d5120abeca01", + "packages/reflex-components-radix/src/reflex_components_radix/themes/components/callout.pyi": "8973b229d7bc67f8c2f596478b527231", + "packages/reflex-components-radix/src/reflex_components_radix/themes/components/card.pyi": "4daa42eb9d6757ff4e8478cff3b30e6b", + "packages/reflex-components-radix/src/reflex_components_radix/themes/components/checkbox.pyi": "cfe85ecd154bf85333f895760171fa08", + "packages/reflex-components-radix/src/reflex_components_radix/themes/components/checkbox_cards.pyi": "71ace8982a9f93d9fbbfcff669a4ad4b", + "packages/reflex-components-radix/src/reflex_components_radix/themes/components/checkbox_group.pyi": "f4e107e9330f7959ccf37dc39f50fb38", + "packages/reflex-components-radix/src/reflex_components_radix/themes/components/context_menu.pyi": "f71d1088345d3f48eb2dd754ee604e25", + "packages/reflex-components-radix/src/reflex_components_radix/themes/components/data_list.pyi": "8c476b1a25f3fa95e1bdf32b83881e2b", + "packages/reflex-components-radix/src/reflex_components_radix/themes/components/dialog.pyi": "63715a2a2eb4f5d1517f162f005918dd", + "packages/reflex-components-radix/src/reflex_components_radix/themes/components/dropdown_menu.pyi": "14cf319ffe4044ea9b989b900676aa20", + "packages/reflex-components-radix/src/reflex_components_radix/themes/components/hover_card.pyi": "1e5fbafb9e8c1b39f126a9040a77c178", + "packages/reflex-components-radix/src/reflex_components_radix/themes/components/icon_button.pyi": "1e92d503ba0c3bbe294ccb116363333f", + "packages/reflex-components-radix/src/reflex_components_radix/themes/components/inset.pyi": "493e6b10e8f8fc4c64ee9741860c1d73", + "packages/reflex-components-radix/src/reflex_components_radix/themes/components/popover.pyi": "bffd2325fdc29f3ecef53c409098e6a9", + "packages/reflex-components-radix/src/reflex_components_radix/themes/components/progress.pyi": "d80868e4dee2554fd1c85a0ae68ea975", + "packages/reflex-components-radix/src/reflex_components_radix/themes/components/radio.pyi": "9004f1d4d6b3f480b07e7728e5c344e0", + "packages/reflex-components-radix/src/reflex_components_radix/themes/components/radio_cards.pyi": "1461c1348f86c318fc369fd11e04f1f1", + "packages/reflex-components-radix/src/reflex_components_radix/themes/components/radio_group.pyi": "8735fa2ad839bdcb41ee2abfc4ab6f42", + "packages/reflex-components-radix/src/reflex_components_radix/themes/components/scroll_area.pyi": "a2226bf54f66fe605168a9644ae81607", + "packages/reflex-components-radix/src/reflex_components_radix/themes/components/segmented_control.pyi": "5664c0d090767a4f938662b5adc8479a", + "packages/reflex-components-radix/src/reflex_components_radix/themes/components/select.pyi": "4192712f54ca0388c26a757b2d062fd4", + "packages/reflex-components-radix/src/reflex_components_radix/themes/components/separator.pyi": "d7c8626d43e079b102b1e1c2f4b5740f", + "packages/reflex-components-radix/src/reflex_components_radix/themes/components/skeleton.pyi": "5ccf7896dffcc17c9520e0a1aeb9d8c2", + "packages/reflex-components-radix/src/reflex_components_radix/themes/components/slider.pyi": "ddcd9afeebdf49aa2ed2b34f4f2e7ad4", + "packages/reflex-components-radix/src/reflex_components_radix/themes/components/spinner.pyi": "c0f13b8f32600813135be9bc2b78b98f", + "packages/reflex-components-radix/src/reflex_components_radix/themes/components/switch.pyi": "216e9f6fd48bf34b116827bc7813b867", + "packages/reflex-components-radix/src/reflex_components_radix/themes/components/table.pyi": "82ccd17b638e717e05b6850c457d4756", + "packages/reflex-components-radix/src/reflex_components_radix/themes/components/tabs.pyi": "e8588a7a5754684d1587d54bdce4ce08", + "packages/reflex-components-radix/src/reflex_components_radix/themes/components/text_area.pyi": "adc91a1ba5d549b3900c6cd97089be93", + "packages/reflex-components-radix/src/reflex_components_radix/themes/components/text_field.pyi": "17ba0d974f3a2595140a9f803fef2aaf", + "packages/reflex-components-radix/src/reflex_components_radix/themes/components/tooltip.pyi": "e619ef44dcd6121a88f21ec5eb0bcb76", + "packages/reflex-components-radix/src/reflex_components_radix/themes/layout/__init__.pyi": "9e452af27229b676ad0146e40f75bed5", + "packages/reflex-components-radix/src/reflex_components_radix/themes/layout/base.pyi": "59dfdd4b2237a4a97c58e70476fb53cd", + "packages/reflex-components-radix/src/reflex_components_radix/themes/layout/box.pyi": "fa8f815127a06070d8315e2607c8914a", + "packages/reflex-components-radix/src/reflex_components_radix/themes/layout/center.pyi": "05d3f0df46dd16d16f343fbcde0738c3", + "packages/reflex-components-radix/src/reflex_components_radix/themes/layout/container.pyi": "422f06113f95e1f529b0c5fb063a924a", + "packages/reflex-components-radix/src/reflex_components_radix/themes/layout/flex.pyi": "6974d7234d20ab3962ea3f214621f0fa", + "packages/reflex-components-radix/src/reflex_components_radix/themes/layout/grid.pyi": "d3fc6e269dad51d58ef216f4f1383161", + "packages/reflex-components-radix/src/reflex_components_radix/themes/layout/list.pyi": "562a81aa0ecdb5e1df3ffeac627f1fac", + "packages/reflex-components-radix/src/reflex_components_radix/themes/layout/section.pyi": "8fc9ace12dc2203ac03f4e1eb40b0524", + "packages/reflex-components-radix/src/reflex_components_radix/themes/layout/spacer.pyi": "9465d40e37799336ab293bd9f573239d", + "packages/reflex-components-radix/src/reflex_components_radix/themes/layout/stack.pyi": "86bd2f0438888594ed2c27f33b1de618", "packages/reflex-components-radix/src/reflex_components_radix/themes/typography/__init__.pyi": "de7ee994f66a4c1d1a6ac2ad3370c30e", - "packages/reflex-components-radix/src/reflex_components_radix/themes/typography/blockquote.pyi": "3dd8bc1d7117b4e2b3b38438b4d6631a", - "packages/reflex-components-radix/src/reflex_components_radix/themes/typography/code.pyi": "a71f56a8c51e9b00f953d87b16724bdb", - "packages/reflex-components-radix/src/reflex_components_radix/themes/typography/heading.pyi": "47a5f03dc4c85c473026069d23b6c531", - "packages/reflex-components-radix/src/reflex_components_radix/themes/typography/link.pyi": "ced137b2820a5e156cd1846ff113cfc9", - "packages/reflex-components-radix/src/reflex_components_radix/themes/typography/text.pyi": "014444973b21272cf8c572b2913dfdf5", - "packages/reflex-components-react-player/src/reflex_components_react_player/audio.pyi": "2c3c398ec0cc1476995f316cf8d0d271", - "packages/reflex-components-react-player/src/reflex_components_react_player/react_player.pyi": "9f8631e66d64f8bed90cbfd63615a97a", - "packages/reflex-components-react-player/src/reflex_components_react_player/video.pyi": "d0efeacb8b4162e9ace79f99c03e4368", + "packages/reflex-components-radix/src/reflex_components_radix/themes/typography/blockquote.pyi": "cab479bcd17a1de02a160a128d6c79c8", + "packages/reflex-components-radix/src/reflex_components_radix/themes/typography/code.pyi": "bba3d1b425aa8b6cc33a40efa0dcb771", + "packages/reflex-components-radix/src/reflex_components_radix/themes/typography/heading.pyi": "db7f5d1ee9840c362088387383e2ee1b", + "packages/reflex-components-radix/src/reflex_components_radix/themes/typography/link.pyi": "168df16b7901bf3618745c1e9177e354", + "packages/reflex-components-radix/src/reflex_components_radix/themes/typography/text.pyi": "9bb6cc58f1ab188708e8b65189bddcaa", + "packages/reflex-components-react-player/src/reflex_components_react_player/audio.pyi": "dde60f9e0b7a2427570d88ae579d984a", + "packages/reflex-components-react-player/src/reflex_components_react_player/react_player.pyi": "2cd9d0cb2f6acd5bd0223fbdd74df232", + "packages/reflex-components-react-player/src/reflex_components_react_player/video.pyi": "18e673fcb6ef62d17f9b06d38d713b43", "packages/reflex-components-recharts/src/reflex_components_recharts/__init__.pyi": "7b8b69840a3637c1f1cac45ba815cccf", - "packages/reflex-components-recharts/src/reflex_components_recharts/cartesian.pyi": "9e99f951112c86ec7991bc80985a76b1", - "packages/reflex-components-recharts/src/reflex_components_recharts/charts.pyi": "5730b770af97f8c67d6d2d50e84fe14d", - "packages/reflex-components-recharts/src/reflex_components_recharts/general.pyi": "4097350ca05011733ce998898c6aefe7", - "packages/reflex-components-recharts/src/reflex_components_recharts/polar.pyi": "db5298160144f23ae7abcaac68e845c7", - "packages/reflex-components-recharts/src/reflex_components_recharts/recharts.pyi": "75150b01510bdacf2c97fca347c86c59", - "packages/reflex-components-sonner/src/reflex_components_sonner/toast.pyi": "dc43e142b089b1158588e999505444f6", - "reflex/__init__.pyi": "5de3d4af8ea86e9755f622510b868196", + "packages/reflex-components-recharts/src/reflex_components_recharts/cartesian.pyi": "2f1ada2312a4e9109a880df6097d4a52", + "packages/reflex-components-recharts/src/reflex_components_recharts/charts.pyi": "331c78673d708334233676cab327d15d", + "packages/reflex-components-recharts/src/reflex_components_recharts/general.pyi": "28717f060c6cff577e9a7e556c395019", + "packages/reflex-components-recharts/src/reflex_components_recharts/polar.pyi": "ce8813c1bfdd3b60e07f2dc8373ea8d8", + "packages/reflex-components-recharts/src/reflex_components_recharts/recharts.pyi": "7d1f8a97e8bdad9fbcd8543a9d9d37d7", + "packages/reflex-components-sonner/src/reflex_components_sonner/toast.pyi": "94fd94b9e127bbc98b7bf0011d6305fa", + "reflex/__init__.pyi": "3a9bb8544cbc338ffaf0a5927d9156df", "reflex/components/__init__.pyi": "f39a2af77f438fa243c58c965f19d42e", - "reflex/experimental/memo.pyi": "c10cbc554fe2ffdb3a008b59bc503936" + "reflex/experimental/memo.pyi": "5912c6017337c852fff42cdfcf95cd6c" } diff --git a/reflex/__init__.py b/reflex/__init__.py index ca246b89616..3a81b098db6 100644 --- a/reflex/__init__.py +++ b/reflex/__init__.py @@ -99,7 +99,7 @@ from reflex_components_radix.mappings import RADIX_MAPPING # noqa: E402 -_COMPONENTS_CORE_MAPPING: dict[str, list[str]] = { +_COMPONENTS_CORE_MAPPING: lazy_loader.SubmodAttrsType = { "reflex_components_core.core.banner": [ "connection_banner", "connection_modal", @@ -131,12 +131,12 @@ "reflex_components_core.core.window_events": ["window_event_listener"], } -_COMPONENTS_BASE_MAPPING: dict[str, list[str]] = { +_COMPONENTS_BASE_MAPPING: lazy_loader.SubmodAttrsType = { "reflex_components_core.base.fragment": ["fragment", "Fragment"], "reflex_components_core.base.script": ["script", "Script"], } -_ALL_COMPONENTS_MAPPING: dict[str, list[str]] = { +_ALL_COMPONENTS_MAPPING: lazy_loader.SubmodAttrsType = { "reflex_base.components.component": [ "Component", "NoSSRComponent", @@ -167,7 +167,7 @@ } _COMPONENT_NAME_TO_PATH: dict[str, str] = { - comp: path + "." + comp + lazy_loader.comp_alias(comp): lazy_loader.comp_path(path, comp) for path, comps in _ALL_COMPONENTS_MAPPING.items() for comp in comps } | { @@ -176,7 +176,7 @@ "recharts": "reflex_components_recharts", } -_MAPPING: dict[str, list[str]] = { +_MAPPING: lazy_loader.SubmodAttrsType = { "experimental": ["_x"], "admin": ["AdminDash"], "app": ["App", "UploadFile"], @@ -253,7 +253,7 @@ "compiler", "plugins", } -_SUBMOD_ATTRS: dict[str, list[str]] = _MAPPING +_SUBMOD_ATTRS: lazy_loader.SubmodAttrsType = _MAPPING _EXTRA_MAPPINGS: dict[str, str] = _COMPONENT_NAME_TO_PATH getattr, __dir__, __all__ = lazy_loader.attach( __name__,