diff --git a/benchmarks/test_benchmark_compile_pages.py b/benchmarks/test_benchmark_compile_pages.py index f232eb627..292882b74 100644 --- a/benchmarks/test_benchmark_compile_pages.py +++ b/benchmarks/test_benchmark_compile_pages.py @@ -212,7 +212,7 @@ def app_with_one_page( """ root = tmp_path_factory.mktemp("app1") - yield AppHarness.create(root=root, app_source=AppWithOnePage) # type: ignore + yield AppHarness.create(root=root, app_source=AppWithOnePage) @pytest.fixture(scope="session") @@ -276,7 +276,7 @@ def app_with_thousand_pages( yield AppHarness.create( root=root, - app_source=functools.partial( # type: ignore + app_source=functools.partial( AppWithThousandPages, render_comp=render_multiple_pages, # type: ignore ), diff --git a/docker-example/production-app-platform/Dockerfile b/docker-example/production-app-platform/Dockerfile index b0f6c69fc..3dd9f1fed 100644 --- a/docker-example/production-app-platform/Dockerfile +++ b/docker-example/production-app-platform/Dockerfile @@ -25,7 +25,7 @@ # Stage 1: init FROM python:3.11 as init -ARG uv=/root/.cargo/bin/uv +ARG uv=/root/.local/bin/uv # Install `uv` for faster package boostrapping ADD --chmod=755 https://astral.sh/uv/install.sh /install.sh diff --git a/docker-example/production-compose/Dockerfile b/docker-example/production-compose/Dockerfile index f73473df7..42345af40 100644 --- a/docker-example/production-compose/Dockerfile +++ b/docker-example/production-compose/Dockerfile @@ -4,7 +4,7 @@ # Stage 1: init FROM python:3.11 as init -ARG uv=/root/.cargo/bin/uv +ARG uv=/root/.local/bin/uv # Install `uv` for faster package boostrapping ADD --chmod=755 https://astral.sh/uv/install.sh /install.sh diff --git a/poetry.lock b/poetry.lock index 0fd0f7109..8199c975a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1350,8 +1350,8 @@ files = [ [package.dependencies] numpy = [ - {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, {version = ">=1.23.2", markers = "python_version == \"3.11\""}, + {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, {version = ">=1.22.4", markers = "python_version < \"3.11\""}, ] python-dateutil = ">=2.8.2" @@ -1669,8 +1669,8 @@ files = [ annotated-types = ">=0.6.0" pydantic-core = "2.23.4" typing-extensions = [ - {version = ">=4.12.2", markers = "python_version >= \"3.13\""}, {version = ">=4.6.1", markers = "python_version < \"3.13\""}, + {version = ">=4.12.2", markers = "python_version >= \"3.13\""}, ] [package.extras] @@ -2198,13 +2198,13 @@ reflex = ">=0.6.0a" [[package]] name = "reflex-hosting-cli" -version = "0.1.14" +version = "0.1.15" description = "Reflex Hosting CLI" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "reflex_hosting_cli-0.1.14-py3-none-any.whl", hash = "sha256:b38676a39708511801bd666e5a9788d8eb4aeb6f9196bea77a8c4c6a6c06492f"}, - {file = "reflex_hosting_cli-0.1.14.tar.gz", hash = "sha256:8c7721b87dd2ce22db110d905ee01e78e5185f0e6dd521752f70aef6cf17b39f"}, + {file = "reflex_hosting_cli-0.1.15-py3-none-any.whl", hash = "sha256:c471f5570b8797e290844edcc079241aa27457112c01188dc0f8a5ccc2364003"}, + {file = "reflex_hosting_cli-0.1.15.tar.gz", hash = "sha256:42a2a030b8bfba728cbd2c5cc37df0fcc8c2966efc649c57806c6616efb994c4"}, ] [package.dependencies] @@ -2714,13 +2714,13 @@ urllib3 = ">=1.26.0" [[package]] name = "typer" -version = "0.12.5" +version = "0.13.0" description = "Typer, build great CLIs. Easy to code. Based on Python type hints." optional = false python-versions = ">=3.7" files = [ - {file = "typer-0.12.5-py3-none-any.whl", hash = "sha256:62fe4e471711b147e3365034133904df3e235698399bc4de2b36c8579298d52b"}, - {file = "typer-0.12.5.tar.gz", hash = "sha256:f592f089bedcc8ec1b974125d64851029c3b1af145f04aca64d69410f0c9b722"}, + {file = "typer-0.13.0-py3-none-any.whl", hash = "sha256:d85fe0b777b2517cc99c8055ed735452f2659cd45e451507c76f48ce5c1d00e2"}, + {file = "typer-0.13.0.tar.gz", hash = "sha256:f1c7198347939361eec90139ffa0fd8b3df3a2259d5852a0f7400e476d95985c"}, ] [package.dependencies] @@ -3050,4 +3050,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "fe91a9b22081a48be519ed3789e40904bd358a05fd6da912566592aa8d382f31" +content-hash = "937f0cadb1a4566117dad8d0be6018ad1a8fe9aeb19c499d2a010d36ef391ee1" diff --git a/pyproject.toml b/pyproject.toml index 9e8edb0e9..20bf81d92 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "reflex" -version = "0.6.5dev1" +version = "0.6.6dev1" description = "Web apps in pure Python." license = "Apache-2.0" authors = [ @@ -49,7 +49,7 @@ wrapt = [ {version = ">=1.11.0,<2.0", python = "<3.11"}, ] packaging = ">=23.1,<25.0" -reflex-hosting-cli = ">=0.1.4,<2.0" +reflex-hosting-cli = ">=0.1.15,<2.0" charset-normalizer = ">=3.3.2,<4.0" wheel = ">=0.42.0,<1.0" build = ">=1.0.3,<2.0" diff --git a/reflex/.templates/jinja/web/pages/custom_component.js.jinja2 b/reflex/.templates/jinja/web/pages/custom_component.js.jinja2 index 210246992..222524d2d 100644 --- a/reflex/.templates/jinja/web/pages/custom_component.js.jinja2 +++ b/reflex/.templates/jinja/web/pages/custom_component.js.jinja2 @@ -8,20 +8,6 @@ {% endfor %} export const {{component.name}} = memo(({ {{-component.props|join(", ")-}} }) => { -{% if component.name == "CodeBlock" and "language" in component.props %} - if (language) { - (async () => { - try { - const module = await import(`react-syntax-highlighter/dist/cjs/languages/prism/${language}`); - SyntaxHighlighter.registerLanguage(language, module.default); - } catch (error) { - console.error(`Error importing language module for ${language}:`, error); - } - })(); - - - } -{% endif %} {% for hook in component.hooks %} {{ hook }} {% endfor %} diff --git a/reflex/__init__.py b/reflex/__init__.py index cfb971a99..3941542f2 100644 --- a/reflex/__init__.py +++ b/reflex/__init__.py @@ -298,6 +298,7 @@ _MAPPING: dict = { "components.moment": ["MomentDelta", "moment"], "config": ["Config", "DBConfig"], "constants": ["Env"], + "constants.colors": ["Color"], "event": [ "EventChain", "EventHandler", @@ -338,7 +339,7 @@ _MAPPING: dict = { ], "istate.wrappers": ["get_state"], "style": ["Style", "toggle_color_mode"], - "utils.imports": ["ImportVar"], + "utils.imports": ["ImportDict", "ImportVar"], "utils.serializers": ["serializer"], "vars": ["Var", "field", "Field"], } diff --git a/reflex/__init__.pyi b/reflex/__init__.pyi index 2d22fe497..30a498db4 100644 --- a/reflex/__init__.pyi +++ b/reflex/__init__.pyi @@ -152,6 +152,7 @@ from .components.suneditor import editor as editor from .config import Config as Config from .config import DBConfig as DBConfig from .constants import Env as Env +from .constants.colors import Color as Color from .event import EventChain as EventChain from .event import EventHandler as EventHandler from .event import background as background @@ -192,6 +193,7 @@ from .state import dynamic as dynamic from .state import var as var from .style import Style as Style from .style import toggle_color_mode as toggle_color_mode +from .utils.imports import ImportDict as ImportDict from .utils.imports import ImportVar as ImportVar from .utils.serializers import serializer as serializer from .vars import Field as Field diff --git a/reflex/base.py b/reflex/base.py index e661d3ade..692f123a8 100644 --- a/reflex/base.py +++ b/reflex/base.py @@ -130,8 +130,8 @@ class Base(BaseModel): # pyright: ignore [reportUnboundVariable] Returns: The value of the field. """ - if isinstance(key, str) and key in self.__fields__: + if isinstance(key, str): # Seems like this function signature was wrong all along? # If the user wants a field that we know of, get it and pass it off to _get_value - key = getattr(self, key) + return getattr(self, key, key) return key diff --git a/reflex/components/base/app_wrap.pyi b/reflex/components/base/app_wrap.pyi index 82edf98d3..962e70c76 100644 --- a/reflex/components/base/app_wrap.pyi +++ b/reflex/components/base/app_wrap.pyi @@ -21,7 +21,7 @@ class AppWrap(Fragment): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/base/body.pyi b/reflex/components/base/body.pyi index 6d28236fd..8a20a6c06 100644 --- a/reflex/components/base/body.pyi +++ b/reflex/components/base/body.pyi @@ -21,7 +21,7 @@ class Body(Component): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/base/document.pyi b/reflex/components/base/document.pyi index 97dacedf8..5b5e1a7f4 100644 --- a/reflex/components/base/document.pyi +++ b/reflex/components/base/document.pyi @@ -21,7 +21,7 @@ class NextDocumentLib(Component): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -68,7 +68,7 @@ class Html(NextDocumentLib): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -114,7 +114,7 @@ class DocumentHead(NextDocumentLib): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -160,7 +160,7 @@ class Main(NextDocumentLib): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -206,7 +206,7 @@ class NextScript(NextDocumentLib): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/base/error_boundary.py b/reflex/components/base/error_boundary.py index 83becc034..f328773c2 100644 --- a/reflex/components/base/error_boundary.py +++ b/reflex/components/base/error_boundary.py @@ -2,14 +2,15 @@ from __future__ import annotations -from typing import Dict, List, Tuple +from typing import Dict, Tuple -from reflex.compiler.compiler import _compile_component from reflex.components.component import Component -from reflex.components.el import div, p -from reflex.event import EventHandler +from reflex.components.datadisplay.logo import svg_logo +from reflex.components.el import a, button, details, div, h2, hr, p, pre, summary +from reflex.event import EventHandler, set_clipboard from reflex.state import FrontendEventExceptionState from reflex.vars.base import Var +from reflex.vars.function import ArgsFunctionOperation def on_error_spec( @@ -40,38 +41,7 @@ class ErrorBoundary(Component): on_error: EventHandler[on_error_spec] # Rendered instead of the children when an error is caught. - Fallback_component: Var[Component] = Var(_js_expr="Fallback")._replace( - _var_type=Component - ) - - def add_custom_code(self) -> List[str]: - """Add custom Javascript code into the page that contains this component. - - Custom code is inserted at module level, after any imports. - - Returns: - The custom code to add. - """ - fallback_container = div( - p("Ooops...Unknown Reflex error has occured:"), - p( - Var(_js_expr="error.message"), - color="red", - ), - p("Please contact the support."), - ) - - compiled_fallback = _compile_component(fallback_container) - - return [ - f""" - function Fallback({{ error, resetErrorBoundary }}) {{ - return ( - {compiled_fallback} - ); - }} - """ - ] + fallback_render: Var[Component] @classmethod def create(cls, *children, **props): @@ -86,6 +56,99 @@ class ErrorBoundary(Component): """ if "on_error" not in props: props["on_error"] = FrontendEventExceptionState.handle_frontend_exception + if "fallback_render" not in props: + props["fallback_render"] = ArgsFunctionOperation.create( + ("event_args",), + Var.create( + div( + div( + div( + h2( + "An error occurred while rendering this page.", + font_size="1.25rem", + font_weight="bold", + ), + p( + "This is an error with the application itself.", + opacity="0.75", + ), + details( + summary("Error message", padding="0.5rem"), + div( + div( + pre( + Var( + _js_expr="event_args.error.stack", + ), + ), + padding="0.5rem", + width="fit-content", + ), + width="100%", + max_height="50vh", + overflow="auto", + background="#000", + color="#fff", + border_radius="0.25rem", + ), + button( + "Copy", + on_click=set_clipboard( + Var(_js_expr="event_args.error.stack"), + ), + padding="0.35rem 0.75rem", + margin="0.5rem", + background="#fff", + color="#000", + border="1px solid #000", + border_radius="0.25rem", + font_weight="bold", + ), + ), + display="flex", + flex_direction="column", + gap="1rem", + max_width="50ch", + border="1px solid #888888", + border_radius="0.25rem", + padding="1rem", + ), + hr( + border_color="currentColor", + opacity="0.25", + ), + a( + div( + "Built with ", + svg_logo("currentColor"), + display="flex", + align_items="baseline", + justify_content="center", + font_family="monospace", + gap="0.5rem", + ), + href="https://reflex.dev", + ), + display="flex", + flex_direction="column", + gap="1rem", + ), + height="100%", + width="100%", + position="absolute", + display="flex", + align_items="center", + justify_content="center", + ) + ), + _var_type=Component, + ) + else: + props["fallback_render"] = ArgsFunctionOperation.create( + ("event_args",), + props["fallback_render"], + _var_type=Component, + ) return super().create(*children, **props) diff --git a/reflex/components/base/error_boundary.pyi b/reflex/components/base/error_boundary.pyi index 92221c97d..2e01c7da0 100644 --- a/reflex/components/base/error_boundary.pyi +++ b/reflex/components/base/error_boundary.pyi @@ -3,7 +3,7 @@ # ------------------- DO NOT EDIT ---------------------- # This file was generated by `reflex/utils/pyi_generator.py`! # ------------------------------------------------------ -from typing import Any, Dict, List, Optional, Tuple, Union, overload +from typing import Any, Dict, Optional, Tuple, Union, overload from reflex.components.component import Component from reflex.event import BASE_STATE, EventType @@ -15,19 +15,18 @@ def on_error_spec( ) -> Tuple[Var[str], Var[str]]: ... class ErrorBoundary(Component): - def add_custom_code(self) -> List[str]: ... @overload @classmethod def create( # type: ignore cls, *children, - Fallback_component: Optional[Union[Component, Var[Component]]] = None, + fallback_render: Optional[Union[Component, Var[Component]]] = None, style: Optional[Style] = None, key: Optional[Any] = None, id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -57,7 +56,7 @@ class ErrorBoundary(Component): Args: *children: The children of the component. on_error: Fired when the boundary catches an error. - Fallback_component: Rendered instead of the children when an error is caught. + fallback_render: Rendered instead of the children when an error is caught. style: The style of the component. key: A unique key for the component. id: The id for the component. diff --git a/reflex/components/base/fragment.pyi b/reflex/components/base/fragment.pyi index 2dabb0ff3..33030bc01 100644 --- a/reflex/components/base/fragment.pyi +++ b/reflex/components/base/fragment.pyi @@ -21,7 +21,7 @@ class Fragment(Component): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/base/head.pyi b/reflex/components/base/head.pyi index 5019aa2be..b01778094 100644 --- a/reflex/components/base/head.pyi +++ b/reflex/components/base/head.pyi @@ -21,7 +21,7 @@ class NextHeadLib(Component): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -67,7 +67,7 @@ class Head(NextHeadLib, MemoizationLeaf): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/base/link.pyi b/reflex/components/base/link.pyi index 02f3df43e..b48fae3a5 100644 --- a/reflex/components/base/link.pyi +++ b/reflex/components/base/link.pyi @@ -23,7 +23,7 @@ class RawLink(Component): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -78,7 +78,7 @@ class ScriptTag(Component): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/base/meta.pyi b/reflex/components/base/meta.pyi index 3053493ca..b388b4794 100644 --- a/reflex/components/base/meta.pyi +++ b/reflex/components/base/meta.pyi @@ -22,7 +22,7 @@ class Title(Component): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -73,7 +73,7 @@ class Meta(Component): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -129,7 +129,7 @@ class Description(Meta): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -185,7 +185,7 @@ class Image(Meta): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/base/script.pyi b/reflex/components/base/script.pyi index 9e8d66aea..1633fdb70 100644 --- a/reflex/components/base/script.pyi +++ b/reflex/components/base/script.pyi @@ -28,7 +28,7 @@ class Script(Component): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/component.py b/reflex/components/component.py index 2b934277b..face5d557 100644 --- a/reflex/components/component.py +++ b/reflex/components/component.py @@ -229,7 +229,7 @@ class Component(BaseComponent, ABC): _rename_props: Dict[str, str] = {} # custom attribute - custom_attrs: Dict[str, Union[Var, str]] = {} + custom_attrs: Dict[str, Union[Var, Any]] = {} # When to memoize this component and its children. _memoization_mode: MemoizationMode = MemoizationMode() @@ -1450,7 +1450,7 @@ class Component(BaseComponent, ABC): """ ref = self.get_ref() if ref is not None: - return f"const {ref} = useRef(null); {str(Var(_js_expr=ref).as_ref())} = {ref};" + return f"const {ref} = useRef(null); {str(Var(_js_expr=ref)._as_ref())} = {ref};" def _get_vars_hooks(self) -> dict[str, None]: """Get the hooks required by vars referenced in this component. diff --git a/reflex/components/core/banner.pyi b/reflex/components/core/banner.pyi index c6b5cd09b..3296b84ee 100644 --- a/reflex/components/core/banner.pyi +++ b/reflex/components/core/banner.pyi @@ -88,7 +88,7 @@ class ConnectionToaster(Toaster): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -148,7 +148,7 @@ class ConnectionBanner(Component): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -187,7 +187,7 @@ class ConnectionModal(Component): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -227,7 +227,7 @@ class WifiOffPulse(Icon): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -300,7 +300,7 @@ class ConnectionPulser(Div): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/core/client_side_routing.pyi b/reflex/components/core/client_side_routing.pyi index 90e629ab9..bb853e2c7 100644 --- a/reflex/components/core/client_side_routing.pyi +++ b/reflex/components/core/client_side_routing.pyi @@ -25,7 +25,7 @@ class ClientSideRouting(Component): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -74,7 +74,7 @@ class Default404Page(Component): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/core/clipboard.pyi b/reflex/components/core/clipboard.pyi index fc49cf64b..69e0e866d 100644 --- a/reflex/components/core/clipboard.pyi +++ b/reflex/components/core/clipboard.pyi @@ -26,7 +26,7 @@ class Clipboard(Fragment): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/core/cond.py b/reflex/components/core/cond.py index e0c47f0fe..5b6ee2a7f 100644 --- a/reflex/components/core/cond.py +++ b/reflex/components/core/cond.py @@ -171,6 +171,14 @@ def cond(condition: Any, c1: Any, c2: Any = None) -> Component | Var: ) +@overload +def color_mode_cond(light: Component, dark: Component | None = None) -> Component: ... # type: ignore + + +@overload +def color_mode_cond(light: Any, dark: Any = None) -> Var: ... + + def color_mode_cond(light: Any, dark: Any = None) -> Var | Component: """Create a component or Prop based on color_mode. diff --git a/reflex/components/core/debounce.pyi b/reflex/components/core/debounce.pyi index e5d89cd90..9e61af6e3 100644 --- a/reflex/components/core/debounce.pyi +++ b/reflex/components/core/debounce.pyi @@ -30,7 +30,7 @@ class DebounceInput(Component): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_change: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/core/html.pyi b/reflex/components/core/html.pyi index f89d665c6..ffa7f88bb 100644 --- a/reflex/components/core/html.pyi +++ b/reflex/components/core/html.pyi @@ -48,7 +48,7 @@ class Html(Div): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/core/upload.py b/reflex/components/core/upload.py index fe8845e8f..33dfae40f 100644 --- a/reflex/components/core/upload.py +++ b/reflex/components/core/upload.py @@ -5,6 +5,7 @@ from __future__ import annotations from pathlib import Path from typing import Any, Callable, ClassVar, Dict, List, Optional, Tuple +from reflex.components.base.fragment import Fragment from reflex.components.component import ( Component, ComponentNamespace, @@ -181,6 +182,13 @@ class UploadFilesProvider(Component): tag = "UploadFilesProvider" +class GhostUpload(Fragment): + """A ghost upload component.""" + + # Fired when files are dropped. + on_drop: EventHandler[_on_drop_spec] + + class Upload(MemoizationLeaf): """A file upload component.""" @@ -276,8 +284,8 @@ class Upload(MemoizationLeaf): root_props_unique_name = get_unique_variable_name() event_var, callback_str = StatefulComponent._get_memoized_event_triggers( - Box.create(on_click=upload_props["on_drop"]) # type: ignore - )["on_click"] + GhostUpload.create(on_drop=upload_props["on_drop"]) + )["on_drop"] upload_props["on_drop"] = event_var diff --git a/reflex/components/core/upload.pyi b/reflex/components/core/upload.pyi index 3c7b5b160..6238ff9cb 100644 --- a/reflex/components/core/upload.pyi +++ b/reflex/components/core/upload.pyi @@ -6,6 +6,7 @@ from pathlib import Path from typing import Any, ClassVar, Dict, List, Optional, Union, overload +from reflex.components.base.fragment import Fragment from reflex.components.component import Component, ComponentNamespace, MemoizationLeaf from reflex.constants import Dirs from reflex.event import BASE_STATE, CallableEventSpec, EventSpec, EventType @@ -49,7 +50,7 @@ class UploadFilesProvider(Component): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -84,6 +85,56 @@ class UploadFilesProvider(Component): """ ... +class GhostUpload(Fragment): + @overload + @classmethod + def create( # type: ignore + cls, + *children, + style: Optional[Style] = None, + key: Optional[Any] = None, + id: Optional[Any] = None, + class_name: Optional[Any] = None, + autofocus: Optional[bool] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, + on_blur: Optional[EventType[[], BASE_STATE]] = None, + on_click: Optional[EventType[[], BASE_STATE]] = None, + on_context_menu: Optional[EventType[[], BASE_STATE]] = None, + on_double_click: Optional[EventType[[], BASE_STATE]] = None, + on_drop: Optional[ + Union[EventType[[], BASE_STATE], EventType[[Any], BASE_STATE]] + ] = None, + on_focus: Optional[EventType[[], BASE_STATE]] = None, + on_mount: Optional[EventType[[], BASE_STATE]] = None, + on_mouse_down: Optional[EventType[[], BASE_STATE]] = None, + on_mouse_enter: Optional[EventType[[], BASE_STATE]] = None, + on_mouse_leave: Optional[EventType[[], BASE_STATE]] = None, + on_mouse_move: Optional[EventType[[], BASE_STATE]] = None, + on_mouse_out: Optional[EventType[[], BASE_STATE]] = None, + on_mouse_over: Optional[EventType[[], BASE_STATE]] = None, + on_mouse_up: Optional[EventType[[], BASE_STATE]] = None, + on_scroll: Optional[EventType[[], BASE_STATE]] = None, + on_unmount: Optional[EventType[[], BASE_STATE]] = None, + **props, + ) -> "GhostUpload": + """Create the component. + + Args: + *children: The children of the component. + on_drop: Fired when files are dropped. + style: The style of the component. + key: A unique key for the component. + id: The id for the component. + class_name: The class name for the component. + autofocus: Whether the component should take the focus once the page is loaded + custom_attrs: custom attribute + **props: The props of the component. + + Returns: + The component. + """ + ... + class Upload(MemoizationLeaf): is_used: ClassVar[bool] = False @@ -106,7 +157,7 @@ class Upload(MemoizationLeaf): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -174,7 +225,7 @@ class StyledUpload(Upload): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -242,7 +293,7 @@ class UploadNamespace(ComponentNamespace): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/datadisplay/code.py b/reflex/components/datadisplay/code.py index 53761284a..9d5052df1 100644 --- a/reflex/components/datadisplay/code.py +++ b/reflex/components/datadisplay/code.py @@ -8,13 +8,14 @@ from typing import ClassVar, Dict, Literal, Optional, Union from reflex.components.component import Component, ComponentNamespace from reflex.components.core.cond import color_mode_cond from reflex.components.lucide.icon import Icon +from reflex.components.markdown.markdown import _LANGUAGE, MarkdownComponentMap from reflex.components.radix.themes.components.button import Button from reflex.components.radix.themes.layout.box import Box from reflex.constants.colors import Color from reflex.event import set_clipboard from reflex.style import Style from reflex.utils import console, format -from reflex.utils.imports import ImportDict, ImportVar +from reflex.utils.imports import ImportVar from reflex.vars.base import LiteralVar, Var, VarData LiteralCodeLanguage = Literal[ @@ -378,7 +379,7 @@ for theme_name in dir(Theme): setattr(Theme, theme_name, getattr(Theme, theme_name)._replace(_var_type=Theme)) -class CodeBlock(Component): +class CodeBlock(Component, MarkdownComponentMap): """A code block.""" library = "react-syntax-highlighter@15.6.1" @@ -417,39 +418,6 @@ class CodeBlock(Component): # A custom copy button to override the default one. copy_button: Optional[Union[bool, Component]] = None - def add_imports(self) -> ImportDict: - """Add imports for the CodeBlock component. - - Returns: - The import dict. - """ - imports_: ImportDict = {} - - if ( - self.language is not None - and (language_without_quotes := str(self.language).replace('"', "")) - in LiteralCodeLanguage.__args__ # type: ignore - ): - imports_[ - f"react-syntax-highlighter/dist/cjs/languages/prism/{language_without_quotes}" - ] = [ - ImportVar( - tag=format.to_camel_case(language_without_quotes), - is_default=True, - install=False, - ) - ] - - return imports_ - - def _get_custom_code(self) -> Optional[str]: - if ( - self.language is not None - and (language_without_quotes := str(self.language).replace('"', "")) - in LiteralCodeLanguage.__args__ # type: ignore - ): - return f"{self.alias}.registerLanguage('{language_without_quotes}', {format.to_camel_case(language_without_quotes)})" - @classmethod def create( cls, @@ -534,8 +502,8 @@ class CodeBlock(Component): theme = self.theme - out.add_props(style=theme).remove_props("theme", "code").add_props( - children=self.code + out.add_props(style=theme).remove_props("theme", "code", "language").add_props( + children=self.code, language=_LANGUAGE ) return out @@ -543,6 +511,46 @@ class CodeBlock(Component): def _exclude_props(self) -> list[str]: return ["can_copy", "copy_button"] + @classmethod + def _get_language_registration_hook(cls) -> str: + """Get the hook to register the language. + + Returns: + The hook to register the language. + """ + return f""" + if ({str(_LANGUAGE)}) {{ + (async () => {{ + try {{ + const module = await import(`react-syntax-highlighter/dist/cjs/languages/prism/${{{str(_LANGUAGE)}}}`); + SyntaxHighlighter.registerLanguage({str(_LANGUAGE)}, module.default); + }} catch (error) {{ + console.error(`Error importing language module for ${{{str(_LANGUAGE)}}}:`, error); + }} + }})(); + }} +""" + + @classmethod + def get_component_map_custom_code(cls) -> str: + """Get the custom code for the component. + + Returns: + The custom code for the component. + """ + return cls._get_language_registration_hook() + + def add_hooks(self) -> list[str | Var]: + """Add hooks for the component. + + Returns: + The hooks for the component. + """ + return [ + f"const {str(_LANGUAGE)} = {str(self.language)}", + self._get_language_registration_hook(), + ] + class CodeblockNamespace(ComponentNamespace): """Namespace for the CodeBlock component.""" diff --git a/reflex/components/datadisplay/code.pyi b/reflex/components/datadisplay/code.pyi index eadcb524f..da89195ce 100644 --- a/reflex/components/datadisplay/code.pyi +++ b/reflex/components/datadisplay/code.pyi @@ -7,10 +7,10 @@ import dataclasses from typing import Any, ClassVar, Dict, Literal, Optional, Union, overload from reflex.components.component import Component, ComponentNamespace +from reflex.components.markdown.markdown import MarkdownComponentMap from reflex.constants.colors import Color from reflex.event import BASE_STATE, EventType from reflex.style import Style -from reflex.utils.imports import ImportDict from reflex.vars.base import Var LiteralCodeLanguage = Literal[ @@ -349,8 +349,7 @@ for theme_name in dir(Theme): continue setattr(Theme, theme_name, getattr(Theme, theme_name)._replace(_var_type=Theme)) -class CodeBlock(Component): - def add_imports(self) -> ImportDict: ... +class CodeBlock(Component, MarkdownComponentMap): @overload @classmethod def create( # type: ignore @@ -938,7 +937,7 @@ class CodeBlock(Component): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -984,6 +983,9 @@ class CodeBlock(Component): ... def add_style(self): ... + @classmethod + def get_component_map_custom_code(cls) -> str: ... + def add_hooks(self) -> list[str | Var]: ... class CodeblockNamespace(ComponentNamespace): themes = Theme @@ -1573,7 +1575,7 @@ class CodeblockNamespace(ComponentNamespace): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/datadisplay/dataeditor.pyi b/reflex/components/datadisplay/dataeditor.pyi index dbf79ef7b..aa4b3b2e8 100644 --- a/reflex/components/datadisplay/dataeditor.pyi +++ b/reflex/components/datadisplay/dataeditor.pyi @@ -182,7 +182,7 @@ class DataEditor(NoSSRComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_cell_activated: Optional[ Union[EventType[[], BASE_STATE], EventType[[tuple[int, int]], BASE_STATE]] diff --git a/reflex/components/datadisplay/logo.py b/reflex/components/datadisplay/logo.py index beb9b9d10..d960b8cee 100644 --- a/reflex/components/datadisplay/logo.py +++ b/reflex/components/datadisplay/logo.py @@ -1,22 +1,23 @@ """A Reflex logo component.""" +from typing import Union + import reflex as rx -def logo(**props): - """A Reflex logo. +def svg_logo(color: Union[str, rx.Var[str]] = rx.color_mode_cond("#110F1F", "white")): + """A Reflex logo SVG. Args: - **props: The props to pass to the component. + color: The color of the logo. Returns: - The logo component. + The Reflex logo SVG. """ def logo_path(d): return rx.el.svg.path( d=d, - fill=rx.color_mode_cond("#110F1F", "white"), ) paths = [ @@ -28,18 +29,30 @@ def logo(**props): "M47.04 4.8799V0.399902H49.28V4.8799H47.04ZM53.76 4.8799V0.399902H56V4.8799H53.76ZM49.28 7.1199V4.8799H53.76V7.1199H49.28ZM47.04 11.5999V7.1199H49.28V11.5999H47.04ZM53.76 11.5999V7.1199H56V11.5999H53.76Z", ] + return rx.el.svg( + *[logo_path(d) for d in paths], + width="56", + height="12", + viewBox="0 0 56 12", + fill=color, + xmlns="http://www.w3.org/2000/svg", + ) + + +def logo(**props): + """A Reflex logo. + + Args: + **props: The props to pass to the component. + + Returns: + The logo component. + """ return rx.center( rx.link( rx.hstack( "Built with ", - rx.el.svg( - *[logo_path(d) for d in paths], - width="56", - height="12", - viewBox="0 0 56 12", - fill="none", - xmlns="http://www.w3.org/2000/svg", - ), + svg_logo(), text_align="center", align="center", padding="1em", diff --git a/reflex/components/datadisplay/shiki_code_block.py b/reflex/components/datadisplay/shiki_code_block.py index 4a3e05d0e..2b4e1f506 100644 --- a/reflex/components/datadisplay/shiki_code_block.py +++ b/reflex/components/datadisplay/shiki_code_block.py @@ -12,6 +12,7 @@ from reflex.components.core.colors import color from reflex.components.core.cond import color_mode_cond from reflex.components.el.elements.forms import Button from reflex.components.lucide.icon import Icon +from reflex.components.markdown.markdown import MarkdownComponentMap from reflex.components.props import NoExtrasAllowedProps from reflex.components.radix.themes.layout.box import Box from reflex.event import run_script, set_clipboard @@ -528,7 +529,7 @@ class ShikiJsTransformer(ShikiBaseTransformers): super().__init__(**kwargs) -class ShikiCodeBlock(Component): +class ShikiCodeBlock(Component, MarkdownComponentMap): """A Code block.""" library = "/components/shiki/code" diff --git a/reflex/components/datadisplay/shiki_code_block.pyi b/reflex/components/datadisplay/shiki_code_block.pyi index 543030daa..92546ee4f 100644 --- a/reflex/components/datadisplay/shiki_code_block.pyi +++ b/reflex/components/datadisplay/shiki_code_block.pyi @@ -7,6 +7,7 @@ from typing import Any, Dict, Literal, Optional, Union, overload from reflex.base import Base from reflex.components.component import Component, ComponentNamespace +from reflex.components.markdown.markdown import MarkdownComponentMap from reflex.components.props import NoExtrasAllowedProps from reflex.event import BASE_STATE, EventType from reflex.style import Style @@ -350,7 +351,7 @@ class ShikiJsTransformer(ShikiBaseTransformers): fns: list[FunctionStringVar] style: Optional[Style] -class ShikiCodeBlock(Component): +class ShikiCodeBlock(Component, MarkdownComponentMap): @overload @classmethod def create( # type: ignore @@ -926,7 +927,7 @@ class ShikiCodeBlock(Component): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -1553,7 +1554,7 @@ class ShikiHighLevelCodeBlock(ShikiCodeBlock): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -2183,7 +2184,7 @@ class CodeblockNamespace(ComponentNamespace): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/dynamic.py b/reflex/components/dynamic.py index c0e172224..ce59c3f30 100644 --- a/reflex/components/dynamic.py +++ b/reflex/components/dynamic.py @@ -111,9 +111,9 @@ def load_dynamic_serializer(): if line.startswith("import "): if 'from "$/' in line or 'from "/' in line: module_code_lines[ix] = ( - line.replace("import ", "const ", 1).replace( - " from ", " = window['__reflex'][", 1 - ) + line.replace("import ", "const ", 1) + .replace(" as ", ": ") + .replace(" from ", " = window['__reflex'][", 1) + "]" ) else: diff --git a/reflex/components/el/element.pyi b/reflex/components/el/element.pyi index 18b4bc2ba..de5dee956 100644 --- a/reflex/components/el/element.pyi +++ b/reflex/components/el/element.pyi @@ -21,7 +21,7 @@ class Element(Component): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/el/elements/base.pyi b/reflex/components/el/elements/base.pyi index 4994e77c8..4d1d2c5c4 100644 --- a/reflex/components/el/elements/base.pyi +++ b/reflex/components/el/elements/base.pyi @@ -45,7 +45,7 @@ class BaseHTML(Element): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/el/elements/forms.py b/reflex/components/el/elements/forms.py index 4caf14b41..a84718de1 100644 --- a/reflex/components/el/elements/forms.py +++ b/reflex/components/el/elements/forms.py @@ -239,13 +239,13 @@ class Form(BaseHTML): # when ref start with refs_ it's an array of refs, so we need different method # to collect data if ref.startswith("refs_"): - ref_var = Var(_js_expr=ref[:-3]).as_ref() + ref_var = Var(_js_expr=ref[:-3])._as_ref() form_refs[ref[len("refs_") : -3]] = Var( _js_expr=f"getRefValues({str(ref_var)})", _var_data=VarData.merge(ref_var._get_all_var_data()), ) else: - ref_var = Var(_js_expr=ref).as_ref() + ref_var = Var(_js_expr=ref)._as_ref() form_refs[ref[4:]] = Var( _js_expr=f"getRefValue({str(ref_var)})", _var_data=VarData.merge(ref_var._get_all_var_data()), diff --git a/reflex/components/el/elements/forms.pyi b/reflex/components/el/elements/forms.pyi index fca2ffaa1..f494d8076 100644 --- a/reflex/components/el/elements/forms.pyi +++ b/reflex/components/el/elements/forms.pyi @@ -70,7 +70,7 @@ class Button(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -167,7 +167,7 @@ class Datalist(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -232,7 +232,7 @@ class Fieldset(Element): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -323,7 +323,7 @@ class Form(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -473,7 +473,7 @@ class Input(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[ Union[EventType[[], BASE_STATE], EventType[[str], BASE_STATE]] ] = None, @@ -620,7 +620,7 @@ class Label(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -708,7 +708,7 @@ class Legend(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -801,7 +801,7 @@ class Meter(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -896,7 +896,7 @@ class Optgroup(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -988,7 +988,7 @@ class Option(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -1081,7 +1081,7 @@ class Output(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -1173,7 +1173,7 @@ class Progress(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -1272,7 +1272,7 @@ class Select(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_change: Optional[ Union[EventType[[], BASE_STATE], EventType[[str], BASE_STATE]] @@ -1392,7 +1392,7 @@ class Textarea(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[ Union[EventType[[], BASE_STATE], EventType[[str], BASE_STATE]] ] = None, diff --git a/reflex/components/el/elements/inline.pyi b/reflex/components/el/elements/inline.pyi index f2cbcdb06..1b4af4fc8 100644 --- a/reflex/components/el/elements/inline.pyi +++ b/reflex/components/el/elements/inline.pyi @@ -57,7 +57,7 @@ class A(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -152,7 +152,7 @@ class Abbr(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -238,7 +238,7 @@ class B(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -324,7 +324,7 @@ class Bdi(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -410,7 +410,7 @@ class Bdo(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -496,7 +496,7 @@ class Br(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -582,7 +582,7 @@ class Cite(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -668,7 +668,7 @@ class Code(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -755,7 +755,7 @@ class Data(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -842,7 +842,7 @@ class Dfn(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -928,7 +928,7 @@ class Em(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -1014,7 +1014,7 @@ class I(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -1100,7 +1100,7 @@ class Kbd(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -1186,7 +1186,7 @@ class Mark(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -1273,7 +1273,7 @@ class Q(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -1360,7 +1360,7 @@ class Rp(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -1446,7 +1446,7 @@ class Rt(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -1532,7 +1532,7 @@ class Ruby(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -1618,7 +1618,7 @@ class S(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -1704,7 +1704,7 @@ class Samp(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -1790,7 +1790,7 @@ class Small(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -1876,7 +1876,7 @@ class Span(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -1962,7 +1962,7 @@ class Strong(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -2048,7 +2048,7 @@ class Sub(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -2134,7 +2134,7 @@ class Sup(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -2221,7 +2221,7 @@ class Time(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -2308,7 +2308,7 @@ class U(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -2394,7 +2394,7 @@ class Wbr(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/el/elements/media.pyi b/reflex/components/el/elements/media.pyi index f9bae4f56..edaf1228e 100644 --- a/reflex/components/el/elements/media.pyi +++ b/reflex/components/el/elements/media.pyi @@ -61,7 +61,7 @@ class Area(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -168,7 +168,7 @@ class Audio(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -280,7 +280,7 @@ class Img(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -380,7 +380,7 @@ class Map(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -472,7 +472,7 @@ class Track(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -577,7 +577,7 @@ class Video(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -675,7 +675,7 @@ class Embed(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -774,7 +774,7 @@ class Iframe(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -874,7 +874,7 @@ class Object(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -965,7 +965,7 @@ class Picture(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -1051,7 +1051,7 @@ class Portal(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -1142,7 +1142,7 @@ class Source(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -1236,7 +1236,7 @@ class Svg(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -1332,7 +1332,7 @@ class Text(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -1430,7 +1430,7 @@ class Line(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -1525,7 +1525,7 @@ class Circle(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -1620,7 +1620,7 @@ class Ellipse(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -1718,7 +1718,7 @@ class Rect(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -1813,7 +1813,7 @@ class Polygon(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -1901,7 +1901,7 @@ class Defs(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -1994,7 +1994,7 @@ class LinearGradient(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -2096,7 +2096,7 @@ class RadialGradient(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -2198,7 +2198,7 @@ class Stop(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -2288,7 +2288,7 @@ class Path(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -2388,7 +2388,7 @@ class SVG(ComponentNamespace): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/el/elements/metadata.pyi b/reflex/components/el/elements/metadata.pyi index ba934b767..5af92e2b2 100644 --- a/reflex/components/el/elements/metadata.pyi +++ b/reflex/components/el/elements/metadata.pyi @@ -49,7 +49,7 @@ class Base(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -135,7 +135,7 @@ class Head(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -234,7 +234,7 @@ class Link(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -333,7 +333,7 @@ class Meta(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -399,7 +399,7 @@ class Title(Element): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -446,7 +446,7 @@ class StyleEl(Element): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/el/elements/other.pyi b/reflex/components/el/elements/other.pyi index 6f5ca69e0..3d65af647 100644 --- a/reflex/components/el/elements/other.pyi +++ b/reflex/components/el/elements/other.pyi @@ -47,7 +47,7 @@ class Details(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -135,7 +135,7 @@ class Dialog(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -222,7 +222,7 @@ class Summary(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -308,7 +308,7 @@ class Slot(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -394,7 +394,7 @@ class Template(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -480,7 +480,7 @@ class Math(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -567,7 +567,7 @@ class Html(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/el/elements/scripts.pyi b/reflex/components/el/elements/scripts.pyi index 56b6aff23..6f03c20cb 100644 --- a/reflex/components/el/elements/scripts.pyi +++ b/reflex/components/el/elements/scripts.pyi @@ -46,7 +46,7 @@ class Canvas(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -132,7 +132,7 @@ class Noscript(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -231,7 +231,7 @@ class Script(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/el/elements/sectioning.pyi b/reflex/components/el/elements/sectioning.pyi index 7a468dc58..e34d53ee2 100644 --- a/reflex/components/el/elements/sectioning.pyi +++ b/reflex/components/el/elements/sectioning.pyi @@ -46,7 +46,7 @@ class Body(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -132,7 +132,7 @@ class Address(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -218,7 +218,7 @@ class Article(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -304,7 +304,7 @@ class Aside(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -390,7 +390,7 @@ class Footer(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -476,7 +476,7 @@ class Header(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -562,7 +562,7 @@ class H1(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -648,7 +648,7 @@ class H2(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -734,7 +734,7 @@ class H3(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -820,7 +820,7 @@ class H4(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -906,7 +906,7 @@ class H5(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -992,7 +992,7 @@ class H6(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -1078,7 +1078,7 @@ class Main(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -1164,7 +1164,7 @@ class Nav(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -1250,7 +1250,7 @@ class Section(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/el/elements/tables.pyi b/reflex/components/el/elements/tables.pyi index 116417f3f..b0495009d 100644 --- a/reflex/components/el/elements/tables.pyi +++ b/reflex/components/el/elements/tables.pyi @@ -47,7 +47,7 @@ class Caption(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -136,7 +136,7 @@ class Col(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -226,7 +226,7 @@ class Colgroup(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -316,7 +316,7 @@ class Table(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -405,7 +405,7 @@ class Tbody(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -496,7 +496,7 @@ class Td(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -587,7 +587,7 @@ class Tfoot(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -679,7 +679,7 @@ class Th(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -771,7 +771,7 @@ class Thead(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -859,7 +859,7 @@ class Tr(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/el/elements/typography.pyi b/reflex/components/el/elements/typography.pyi index 86a10cd37..b28af1c40 100644 --- a/reflex/components/el/elements/typography.pyi +++ b/reflex/components/el/elements/typography.pyi @@ -47,7 +47,7 @@ class Blockquote(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -134,7 +134,7 @@ class Dd(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -220,7 +220,7 @@ class Div(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -306,7 +306,7 @@ class Dl(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -392,7 +392,7 @@ class Dt(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -478,7 +478,7 @@ class Figcaption(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -565,7 +565,7 @@ class Hr(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -652,7 +652,7 @@ class Li(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -739,7 +739,7 @@ class Menu(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -829,7 +829,7 @@ class Ol(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -918,7 +918,7 @@ class P(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -1004,7 +1004,7 @@ class Pre(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -1090,7 +1090,7 @@ class Ul(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -1178,7 +1178,7 @@ class Ins(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -1268,7 +1268,7 @@ class Del(BaseHTML): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/gridjs/datatable.pyi b/reflex/components/gridjs/datatable.pyi index 0e4b3ad17..f3f732db3 100644 --- a/reflex/components/gridjs/datatable.pyi +++ b/reflex/components/gridjs/datatable.pyi @@ -22,7 +22,7 @@ class Gridjs(Component): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -74,7 +74,7 @@ class DataTable(Gridjs): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/lucide/icon.pyi b/reflex/components/lucide/icon.pyi index 0ee3b2c03..7f59edec5 100644 --- a/reflex/components/lucide/icon.pyi +++ b/reflex/components/lucide/icon.pyi @@ -21,7 +21,7 @@ class LucideIconComponent(Component): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -68,7 +68,7 @@ class Icon(LucideIconComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/markdown/markdown.py b/reflex/components/markdown/markdown.py index b790bf7a1..376cb8bd6 100644 --- a/reflex/components/markdown/markdown.py +++ b/reflex/components/markdown/markdown.py @@ -2,25 +2,18 @@ from __future__ import annotations +import dataclasses import textwrap from functools import lru_cache from hashlib import md5 -from typing import Any, Callable, Dict, Union +from typing import Any, Callable, Dict, Sequence, Union from reflex.components.component import Component, CustomComponent -from reflex.components.radix.themes.layout.list import ( - ListItem, - OrderedList, - UnorderedList, -) -from reflex.components.radix.themes.typography.heading import Heading -from reflex.components.radix.themes.typography.link import Link -from reflex.components.radix.themes.typography.text import Text from reflex.components.tags.tag import Tag from reflex.utils import types from reflex.utils.imports import ImportDict, ImportVar from reflex.vars.base import LiteralVar, Var -from reflex.vars.function import ARRAY_ISARRAY +from reflex.vars.function import ARRAY_ISARRAY, ArgsFunctionOperation, DestructuredArg from reflex.vars.number import ternary_operation # Special vars used in the component map. @@ -28,6 +21,7 @@ _CHILDREN = Var(_js_expr="children", _var_type=str) _PROPS = Var(_js_expr="...props") _PROPS_IN_TAG = Var(_js_expr="{...props}") _MOCK_ARG = Var(_js_expr="", _var_type=str) +_LANGUAGE = Var(_js_expr="_language", _var_type=str) # Special remark plugins. _REMARK_MATH = Var(_js_expr="remarkMath") @@ -53,7 +47,15 @@ def get_base_component_map() -> dict[str, Callable]: The base component map. """ from reflex.components.datadisplay.code import CodeBlock + from reflex.components.radix.themes.layout.list import ( + ListItem, + OrderedList, + UnorderedList, + ) from reflex.components.radix.themes.typography.code import Code + from reflex.components.radix.themes.typography.heading import Heading + from reflex.components.radix.themes.typography.link import Link + from reflex.components.radix.themes.typography.text import Text return { "h1": lambda value: Heading.create(value, as_="h1", size="6", margin_y="0.5em"), @@ -74,6 +76,67 @@ def get_base_component_map() -> dict[str, Callable]: } +@dataclasses.dataclass() +class MarkdownComponentMap: + """Mixin class for handling custom component maps in Markdown components.""" + + _explicit_return: bool = dataclasses.field(default=False) + + @classmethod + def get_component_map_custom_code(cls) -> str: + """Get the custom code for the component map. + + Returns: + The custom code for the component map. + """ + return "" + + @classmethod + def create_map_fn_var( + cls, + fn_body: Var | None = None, + fn_args: Sequence[str] | None = None, + explicit_return: bool | None = None, + ) -> Var: + """Create a function Var for the component map. + + Args: + fn_body: The formatted component as a string. + fn_args: The function arguments. + explicit_return: Whether to use explicit return syntax. + + Returns: + The function Var for the component map. + """ + fn_args = fn_args or cls.get_fn_args() + fn_body = fn_body if fn_body is not None else cls.get_fn_body() + explicit_return = explicit_return or cls._explicit_return + + return ArgsFunctionOperation.create( + args_names=(DestructuredArg(fields=tuple(fn_args)),), + return_expr=fn_body, + explicit_return=explicit_return, + ) + + @classmethod + def get_fn_args(cls) -> Sequence[str]: + """Get the function arguments for the component map. + + Returns: + The function arguments as a list of strings. + """ + return ["node", _CHILDREN._js_expr, _PROPS._js_expr] + + @classmethod + def get_fn_body(cls) -> Var: + """Get the function body for the component map. + + Returns: + The function body as a string. + """ + return Var(_js_expr="undefined", _var_type=None) + + class Markdown(Component): """A markdown component.""" @@ -153,9 +216,6 @@ class Markdown(Component): Returns: The imports for the markdown component. """ - from reflex.components.datadisplay.code import CodeBlock, Theme - from reflex.components.radix.themes.typography.code import Code - return [ { "": "katex/dist/katex.min.css", @@ -179,10 +239,71 @@ class Markdown(Component): component(_MOCK_ARG)._get_all_imports() # type: ignore for component in self.component_map.values() ], - CodeBlock.create(theme=Theme.light)._get_imports(), - Code.create()._get_imports(), ] + def _get_tag_map_fn_var(self, tag: str) -> Var: + return self._get_map_fn_var_from_children(self.get_component(tag), tag) + + def format_component_map(self) -> dict[str, Var]: + """Format the component map for rendering. + + Returns: + The formatted component map. + """ + components = { + tag: self._get_tag_map_fn_var(tag) + for tag in self.component_map + if tag not in ("code", "codeblock") + } + + # Separate out inline code and code blocks. + components["code"] = self._get_inline_code_fn_var() + + return components + + def _get_inline_code_fn_var(self) -> Var: + """Get the function variable for inline code. + + This function creates a Var that represents a function to handle + both inline code and code blocks in markdown. + + Returns: + The Var for inline code. + """ + # Get any custom code from the codeblock and code components. + custom_code_list = self._get_map_fn_custom_code_from_children( + self.get_component("codeblock") + ) + custom_code_list.extend( + self._get_map_fn_custom_code_from_children(self.get_component("code")) + ) + + codeblock_custom_code = "\n".join(custom_code_list) + + # Format the code to handle inline and block code. + formatted_code = f""" +const match = (className || '').match(/language-(?.*)/); +const {str(_LANGUAGE)} = match ? match[1] : ''; +{codeblock_custom_code}; + return inline ? ( + {self.format_component("code")} + ) : ( + {self.format_component("codeblock", language=_LANGUAGE)} + ); + """.replace("\n", " ") + + return MarkdownComponentMap.create_map_fn_var( + fn_args=( + "node", + "inline", + "className", + _CHILDREN._js_expr, + _PROPS._js_expr, + ), + fn_body=Var(_js_expr=formatted_code), + explicit_return=True, + ) + def get_component(self, tag: str, **props) -> Component: """Get the component for a tag and props. @@ -239,43 +360,53 @@ class Markdown(Component): """ return str(self.get_component(tag, **props)).replace("\n", "") - def format_component_map(self) -> dict[str, Var]: - """Format the component map for rendering. + def _get_map_fn_var_from_children(self, component: Component, tag: str) -> Var: + """Create a function Var for the component map for the specified tag. + + Args: + component: The component to check for custom code. + tag: The tag of the component. Returns: - The formatted component map. + The function Var for the component map. """ - components = { - tag: Var( - _js_expr=f"(({{node, {_CHILDREN._js_expr}, {_PROPS._js_expr}}}) => ({self.format_component(tag)}))" - ) - for tag in self.component_map - } - - # Separate out inline code and code blocks. - components["code"] = Var( - _js_expr=f"""(({{node, inline, className, {_CHILDREN._js_expr}, {_PROPS._js_expr}}}) => {{ - const match = (className || '').match(/language-(?.*)/); - const language = match ? match[1] : ''; - if (language) {{ - (async () => {{ - try {{ - const module = await import(`react-syntax-highlighter/dist/cjs/languages/prism/${{language}}`); - SyntaxHighlighter.registerLanguage(language, module.default); - }} catch (error) {{ - console.error(`Error importing language module for ${{language}}:`, error); - }} - }})(); - }} - return inline ? ( - {self.format_component("code")} - ) : ( - {self.format_component("codeblock", language=Var(_js_expr="language", _var_type=str))} - ); - }})""".replace("\n", " ") + formatted_component = Var( + _js_expr=f"({self.format_component(tag)})", _var_type=str ) + if isinstance(component, MarkdownComponentMap): + return component.create_map_fn_var(fn_body=formatted_component) - return components + # fallback to the default fn Var creation if the component is not a MarkdownComponentMap. + return MarkdownComponentMap.create_map_fn_var(fn_body=formatted_component) + + def _get_map_fn_custom_code_from_children(self, component) -> list[str]: + """Recursively get markdown custom code from children components. + + Args: + component: The component to check for custom code. + + Returns: + A list of markdown custom code strings. + """ + custom_code_list = [] + if isinstance(component, MarkdownComponentMap): + custom_code_list.append(component.get_component_map_custom_code()) + + # If the component is a custom component(rx.memo), obtain the underlining + # component and get the custom code from the children. + if isinstance(component, CustomComponent): + custom_code_list.extend( + self._get_map_fn_custom_code_from_children( + component.component_fn(*component.get_prop_vars()) + ) + ) + elif isinstance(component, Component): + for child in component.children: + custom_code_list.extend( + self._get_map_fn_custom_code_from_children(child) + ) + + return custom_code_list @staticmethod def _component_map_hash(component_map) -> str: @@ -288,12 +419,12 @@ class Markdown(Component): return f"ComponentMap_{self.component_map_hash}" def _get_custom_code(self) -> str | None: - hooks = set() + hooks = {} for _component in self.component_map.values(): comp = _component(_MOCK_ARG) hooks.update(comp._get_all_hooks_internal()) hooks.update(comp._get_all_hooks()) - formatted_hooks = "\n".join(hooks) + formatted_hooks = "\n".join(hooks.keys()) return f""" function {self._get_component_map_name()} () {{ {formatted_hooks} diff --git a/reflex/components/markdown/markdown.pyi b/reflex/components/markdown/markdown.pyi index 25d6d4c00..1c329fb8c 100644 --- a/reflex/components/markdown/markdown.pyi +++ b/reflex/components/markdown/markdown.pyi @@ -3,8 +3,9 @@ # ------------------- DO NOT EDIT ---------------------- # This file was generated by `reflex/utils/pyi_generator.py`! # ------------------------------------------------------ +import dataclasses from functools import lru_cache -from typing import Any, Callable, Dict, Optional, Union, overload +from typing import Any, Callable, Dict, Optional, Sequence, Union, overload from reflex.components.component import Component from reflex.event import BASE_STATE, EventType @@ -16,6 +17,7 @@ _CHILDREN = Var(_js_expr="children", _var_type=str) _PROPS = Var(_js_expr="...props") _PROPS_IN_TAG = Var(_js_expr="{...props}") _MOCK_ARG = Var(_js_expr="", _var_type=str) +_LANGUAGE = Var(_js_expr="_language", _var_type=str) _REMARK_MATH = Var(_js_expr="remarkMath") _REMARK_GFM = Var(_js_expr="remarkGfm") _REMARK_UNWRAP_IMAGES = Var(_js_expr="remarkUnwrapImages") @@ -27,6 +29,21 @@ NO_PROPS_TAGS = ("ul", "ol", "li") @lru_cache def get_base_component_map() -> dict[str, Callable]: ... +@dataclasses.dataclass() +class MarkdownComponentMap: + @classmethod + def get_component_map_custom_code(cls) -> str: ... + @classmethod + def create_map_fn_var( + cls, + fn_body: Var | None = None, + fn_args: Sequence[str] | None = None, + explicit_return: bool | None = None, + ) -> Var: ... + @classmethod + def get_fn_args(cls) -> Sequence[str]: ... + @classmethod + def get_fn_body(cls) -> Var: ... class Markdown(Component): @overload @@ -41,7 +58,7 @@ class Markdown(Component): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -82,6 +99,6 @@ class Markdown(Component): ... def add_imports(self) -> ImportDict | list[ImportDict]: ... + def format_component_map(self) -> dict[str, Var]: ... def get_component(self, tag: str, **props) -> Component: ... def format_component(self, tag: str, **props) -> str: ... - def format_component_map(self) -> dict[str, Var]: ... diff --git a/reflex/components/moment/moment.pyi b/reflex/components/moment/moment.pyi index 641435bde..57fbb3d0a 100644 --- a/reflex/components/moment/moment.pyi +++ b/reflex/components/moment/moment.pyi @@ -57,7 +57,7 @@ class Moment(NoSSRComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_change: Optional[ Union[EventType[[], BASE_STATE], EventType[[str], BASE_STATE]] diff --git a/reflex/components/next/base.pyi b/reflex/components/next/base.pyi index 49e9cc540..4a82d7bef 100644 --- a/reflex/components/next/base.pyi +++ b/reflex/components/next/base.pyi @@ -23,7 +23,7 @@ class NextComponent(Component): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/next/image.pyi b/reflex/components/next/image.pyi index df8fdaedb..0c1bf01f2 100644 --- a/reflex/components/next/image.pyi +++ b/reflex/components/next/image.pyi @@ -36,7 +36,7 @@ class Image(NextComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/next/link.pyi b/reflex/components/next/link.pyi index 510db0292..fdccc9ee6 100644 --- a/reflex/components/next/link.pyi +++ b/reflex/components/next/link.pyi @@ -23,7 +23,7 @@ class NextLink(Component): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/next/video.pyi b/reflex/components/next/video.pyi index c6242b462..8f31748f7 100644 --- a/reflex/components/next/video.pyi +++ b/reflex/components/next/video.pyi @@ -25,7 +25,7 @@ class Video(NextComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/plotly/plotly.py b/reflex/components/plotly/plotly.py index aff6e62b0..1e551ce87 100644 --- a/reflex/components/plotly/plotly.py +++ b/reflex/components/plotly/plotly.py @@ -265,7 +265,7 @@ const extractPoints = (points) => { merge_dicts.append(layout_dict) if self.template is not None: template_dict = LiteralVar.create({"layout": {"template": self.template}}) - merge_dicts.append(template_dict.without_data()) + merge_dicts.append(template_dict._without_data()) if merge_dicts: tag.special_props.append( # Merge all dictionaries and spread the result over props. diff --git a/reflex/components/plotly/plotly.pyi b/reflex/components/plotly/plotly.pyi index c9847b67e..2d606b8a2 100644 --- a/reflex/components/plotly/plotly.pyi +++ b/reflex/components/plotly/plotly.pyi @@ -64,7 +64,7 @@ class Plotly(NoSSRComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_after_plot: Optional[EventType[[], BASE_STATE]] = None, on_animated: Optional[EventType[[], BASE_STATE]] = None, on_animating_frame: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/primitives/accordion.pyi b/reflex/components/radix/primitives/accordion.pyi index 4f4a9243f..03208f496 100644 --- a/reflex/components/radix/primitives/accordion.pyi +++ b/reflex/components/radix/primitives/accordion.pyi @@ -100,7 +100,7 @@ class AccordionComponent(RadixPrimitiveComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -246,7 +246,7 @@ class AccordionRoot(AccordionComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -383,7 +383,7 @@ class AccordionItem(AccordionComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -507,7 +507,7 @@ class AccordionHeader(AccordionComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -627,7 +627,7 @@ class AccordionTrigger(AccordionComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -679,7 +679,7 @@ class AccordionIcon(Icon): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -796,7 +796,7 @@ class AccordionContent(AccordionComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/primitives/base.pyi b/reflex/components/radix/primitives/base.pyi index 7b729c96f..42847f160 100644 --- a/reflex/components/radix/primitives/base.pyi +++ b/reflex/components/radix/primitives/base.pyi @@ -22,7 +22,7 @@ class RadixPrimitiveComponent(Component): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -70,7 +70,7 @@ class RadixPrimitiveComponentWithClassName(RadixPrimitiveComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/primitives/drawer.pyi b/reflex/components/radix/primitives/drawer.pyi index 650967e3f..1ca1e4325 100644 --- a/reflex/components/radix/primitives/drawer.pyi +++ b/reflex/components/radix/primitives/drawer.pyi @@ -23,7 +23,7 @@ class DrawerComponent(RadixPrimitiveComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -90,7 +90,7 @@ class DrawerRoot(DrawerComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_animation_end: Optional[ Union[EventType[[], BASE_STATE], EventType[[bool], BASE_STATE]] ] = None, @@ -158,7 +158,7 @@ class DrawerTrigger(DrawerComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -206,7 +206,7 @@ class DrawerPortal(DrawerComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -254,7 +254,7 @@ class DrawerContent(DrawerComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_close_auto_focus: Optional[EventType[[], BASE_STATE]] = None, @@ -311,7 +311,7 @@ class DrawerOverlay(DrawerComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -359,7 +359,7 @@ class DrawerClose(DrawerTrigger): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -407,7 +407,7 @@ class DrawerTitle(DrawerComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -455,7 +455,7 @@ class DrawerDescription(DrawerComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -503,7 +503,7 @@ class DrawerHandle(DrawerComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -576,7 +576,7 @@ class Drawer(ComponentNamespace): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_animation_end: Optional[ Union[EventType[[], BASE_STATE], EventType[[bool], BASE_STATE]] ] = None, diff --git a/reflex/components/radix/primitives/form.pyi b/reflex/components/radix/primitives/form.pyi index bfeb60ac9..77c8be77c 100644 --- a/reflex/components/radix/primitives/form.pyi +++ b/reflex/components/radix/primitives/form.pyi @@ -25,7 +25,7 @@ class FormComponent(RadixPrimitiveComponentWithClassName): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -113,7 +113,7 @@ class FormRoot(FormComponent, HTMLForm): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_clear_server_errors: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, @@ -204,7 +204,7 @@ class FormField(FormComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -255,7 +255,7 @@ class FormLabel(FormComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -303,7 +303,7 @@ class FormControl(FormComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -401,7 +401,7 @@ class FormMessage(FormComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -452,7 +452,7 @@ class FormValidityState(FormComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -500,7 +500,7 @@ class FormSubmit(FormComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -589,7 +589,7 @@ class Form(FormRoot): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_clear_server_errors: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, @@ -722,7 +722,7 @@ class FormNamespace(ComponentNamespace): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_clear_server_errors: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/primitives/progress.pyi b/reflex/components/radix/primitives/progress.pyi index f3d844e44..32e4bb155 100644 --- a/reflex/components/radix/primitives/progress.pyi +++ b/reflex/components/radix/primitives/progress.pyi @@ -23,7 +23,7 @@ class ProgressComponent(RadixPrimitiveComponentWithClassName): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -78,7 +78,7 @@ class ProgressRoot(ProgressComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -192,7 +192,7 @@ class ProgressIndicator(ProgressComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -313,7 +313,7 @@ class Progress(ProgressRoot): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -435,7 +435,7 @@ class ProgressNamespace(ComponentNamespace): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/primitives/slider.pyi b/reflex/components/radix/primitives/slider.pyi index 161d76199..2a14ba518 100644 --- a/reflex/components/radix/primitives/slider.pyi +++ b/reflex/components/radix/primitives/slider.pyi @@ -26,7 +26,7 @@ class SliderComponent(RadixPrimitiveComponentWithClassName): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -93,7 +93,7 @@ class SliderRoot(SliderComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -150,7 +150,7 @@ class SliderTrack(SliderComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -199,7 +199,7 @@ class SliderRange(SliderComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -248,7 +248,7 @@ class SliderThumb(SliderComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/themes/base.py b/reflex/components/radix/themes/base.py index 20ebdc5a6..65a9ae835 100644 --- a/reflex/components/radix/themes/base.py +++ b/reflex/components/radix/themes/base.py @@ -5,6 +5,7 @@ from __future__ import annotations from typing import Any, Dict, Literal from reflex.components import Component +from reflex.components.core.breakpoints import Responsive from reflex.components.tags import Tag from reflex.config import get_config from reflex.utils.imports import ImportDict, ImportVar @@ -74,6 +75,31 @@ class CommonMarginProps(Component): ml: Var[LiteralSpacing] +class CommonPaddingProps(Component): + """Many radix-themes elements accept shorthand padding props.""" + + # Padding: "0" - "9" + p: Var[Responsive[LiteralSpacing]] + + # Padding horizontal: "0" - "9" + px: Var[Responsive[LiteralSpacing]] + + # Padding vertical: "0" - "9" + py: Var[Responsive[LiteralSpacing]] + + # Padding top: "0" - "9" + pt: Var[Responsive[LiteralSpacing]] + + # Padding right: "0" - "9" + pr: Var[Responsive[LiteralSpacing]] + + # Padding bottom: "0" - "9" + pb: Var[Responsive[LiteralSpacing]] + + # Padding left: "0" - "9" + pl: Var[Responsive[LiteralSpacing]] + + class RadixLoadingProp(Component): """Base class for components that can be in a loading state.""" @@ -86,6 +112,9 @@ class RadixThemesComponent(Component): library = "@radix-ui/themes@^3.0.0" + # Temporary pin < 3.1.5 until radix-ui/themes#627 is resolved. + library = library + " && <3.1.5" + # "Fake" prop color_scheme is used to avoid shadowing CSS prop "color". _rename_props: Dict[str, str] = {"colorScheme": "color"} diff --git a/reflex/components/radix/themes/base.pyi b/reflex/components/radix/themes/base.pyi index b617fd40a..b0a8e2fcb 100644 --- a/reflex/components/radix/themes/base.pyi +++ b/reflex/components/radix/themes/base.pyi @@ -6,6 +6,7 @@ from typing import Any, Dict, Literal, Optional, Union, overload from reflex.components import Component +from reflex.components.core.breakpoints import Breakpoints from reflex.event import BASE_STATE, EventType from reflex.style import Style from reflex.utils.imports import ImportDict @@ -102,7 +103,7 @@ class CommonMarginProps(Component): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -144,6 +145,178 @@ class CommonMarginProps(Component): """ ... +class CommonPaddingProps(Component): + @overload + @classmethod + def create( # type: ignore + cls, + *children, + p: Optional[ + Union[ + Breakpoints[ + str, Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] + ], + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + Var[ + Union[ + Breakpoints[ + str, + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + ], + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + ] + ], + ] + ] = None, + px: Optional[ + Union[ + Breakpoints[ + str, Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] + ], + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + Var[ + Union[ + Breakpoints[ + str, + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + ], + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + ] + ], + ] + ] = None, + py: Optional[ + Union[ + Breakpoints[ + str, Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] + ], + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + Var[ + Union[ + Breakpoints[ + str, + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + ], + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + ] + ], + ] + ] = None, + pt: Optional[ + Union[ + Breakpoints[ + str, Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] + ], + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + Var[ + Union[ + Breakpoints[ + str, + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + ], + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + ] + ], + ] + ] = None, + pr: Optional[ + Union[ + Breakpoints[ + str, Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] + ], + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + Var[ + Union[ + Breakpoints[ + str, + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + ], + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + ] + ], + ] + ] = None, + pb: Optional[ + Union[ + Breakpoints[ + str, Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] + ], + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + Var[ + Union[ + Breakpoints[ + str, + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + ], + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + ] + ], + ] + ] = None, + pl: Optional[ + Union[ + Breakpoints[ + str, Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] + ], + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + Var[ + Union[ + Breakpoints[ + str, + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + ], + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + ] + ], + ] + ] = None, + style: Optional[Style] = None, + key: Optional[Any] = None, + id: Optional[Any] = None, + class_name: Optional[Any] = None, + autofocus: Optional[bool] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, + on_blur: Optional[EventType[[], BASE_STATE]] = None, + on_click: Optional[EventType[[], BASE_STATE]] = None, + on_context_menu: Optional[EventType[[], BASE_STATE]] = None, + on_double_click: Optional[EventType[[], BASE_STATE]] = None, + on_focus: Optional[EventType[[], BASE_STATE]] = None, + on_mount: Optional[EventType[[], BASE_STATE]] = None, + on_mouse_down: Optional[EventType[[], BASE_STATE]] = None, + on_mouse_enter: Optional[EventType[[], BASE_STATE]] = None, + on_mouse_leave: Optional[EventType[[], BASE_STATE]] = None, + on_mouse_move: Optional[EventType[[], BASE_STATE]] = None, + on_mouse_out: Optional[EventType[[], BASE_STATE]] = None, + on_mouse_over: Optional[EventType[[], BASE_STATE]] = None, + on_mouse_up: Optional[EventType[[], BASE_STATE]] = None, + on_scroll: Optional[EventType[[], BASE_STATE]] = None, + on_unmount: Optional[EventType[[], BASE_STATE]] = None, + **props, + ) -> "CommonPaddingProps": + """Create the component. + + Args: + *children: The children of the component. + p: Padding: "0" - "9" + px: Padding horizontal: "0" - "9" + py: Padding vertical: "0" - "9" + pt: Padding top: "0" - "9" + pr: Padding right: "0" - "9" + pb: Padding bottom: "0" - "9" + pl: Padding left: "0" - "9" + style: The style of the component. + key: A unique key for the component. + id: The id for the component. + class_name: The class name for the component. + autofocus: Whether the component should take the focus once the page is loaded + custom_attrs: custom attribute + **props: The props of the component. + + Returns: + The component. + """ + ... + class RadixLoadingProp(Component): @overload @classmethod @@ -156,7 +329,7 @@ class RadixLoadingProp(Component): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -203,7 +376,7 @@ class RadixThemesComponent(Component): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -252,7 +425,7 @@ class RadixThemesTriggerComponent(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -384,7 +557,7 @@ class Theme(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -443,7 +616,7 @@ class ThemePanel(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -493,7 +666,7 @@ class RadixThemesColorModeProvider(Component): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/themes/color_mode.py b/reflex/components/radix/themes/color_mode.py index a01d40e07..2dd0f5e83 100644 --- a/reflex/components/radix/themes/color_mode.py +++ b/reflex/components/radix/themes/color_mode.py @@ -203,5 +203,5 @@ class ColorModeNamespace(Var): color_mode = color_mode_var_and_namespace = ColorModeNamespace( _js_expr=color_mode._js_expr, _var_type=color_mode._var_type, - _var_data=color_mode.get_default_value(), + _var_data=color_mode._get_default_value(), ) diff --git a/reflex/components/radix/themes/color_mode.pyi b/reflex/components/radix/themes/color_mode.pyi index 43a9dd31a..eb3c4234a 100644 --- a/reflex/components/radix/themes/color_mode.pyi +++ b/reflex/components/radix/themes/color_mode.pyi @@ -33,7 +33,7 @@ class ColorModeIcon(Cond): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -217,7 +217,7 @@ class ColorModeIconButton(IconButton): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -390,7 +390,7 @@ class ColorModeSwitch(Switch): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_change: Optional[ Union[EventType[[], BASE_STATE], EventType[[bool], BASE_STATE]] @@ -449,5 +449,5 @@ class ColorModeNamespace(Var): color_mode = color_mode_var_and_namespace = ColorModeNamespace( _js_expr=color_mode._js_expr, _var_type=color_mode._var_type, - _var_data=color_mode.get_default_value(), + _var_data=color_mode._get_default_value(), ) diff --git a/reflex/components/radix/themes/components/alert_dialog.pyi b/reflex/components/radix/themes/components/alert_dialog.pyi index 3cd806b1c..ad243df34 100644 --- a/reflex/components/radix/themes/components/alert_dialog.pyi +++ b/reflex/components/radix/themes/components/alert_dialog.pyi @@ -29,7 +29,7 @@ class AlertDialogRoot(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -84,7 +84,7 @@ class AlertDialogTrigger(RadixThemesTriggerComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -161,7 +161,7 @@ class AlertDialogContent(elements.Div, RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_close_auto_focus: Optional[EventType[[], BASE_STATE]] = None, @@ -234,7 +234,7 @@ class AlertDialogTitle(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -283,7 +283,7 @@ class AlertDialogDescription(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -332,7 +332,7 @@ class AlertDialogAction(RadixThemesTriggerComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -372,7 +372,7 @@ class AlertDialogCancel(RadixThemesTriggerComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/themes/components/aspect_ratio.pyi b/reflex/components/radix/themes/components/aspect_ratio.pyi index 8fde7f30e..882014073 100644 --- a/reflex/components/radix/themes/components/aspect_ratio.pyi +++ b/reflex/components/radix/themes/components/aspect_ratio.pyi @@ -23,7 +23,7 @@ class AspectRatio(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/themes/components/avatar.pyi b/reflex/components/radix/themes/components/avatar.pyi index f6c07ed29..e0ff0d913 100644 --- a/reflex/components/radix/themes/components/avatar.pyi +++ b/reflex/components/radix/themes/components/avatar.pyi @@ -113,7 +113,7 @@ class Avatar(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/themes/components/badge.pyi b/reflex/components/radix/themes/components/badge.pyi index 59a243c48..3e4f19f6e 100644 --- a/reflex/components/radix/themes/components/badge.pyi +++ b/reflex/components/radix/themes/components/badge.pyi @@ -134,7 +134,7 @@ class Badge(elements.Span, RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/themes/components/button.pyi b/reflex/components/radix/themes/components/button.pyi index f01c94fc2..ea2b63fbe 100644 --- a/reflex/components/radix/themes/components/button.pyi +++ b/reflex/components/radix/themes/components/button.pyi @@ -154,7 +154,7 @@ class Button(elements.Button, RadixLoadingProp, RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/themes/components/callout.pyi b/reflex/components/radix/themes/components/callout.pyi index 53bea31e7..b2643b558 100644 --- a/reflex/components/radix/themes/components/callout.pyi +++ b/reflex/components/radix/themes/components/callout.pyi @@ -132,7 +132,7 @@ class CalloutRoot(elements.Div, RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -226,7 +226,7 @@ class CalloutIcon(elements.Div, RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -315,7 +315,7 @@ class CalloutText(elements.P, RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -487,7 +487,7 @@ class Callout(CalloutRoot): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -665,7 +665,7 @@ class CalloutNamespace(ComponentNamespace): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/themes/components/card.pyi b/reflex/components/radix/themes/components/card.pyi index de7ccd019..74b91f8ab 100644 --- a/reflex/components/radix/themes/components/card.pyi +++ b/reflex/components/radix/themes/components/card.pyi @@ -67,7 +67,7 @@ class Card(elements.Div, RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/themes/components/checkbox.pyi b/reflex/components/radix/themes/components/checkbox.pyi index f7a1e85d2..a8ac3a0b6 100644 --- a/reflex/components/radix/themes/components/checkbox.pyi +++ b/reflex/components/radix/themes/components/checkbox.pyi @@ -114,7 +114,7 @@ class Checkbox(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_change: Optional[ Union[EventType[[], BASE_STATE], EventType[[bool], BASE_STATE]] @@ -264,7 +264,7 @@ class HighLevelCheckbox(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_change: Optional[ Union[EventType[[], BASE_STATE], EventType[[bool], BASE_STATE]] @@ -411,7 +411,7 @@ class CheckboxNamespace(ComponentNamespace): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_change: Optional[ Union[EventType[[], BASE_STATE], EventType[[bool], BASE_STATE]] diff --git a/reflex/components/radix/themes/components/checkbox_cards.pyi b/reflex/components/radix/themes/components/checkbox_cards.pyi index be2cbbed6..64eb151b0 100644 --- a/reflex/components/radix/themes/components/checkbox_cards.pyi +++ b/reflex/components/radix/themes/components/checkbox_cards.pyi @@ -147,7 +147,7 @@ class CheckboxCardsRoot(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -202,7 +202,7 @@ class CheckboxCardsItem(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/themes/components/checkbox_group.pyi b/reflex/components/radix/themes/components/checkbox_group.pyi index 47c8073fc..ffeeb75cf 100644 --- a/reflex/components/radix/themes/components/checkbox_group.pyi +++ b/reflex/components/radix/themes/components/checkbox_group.pyi @@ -106,7 +106,7 @@ class CheckboxGroupRoot(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -163,7 +163,7 @@ class CheckboxGroupItem(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/themes/components/context_menu.pyi b/reflex/components/radix/themes/components/context_menu.pyi index 97d0448a3..c5ef757d1 100644 --- a/reflex/components/radix/themes/components/context_menu.pyi +++ b/reflex/components/radix/themes/components/context_menu.pyi @@ -33,7 +33,7 @@ class ContextMenuRoot(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -89,7 +89,7 @@ class ContextMenuTrigger(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -242,7 +242,7 @@ class ContextMenuContent(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_close_auto_focus: Optional[EventType[[], BASE_STATE]] = None, @@ -318,7 +318,7 @@ class ContextMenuSub(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -376,7 +376,7 @@ class ContextMenuSubTrigger(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -446,7 +446,7 @@ class ContextMenuSubContent(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -578,7 +578,7 @@ class ContextMenuItem(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -634,7 +634,7 @@ class ContextMenuSeparator(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/themes/components/data_list.pyi b/reflex/components/radix/themes/components/data_list.pyi index 3712209b4..3b409363b 100644 --- a/reflex/components/radix/themes/components/data_list.pyi +++ b/reflex/components/radix/themes/components/data_list.pyi @@ -59,7 +59,7 @@ class DataListRoot(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -128,7 +128,7 @@ class DataListItem(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -249,7 +249,7 @@ class DataListLabel(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -302,7 +302,7 @@ class DataListValue(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/themes/components/dialog.pyi b/reflex/components/radix/themes/components/dialog.pyi index 77302bc82..4c3045741 100644 --- a/reflex/components/radix/themes/components/dialog.pyi +++ b/reflex/components/radix/themes/components/dialog.pyi @@ -27,7 +27,7 @@ class DialogRoot(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -82,7 +82,7 @@ class DialogTrigger(RadixThemesTriggerComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -122,7 +122,7 @@ class DialogTitle(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -207,7 +207,7 @@ class DialogContent(elements.Div, RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_close_auto_focus: Optional[EventType[[], BASE_STATE]] = None, @@ -283,7 +283,7 @@ class DialogDescription(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -332,7 +332,7 @@ class DialogClose(RadixThemesTriggerComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -379,7 +379,7 @@ class Dialog(ComponentNamespace): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/themes/components/dropdown_menu.pyi b/reflex/components/radix/themes/components/dropdown_menu.pyi index 1a2ce66b8..96c624f89 100644 --- a/reflex/components/radix/themes/components/dropdown_menu.pyi +++ b/reflex/components/radix/themes/components/dropdown_menu.pyi @@ -35,7 +35,7 @@ class DropdownMenuRoot(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -93,7 +93,7 @@ class DropdownMenuTrigger(RadixThemesTriggerComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -236,7 +236,7 @@ class DropdownMenuContent(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_close_auto_focus: Optional[EventType[[], BASE_STATE]] = None, @@ -313,7 +313,7 @@ class DropdownMenuSubTrigger(RadixThemesTriggerComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -355,7 +355,7 @@ class DropdownMenuSub(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -428,7 +428,7 @@ class DropdownMenuSubContent(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -560,7 +560,7 @@ class DropdownMenuItem(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -616,7 +616,7 @@ class DropdownMenuSeparator(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/themes/components/hover_card.pyi b/reflex/components/radix/themes/components/hover_card.pyi index 7044bc3ca..4b1de0d89 100644 --- a/reflex/components/radix/themes/components/hover_card.pyi +++ b/reflex/components/radix/themes/components/hover_card.pyi @@ -29,7 +29,7 @@ class HoverCardRoot(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -86,7 +86,7 @@ class HoverCardTrigger(RadixThemesTriggerComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -194,7 +194,7 @@ class HoverCardContent(elements.Div, RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -274,7 +274,7 @@ class HoverCard(ComponentNamespace): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/themes/components/icon_button.pyi b/reflex/components/radix/themes/components/icon_button.pyi index 81090e2e2..e600a9bee 100644 --- a/reflex/components/radix/themes/components/icon_button.pyi +++ b/reflex/components/radix/themes/components/icon_button.pyi @@ -154,7 +154,7 @@ class IconButton(elements.Button, RadixLoadingProp, RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/themes/components/inset.pyi b/reflex/components/radix/themes/components/inset.pyi index f085f4e0e..c4f07320b 100644 --- a/reflex/components/radix/themes/components/inset.pyi +++ b/reflex/components/radix/themes/components/inset.pyi @@ -132,7 +132,7 @@ class Inset(elements.Div, RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/themes/components/popover.pyi b/reflex/components/radix/themes/components/popover.pyi index d4be01e94..d4b324817 100644 --- a/reflex/components/radix/themes/components/popover.pyi +++ b/reflex/components/radix/themes/components/popover.pyi @@ -28,7 +28,7 @@ class PopoverRoot(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -84,7 +84,7 @@ class PopoverTrigger(RadixThemesTriggerComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -187,7 +187,7 @@ class PopoverContent(elements.Div, RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_close_auto_focus: Optional[EventType[[], BASE_STATE]] = None, @@ -273,7 +273,7 @@ class PopoverClose(RadixThemesTriggerComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/themes/components/progress.pyi b/reflex/components/radix/themes/components/progress.pyi index f4f84df6e..5b3f8ba51 100644 --- a/reflex/components/radix/themes/components/progress.pyi +++ b/reflex/components/radix/themes/components/progress.pyi @@ -113,7 +113,7 @@ class Progress(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/themes/components/radio.pyi b/reflex/components/radix/themes/components/radio.pyi index ed49aeb1a..49490286f 100644 --- a/reflex/components/radix/themes/components/radio.pyi +++ b/reflex/components/radix/themes/components/radio.pyi @@ -103,7 +103,7 @@ class Radio(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/themes/components/radio_cards.pyi b/reflex/components/radix/themes/components/radio_cards.pyi index a9fc8075e..5ba01d0a0 100644 --- a/reflex/components/radix/themes/components/radio_cards.pyi +++ b/reflex/components/radix/themes/components/radio_cards.pyi @@ -161,7 +161,7 @@ class RadioCardsRoot(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -232,7 +232,7 @@ class RadioCardsItem(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/themes/components/radio_group.pyi b/reflex/components/radix/themes/components/radio_group.pyi index 72ff5ecdb..f251f541f 100644 --- a/reflex/components/radix/themes/components/radio_group.pyi +++ b/reflex/components/radix/themes/components/radio_group.pyi @@ -111,7 +111,7 @@ class RadioGroupRoot(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_change: Optional[ Union[EventType[[], BASE_STATE], EventType[[str], BASE_STATE]] @@ -176,7 +176,7 @@ class RadioGroupItem(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -318,7 +318,7 @@ class HighLevelRadioGroup(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -470,7 +470,7 @@ class RadioGroup(ComponentNamespace): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/themes/components/scroll_area.pyi b/reflex/components/radix/themes/components/scroll_area.pyi index 644c65e78..5945cc3af 100644 --- a/reflex/components/radix/themes/components/scroll_area.pyi +++ b/reflex/components/radix/themes/components/scroll_area.pyi @@ -35,7 +35,7 @@ class ScrollArea(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/themes/components/segmented_control.pyi b/reflex/components/radix/themes/components/segmented_control.pyi index 896be5dd6..7ad115800 100644 --- a/reflex/components/radix/themes/components/segmented_control.pyi +++ b/reflex/components/radix/themes/components/segmented_control.pyi @@ -115,7 +115,7 @@ class SegmentedControlRoot(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_change: Optional[ Union[EventType[[], BASE_STATE], EventType[[str | List[str]], BASE_STATE]] @@ -176,7 +176,7 @@ class SegmentedControlItem(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/themes/components/select.pyi b/reflex/components/radix/themes/components/select.pyi index de35cf0a4..39caeef9c 100644 --- a/reflex/components/radix/themes/components/select.pyi +++ b/reflex/components/radix/themes/components/select.pyi @@ -42,7 +42,7 @@ class SelectRoot(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_change: Optional[ Union[EventType[[], BASE_STATE], EventType[[str], BASE_STATE]] @@ -182,7 +182,7 @@ class SelectTrigger(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -321,7 +321,7 @@ class SelectContent(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_close_auto_focus: Optional[EventType[[], BASE_STATE]] = None, @@ -384,7 +384,7 @@ class SelectGroup(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -435,7 +435,7 @@ class SelectItem(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -486,7 +486,7 @@ class SelectLabel(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -535,7 +535,7 @@ class SelectSeparator(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -687,7 +687,7 @@ class HighLevelSelect(SelectRoot): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_change: Optional[ Union[EventType[[], BASE_STATE], EventType[[str], BASE_STATE]] @@ -867,7 +867,7 @@ class Select(ComponentNamespace): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_change: Optional[ Union[EventType[[], BASE_STATE], EventType[[str], BASE_STATE]] diff --git a/reflex/components/radix/themes/components/separator.pyi b/reflex/components/radix/themes/components/separator.pyi index 92edc8476..7c4bcd55f 100644 --- a/reflex/components/radix/themes/components/separator.pyi +++ b/reflex/components/radix/themes/components/separator.pyi @@ -112,7 +112,7 @@ class Separator(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/themes/components/skeleton.pyi b/reflex/components/radix/themes/components/skeleton.pyi index 6ecb35d09..859954ccc 100644 --- a/reflex/components/radix/themes/components/skeleton.pyi +++ b/reflex/components/radix/themes/components/skeleton.pyi @@ -42,7 +42,7 @@ class Skeleton(RadixLoadingProp, RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/themes/components/slider.pyi b/reflex/components/radix/themes/components/slider.pyi index d29570536..972385e52 100644 --- a/reflex/components/radix/themes/components/slider.pyi +++ b/reflex/components/radix/themes/components/slider.pyi @@ -138,7 +138,7 @@ class Slider(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_change: Optional[ Union[ diff --git a/reflex/components/radix/themes/components/spinner.pyi b/reflex/components/radix/themes/components/spinner.pyi index 434a7b531..1c2b9c65e 100644 --- a/reflex/components/radix/themes/components/spinner.pyi +++ b/reflex/components/radix/themes/components/spinner.pyi @@ -37,7 +37,7 @@ class Spinner(RadixLoadingProp, RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/themes/components/switch.pyi b/reflex/components/radix/themes/components/switch.pyi index f0377904b..8a858040a 100644 --- a/reflex/components/radix/themes/components/switch.pyi +++ b/reflex/components/radix/themes/components/switch.pyi @@ -117,7 +117,7 @@ class Switch(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_change: Optional[ Union[EventType[[], BASE_STATE], EventType[[bool], BASE_STATE]] diff --git a/reflex/components/radix/themes/components/table.py b/reflex/components/radix/themes/components/table.py index ce1058db5..a16002f58 100644 --- a/reflex/components/radix/themes/components/table.py +++ b/reflex/components/radix/themes/components/table.py @@ -7,7 +7,7 @@ from reflex.components.core.breakpoints import Responsive from reflex.components.el import elements from reflex.vars.base import Var -from ..base import RadixThemesComponent +from ..base import CommonPaddingProps, RadixThemesComponent class TableRoot(elements.Table, RadixThemesComponent): @@ -51,6 +51,12 @@ class TableColumnHeaderCell(elements.Th, RadixThemesComponent): # The justification of the column justify: Var[Literal["start", "center", "end"]] + # The minimum width of the cell + min_width: Var[Responsive[str]] + + # The maximum width of the cell + max_width: Var[Responsive[str]] + _invalid_children: List[str] = [ "TableBody", "TableHeader", @@ -76,7 +82,7 @@ class TableBody(elements.Tbody, RadixThemesComponent): _valid_parents: List[str] = ["TableRoot"] -class TableCell(elements.Td, RadixThemesComponent): +class TableCell(elements.Td, CommonPaddingProps, RadixThemesComponent): """A cell containing data.""" tag = "Table.Cell" @@ -84,6 +90,12 @@ class TableCell(elements.Td, RadixThemesComponent): # The justification of the column justify: Var[Literal["start", "center", "end"]] + # The minimum width of the cell + min_width: Var[Responsive[str]] + + # The maximum width of the cell + max_width: Var[Responsive[str]] + _invalid_children: List[str] = [ "TableBody", "TableHeader", @@ -93,7 +105,7 @@ class TableCell(elements.Td, RadixThemesComponent): ] -class TableRowHeaderCell(elements.Th, RadixThemesComponent): +class TableRowHeaderCell(elements.Th, CommonPaddingProps, RadixThemesComponent): """A table cell that is semantically treated as a row header.""" tag = "Table.RowHeaderCell" @@ -101,6 +113,12 @@ class TableRowHeaderCell(elements.Th, RadixThemesComponent): # The justification of the column justify: Var[Literal["start", "center", "end"]] + # The minimum width of the cell + min_width: Var[Responsive[str]] + + # The maximum width of the cell + max_width: Var[Responsive[str]] + _invalid_children: List[str] = [ "TableBody", "TableHeader", diff --git a/reflex/components/radix/themes/components/table.pyi b/reflex/components/radix/themes/components/table.pyi index 637fdee48..9bc7bf730 100644 --- a/reflex/components/radix/themes/components/table.pyi +++ b/reflex/components/radix/themes/components/table.pyi @@ -12,7 +12,7 @@ from reflex.event import BASE_STATE, EventType from reflex.style import Style from reflex.vars.base import Var -from ..base import RadixThemesComponent +from ..base import CommonPaddingProps, RadixThemesComponent class TableRoot(elements.Table, RadixThemesComponent): @overload @@ -65,7 +65,7 @@ class TableRoot(elements.Table, RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -159,7 +159,7 @@ class TableHeader(elements.Thead, RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -255,7 +255,7 @@ class TableRow(elements.Tr, RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -322,6 +322,12 @@ class TableColumnHeaderCell(elements.Th, RadixThemesComponent): Var[Literal["center", "end", "start"]], ] ] = None, + min_width: Optional[ + Union[Breakpoints[str, str], Var[Union[Breakpoints[str, str], str]], str] + ] = None, + max_width: Optional[ + Union[Breakpoints[str, str], Var[Union[Breakpoints[str, str], str]], str] + ] = None, align: Optional[Union[Var[Union[bool, int, str]], bool, int, str]] = None, col_span: Optional[Union[Var[Union[bool, int, str]], bool, int, str]] = None, headers: Optional[Union[Var[Union[bool, int, str]], bool, int, str]] = None, @@ -356,7 +362,7 @@ class TableColumnHeaderCell(elements.Th, RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -382,6 +388,8 @@ class TableColumnHeaderCell(elements.Th, RadixThemesComponent): Args: *children: Child components. justify: The justification of the column + min_width: The minimum width of the cell + max_width: The maximum width of the cell align: Alignment of the content within the table header cell col_span: Number of columns a header cell should span headers: IDs of the headers associated with this header cell @@ -452,7 +460,7 @@ class TableBody(elements.Tbody, RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -507,7 +515,7 @@ class TableBody(elements.Tbody, RadixThemesComponent): """ ... -class TableCell(elements.Td, RadixThemesComponent): +class TableCell(elements.Td, CommonPaddingProps, RadixThemesComponent): @overload @classmethod def create( # type: ignore @@ -519,6 +527,12 @@ class TableCell(elements.Td, RadixThemesComponent): Var[Literal["center", "end", "start"]], ] ] = None, + min_width: Optional[ + Union[Breakpoints[str, str], Var[Union[Breakpoints[str, str], str]], str] + ] = None, + max_width: Optional[ + Union[Breakpoints[str, str], Var[Union[Breakpoints[str, str], str]], str] + ] = None, align: Optional[Union[Var[Union[bool, int, str]], bool, int, str]] = None, col_span: Optional[Union[Var[Union[bool, int, str]], bool, int, str]] = None, headers: Optional[Union[Var[Union[bool, int, str]], bool, int, str]] = None, @@ -547,12 +561,131 @@ class TableCell(elements.Td, RadixThemesComponent): spell_check: Optional[Union[Var[Union[bool, int, str]], bool, int, str]] = None, tab_index: Optional[Union[Var[Union[bool, int, str]], bool, int, str]] = None, title: Optional[Union[Var[Union[bool, int, str]], bool, int, str]] = None, + p: Optional[ + Union[ + Breakpoints[ + str, Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] + ], + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + Var[ + Union[ + Breakpoints[ + str, + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + ], + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + ] + ], + ] + ] = None, + px: Optional[ + Union[ + Breakpoints[ + str, Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] + ], + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + Var[ + Union[ + Breakpoints[ + str, + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + ], + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + ] + ], + ] + ] = None, + py: Optional[ + Union[ + Breakpoints[ + str, Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] + ], + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + Var[ + Union[ + Breakpoints[ + str, + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + ], + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + ] + ], + ] + ] = None, + pt: Optional[ + Union[ + Breakpoints[ + str, Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] + ], + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + Var[ + Union[ + Breakpoints[ + str, + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + ], + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + ] + ], + ] + ] = None, + pr: Optional[ + Union[ + Breakpoints[ + str, Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] + ], + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + Var[ + Union[ + Breakpoints[ + str, + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + ], + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + ] + ], + ] + ] = None, + pb: Optional[ + Union[ + Breakpoints[ + str, Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] + ], + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + Var[ + Union[ + Breakpoints[ + str, + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + ], + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + ] + ], + ] + ] = None, + pl: Optional[ + Union[ + Breakpoints[ + str, Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] + ], + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + Var[ + Union[ + Breakpoints[ + str, + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + ], + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + ] + ], + ] + ] = None, style: Optional[Style] = None, key: Optional[Any] = None, id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -578,6 +711,8 @@ class TableCell(elements.Td, RadixThemesComponent): Args: *children: Child components. justify: The justification of the column + min_width: The minimum width of the cell + max_width: The maximum width of the cell align: Alignment of the content within the table cell col_span: Number of columns a cell should span headers: IDs of the headers associated with this cell @@ -598,6 +733,13 @@ class TableCell(elements.Td, RadixThemesComponent): spell_check: Defines whether the element may be checked for spelling errors. tab_index: Defines the position of the current element in the tabbing order. title: Defines a tooltip for the element. + p: Padding: "0" - "9" + px: Padding horizontal: "0" - "9" + py: Padding vertical: "0" - "9" + pt: Padding top: "0" - "9" + pr: Padding right: "0" - "9" + pb: Padding bottom: "0" - "9" + pl: Padding left: "0" - "9" style: The style of the component. key: A unique key for the component. id: The id for the component. @@ -611,7 +753,7 @@ class TableCell(elements.Td, RadixThemesComponent): """ ... -class TableRowHeaderCell(elements.Th, RadixThemesComponent): +class TableRowHeaderCell(elements.Th, CommonPaddingProps, RadixThemesComponent): @overload @classmethod def create( # type: ignore @@ -623,6 +765,12 @@ class TableRowHeaderCell(elements.Th, RadixThemesComponent): Var[Literal["center", "end", "start"]], ] ] = None, + min_width: Optional[ + Union[Breakpoints[str, str], Var[Union[Breakpoints[str, str], str]], str] + ] = None, + max_width: Optional[ + Union[Breakpoints[str, str], Var[Union[Breakpoints[str, str], str]], str] + ] = None, align: Optional[Union[Var[Union[bool, int, str]], bool, int, str]] = None, col_span: Optional[Union[Var[Union[bool, int, str]], bool, int, str]] = None, headers: Optional[Union[Var[Union[bool, int, str]], bool, int, str]] = None, @@ -652,12 +800,131 @@ class TableRowHeaderCell(elements.Th, RadixThemesComponent): spell_check: Optional[Union[Var[Union[bool, int, str]], bool, int, str]] = None, tab_index: Optional[Union[Var[Union[bool, int, str]], bool, int, str]] = None, title: Optional[Union[Var[Union[bool, int, str]], bool, int, str]] = None, + p: Optional[ + Union[ + Breakpoints[ + str, Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] + ], + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + Var[ + Union[ + Breakpoints[ + str, + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + ], + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + ] + ], + ] + ] = None, + px: Optional[ + Union[ + Breakpoints[ + str, Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] + ], + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + Var[ + Union[ + Breakpoints[ + str, + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + ], + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + ] + ], + ] + ] = None, + py: Optional[ + Union[ + Breakpoints[ + str, Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] + ], + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + Var[ + Union[ + Breakpoints[ + str, + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + ], + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + ] + ], + ] + ] = None, + pt: Optional[ + Union[ + Breakpoints[ + str, Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] + ], + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + Var[ + Union[ + Breakpoints[ + str, + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + ], + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + ] + ], + ] + ] = None, + pr: Optional[ + Union[ + Breakpoints[ + str, Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] + ], + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + Var[ + Union[ + Breakpoints[ + str, + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + ], + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + ] + ], + ] + ] = None, + pb: Optional[ + Union[ + Breakpoints[ + str, Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] + ], + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + Var[ + Union[ + Breakpoints[ + str, + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + ], + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + ] + ], + ] + ] = None, + pl: Optional[ + Union[ + Breakpoints[ + str, Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] + ], + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + Var[ + Union[ + Breakpoints[ + str, + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + ], + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + ] + ], + ] + ] = None, style: Optional[Style] = None, key: Optional[Any] = None, id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -683,6 +950,8 @@ class TableRowHeaderCell(elements.Th, RadixThemesComponent): Args: *children: Child components. justify: The justification of the column + min_width: The minimum width of the cell + max_width: The maximum width of the cell align: Alignment of the content within the table header cell col_span: Number of columns a header cell should span headers: IDs of the headers associated with this header cell @@ -704,6 +973,13 @@ class TableRowHeaderCell(elements.Th, RadixThemesComponent): spell_check: Defines whether the element may be checked for spelling errors. tab_index: Defines the position of the current element in the tabbing order. title: Defines a tooltip for the element. + p: Padding: "0" - "9" + px: Padding horizontal: "0" - "9" + py: Padding vertical: "0" - "9" + pt: Padding top: "0" - "9" + pr: Padding right: "0" - "9" + pb: Padding bottom: "0" - "9" + pl: Padding left: "0" - "9" style: The style of the component. key: A unique key for the component. id: The id for the component. diff --git a/reflex/components/radix/themes/components/tabs.pyi b/reflex/components/radix/themes/components/tabs.pyi index 286c6130b..b5e7de5f4 100644 --- a/reflex/components/radix/themes/components/tabs.pyi +++ b/reflex/components/radix/themes/components/tabs.pyi @@ -39,7 +39,7 @@ class TabsRoot(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_change: Optional[ Union[EventType[[], BASE_STATE], EventType[[str], BASE_STATE]] @@ -106,7 +106,7 @@ class TabsList(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -221,7 +221,7 @@ class TabsTrigger(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -275,7 +275,7 @@ class TabsContent(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -341,7 +341,7 @@ class Tabs(ComponentNamespace): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_change: Optional[ Union[EventType[[], BASE_STATE], EventType[[str], BASE_STATE]] diff --git a/reflex/components/radix/themes/components/text_area.pyi b/reflex/components/radix/themes/components/text_area.pyi index bf650c10d..196346cf9 100644 --- a/reflex/components/radix/themes/components/text_area.pyi +++ b/reflex/components/radix/themes/components/text_area.pyi @@ -167,7 +167,7 @@ class TextArea(RadixThemesComponent, elements.Textarea): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[ Union[EventType[[], BASE_STATE], EventType[[str], BASE_STATE]] ] = None, diff --git a/reflex/components/radix/themes/components/text_field.pyi b/reflex/components/radix/themes/components/text_field.pyi index 455e47fcf..874ac07a0 100644 --- a/reflex/components/radix/themes/components/text_field.pyi +++ b/reflex/components/radix/themes/components/text_field.pyi @@ -148,7 +148,7 @@ class TextFieldRoot(elements.Div, RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[ Union[EventType[[], BASE_STATE], EventType[[str], BASE_STATE]] ] = None, @@ -313,7 +313,7 @@ class TextFieldSlot(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -483,7 +483,7 @@ class TextField(ComponentNamespace): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[ Union[EventType[[], BASE_STATE], EventType[[str], BASE_STATE]] ] = None, diff --git a/reflex/components/radix/themes/components/tooltip.pyi b/reflex/components/radix/themes/components/tooltip.pyi index a46897e32..fab1d0c12 100644 --- a/reflex/components/radix/themes/components/tooltip.pyi +++ b/reflex/components/radix/themes/components/tooltip.pyi @@ -61,7 +61,7 @@ class Tooltip(RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/themes/layout/base.py b/reflex/components/radix/themes/layout/base.py index 61ba19710..f31f6a72c 100644 --- a/reflex/components/radix/themes/layout/base.py +++ b/reflex/components/radix/themes/layout/base.py @@ -7,38 +7,17 @@ from typing import Literal from reflex.components.core.breakpoints import Responsive from reflex.vars.base import Var -from ..base import CommonMarginProps, LiteralSpacing, RadixThemesComponent +from ..base import CommonMarginProps, CommonPaddingProps, RadixThemesComponent LiteralBoolNumber = Literal["0", "1"] -class LayoutComponent(CommonMarginProps, RadixThemesComponent): +class LayoutComponent(CommonMarginProps, CommonPaddingProps, RadixThemesComponent): """Box, Flex and Grid are foundational elements you'll use to construct layouts. Box provides block-level spacing and sizing, while Flex and Grid let you create flexible columns, rows and grids. """ - # Padding: "0" - "9" - p: Var[Responsive[LiteralSpacing]] - - # Padding horizontal: "0" - "9" - px: Var[Responsive[LiteralSpacing]] - - # Padding vertical: "0" - "9" - py: Var[Responsive[LiteralSpacing]] - - # Padding top: "0" - "9" - pt: Var[Responsive[LiteralSpacing]] - - # Padding right: "0" - "9" - pr: Var[Responsive[LiteralSpacing]] - - # Padding bottom: "0" - "9" - pb: Var[Responsive[LiteralSpacing]] - - # Padding left: "0" - "9" - pl: Var[Responsive[LiteralSpacing]] - # Whether the element will take up the smallest possible space: "0" | "1" flex_shrink: Var[Responsive[LiteralBoolNumber]] diff --git a/reflex/components/radix/themes/layout/base.pyi b/reflex/components/radix/themes/layout/base.pyi index 3a42698e4..440ec882a 100644 --- a/reflex/components/radix/themes/layout/base.pyi +++ b/reflex/components/radix/themes/layout/base.pyi @@ -10,16 +10,72 @@ from reflex.event import BASE_STATE, EventType from reflex.style import Style from reflex.vars.base import Var -from ..base import CommonMarginProps, RadixThemesComponent +from ..base import CommonMarginProps, CommonPaddingProps, RadixThemesComponent LiteralBoolNumber = Literal["0", "1"] -class LayoutComponent(CommonMarginProps, RadixThemesComponent): +class LayoutComponent(CommonMarginProps, CommonPaddingProps, RadixThemesComponent): @overload @classmethod def create( # type: ignore cls, *children, + flex_shrink: Optional[ + Union[ + Breakpoints[str, Literal["0", "1"]], + Literal["0", "1"], + Var[Union[Breakpoints[str, Literal["0", "1"]], Literal["0", "1"]]], + ] + ] = None, + flex_grow: Optional[ + Union[ + Breakpoints[str, Literal["0", "1"]], + Literal["0", "1"], + Var[Union[Breakpoints[str, Literal["0", "1"]], Literal["0", "1"]]], + ] + ] = None, + m: Optional[ + Union[ + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + Var[Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]], + ] + ] = None, + mx: Optional[ + Union[ + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + Var[Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]], + ] + ] = None, + my: Optional[ + Union[ + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + Var[Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]], + ] + ] = None, + mt: Optional[ + Union[ + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + Var[Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]], + ] + ] = None, + mr: Optional[ + Union[ + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + Var[Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]], + ] + ] = None, + mb: Optional[ + Union[ + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + Var[Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]], + ] + ] = None, + ml: Optional[ + Union[ + Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + Var[Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]], + ] + ] = None, p: Optional[ Union[ Breakpoints[ @@ -139,68 +195,12 @@ class LayoutComponent(CommonMarginProps, RadixThemesComponent): ], ] ] = None, - flex_shrink: Optional[ - Union[ - Breakpoints[str, Literal["0", "1"]], - Literal["0", "1"], - Var[Union[Breakpoints[str, Literal["0", "1"]], Literal["0", "1"]]], - ] - ] = None, - flex_grow: Optional[ - Union[ - Breakpoints[str, Literal["0", "1"]], - Literal["0", "1"], - Var[Union[Breakpoints[str, Literal["0", "1"]], Literal["0", "1"]]], - ] - ] = None, - m: Optional[ - Union[ - Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], - Var[Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]], - ] - ] = None, - mx: Optional[ - Union[ - Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], - Var[Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]], - ] - ] = None, - my: Optional[ - Union[ - Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], - Var[Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]], - ] - ] = None, - mt: Optional[ - Union[ - Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], - Var[Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]], - ] - ] = None, - mr: Optional[ - Union[ - Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], - Var[Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]], - ] - ] = None, - mb: Optional[ - Union[ - Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], - Var[Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]], - ] - ] = None, - ml: Optional[ - Union[ - Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], - Var[Literal["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]], - ] - ] = None, style: Optional[Style] = None, key: Optional[Any] = None, id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -225,13 +225,6 @@ class LayoutComponent(CommonMarginProps, RadixThemesComponent): Args: *children: Child components. - p: Padding: "0" - "9" - px: Padding horizontal: "0" - "9" - py: Padding vertical: "0" - "9" - pt: Padding top: "0" - "9" - pr: Padding right: "0" - "9" - pb: Padding bottom: "0" - "9" - pl: Padding left: "0" - "9" flex_shrink: Whether the element will take up the smallest possible space: "0" | "1" flex_grow: Whether the element will take up the largest possible space: "0" | "1" m: Margin: "0" - "9" @@ -241,6 +234,13 @@ class LayoutComponent(CommonMarginProps, RadixThemesComponent): mr: Margin right: "0" - "9" mb: Margin bottom: "0" - "9" ml: Margin left: "0" - "9" + p: Padding: "0" - "9" + px: Padding horizontal: "0" - "9" + py: Padding vertical: "0" - "9" + pt: Padding top: "0" - "9" + pr: Padding right: "0" - "9" + pb: Padding bottom: "0" - "9" + pl: Padding left: "0" - "9" style: The style of the component. key: A unique key for the component. id: The id for the component. diff --git a/reflex/components/radix/themes/layout/box.pyi b/reflex/components/radix/themes/layout/box.pyi index a8b6a4dcb..648995b01 100644 --- a/reflex/components/radix/themes/layout/box.pyi +++ b/reflex/components/radix/themes/layout/box.pyi @@ -47,7 +47,7 @@ class Box(elements.Div, RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/themes/layout/center.pyi b/reflex/components/radix/themes/layout/center.pyi index be834a632..e932be6c8 100644 --- a/reflex/components/radix/themes/layout/center.pyi +++ b/reflex/components/radix/themes/layout/center.pyi @@ -124,7 +124,7 @@ class Center(Flex): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/themes/layout/container.pyi b/reflex/components/radix/themes/layout/container.pyi index aafdb3e2e..36ea79457 100644 --- a/reflex/components/radix/themes/layout/container.pyi +++ b/reflex/components/radix/themes/layout/container.pyi @@ -64,7 +64,7 @@ class Container(elements.Div, RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/themes/layout/flex.pyi b/reflex/components/radix/themes/layout/flex.pyi index 0bf6db96c..8462720d0 100644 --- a/reflex/components/radix/themes/layout/flex.pyi +++ b/reflex/components/radix/themes/layout/flex.pyi @@ -127,7 +127,7 @@ class Flex(elements.Div, RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/themes/layout/grid.pyi b/reflex/components/radix/themes/layout/grid.pyi index d5342075e..0f4be760f 100644 --- a/reflex/components/radix/themes/layout/grid.pyi +++ b/reflex/components/radix/themes/layout/grid.pyi @@ -156,7 +156,7 @@ class Grid(elements.Div, RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/themes/layout/list.py b/reflex/components/radix/themes/layout/list.py index d83fd168b..96fa169a0 100644 --- a/reflex/components/radix/themes/layout/list.py +++ b/reflex/components/radix/themes/layout/list.py @@ -8,6 +8,7 @@ from reflex.components.component import Component, ComponentNamespace from reflex.components.core.foreach import Foreach from reflex.components.el.elements.typography import Li, Ol, Ul from reflex.components.lucide.icon import Icon +from reflex.components.markdown.markdown import MarkdownComponentMap from reflex.components.radix.themes.typography.text import Text from reflex.vars.base import Var @@ -36,7 +37,7 @@ LiteralListStyleTypeOrdered = Literal[ ] -class BaseList(Component): +class BaseList(Component, MarkdownComponentMap): """Base class for ordered and unordered lists.""" tag = "ul" @@ -154,7 +155,7 @@ class OrderedList(BaseList, Ol): ) -class ListItem(Li): +class ListItem(Li, MarkdownComponentMap): """Display an item of an ordered or unordered list.""" @classmethod diff --git a/reflex/components/radix/themes/layout/list.pyi b/reflex/components/radix/themes/layout/list.pyi index b0ea748e2..b42f689b9 100644 --- a/reflex/components/radix/themes/layout/list.pyi +++ b/reflex/components/radix/themes/layout/list.pyi @@ -7,6 +7,7 @@ from typing import Any, Dict, Iterable, Literal, Optional, Union, overload from reflex.components.component import Component, ComponentNamespace from reflex.components.el.elements.typography import Li, Ol, Ul +from reflex.components.markdown.markdown import MarkdownComponentMap from reflex.event import BASE_STATE, EventType from reflex.style import Style from reflex.vars.base import Var @@ -29,7 +30,7 @@ LiteralListStyleTypeOrdered = Literal[ "katakana", ] -class BaseList(Component): +class BaseList(Component, MarkdownComponentMap): @overload @classmethod def create( # type: ignore @@ -83,7 +84,7 @@ class BaseList(Component): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -201,7 +202,7 @@ class UnorderedList(BaseList, Ul): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -336,7 +337,7 @@ class OrderedList(BaseList, Ol): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -393,7 +394,7 @@ class OrderedList(BaseList, Ol): """ ... -class ListItem(Li): +class ListItem(Li, MarkdownComponentMap): @overload @classmethod def create( # type: ignore @@ -428,7 +429,7 @@ class ListItem(Li): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -536,7 +537,7 @@ class List(ComponentNamespace): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/themes/layout/section.pyi b/reflex/components/radix/themes/layout/section.pyi index e03e889e4..7e909bf64 100644 --- a/reflex/components/radix/themes/layout/section.pyi +++ b/reflex/components/radix/themes/layout/section.pyi @@ -61,7 +61,7 @@ class Section(elements.Section, RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/themes/layout/spacer.pyi b/reflex/components/radix/themes/layout/spacer.pyi index a5263b162..bd98ac656 100644 --- a/reflex/components/radix/themes/layout/spacer.pyi +++ b/reflex/components/radix/themes/layout/spacer.pyi @@ -124,7 +124,7 @@ class Spacer(Flex): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/themes/layout/stack.pyi b/reflex/components/radix/themes/layout/stack.pyi index ee7cea1bb..712e050a8 100644 --- a/reflex/components/radix/themes/layout/stack.pyi +++ b/reflex/components/radix/themes/layout/stack.pyi @@ -101,7 +101,7 @@ class Stack(Flex): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -236,7 +236,7 @@ class VStack(Stack): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -371,7 +371,7 @@ class HStack(Stack): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/themes/typography/blockquote.pyi b/reflex/components/radix/themes/typography/blockquote.pyi index a898cf424..efb18a5b2 100644 --- a/reflex/components/radix/themes/typography/blockquote.pyi +++ b/reflex/components/radix/themes/typography/blockquote.pyi @@ -138,7 +138,7 @@ class Blockquote(elements.Blockquote, RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/themes/typography/code.py b/reflex/components/radix/themes/typography/code.py index ca19859d3..ab610b505 100644 --- a/reflex/components/radix/themes/typography/code.py +++ b/reflex/components/radix/themes/typography/code.py @@ -7,13 +7,14 @@ from __future__ import annotations from reflex.components.core.breakpoints import Responsive from reflex.components.el import elements +from reflex.components.markdown.markdown import MarkdownComponentMap from reflex.vars.base import Var from ..base import LiteralAccentColor, LiteralVariant, RadixThemesComponent from .base import LiteralTextSize, LiteralTextWeight -class Code(elements.Code, RadixThemesComponent): +class Code(elements.Code, RadixThemesComponent, MarkdownComponentMap): """A block level extended quotation.""" tag = "Code" diff --git a/reflex/components/radix/themes/typography/code.pyi b/reflex/components/radix/themes/typography/code.pyi index 3d1e5263c..0276eb982 100644 --- a/reflex/components/radix/themes/typography/code.pyi +++ b/reflex/components/radix/themes/typography/code.pyi @@ -7,13 +7,14 @@ from typing import Any, Dict, Literal, Optional, Union, overload from reflex.components.core.breakpoints import Breakpoints from reflex.components.el import elements +from reflex.components.markdown.markdown import MarkdownComponentMap from reflex.event import BASE_STATE, EventType from reflex.style import Style from reflex.vars.base import Var from ..base import RadixThemesComponent -class Code(elements.Code, RadixThemesComponent): +class Code(elements.Code, RadixThemesComponent, MarkdownComponentMap): @overload @classmethod def create( # type: ignore @@ -143,7 +144,7 @@ class Code(elements.Code, RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/themes/typography/heading.py b/reflex/components/radix/themes/typography/heading.py index 03e109717..ce1eaa68f 100644 --- a/reflex/components/radix/themes/typography/heading.py +++ b/reflex/components/radix/themes/typography/heading.py @@ -7,13 +7,14 @@ from __future__ import annotations from reflex.components.core.breakpoints import Responsive from reflex.components.el import elements +from reflex.components.markdown.markdown import MarkdownComponentMap from reflex.vars.base import Var from ..base import LiteralAccentColor, RadixThemesComponent from .base import LiteralTextAlign, LiteralTextSize, LiteralTextTrim, LiteralTextWeight -class Heading(elements.H1, RadixThemesComponent): +class Heading(elements.H1, RadixThemesComponent, MarkdownComponentMap): """A foundational text primitive based on the element.""" tag = "Heading" diff --git a/reflex/components/radix/themes/typography/heading.pyi b/reflex/components/radix/themes/typography/heading.pyi index d55583bf0..b5cb5c9d3 100644 --- a/reflex/components/radix/themes/typography/heading.pyi +++ b/reflex/components/radix/themes/typography/heading.pyi @@ -7,13 +7,14 @@ from typing import Any, Dict, Literal, Optional, Union, overload from reflex.components.core.breakpoints import Breakpoints from reflex.components.el import elements +from reflex.components.markdown.markdown import MarkdownComponentMap from reflex.event import BASE_STATE, EventType from reflex.style import Style from reflex.vars.base import Var from ..base import RadixThemesComponent -class Heading(elements.H1, RadixThemesComponent): +class Heading(elements.H1, RadixThemesComponent, MarkdownComponentMap): @overload @classmethod def create( # type: ignore @@ -163,7 +164,7 @@ class Heading(elements.H1, RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/themes/typography/link.py b/reflex/components/radix/themes/typography/link.py index 6e3d2f983..1cc673536 100644 --- a/reflex/components/radix/themes/typography/link.py +++ b/reflex/components/radix/themes/typography/link.py @@ -12,6 +12,7 @@ from reflex.components.core.breakpoints import Responsive from reflex.components.core.colors import color from reflex.components.core.cond import cond from reflex.components.el.elements.inline import A +from reflex.components.markdown.markdown import MarkdownComponentMap from reflex.components.next.link import NextLink from reflex.utils.imports import ImportDict from reflex.vars.base import Var @@ -24,7 +25,7 @@ LiteralLinkUnderline = Literal["auto", "hover", "always", "none"] next_link = NextLink.create() -class Link(RadixThemesComponent, A, MemoizationLeaf): +class Link(RadixThemesComponent, A, MemoizationLeaf, MarkdownComponentMap): """A semantic element for navigation between pages.""" tag = "Link" diff --git a/reflex/components/radix/themes/typography/link.pyi b/reflex/components/radix/themes/typography/link.pyi index adff27a1e..db963c6df 100644 --- a/reflex/components/radix/themes/typography/link.pyi +++ b/reflex/components/radix/themes/typography/link.pyi @@ -8,6 +8,7 @@ from typing import Any, Dict, Literal, Optional, Union, overload from reflex.components.component import MemoizationLeaf from reflex.components.core.breakpoints import Breakpoints from reflex.components.el.elements.inline import A +from reflex.components.markdown.markdown import MarkdownComponentMap from reflex.components.next.link import NextLink from reflex.event import BASE_STATE, EventType from reflex.style import Style @@ -19,7 +20,7 @@ from ..base import RadixThemesComponent LiteralLinkUnderline = Literal["auto", "hover", "always", "none"] next_link = NextLink.create() -class Link(RadixThemesComponent, A, MemoizationLeaf): +class Link(RadixThemesComponent, A, MemoizationLeaf, MarkdownComponentMap): def add_imports(self) -> ImportDict: ... @overload @classmethod @@ -175,7 +176,7 @@ class Link(RadixThemesComponent, A, MemoizationLeaf): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/radix/themes/typography/text.py b/reflex/components/radix/themes/typography/text.py index e3576360a..1663ddedf 100644 --- a/reflex/components/radix/themes/typography/text.py +++ b/reflex/components/radix/themes/typography/text.py @@ -10,6 +10,7 @@ from typing import Literal from reflex.components.component import ComponentNamespace from reflex.components.core.breakpoints import Responsive from reflex.components.el import elements +from reflex.components.markdown.markdown import MarkdownComponentMap from reflex.vars.base import Var from ..base import LiteralAccentColor, RadixThemesComponent @@ -37,7 +38,7 @@ LiteralType = Literal[ ] -class Text(elements.Span, RadixThemesComponent): +class Text(elements.Span, RadixThemesComponent, MarkdownComponentMap): """A foundational text primitive based on the element.""" tag = "Text" diff --git a/reflex/components/radix/themes/typography/text.pyi b/reflex/components/radix/themes/typography/text.pyi index 4306ec1b1..824348b42 100644 --- a/reflex/components/radix/themes/typography/text.pyi +++ b/reflex/components/radix/themes/typography/text.pyi @@ -8,6 +8,7 @@ from typing import Any, Dict, Literal, Optional, Union, overload from reflex.components.component import ComponentNamespace from reflex.components.core.breakpoints import Breakpoints from reflex.components.el import elements +from reflex.components.markdown.markdown import MarkdownComponentMap from reflex.event import BASE_STATE, EventType from reflex.style import Style from reflex.vars.base import Var @@ -35,7 +36,7 @@ LiteralType = Literal[ "sup", ] -class Text(elements.Span, RadixThemesComponent): +class Text(elements.Span, RadixThemesComponent, MarkdownComponentMap): @overload @classmethod def create( # type: ignore @@ -230,7 +231,7 @@ class Text(elements.Span, RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -487,7 +488,7 @@ class Span(Text): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -584,7 +585,7 @@ class Em(elements.Em, RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -679,7 +680,7 @@ class Kbd(elements.Kbd, RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -770,7 +771,7 @@ class Quote(elements.Q, RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -860,7 +861,7 @@ class Strong(elements.Strong, RadixThemesComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -1113,7 +1114,7 @@ class TextNamespace(ComponentNamespace): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/react_player/audio.pyi b/reflex/components/react_player/audio.pyi index a092251fe..797d5ad8a 100644 --- a/reflex/components/react_player/audio.pyi +++ b/reflex/components/react_player/audio.pyi @@ -33,7 +33,7 @@ class Audio(ReactPlayer): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_buffer: Optional[EventType[[], BASE_STATE]] = None, on_buffer_end: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/react_player/react_player.pyi b/reflex/components/react_player/react_player.pyi index 06ec95aab..4e2a8a821 100644 --- a/reflex/components/react_player/react_player.pyi +++ b/reflex/components/react_player/react_player.pyi @@ -38,7 +38,7 @@ class ReactPlayer(NoSSRComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_buffer: Optional[EventType[[], BASE_STATE]] = None, on_buffer_end: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/react_player/video.pyi b/reflex/components/react_player/video.pyi index a8f881ceb..3739d45c0 100644 --- a/reflex/components/react_player/video.pyi +++ b/reflex/components/react_player/video.pyi @@ -33,7 +33,7 @@ class Video(ReactPlayer): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_buffer: Optional[EventType[[], BASE_STATE]] = None, on_buffer_end: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/recharts/cartesian.pyi b/reflex/components/recharts/cartesian.pyi index 24d85f013..84f16661d 100644 --- a/reflex/components/recharts/cartesian.pyi +++ b/reflex/components/recharts/cartesian.pyi @@ -119,7 +119,7 @@ class Axis(Recharts): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -300,7 +300,7 @@ class XAxis(Axis): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -484,7 +484,7 @@ class YAxis(Axis): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -610,7 +610,7 @@ class ZAxis(Recharts): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -675,7 +675,7 @@ class Brush(Recharts): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_change: Optional[EventType[[], BASE_STATE]] = None, **props, ) -> "Brush": @@ -771,7 +771,7 @@ class Cartesian(Recharts): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_animation_end: Optional[EventType[[], BASE_STATE]] = None, on_animation_start: Optional[EventType[[], BASE_STATE]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, @@ -948,7 +948,7 @@ class Area(Cartesian): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_animation_end: Optional[EventType[[], BASE_STATE]] = None, on_animation_start: Optional[EventType[[], BASE_STATE]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, @@ -1090,7 +1090,7 @@ class Bar(Cartesian): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_animation_end: Optional[EventType[[], BASE_STATE]] = None, on_animation_start: Optional[EventType[[], BASE_STATE]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, @@ -1274,7 +1274,7 @@ class Line(Cartesian): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_animation_end: Optional[EventType[[], BASE_STATE]] = None, on_animation_start: Optional[EventType[[], BASE_STATE]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, @@ -1421,7 +1421,7 @@ class Scatter(Recharts): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -1536,7 +1536,7 @@ class Funnel(Recharts): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_animation_end: Optional[EventType[[], BASE_STATE]] = None, on_animation_start: Optional[EventType[[], BASE_STATE]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, @@ -1609,7 +1609,7 @@ class ErrorBar(Recharts): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -1670,7 +1670,7 @@ class Reference(Recharts): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -1736,7 +1736,7 @@ class ReferenceLine(Reference): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -1807,7 +1807,7 @@ class ReferenceDot(Reference): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -1887,7 +1887,7 @@ class ReferenceArea(Recharts): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -1948,7 +1948,7 @@ class Grid(Recharts): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -2014,7 +2014,7 @@ class CartesianGrid(Grid): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -2096,7 +2096,7 @@ class CartesianAxis(Grid): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/recharts/charts.pyi b/reflex/components/recharts/charts.pyi index 94cabdf00..6bf9b6a60 100644 --- a/reflex/components/recharts/charts.pyi +++ b/reflex/components/recharts/charts.pyi @@ -25,7 +25,7 @@ class ChartBase(RechartsCharts): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -97,7 +97,7 @@ class CategoricalChartBase(ChartBase): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -182,7 +182,7 @@ class AreaChart(CategoricalChartBase): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -266,7 +266,7 @@ class BarChart(CategoricalChartBase): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -349,7 +349,7 @@ class LineChart(CategoricalChartBase): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -438,7 +438,7 @@ class ComposedChart(CategoricalChartBase): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -504,7 +504,7 @@ class PieChart(ChartBase): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -572,7 +572,7 @@ class RadarChart(ChartBase): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_mouse_enter: Optional[EventType[[], BASE_STATE]] = None, on_mouse_leave: Optional[EventType[[], BASE_STATE]] = None, @@ -632,7 +632,7 @@ class RadialBarChart(ChartBase): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -699,7 +699,7 @@ class ScatterChart(ChartBase): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_mouse_down: Optional[EventType[[], BASE_STATE]] = None, on_mouse_enter: Optional[EventType[[], BASE_STATE]] = None, @@ -750,7 +750,7 @@ class FunnelChart(ChartBase): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -820,7 +820,7 @@ class Treemap(RechartsCharts): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_animation_end: Optional[EventType[[], BASE_STATE]] = None, on_animation_start: Optional[EventType[[], BASE_STATE]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/recharts/general.pyi b/reflex/components/recharts/general.pyi index fa3362500..823a50fce 100644 --- a/reflex/components/recharts/general.pyi +++ b/reflex/components/recharts/general.pyi @@ -30,7 +30,7 @@ class ResponsiveContainer(Recharts, MemoizationLeaf): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -141,7 +141,7 @@ class Legend(Recharts): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -231,7 +231,7 @@ class GraphingTooltip(Recharts): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -342,7 +342,7 @@ class Label(Recharts): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -442,7 +442,7 @@ class LabelList(Recharts): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/recharts/polar.pyi b/reflex/components/recharts/polar.pyi index 308c796cf..5ca96acb6 100644 --- a/reflex/components/recharts/polar.pyi +++ b/reflex/components/recharts/polar.pyi @@ -81,7 +81,7 @@ class Pie(Recharts): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_animation_end: Optional[EventType[[], BASE_STATE]] = None, on_animation_start: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, @@ -190,7 +190,7 @@ class Radar(Recharts): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_animation_end: Optional[EventType[[], BASE_STATE]] = None, on_animation_start: Optional[EventType[[], BASE_STATE]] = None, **props, @@ -286,7 +286,7 @@ class RadialBar(Recharts): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_animation_end: Optional[EventType[[], BASE_STATE]] = None, on_animation_start: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, @@ -355,7 +355,7 @@ class PolarAngleAxis(Recharts): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -431,7 +431,7 @@ class PolarGrid(Recharts): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -551,7 +551,7 @@ class PolarRadiusAxis(Recharts): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_mouse_enter: Optional[EventType[[], BASE_STATE]] = None, on_mouse_leave: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/recharts/recharts.pyi b/reflex/components/recharts/recharts.pyi index 5055707dc..10e1b96c1 100644 --- a/reflex/components/recharts/recharts.pyi +++ b/reflex/components/recharts/recharts.pyi @@ -22,7 +22,7 @@ class Recharts(Component): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -68,7 +68,7 @@ class RechartsCharts(NoSSRComponent, MemoizationLeaf): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/sonner/toast.pyi b/reflex/components/sonner/toast.pyi index aa6a5b780..f4f1028bd 100644 --- a/reflex/components/sonner/toast.pyi +++ b/reflex/components/sonner/toast.pyi @@ -116,7 +116,7 @@ class Toaster(Component): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/components/suneditor/editor.pyi b/reflex/components/suneditor/editor.pyi index 8ada33aba..66ab4863e 100644 --- a/reflex/components/suneditor/editor.pyi +++ b/reflex/components/suneditor/editor.pyi @@ -126,7 +126,7 @@ class Editor(NoSSRComponent): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[ Union[EventType[[], BASE_STATE], EventType[[str], BASE_STATE]] ] = None, diff --git a/reflex/event.py b/reflex/event.py index e51d1cc07..312c9887f 100644 --- a/reflex/event.py +++ b/reflex/event.py @@ -45,6 +45,9 @@ from reflex.vars import VarData from reflex.vars.base import LiteralVar, Var from reflex.vars.function import ( ArgsFunctionOperation, + ArgsFunctionOperationBuilder, + BuilderFunctionVar, + FunctionArgs, FunctionStringVar, FunctionVar, VarOperationCall, @@ -796,8 +799,7 @@ def scroll_to(elem_id: str, align_to_top: bool | Var[bool] = True) -> EventSpec: get_element_by_id = FunctionStringVar.create("document.getElementById") return run_script( - get_element_by_id(elem_id) - .call(elem_id) + get_element_by_id.call(elem_id) .to(ObjectVar) .scrollIntoView.to(FunctionVar) .call(align_to_top), @@ -898,7 +900,7 @@ def remove_session_storage(key: str) -> EventSpec: ) -def set_clipboard(content: str) -> EventSpec: +def set_clipboard(content: Union[str, Var[str]]) -> EventSpec: """Set the text in content in the clipboard. Args: @@ -1579,7 +1581,7 @@ class LiteralEventVar(VarOperationCall, LiteralVar, EventVar): ) -class EventChainVar(FunctionVar, python_types=EventChain): +class EventChainVar(BuilderFunctionVar, python_types=EventChain): """Base class for event chain vars.""" @@ -1591,7 +1593,7 @@ class EventChainVar(FunctionVar, python_types=EventChain): # Note: LiteralVar is second in the inheritance list allowing it act like a # CachedVarOperation (ArgsFunctionOperation) and get the _js_expr from the # _cached_var_name property. -class LiteralEventChainVar(ArgsFunctionOperation, LiteralVar, EventChainVar): +class LiteralEventChainVar(ArgsFunctionOperationBuilder, LiteralVar, EventChainVar): """A literal event chain var.""" _var_value: EventChain = dataclasses.field(default=None) # type: ignore @@ -1643,7 +1645,7 @@ class LiteralEventChainVar(ArgsFunctionOperation, LiteralVar, EventChainVar): _js_expr="", _var_type=EventChain, _var_data=_var_data, - _args_names=arg_def, + _args=FunctionArgs(arg_def), _return_expr=invocation.call( LiteralVar.create([LiteralVar.create(event) for event in value.events]), arg_def_expr, diff --git a/reflex/experimental/layout.pyi b/reflex/experimental/layout.pyi index a334e8de7..4c7fc8d47 100644 --- a/reflex/experimental/layout.pyi +++ b/reflex/experimental/layout.pyi @@ -50,7 +50,7 @@ class Sidebar(Box, MemoizationLeaf): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -118,7 +118,7 @@ class DrawerSidebar(DrawerRoot): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_animation_end: Optional[ Union[EventType[[], BASE_STATE], EventType[[bool], BASE_STATE]] ] = None, @@ -172,7 +172,7 @@ class SidebarTrigger(Fragment): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -237,7 +237,7 @@ class Layout(Box): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, @@ -305,7 +305,7 @@ class LayoutNamespace(ComponentNamespace): id: Optional[Any] = None, class_name: Optional[Any] = None, autofocus: Optional[bool] = None, - custom_attrs: Optional[Dict[str, Union[Var, str]]] = None, + custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None, on_blur: Optional[EventType[[], BASE_STATE]] = None, on_click: Optional[EventType[[], BASE_STATE]] = None, on_context_menu: Optional[EventType[[], BASE_STATE]] = None, diff --git a/reflex/reflex.py b/reflex/reflex.py index fa36b8601..b0aa51090 100644 --- a/reflex/reflex.py +++ b/reflex/reflex.py @@ -106,7 +106,7 @@ def _init( template = constants.Templates.DEFAULT # Initialize the app. - prerequisites.initialize_app(app_name, template) + template = prerequisites.initialize_app(app_name, template) # If a reflex.build generation hash is available, download the code and apply it to the main module. if generation_hash: @@ -120,8 +120,9 @@ def _init( # Initialize the requirements.txt. prerequisites.initialize_requirements_txt() + template_msg = "" if template else f" using the {template} template" # Finish initializing the app. - console.success(f"Initialized {app_name}") + console.success(f"Initialized {app_name}{template_msg}") @cli.command() diff --git a/reflex/state.py b/reflex/state.py index 94ff35a88..719ff43b3 100644 --- a/reflex/state.py +++ b/reflex/state.py @@ -11,6 +11,7 @@ import inspect import json import pickle import sys +import typing import uuid from abc import ABC, abstractmethod from collections import defaultdict @@ -45,6 +46,7 @@ from reflex import event from reflex.config import get_config from reflex.istate.data import RouterData from reflex.istate.storage import ClientStorageBase +from reflex.model import Model from reflex.vars.base import ( ComputedVar, DynamicRouteVar, @@ -90,7 +92,13 @@ from reflex.utils.exceptions import ( ) from reflex.utils.exec import is_testing_env from reflex.utils.serializers import serializer -from reflex.utils.types import _isinstance, get_origin, override +from reflex.utils.types import ( + _isinstance, + get_origin, + is_union, + override, + value_inside_optional, +) from reflex.vars import VarData if TYPE_CHECKING: @@ -1036,9 +1044,9 @@ class BaseState(Base, ABC, extra=pydantic.Extra.allow): Args: prop: The var to create a setter for. """ - setter_name = prop.get_setter_name(include_state=False) + setter_name = prop._get_setter_name(include_state=False) if setter_name not in cls.__dict__: - event_handler = cls._create_event_handler(prop.get_setter()) + event_handler = cls._create_event_handler(prop._get_setter()) cls.event_handlers[setter_name] = event_handler setattr(cls, setter_name, event_handler) @@ -1052,7 +1060,7 @@ class BaseState(Base, ABC, extra=pydantic.Extra.allow): # Get the pydantic field for the var. field = cls.get_fields()[prop._var_field_name] if field.required: - default_value = prop.get_default_value() + default_value = prop._get_default_value() if default_value is not None: field.required = False field.default = default_value @@ -1079,7 +1087,7 @@ class BaseState(Base, ABC, extra=pydantic.Extra.allow): return getattr(cls, name) except AttributeError: try: - return Var("", _var_type=annotation_value).get_default_value() + return Var("", _var_type=annotation_value)._get_default_value() except TypeError: pass return None @@ -1713,6 +1721,40 @@ class BaseState(Base, ABC, extra=pydantic.Extra.allow): # Get the function to process the event. fn = functools.partial(handler.fn, state) + try: + type_hints = typing.get_type_hints(handler.fn) + except Exception: + type_hints = {} + + for arg, value in list(payload.items()): + hinted_args = type_hints.get(arg, Any) + if hinted_args is Any: + continue + if is_union(hinted_args): + if value is None: + continue + hinted_args = value_inside_optional(hinted_args) + if isinstance(value, dict) and inspect.isclass(hinted_args): + if issubclass(hinted_args, Model): + # Remove non-fields from the payload + payload[arg] = hinted_args( + **{ + key: value + for key, value in value.items() + if key in hinted_args.__fields__ + } + ) + elif dataclasses.is_dataclass(hinted_args) or issubclass( + hinted_args, Base + ): + payload[arg] = hinted_args(**value) + if isinstance(value, list) and (hinted_args is set or hinted_args is Set): + payload[arg] = set(value) + if isinstance(value, list) and ( + hinted_args is tuple or hinted_args is Tuple + ): + payload[arg] = tuple(value) + # Wrap the function in a try/except block. try: # Handle async functions. @@ -1848,7 +1890,7 @@ class BaseState(Base, ABC, extra=pydantic.Extra.allow): ) subdelta: Dict[str, Any] = { - prop: self.get_value(getattr(self, prop)) + prop: self.get_value(prop) for prop in delta_vars if not types.is_backend_base_variable(prop, type(self)) } @@ -1940,9 +1982,10 @@ class BaseState(Base, ABC, extra=pydantic.Extra.allow): Returns: The value of the field. """ - if isinstance(key, MutableProxy): - return super().get_value(key.__wrapped__) - return super().get_value(key) + value = super().get_value(key) + if isinstance(value, MutableProxy): + return value.__wrapped__ + return value def dict( self, include_computed: bool = True, initial: bool = False, **kwargs @@ -1964,8 +2007,7 @@ class BaseState(Base, ABC, extra=pydantic.Extra.allow): self._mark_dirty() base_vars = { - prop_name: self.get_value(getattr(self, prop_name)) - for prop_name in self.base_vars + prop_name: self.get_value(prop_name) for prop_name in self.base_vars } if initial and include_computed: computed_vars = { @@ -1974,7 +2016,7 @@ class BaseState(Base, ABC, extra=pydantic.Extra.allow): cv._initial_value if is_computed_var(cv) and not isinstance(cv._initial_value, types.Unset) - else self.get_value(getattr(self, prop_name)) + else self.get_value(prop_name) ) for prop_name, cv in self.computed_vars.items() if not cv._backend @@ -1982,7 +2024,7 @@ class BaseState(Base, ABC, extra=pydantic.Extra.allow): elif include_computed: computed_vars = { # Include the computed vars. - prop_name: self.get_value(getattr(self, prop_name)) + prop_name: self.get_value(prop_name) for prop_name, cv in self.computed_vars.items() if not cv._backend } diff --git a/reflex/testing.py b/reflex/testing.py index bb7ead2d9..9ddb03504 100644 --- a/reflex/testing.py +++ b/reflex/testing.py @@ -118,7 +118,7 @@ class AppHarness: app_name: str app_source: Optional[ - types.FunctionType | types.ModuleType | str | functools.partial[Any] + Callable[[], None] | types.ModuleType | str | functools.partial[Any] ] app_path: pathlib.Path app_module_path: pathlib.Path @@ -138,7 +138,7 @@ class AppHarness: cls, root: pathlib.Path, app_source: Optional[ - types.FunctionType | types.ModuleType | str | functools.partial[Any] + Callable[[], None] | types.ModuleType | str | functools.partial[Any] ] = None, app_name: Optional[str] = None, ) -> "AppHarness": diff --git a/reflex/utils/prerequisites.py b/reflex/utils/prerequisites.py index a712e9a38..b2b3b7f3b 100644 --- a/reflex/utils/prerequisites.py +++ b/reflex/utils/prerequisites.py @@ -1378,7 +1378,7 @@ def create_config_init_app_from_remote_template(app_name: str, template_url: str shutil.rmtree(unzip_dir) -def initialize_app(app_name: str, template: str | None = None): +def initialize_app(app_name: str, template: str | None = None) -> str | None: """Initialize the app either from a remote template or a blank app. If the config file exists, it is considered as reinit. Args: @@ -1387,6 +1387,9 @@ def initialize_app(app_name: str, template: str | None = None): Raises: Exit: If template is directly provided in the command flag and is invalid. + + Returns: + The name of the template. """ # Local imports to avoid circular imports. from reflex.utils import telemetry @@ -1441,6 +1444,7 @@ def initialize_app(app_name: str, template: str | None = None): ) telemetry.send("init", template=template) + return template def initialize_main_module_index_from_generation(app_name: str, generation_hash: str): diff --git a/reflex/utils/serializers.py b/reflex/utils/serializers.py index d3dbb1d4c..b87909aec 100644 --- a/reflex/utils/serializers.py +++ b/reflex/utils/serializers.py @@ -18,6 +18,7 @@ from typing import ( Set, Tuple, Type, + TypeVar, Union, get_type_hints, overload, @@ -32,17 +33,33 @@ from reflex.utils import types SerializedType = Union[str, bool, int, float, list, dict, None] -Serializer = Callable[[Type], SerializedType] +Serializer = Callable[[Any], SerializedType] SERIALIZERS: dict[Type, Serializer] = {} SERIALIZER_TYPES: dict[Type, Type] = {} +SERIALIZED_FUNCTION = TypeVar("SERIALIZED_FUNCTION", bound=Serializer) + + +@overload +def serializer( + fn: None = None, + to: Type[SerializedType] | None = None, +) -> Callable[[SERIALIZED_FUNCTION], SERIALIZED_FUNCTION]: ... + + +@overload +def serializer( + fn: SERIALIZED_FUNCTION, + to: Type[SerializedType] | None = None, +) -> SERIALIZED_FUNCTION: ... + def serializer( - fn: Serializer | None = None, - to: Type | None = None, -) -> Serializer: + fn: SERIALIZED_FUNCTION | None = None, + to: Any = None, +) -> SERIALIZED_FUNCTION | Callable[[SERIALIZED_FUNCTION], SERIALIZED_FUNCTION]: """Decorator to add a serializer for a given type. Args: @@ -51,43 +68,44 @@ def serializer( Returns: The decorated function. - - Raises: - ValueError: If the function does not take a single argument. """ - if fn is None: - # If the function is not provided, return a partial that acts as a decorator. - return functools.partial(serializer, to=to) # type: ignore - # Check the type hints to get the type of the argument. - type_hints = get_type_hints(fn) - args = [arg for arg in type_hints if arg != "return"] + def wrapper(fn: SERIALIZED_FUNCTION) -> SERIALIZED_FUNCTION: + # Check the type hints to get the type of the argument. + type_hints = get_type_hints(fn) + args = [arg for arg in type_hints if arg != "return"] - # Make sure the function takes a single argument. - if len(args) != 1: - raise ValueError("Serializer must take a single argument.") + # Make sure the function takes a single argument. + if len(args) != 1: + raise ValueError("Serializer must take a single argument.") - # Get the type of the argument. - type_ = type_hints[args[0]] + # Get the type of the argument. + type_ = type_hints[args[0]] - # Make sure the type is not already registered. - registered_fn = SERIALIZERS.get(type_) - if registered_fn is not None and registered_fn != fn: - raise ValueError( - f"Serializer for type {type_} is already registered as {registered_fn.__qualname__}." - ) + # Make sure the type is not already registered. + registered_fn = SERIALIZERS.get(type_) + if registered_fn is not None and registered_fn != fn: + raise ValueError( + f"Serializer for type {type_} is already registered as {registered_fn.__qualname__}." + ) - # Apply type transformation if requested - if to is not None or ((to := type_hints.get("return")) is not None): - SERIALIZER_TYPES[type_] = to - get_serializer_type.cache_clear() + to_type = to or type_hints.get("return") - # Register the serializer. - SERIALIZERS[type_] = fn - get_serializer.cache_clear() + # Apply type transformation if requested + if to_type: + SERIALIZER_TYPES[type_] = to_type + get_serializer_type.cache_clear() - # Return the function. - return fn + # Register the serializer. + SERIALIZERS[type_] = fn + get_serializer.cache_clear() + + # Return the function. + return fn + + if fn is not None: + return wrapper(fn) + return wrapper @overload diff --git a/reflex/utils/telemetry.py b/reflex/utils/telemetry.py index 806b916fc..815d37a1b 100644 --- a/reflex/utils/telemetry.py +++ b/reflex/utils/telemetry.py @@ -51,7 +51,8 @@ def get_python_version() -> str: Returns: The Python version. """ - return platform.python_version() + # Remove the "+" from the version string in case user is using a pre-release version. + return platform.python_version().rstrip("+") def get_reflex_version() -> str: diff --git a/reflex/vars/base.py b/reflex/vars/base.py index 1fa0a539e..200f693de 100644 --- a/reflex/vars/base.py +++ b/reflex/vars/base.py @@ -361,21 +361,29 @@ class Var(Generic[VAR_TYPE]): return False def __init_subclass__( - cls, python_types: Tuple[GenericType, ...] | GenericType = types.Unset, **kwargs + cls, + python_types: Tuple[GenericType, ...] | GenericType = types.Unset(), + default_type: GenericType = types.Unset(), + **kwargs, ): """Initialize the subclass. Args: python_types: The python types that the var represents. + default_type: The default type of the var. Defaults to the first python type. **kwargs: Additional keyword arguments. """ super().__init_subclass__(**kwargs) - if python_types is not types.Unset: + if python_types or default_type: python_types = ( - python_types if isinstance(python_types, tuple) else (python_types,) + (python_types if isinstance(python_types, tuple) else (python_types,)) + if python_types + else () ) + default_type = default_type or (python_types[0] if python_types else Any) + @dataclasses.dataclass( eq=False, frozen=True, @@ -388,7 +396,7 @@ class Var(Generic[VAR_TYPE]): default=Var(_js_expr="null", _var_type=None), ) - _default_var_type: ClassVar[GenericType] = python_types[0] + _default_var_type: ClassVar[GenericType] = default_type ToVarOperation.__name__ = f'To{cls.__name__.removesuffix("Var")}Operation' @@ -588,6 +596,12 @@ class Var(Generic[VAR_TYPE]): output: type[list] | type[tuple] | type[set], ) -> ArrayVar: ... + @overload + def to( + self, + output: type[dict], + ) -> ObjectVar[dict]: ... + @overload def to( self, output: Type[ObjectVar], var_type: Type[VAR_INSIDE] @@ -734,7 +748,7 @@ class Var(Generic[VAR_TYPE]): return self - def get_default_value(self) -> Any: + def _get_default_value(self) -> Any: """Get the default value of the var. Returns: @@ -777,7 +791,7 @@ class Var(Generic[VAR_TYPE]): ) from e return set() if issubclass(type_, set) else None - def get_setter_name(self, include_state: bool = True) -> str: + def _get_setter_name(self, include_state: bool = True) -> str: """Get the name of the var's generated setter function. Args: @@ -794,7 +808,7 @@ class Var(Generic[VAR_TYPE]): return setter return ".".join((var_data.state, setter)) - def get_setter(self) -> Callable[[BaseState, Any], None]: + def _get_setter(self) -> Callable[[BaseState, Any], None]: """Get the var's setter function. Returns: @@ -820,7 +834,7 @@ class Var(Generic[VAR_TYPE]): else: setattr(state, actual_name, value) - setter.__qualname__ = self.get_setter_name() + setter.__qualname__ = self._get_setter_name() return setter @@ -953,7 +967,7 @@ class Var(Generic[VAR_TYPE]): else PROTOTYPE_TO_STRING.call(self).to(StringVar) ) - def as_ref(self) -> Var: + def _as_ref(self) -> Var: """Get a reference to the var. Returns: @@ -998,7 +1012,7 @@ class Var(Generic[VAR_TYPE]): type_of = FunctionStringVar("typeof") return type_of.call(self).to(StringVar) - def without_data(self): + def _without_data(self): """Create a copy of the var without the data. Returns: @@ -1006,20 +1020,6 @@ class Var(Generic[VAR_TYPE]): """ return dataclasses.replace(self, _var_data=None) - def contains(self, value: Any = None, field: Any = None): - """Get an attribute of the var. - - Args: - value: The value to check for. - field: The field to check for. - - Raises: - TypeError: If the var does not support contains check. - """ - raise TypeError( - f"Var of type {self._var_type} does not support contains check." - ) - def __get__(self, instance: Any, owner: Any): """Get the var. @@ -1032,14 +1032,6 @@ class Var(Generic[VAR_TYPE]): """ return self - def reverse(self): - """Reverse the var. - - Raises: - TypeError: If the var does not support reverse. - """ - raise TypeError("Cannot reverse non-list var.") - def __getattr__(self, name: str): """Get an attribute of the var. @@ -1056,6 +1048,13 @@ class Var(Generic[VAR_TYPE]): if name.startswith("_"): return self.__getattribute__(name) + if name == "contains": + raise TypeError( + f"Var of type {self._var_type} does not support contains check." + ) + if name == "reverse": + raise TypeError("Cannot reverse non-list var.") + if self._var_type is Any: raise TypeError( f"You must provide an annotation for the state var `{str(self)}`. Annotation cannot be `{self._var_type}`." @@ -1084,10 +1083,7 @@ class Var(Generic[VAR_TYPE]): try: return json.loads(str(self)) except ValueError: - try: - return json.loads(self.json()) - except (ValueError, NotImplementedError): - return str(self) + return str(self) @property def _var_state(self) -> str: @@ -1165,14 +1161,6 @@ class Var(Generic[VAR_TYPE]): "'in' operator not supported for Var types, use Var.contains() instead." ) - def json(self) -> str: - """Serialize the var to a JSON string. - - Raises: - NotImplementedError: If the method is not implemented. - """ - raise NotImplementedError("Var subclasses must implement the json method.") - OUTPUT = TypeVar("OUTPUT", bound=Var) diff --git a/reflex/vars/function.py b/reflex/vars/function.py index 49ef99614..c65b38f70 100644 --- a/reflex/vars/function.py +++ b/reflex/vars/function.py @@ -4,31 +4,177 @@ from __future__ import annotations import dataclasses import sys -from typing import Any, Callable, Optional, Tuple, Type, Union +from typing import Any, Callable, Optional, Sequence, Tuple, Type, Union, overload +from typing_extensions import Concatenate, Generic, ParamSpec, Protocol, TypeVar + +from reflex.utils import format from reflex.utils.types import GenericType from .base import CachedVarOperation, LiteralVar, Var, VarData, cached_property_no_lock +P = ParamSpec("P") +V1 = TypeVar("V1") +V2 = TypeVar("V2") +V3 = TypeVar("V3") +V4 = TypeVar("V4") +V5 = TypeVar("V5") +V6 = TypeVar("V6") +R = TypeVar("R") -class FunctionVar(Var[Callable], python_types=Callable): + +class ReflexCallable(Protocol[P, R]): + """Protocol for a callable.""" + + __call__: Callable[P, R] + + +CALLABLE_TYPE = TypeVar("CALLABLE_TYPE", bound=ReflexCallable, infer_variance=True) +OTHER_CALLABLE_TYPE = TypeVar( + "OTHER_CALLABLE_TYPE", bound=ReflexCallable, infer_variance=True +) + + +class FunctionVar(Var[CALLABLE_TYPE], default_type=ReflexCallable[Any, Any]): """Base class for immutable function vars.""" - def __call__(self, *args: Var | Any) -> ArgsFunctionOperation: - """Call the function with the given arguments. + @overload + def partial(self) -> FunctionVar[CALLABLE_TYPE]: ... + + @overload + def partial( + self: FunctionVar[ReflexCallable[Concatenate[V1, P], R]], + arg1: Union[V1, Var[V1]], + ) -> FunctionVar[ReflexCallable[P, R]]: ... + + @overload + def partial( + self: FunctionVar[ReflexCallable[Concatenate[V1, V2, P], R]], + arg1: Union[V1, Var[V1]], + arg2: Union[V2, Var[V2]], + ) -> FunctionVar[ReflexCallable[P, R]]: ... + + @overload + def partial( + self: FunctionVar[ReflexCallable[Concatenate[V1, V2, V3, P], R]], + arg1: Union[V1, Var[V1]], + arg2: Union[V2, Var[V2]], + arg3: Union[V3, Var[V3]], + ) -> FunctionVar[ReflexCallable[P, R]]: ... + + @overload + def partial( + self: FunctionVar[ReflexCallable[Concatenate[V1, V2, V3, V4, P], R]], + arg1: Union[V1, Var[V1]], + arg2: Union[V2, Var[V2]], + arg3: Union[V3, Var[V3]], + arg4: Union[V4, Var[V4]], + ) -> FunctionVar[ReflexCallable[P, R]]: ... + + @overload + def partial( + self: FunctionVar[ReflexCallable[Concatenate[V1, V2, V3, V4, V5, P], R]], + arg1: Union[V1, Var[V1]], + arg2: Union[V2, Var[V2]], + arg3: Union[V3, Var[V3]], + arg4: Union[V4, Var[V4]], + arg5: Union[V5, Var[V5]], + ) -> FunctionVar[ReflexCallable[P, R]]: ... + + @overload + def partial( + self: FunctionVar[ReflexCallable[Concatenate[V1, V2, V3, V4, V5, V6, P], R]], + arg1: Union[V1, Var[V1]], + arg2: Union[V2, Var[V2]], + arg3: Union[V3, Var[V3]], + arg4: Union[V4, Var[V4]], + arg5: Union[V5, Var[V5]], + arg6: Union[V6, Var[V6]], + ) -> FunctionVar[ReflexCallable[P, R]]: ... + + @overload + def partial( + self: FunctionVar[ReflexCallable[P, R]], *args: Var | Any + ) -> FunctionVar[ReflexCallable[P, R]]: ... + + @overload + def partial(self, *args: Var | Any) -> FunctionVar: ... + + def partial(self, *args: Var | Any) -> FunctionVar: # type: ignore + """Partially apply the function with the given arguments. Args: - *args: The arguments to call the function with. + *args: The arguments to partially apply the function with. Returns: - The function call operation. + The partially applied function. """ + if not args: + return ArgsFunctionOperation.create((), self) return ArgsFunctionOperation.create( ("...args",), VarOperationCall.create(self, *args, Var(_js_expr="...args")), ) - def call(self, *args: Var | Any) -> VarOperationCall: + @overload + def call( + self: FunctionVar[ReflexCallable[[V1], R]], arg1: Union[V1, Var[V1]] + ) -> VarOperationCall[[V1], R]: ... + + @overload + def call( + self: FunctionVar[ReflexCallable[[V1, V2], R]], + arg1: Union[V1, Var[V1]], + arg2: Union[V2, Var[V2]], + ) -> VarOperationCall[[V1, V2], R]: ... + + @overload + def call( + self: FunctionVar[ReflexCallable[[V1, V2, V3], R]], + arg1: Union[V1, Var[V1]], + arg2: Union[V2, Var[V2]], + arg3: Union[V3, Var[V3]], + ) -> VarOperationCall[[V1, V2, V3], R]: ... + + @overload + def call( + self: FunctionVar[ReflexCallable[[V1, V2, V3, V4], R]], + arg1: Union[V1, Var[V1]], + arg2: Union[V2, Var[V2]], + arg3: Union[V3, Var[V3]], + arg4: Union[V4, Var[V4]], + ) -> VarOperationCall[[V1, V2, V3, V4], R]: ... + + @overload + def call( + self: FunctionVar[ReflexCallable[[V1, V2, V3, V4, V5], R]], + arg1: Union[V1, Var[V1]], + arg2: Union[V2, Var[V2]], + arg3: Union[V3, Var[V3]], + arg4: Union[V4, Var[V4]], + arg5: Union[V5, Var[V5]], + ) -> VarOperationCall[[V1, V2, V3, V4, V5], R]: ... + + @overload + def call( + self: FunctionVar[ReflexCallable[[V1, V2, V3, V4, V5, V6], R]], + arg1: Union[V1, Var[V1]], + arg2: Union[V2, Var[V2]], + arg3: Union[V3, Var[V3]], + arg4: Union[V4, Var[V4]], + arg5: Union[V5, Var[V5]], + arg6: Union[V6, Var[V6]], + ) -> VarOperationCall[[V1, V2, V3, V4, V5, V6], R]: ... + + @overload + def call( + self: FunctionVar[ReflexCallable[P, R]], *args: Var | Any + ) -> VarOperationCall[P, R]: ... + + @overload + def call(self, *args: Var | Any) -> Var: ... + + def call(self, *args: Var | Any) -> Var: # type: ignore """Call the function with the given arguments. Args: @@ -37,19 +183,29 @@ class FunctionVar(Var[Callable], python_types=Callable): Returns: The function call operation. """ - return VarOperationCall.create(self, *args) + return VarOperationCall.create(self, *args).guess_type() + + __call__ = call -class FunctionStringVar(FunctionVar): +class BuilderFunctionVar( + FunctionVar[CALLABLE_TYPE], default_type=ReflexCallable[Any, Any] +): + """Base class for immutable function vars with the builder pattern.""" + + __call__ = FunctionVar.partial + + +class FunctionStringVar(FunctionVar[CALLABLE_TYPE]): """Base class for immutable function vars from a string.""" @classmethod def create( cls, func: str, - _var_type: Type[Callable] = Callable, + _var_type: Type[OTHER_CALLABLE_TYPE] = ReflexCallable[Any, Any], _var_data: VarData | None = None, - ) -> FunctionStringVar: + ) -> FunctionStringVar[OTHER_CALLABLE_TYPE]: """Create a new function var from a string. Args: @@ -59,7 +215,7 @@ class FunctionStringVar(FunctionVar): Returns: The function var. """ - return cls( + return FunctionStringVar( _js_expr=func, _var_type=_var_type, _var_data=_var_data, @@ -71,10 +227,10 @@ class FunctionStringVar(FunctionVar): frozen=True, **{"slots": True} if sys.version_info >= (3, 10) else {}, ) -class VarOperationCall(CachedVarOperation, Var): +class VarOperationCall(Generic[P, R], CachedVarOperation, Var[R]): """Base class for immutable vars that are the result of a function call.""" - _func: Optional[FunctionVar] = dataclasses.field(default=None) + _func: Optional[FunctionVar[ReflexCallable[P, R]]] = dataclasses.field(default=None) _args: Tuple[Union[Var, Any], ...] = dataclasses.field(default_factory=tuple) @cached_property_no_lock @@ -102,7 +258,7 @@ class VarOperationCall(CachedVarOperation, Var): @classmethod def create( cls, - func: FunctionVar, + func: FunctionVar[ReflexCallable[P, R]], *args: Var | Any, _var_type: GenericType = Any, _var_data: VarData | None = None, @@ -117,15 +273,78 @@ class VarOperationCall(CachedVarOperation, Var): Returns: The function call var. """ + function_return_type = ( + func._var_type.__args__[1] + if getattr(func._var_type, "__args__", None) + else Any + ) + var_type = _var_type if _var_type is not Any else function_return_type return cls( _js_expr="", - _var_type=_var_type, + _var_type=var_type, _var_data=_var_data, _func=func, _args=args, ) +@dataclasses.dataclass(frozen=True) +class DestructuredArg: + """Class for destructured arguments.""" + + fields: Tuple[str, ...] = tuple() + rest: Optional[str] = None + + def to_javascript(self) -> str: + """Convert the destructured argument to JavaScript. + + Returns: + The destructured argument in JavaScript. + """ + return format.wrap( + ", ".join(self.fields) + (f", ...{self.rest}" if self.rest else ""), + "{", + "}", + ) + + +@dataclasses.dataclass( + frozen=True, +) +class FunctionArgs: + """Class for function arguments.""" + + args: Tuple[Union[str, DestructuredArg], ...] = tuple() + rest: Optional[str] = None + + +def format_args_function_operation( + args: FunctionArgs, return_expr: Var | Any, explicit_return: bool +) -> str: + """Format an args function operation. + + Args: + args: The function arguments. + return_expr: The return expression. + explicit_return: Whether to use explicit return syntax. + + Returns: + The formatted args function operation. + """ + arg_names_str = ", ".join( + [arg if isinstance(arg, str) else arg.to_javascript() for arg in args.args] + ) + (f", ...{args.rest}" if args.rest else "") + + return_expr_str = str(LiteralVar.create(return_expr)) + + # Wrap return expression in curly braces if explicit return syntax is used. + return_expr_str_wrapped = ( + format.wrap(return_expr_str, "{", "}") if explicit_return else return_expr_str + ) + + return f"(({arg_names_str}) => {return_expr_str_wrapped})" + + @dataclasses.dataclass( eq=False, frozen=True, @@ -134,8 +353,9 @@ class VarOperationCall(CachedVarOperation, Var): class ArgsFunctionOperation(CachedVarOperation, FunctionVar): """Base class for immutable function defined via arguments and return expression.""" - _args_names: Tuple[str, ...] = dataclasses.field(default_factory=tuple) + _args: FunctionArgs = dataclasses.field(default_factory=FunctionArgs) _return_expr: Union[Var, Any] = dataclasses.field(default=None) + _explicit_return: bool = dataclasses.field(default=False) @cached_property_no_lock def _cached_var_name(self) -> str: @@ -144,21 +364,27 @@ class ArgsFunctionOperation(CachedVarOperation, FunctionVar): Returns: The name of the var. """ - return f"(({', '.join(self._args_names)}) => ({str(LiteralVar.create(self._return_expr))}))" + return format_args_function_operation( + self._args, self._return_expr, self._explicit_return + ) @classmethod def create( cls, - args_names: Tuple[str, ...], + args_names: Sequence[Union[str, DestructuredArg]], return_expr: Var | Any, + rest: str | None = None, + explicit_return: bool = False, _var_type: GenericType = Callable, _var_data: VarData | None = None, - ) -> ArgsFunctionOperation: + ): """Create a new function var. Args: args_names: The names of the arguments. return_expr: The return expression of the function. + rest: The name of the rest argument. + explicit_return: Whether to use explicit return syntax. _var_data: Additional hooks and imports associated with the Var. Returns: @@ -168,13 +394,86 @@ class ArgsFunctionOperation(CachedVarOperation, FunctionVar): _js_expr="", _var_type=_var_type, _var_data=_var_data, - _args_names=args_names, + _args=FunctionArgs(args=tuple(args_names), rest=rest), _return_expr=return_expr, + _explicit_return=explicit_return, ) -JSON_STRINGIFY = FunctionStringVar.create("JSON.stringify") -ARRAY_ISARRAY = FunctionStringVar.create("Array.isArray") -PROTOTYPE_TO_STRING = FunctionStringVar.create( - "((__to_string) => __to_string.toString())" +@dataclasses.dataclass( + eq=False, + frozen=True, + **{"slots": True} if sys.version_info >= (3, 10) else {}, ) +class ArgsFunctionOperationBuilder(CachedVarOperation, BuilderFunctionVar): + """Base class for immutable function defined via arguments and return expression with the builder pattern.""" + + _args: FunctionArgs = dataclasses.field(default_factory=FunctionArgs) + _return_expr: Union[Var, Any] = dataclasses.field(default=None) + _explicit_return: bool = dataclasses.field(default=False) + + @cached_property_no_lock + def _cached_var_name(self) -> str: + """The name of the var. + + Returns: + The name of the var. + """ + return format_args_function_operation( + self._args, self._return_expr, self._explicit_return + ) + + @classmethod + def create( + cls, + args_names: Sequence[Union[str, DestructuredArg]], + return_expr: Var | Any, + rest: str | None = None, + explicit_return: bool = False, + _var_type: GenericType = Callable, + _var_data: VarData | None = None, + ): + """Create a new function var. + + Args: + args_names: The names of the arguments. + return_expr: The return expression of the function. + rest: The name of the rest argument. + explicit_return: Whether to use explicit return syntax. + _var_data: Additional hooks and imports associated with the Var. + + Returns: + The function var. + """ + return cls( + _js_expr="", + _var_type=_var_type, + _var_data=_var_data, + _args=FunctionArgs(args=tuple(args_names), rest=rest), + _return_expr=return_expr, + _explicit_return=explicit_return, + ) + + +if python_version := sys.version_info[:2] >= (3, 10): + JSON_STRINGIFY = FunctionStringVar.create( + "JSON.stringify", _var_type=ReflexCallable[[Any], str] + ) + ARRAY_ISARRAY = FunctionStringVar.create( + "Array.isArray", _var_type=ReflexCallable[[Any], bool] + ) + PROTOTYPE_TO_STRING = FunctionStringVar.create( + "((__to_string) => __to_string.toString())", + _var_type=ReflexCallable[[Any], str], + ) +else: + JSON_STRINGIFY = FunctionStringVar.create( + "JSON.stringify", _var_type=ReflexCallable[Any, str] + ) + ARRAY_ISARRAY = FunctionStringVar.create( + "Array.isArray", _var_type=ReflexCallable[Any, bool] + ) + PROTOTYPE_TO_STRING = FunctionStringVar.create( + "((__to_string) => __to_string.toString())", + _var_type=ReflexCallable[Any, str], + ) diff --git a/tests/integration/test_background_task.py b/tests/integration/test_background_task.py index 00cf83ea0..d7fe20824 100644 --- a/tests/integration/test_background_task.py +++ b/tests/integration/test_background_task.py @@ -190,7 +190,7 @@ def background_task( """ with AppHarness.create( root=tmp_path_factory.mktemp("background_task"), - app_source=BackgroundTask, # type: ignore + app_source=BackgroundTask, ) as harness: yield harness diff --git a/tests/integration/test_call_script.py b/tests/integration/test_call_script.py index a949dc451..71200221b 100644 --- a/tests/integration/test_call_script.py +++ b/tests/integration/test_call_script.py @@ -355,7 +355,7 @@ def call_script(tmp_path_factory) -> Generator[AppHarness, None, None]: """ with AppHarness.create( root=tmp_path_factory.mktemp("call_script"), - app_source=CallScript, # type: ignore + app_source=CallScript, ) as harness: yield harness diff --git a/tests/integration/test_client_storage.py b/tests/integration/test_client_storage.py index ae66087e2..e8c95ab71 100644 --- a/tests/integration/test_client_storage.py +++ b/tests/integration/test_client_storage.py @@ -137,7 +137,7 @@ def client_side(tmp_path_factory) -> Generator[AppHarness, None, None]: """ with AppHarness.create( root=tmp_path_factory.mktemp("client_side"), - app_source=ClientSide, # type: ignore + app_source=ClientSide, ) as harness: yield harness diff --git a/tests/integration/test_component_state.py b/tests/integration/test_component_state.py index f4a295d07..97624e7c5 100644 --- a/tests/integration/test_component_state.py +++ b/tests/integration/test_component_state.py @@ -115,7 +115,7 @@ def component_state_app(tmp_path) -> Generator[AppHarness, None, None]: """ with AppHarness.create( root=tmp_path, - app_source=ComponentStateApp, # type: ignore + app_source=ComponentStateApp, ) as harness: yield harness diff --git a/tests/integration/test_computed_vars.py b/tests/integration/test_computed_vars.py index a39cb9e65..a41458173 100644 --- a/tests/integration/test_computed_vars.py +++ b/tests/integration/test_computed_vars.py @@ -125,7 +125,7 @@ def computed_vars( """ with AppHarness.create( root=tmp_path_factory.mktemp("computed_vars"), - app_source=ComputedVars, # type: ignore + app_source=ComputedVars, ) as harness: yield harness diff --git a/tests/integration/test_connection_banner.py b/tests/integration/test_connection_banner.py index 6921444b0..44187c8ba 100644 --- a/tests/integration/test_connection_banner.py +++ b/tests/integration/test_connection_banner.py @@ -52,7 +52,7 @@ def connection_banner(tmp_path) -> Generator[AppHarness, None, None]: """ with AppHarness.create( root=tmp_path, - app_source=ConnectionBanner, # type: ignore + app_source=ConnectionBanner, ) as harness: yield harness diff --git a/tests/integration/test_deploy_url.py b/tests/integration/test_deploy_url.py index f93e9db27..5c840d24d 100644 --- a/tests/integration/test_deploy_url.py +++ b/tests/integration/test_deploy_url.py @@ -44,7 +44,7 @@ def deploy_url_sample( """ with AppHarness.create( root=tmp_path_factory.mktemp("deploy_url_sample"), - app_source=DeployUrlSample, # type: ignore + app_source=DeployUrlSample, ) as harness: yield harness diff --git a/tests/integration/test_dynamic_components.py b/tests/integration/test_dynamic_components.py index aeebd10e9..6a68aa1a1 100644 --- a/tests/integration/test_dynamic_components.py +++ b/tests/integration/test_dynamic_components.py @@ -85,7 +85,7 @@ def dynamic_components(tmp_path_factory) -> Generator[AppHarness, None, None]: """ with AppHarness.create( root=tmp_path_factory.mktemp("dynamic_components"), - app_source=DynamicComponents, # type: ignore + app_source=DynamicComponents, ) as harness: assert harness.app_instance is not None, "app is not running" yield harness diff --git a/tests/integration/test_dynamic_routes.py b/tests/integration/test_dynamic_routes.py index ffb4b1c3c..eed066696 100644 --- a/tests/integration/test_dynamic_routes.py +++ b/tests/integration/test_dynamic_routes.py @@ -155,7 +155,7 @@ def dynamic_route( with app_harness_env.create( root=tmp_path_factory.mktemp("dynamic_route"), app_name=f"dynamicroute_{app_harness_env.__name__.lower()}", - app_source=DynamicRoute, # type: ignore + app_source=DynamicRoute, ) as harness: yield harness diff --git a/tests/integration/test_event_actions.py b/tests/integration/test_event_actions.py index 58e26bf09..15f3c9877 100644 --- a/tests/integration/test_event_actions.py +++ b/tests/integration/test_event_actions.py @@ -172,7 +172,7 @@ def event_action(tmp_path_factory) -> Generator[AppHarness, None, None]: """ with AppHarness.create( root=tmp_path_factory.mktemp("event_action"), - app_source=TestEventAction, # type: ignore + app_source=TestEventAction, ) as harness: yield harness diff --git a/tests/integration/test_event_chain.py b/tests/integration/test_event_chain.py index ea2d2191c..c4121ee94 100644 --- a/tests/integration/test_event_chain.py +++ b/tests/integration/test_event_chain.py @@ -277,7 +277,7 @@ def event_chain(tmp_path_factory) -> Generator[AppHarness, None, None]: """ with AppHarness.create( root=tmp_path_factory.mktemp("event_chain"), - app_source=EventChain, # type: ignore + app_source=EventChain, ) as harness: yield harness diff --git a/tests/integration/test_exception_handlers.py b/tests/integration/test_exception_handlers.py index 00683c48b..406c21e5d 100644 --- a/tests/integration/test_exception_handlers.py +++ b/tests/integration/test_exception_handlers.py @@ -11,7 +11,7 @@ from selenium.webdriver.remote.webdriver import WebDriver from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriverWait -from reflex.testing import AppHarness +from reflex.testing import AppHarness, AppHarnessProd def TestApp(): @@ -26,6 +26,8 @@ def TestApp(): class TestAppState(rx.State): """State for the TestApp app.""" + react_error: bool = False + def divide_by_number(self, number: int): """Divide by number and print the result. @@ -50,6 +52,18 @@ def TestApp(): on_click=lambda: TestAppState.divide_by_number(0), # type: ignore id="induce-backend-error-btn", ), + rx.button( + "induce_react_error", + on_click=TestAppState.set_react_error(True), # type: ignore + id="induce-react-error-btn", + ), + rx.box( + rx.cond( + TestAppState.react_error, + rx.Var.create({"invalid": "cannot have object as child"}), + "", + ), + ), ) @@ -70,7 +84,7 @@ def test_app( with app_harness_env.create( root=tmp_path_factory.mktemp("test_app"), app_name=f"testapp_{app_harness_env.__name__.lower()}", - app_source=TestApp, # type: ignore + app_source=TestApp, ) as harness: yield harness @@ -152,3 +166,37 @@ def test_backend_exception_handler_during_runtime( "divide_by_number" in captured_default_handler_output.out and "ZeroDivisionError" in captured_default_handler_output.out ) + + +def test_frontend_exception_handler_with_react( + test_app: AppHarness, + driver: WebDriver, + capsys, +): + """Test calling frontend exception handler during runtime. + + Render an object as a react child, which is invalid. + + Args: + test_app: harness for TestApp app + driver: WebDriver instance. + capsys: pytest fixture for capturing stdout and stderr. + + """ + reset_button = WebDriverWait(driver, 20).until( + EC.element_to_be_clickable((By.ID, "induce-react-error-btn")) + ) + + reset_button.click() + + # Wait for the error to be logged + time.sleep(2) + + captured_default_handler_output = capsys.readouterr() + if isinstance(test_app, AppHarnessProd): + assert "Error: Minified React error #31" in captured_default_handler_output.out + else: + assert ( + "Error: Objects are not valid as a React child (found: object with keys \n{invalid})" + in captured_default_handler_output.out + ) diff --git a/tests/integration/test_form_submit.py b/tests/integration/test_form_submit.py index 3bfcf6e8c..ea8750595 100644 --- a/tests/integration/test_form_submit.py +++ b/tests/integration/test_form_submit.py @@ -159,7 +159,7 @@ def form_submit(request, tmp_path_factory) -> Generator[AppHarness, None, None]: param_id = request._pyfuncitem.callspec.id.replace("-", "_") with AppHarness.create( root=tmp_path_factory.mktemp("form_submit"), - app_source=request.param, # type: ignore + app_source=request.param, app_name=request.param.func.__name__ + f"_{param_id}", ) as harness: assert harness.app_instance is not None, "app is not running" diff --git a/tests/integration/test_input.py b/tests/integration/test_input.py index 4679104a4..c718749aa 100644 --- a/tests/integration/test_input.py +++ b/tests/integration/test_input.py @@ -63,7 +63,7 @@ def fully_controlled_input(tmp_path) -> Generator[AppHarness, None, None]: """ with AppHarness.create( root=tmp_path, - app_source=FullyControlledInput, # type: ignore + app_source=FullyControlledInput, ) as harness: yield harness diff --git a/tests/integration/test_lifespan.py b/tests/integration/test_lifespan.py index 22c399c07..cb6c640ab 100644 --- a/tests/integration/test_lifespan.py +++ b/tests/integration/test_lifespan.py @@ -80,7 +80,7 @@ def lifespan_app(tmp_path) -> Generator[AppHarness, None, None]: """ with AppHarness.create( root=tmp_path, - app_source=LifespanApp, # type: ignore + app_source=LifespanApp, ) as harness: yield harness diff --git a/tests/integration/test_login_flow.py b/tests/integration/test_login_flow.py index ecaade9cf..1938672a3 100644 --- a/tests/integration/test_login_flow.py +++ b/tests/integration/test_login_flow.py @@ -62,7 +62,7 @@ def login_sample(tmp_path_factory) -> Generator[AppHarness, None, None]: """ with AppHarness.create( root=tmp_path_factory.mktemp("login_sample"), - app_source=LoginSample, # type: ignore + app_source=LoginSample, ) as harness: yield harness diff --git a/tests/integration/test_media.py b/tests/integration/test_media.py index c10f7102b..10af26591 100644 --- a/tests/integration/test_media.py +++ b/tests/integration/test_media.py @@ -84,7 +84,7 @@ def media_app(tmp_path) -> Generator[AppHarness, None, None]: """ with AppHarness.create( root=tmp_path, - app_source=MediaApp, # type: ignore + app_source=MediaApp, ) as harness: yield harness diff --git a/tests/integration/test_navigation.py b/tests/integration/test_navigation.py index b4505ed1c..4e81e4155 100644 --- a/tests/integration/test_navigation.py +++ b/tests/integration/test_navigation.py @@ -52,7 +52,7 @@ def navigation_app(tmp_path) -> Generator[AppHarness, None, None]: """ with AppHarness.create( root=tmp_path, - app_source=NavigationApp, # type: ignore + app_source=NavigationApp, ) as harness: yield harness diff --git a/tests/integration/test_server_side_event.py b/tests/integration/test_server_side_event.py index 7fd592d10..f04cc3beb 100644 --- a/tests/integration/test_server_side_event.py +++ b/tests/integration/test_server_side_event.py @@ -93,7 +93,7 @@ def server_side_event(tmp_path_factory) -> Generator[AppHarness, None, None]: """ with AppHarness.create( root=tmp_path_factory.mktemp("server_side_event"), - app_source=ServerSideEvent, # type: ignore + app_source=ServerSideEvent, ) as harness: yield harness diff --git a/tests/integration/test_shared_state.py b/tests/integration/test_shared_state.py index 6f59c5142..410669381 100644 --- a/tests/integration/test_shared_state.py +++ b/tests/integration/test_shared_state.py @@ -39,7 +39,7 @@ def shared_state( """ with AppHarness.create( root=tmp_path_factory.mktemp("shared_state"), - app_source=SharedStateApp, # type: ignore + app_source=SharedStateApp, ) as harness: yield harness diff --git a/tests/integration/test_state_inheritance.py b/tests/integration/test_state_inheritance.py index a9f55d9a9..81512a67a 100644 --- a/tests/integration/test_state_inheritance.py +++ b/tests/integration/test_state_inheritance.py @@ -217,7 +217,7 @@ def state_inheritance( """ with AppHarness.create( root=tmp_path_factory.mktemp("state_inheritance"), - app_source=StateInheritance, # type: ignore + app_source=StateInheritance, ) as harness: yield harness diff --git a/tests/integration/test_tailwind.py b/tests/integration/test_tailwind.py index bda664a1c..eb0fde759 100644 --- a/tests/integration/test_tailwind.py +++ b/tests/integration/test_tailwind.py @@ -78,7 +78,7 @@ def tailwind_app(tmp_path, tailwind_disabled) -> Generator[AppHarness, None, Non """ with AppHarness.create( root=tmp_path, - app_source=functools.partial(TailwindApp, tailwind_disabled=tailwind_disabled), # type: ignore + app_source=functools.partial(TailwindApp, tailwind_disabled=tailwind_disabled), app_name="tailwind_disabled_app" if tailwind_disabled else "tailwind_app", ) as harness: yield harness diff --git a/tests/integration/test_upload.py b/tests/integration/test_upload.py index 602905b3e..fe8ebb4d7 100644 --- a/tests/integration/test_upload.py +++ b/tests/integration/test_upload.py @@ -133,7 +133,7 @@ def upload_file(tmp_path_factory) -> Generator[AppHarness, None, None]: """ with AppHarness.create( root=tmp_path_factory.mktemp("upload_file"), - app_source=UploadFile, # type: ignore + app_source=UploadFile, ) as harness: yield harness diff --git a/tests/integration/test_var_operations.py b/tests/integration/test_var_operations.py index cae56e1a8..7a7c8328d 100644 --- a/tests/integration/test_var_operations.py +++ b/tests/integration/test_var_operations.py @@ -613,7 +613,7 @@ def var_operations(tmp_path_factory) -> Generator[AppHarness, None, None]: """ with AppHarness.create( root=tmp_path_factory.mktemp("var_operations"), - app_source=VarOperations, # type: ignore + app_source=VarOperations, ) as harness: assert harness.app_instance is not None, "app is not running" yield harness diff --git a/tests/integration/tests_playwright/test_stateless_app.py b/tests/integration/tests_playwright/test_stateless_app.py index 129b69dc7..0c0b2959b 100644 --- a/tests/integration/tests_playwright/test_stateless_app.py +++ b/tests/integration/tests_playwright/test_stateless_app.py @@ -33,7 +33,7 @@ def stateless_app(tmp_path_factory) -> Generator[AppHarness, None, None]: """ with AppHarness.create( root=tmp_path_factory.mktemp("stateless_app"), - app_source=StatelessApp, # type: ignore + app_source=StatelessApp, ) as harness: yield harness diff --git a/tests/integration/tests_playwright/test_table.py b/tests/integration/tests_playwright/test_table.py index 917247b89..0a39b197e 100644 --- a/tests/integration/tests_playwright/test_table.py +++ b/tests/integration/tests_playwright/test_table.py @@ -68,7 +68,7 @@ def table_app(tmp_path_factory) -> Generator[AppHarness, None, None]: """ with AppHarness.create( root=tmp_path_factory.mktemp("table"), - app_source=Table, # type: ignore + app_source=Table, ) as harness: assert harness.app_instance is not None, "app is not running" yield harness diff --git a/tests/test_node_version.py b/tests/test_node_version.py index 9555eb524..defba3d20 100644 --- a/tests/test_node_version.py +++ b/tests/test_node_version.py @@ -43,7 +43,7 @@ def node_version_app(tmp_path) -> Generator[AppHarness, Any, None]: """ with AppHarness.create( root=tmp_path, - app_source=TestNodeVersionApp, # type: ignore + app_source=TestNodeVersionApp, ) as harness: yield harness diff --git a/tests/units/components/base/test_script.py b/tests/units/components/base/test_script.py index b909b6c61..e9c40188b 100644 --- a/tests/units/components/base/test_script.py +++ b/tests/units/components/base/test_script.py @@ -62,14 +62,14 @@ def test_script_event_handler(): ) render_dict = component.render() assert ( - f'onReady={{((...args) => ((addEvents([(Event("{EvState.get_full_name()}.on_ready", ({{ }}), ({{ }})))], args, ({{ }})))))}}' + f'onReady={{((...args) => (addEvents([(Event("{EvState.get_full_name()}.on_ready", ({{ }}), ({{ }})))], args, ({{ }}))))}}' in render_dict["props"] ) assert ( - f'onLoad={{((...args) => ((addEvents([(Event("{EvState.get_full_name()}.on_load", ({{ }}), ({{ }})))], args, ({{ }})))))}}' + f'onLoad={{((...args) => (addEvents([(Event("{EvState.get_full_name()}.on_load", ({{ }}), ({{ }})))], args, ({{ }}))))}}' in render_dict["props"] ) assert ( - f'onError={{((...args) => ((addEvents([(Event("{EvState.get_full_name()}.on_error", ({{ }}), ({{ }})))], args, ({{ }})))))}}' + f'onError={{((...args) => (addEvents([(Event("{EvState.get_full_name()}.on_error", ({{ }}), ({{ }})))], args, ({{ }}))))}}' in render_dict["props"] ) diff --git a/tests/units/components/core/test_banner.py b/tests/units/components/core/test_banner.py index 7add913ea..fe6de5eae 100644 --- a/tests/units/components/core/test_banner.py +++ b/tests/units/components/core/test_banner.py @@ -4,6 +4,7 @@ from reflex.components.core.banner import ( ConnectionPulser, WebsocketTargetURL, ) +from reflex.components.radix.themes.base import RadixThemesComponent from reflex.components.radix.themes.typography.text import Text @@ -24,7 +25,7 @@ def test_connection_banner(): "react", "$/utils/context", "$/utils/state", - "@radix-ui/themes@^3.0.0", + RadixThemesComponent().library or "", "$/env.json", ) ) @@ -42,7 +43,7 @@ def test_connection_modal(): "react", "$/utils/context", "$/utils/state", - "@radix-ui/themes@^3.0.0", + RadixThemesComponent().library or "", "$/env.json", ) ) diff --git a/tests/units/components/datadisplay/test_code.py b/tests/units/components/datadisplay/test_code.py index 809c68fe5..6b7168756 100644 --- a/tests/units/components/datadisplay/test_code.py +++ b/tests/units/components/datadisplay/test_code.py @@ -11,22 +11,3 @@ def test_code_light_dark_theme(theme, expected): code_block = CodeBlock.create(theme=theme) assert code_block.theme._js_expr == expected # type: ignore - - -def generate_custom_code(language, expected_case): - return f"SyntaxHighlighter.registerLanguage('{language}', {expected_case})" - - -@pytest.mark.parametrize( - "language, expected_case", - [ - ("python", "python"), - ("firestore-security-rules", "firestoreSecurityRules"), - ("typescript", "typescript"), - ], -) -def test_get_custom_code(language, expected_case): - code_block = CodeBlock.create(language=language) - assert code_block._get_custom_code() == generate_custom_code( - language, expected_case - ) diff --git a/tests/units/components/markdown/__init__.py b/tests/units/components/markdown/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/units/components/markdown/test_markdown.py b/tests/units/components/markdown/test_markdown.py new file mode 100644 index 000000000..866f32ae1 --- /dev/null +++ b/tests/units/components/markdown/test_markdown.py @@ -0,0 +1,190 @@ +from typing import Type + +import pytest + +from reflex.components.component import Component, memo +from reflex.components.datadisplay.code import CodeBlock +from reflex.components.datadisplay.shiki_code_block import ShikiHighLevelCodeBlock +from reflex.components.markdown.markdown import Markdown, MarkdownComponentMap +from reflex.components.radix.themes.layout.box import Box +from reflex.components.radix.themes.typography.heading import Heading +from reflex.vars.base import Var + + +class CustomMarkdownComponent(Component, MarkdownComponentMap): + """A custom markdown component.""" + + tag = "CustomMarkdownComponent" + library = "custom" + + @classmethod + def get_fn_args(cls) -> tuple[str, ...]: + """Return the function arguments. + + Returns: + The function arguments. + """ + return ("custom_node", "custom_children", "custom_props") + + @classmethod + def get_fn_body(cls) -> Var: + """Return the function body. + + Returns: + The function body. + """ + return Var(_js_expr="{return custom_node + custom_children + custom_props}") + + +def syntax_highlighter_memoized_component(codeblock: Type[Component]): + @memo + def code_block(code: str, language: str): + return Box.create( + codeblock.create( + code, + language=language, + class_name="code-block", + can_copy=True, + ), + class_name="relative mb-4", + ) + + def code_block_markdown(*children, **props): + return code_block( + code=children[0], language=props.pop("language", "plain"), **props + ) + + return code_block_markdown + + +@pytest.mark.parametrize( + "fn_body, fn_args, explicit_return, expected", + [ + ( + None, + None, + False, + Var(_js_expr="(({node, children, ...props}) => undefined)"), + ), + ("return node", ("node",), True, Var(_js_expr="(({node}) => {return node})")), + ( + "return node + children", + ("node", "children"), + True, + Var(_js_expr="(({node, children}) => {return node + children})"), + ), + ( + "return node + props", + ("node", "...props"), + True, + Var(_js_expr="(({node, ...props}) => {return node + props})"), + ), + ( + "return node + children + props", + ("node", "children", "...props"), + True, + Var( + _js_expr="(({node, children, ...props}) => {return node + children + props})" + ), + ), + ], +) +def test_create_map_fn_var(fn_body, fn_args, explicit_return, expected): + result = MarkdownComponentMap.create_map_fn_var( + fn_body=Var(_js_expr=fn_body, _var_type=str) if fn_body else None, + fn_args=fn_args, + explicit_return=explicit_return, + ) + assert result._js_expr == expected._js_expr + + +@pytest.mark.parametrize( + ("cls", "fn_body", "fn_args", "explicit_return", "expected"), + [ + ( + MarkdownComponentMap, + None, + None, + False, + Var(_js_expr="(({node, children, ...props}) => undefined)"), + ), + ( + MarkdownComponentMap, + "return node", + ("node",), + True, + Var(_js_expr="(({node}) => {return node})"), + ), + ( + CustomMarkdownComponent, + None, + None, + True, + Var( + _js_expr="(({custom_node, custom_children, custom_props}) => {return custom_node + custom_children + custom_props})" + ), + ), + ( + CustomMarkdownComponent, + "return custom_node", + ("custom_node",), + True, + Var(_js_expr="(({custom_node}) => {return custom_node})"), + ), + ], +) +def test_create_map_fn_var_subclass(cls, fn_body, fn_args, explicit_return, expected): + result = cls.create_map_fn_var( + fn_body=Var(_js_expr=fn_body, _var_type=int) if fn_body else None, + fn_args=fn_args, + explicit_return=explicit_return, + ) + assert result._js_expr == expected._js_expr + + +@pytest.mark.parametrize( + "key,component_map, expected", + [ + ( + "code", + {}, + """(({node, inline, className, children, ...props}) => { const match = (className || '').match(/language-(?.*)/); const _language = match ? match[1] : ''; if (_language) { (async () => { try { const module = await import(`react-syntax-highlighter/dist/cjs/languages/prism/${_language}`); SyntaxHighlighter.registerLanguage(_language, module.default); } catch (error) { console.error(`Error importing language module for ${_language}:`, error); } })(); } ; return inline ? ( {children} ) : ( ); })""", + ), + ( + "code", + { + "codeblock": lambda value, **props: ShikiHighLevelCodeBlock.create( + value, **props + ) + }, + """(({node, inline, className, children, ...props}) => { const match = (className || '').match(/language-(?.*)/); const _language = match ? match[1] : ''; ; return inline ? ( {children} ) : ( ); })""", + ), + ( + "h1", + { + "h1": lambda value: CustomMarkdownComponent.create( + Heading.create(value, as_="h1", size="6", margin_y="0.5em") + ) + }, + """(({custom_node, custom_children, custom_props}) => ({children}))""", + ), + ( + "code", + {"codeblock": syntax_highlighter_memoized_component(CodeBlock)}, + """(({node, inline, className, children, ...props}) => { const match = (className || '').match(/language-(?.*)/); const _language = match ? match[1] : ''; if (_language) { (async () => { try { const module = await import(`react-syntax-highlighter/dist/cjs/languages/prism/${_language}`); SyntaxHighlighter.registerLanguage(_language, module.default); } catch (error) { console.error(`Error importing language module for ${_language}:`, error); } })(); } ; return inline ? ( {children} ) : ( ); })""", + ), + ( + "code", + { + "codeblock": syntax_highlighter_memoized_component( + ShikiHighLevelCodeBlock + ) + }, + """(({node, inline, className, children, ...props}) => { const match = (className || '').match(/language-(?.*)/); const _language = match ? match[1] : ''; ; return inline ? ( {children} ) : ( ); })""", + ), + ], +) +def test_markdown_format_component(key, component_map, expected): + markdown = Markdown.create("# header", component_map=component_map) + result = markdown.format_component_map() + assert str(result[key]) == expected diff --git a/tests/units/components/test_component.py b/tests/units/components/test_component.py index e4744b9fb..a2485d10e 100644 --- a/tests/units/components/test_component.py +++ b/tests/units/components/test_component.py @@ -844,9 +844,9 @@ def test_component_event_trigger_arbitrary_args(): comp = C1.create(on_foo=C1State.mock_handler) assert comp.render()["props"][0] == ( - "onFoo={((__e, _alpha, _bravo, _charlie) => ((addEvents(" + "onFoo={((__e, _alpha, _bravo, _charlie) => (addEvents(" f'[(Event("{C1State.get_full_name()}.mock_handler", ({{ ["_e"] : __e["target"]["value"], ["_bravo"] : _bravo["nested"], ["_charlie"] : (_charlie["custom"] + 42) }}), ({{ }})))], ' - "[__e, _alpha, _bravo, _charlie], ({ })))))}" + "[__e, _alpha, _bravo, _charlie], ({ }))))}" ) diff --git a/tests/units/test_event.py b/tests/units/test_event.py index 5e26da5d8..f17b3c4e4 100644 --- a/tests/units/test_event.py +++ b/tests/units/test_event.py @@ -222,16 +222,16 @@ def test_event_console_log(): assert spec.handler.fn.__qualname__ == "_call_function" assert spec.args[0][0].equals(Var(_js_expr="function")) assert spec.args[0][1].equals( - Var('(() => ((console["log"]("message"))))', _var_type=Callable) + Var('(() => (console["log"]("message")))', _var_type=Callable) ) assert ( format.format_event(spec) - == 'Event("_call_function", {function:(() => ((console["log"]("message"))))})' + == 'Event("_call_function", {function:(() => (console["log"]("message")))})' ) spec = event.console_log(Var(_js_expr="message")) assert ( format.format_event(spec) - == 'Event("_call_function", {function:(() => ((console["log"](message))))})' + == 'Event("_call_function", {function:(() => (console["log"](message)))})' ) @@ -242,16 +242,16 @@ def test_event_window_alert(): assert spec.handler.fn.__qualname__ == "_call_function" assert spec.args[0][0].equals(Var(_js_expr="function")) assert spec.args[0][1].equals( - Var('(() => ((window["alert"]("message"))))', _var_type=Callable) + Var('(() => (window["alert"]("message")))', _var_type=Callable) ) assert ( format.format_event(spec) - == 'Event("_call_function", {function:(() => ((window["alert"]("message"))))})' + == 'Event("_call_function", {function:(() => (window["alert"]("message")))})' ) spec = event.window_alert(Var(_js_expr="message")) assert ( format.format_event(spec) - == 'Event("_call_function", {function:(() => ((window["alert"](message))))})' + == 'Event("_call_function", {function:(() => (window["alert"](message)))})' ) diff --git a/tests/units/test_state.py b/tests/units/test_state.py index 2ce0b7bd5..a69b9916a 100644 --- a/tests/units/test_state.py +++ b/tests/units/test_state.py @@ -3411,3 +3411,33 @@ def test_typed_state() -> None: field: rx.Field[str] = rx.field("") _ = TypedState(field="str") + + +def test_get_value(): + class GetValueState(rx.State): + foo: str = "FOO" + bar: str = "BAR" + + state = GetValueState() + + assert state.dict() == { + state.get_full_name(): { + "foo": "FOO", + "bar": "BAR", + } + } + assert state.get_delta() == {} + + state.bar = "foo" + + assert state.dict() == { + state.get_full_name(): { + "foo": "FOO", + "bar": "foo", + } + } + assert state.get_delta() == { + state.get_full_name(): { + "bar": "foo", + } + } diff --git a/tests/units/test_testing.py b/tests/units/test_testing.py index b01709202..83a03ad83 100644 --- a/tests/units/test_testing.py +++ b/tests/units/test_testing.py @@ -29,7 +29,7 @@ def test_app_harness(tmp_path): with AppHarness.create( root=tmp_path, - app_source=BasicApp, # type: ignore + app_source=BasicApp, ) as harness: assert harness.app_instance is not None assert harness.backend is not None diff --git a/tests/units/test_var.py b/tests/units/test_var.py index 8ff829eac..4940246e7 100644 --- a/tests/units/test_var.py +++ b/tests/units/test_var.py @@ -22,7 +22,11 @@ from reflex.vars.base import ( var_operation, var_operation_return, ) -from reflex.vars.function import ArgsFunctionOperation, FunctionStringVar +from reflex.vars.function import ( + ArgsFunctionOperation, + DestructuredArg, + FunctionStringVar, +) from reflex.vars.number import LiteralBooleanVar, LiteralNumberVar, NumberVar from reflex.vars.object import LiteralObjectVar, ObjectVar from reflex.vars.sequence import ( @@ -211,7 +215,7 @@ def test_str(prop, expected): @pytest.mark.parametrize( - "prop,expected", + ("prop", "expected"), [ (Var(_js_expr="p", _var_type=int), 0), (Var(_js_expr="p", _var_type=float), 0.0), @@ -223,14 +227,14 @@ def test_str(prop, expected): (Var(_js_expr="p", _var_type=set), set()), ], ) -def test_default_value(prop, expected): +def test_default_value(prop: Var, expected): """Test that the default value of a var is correct. Args: prop: The var to test. expected: The expected default value. """ - assert prop.get_default_value() == expected + assert prop._get_default_value() == expected @pytest.mark.parametrize( @@ -246,14 +250,14 @@ def test_default_value(prop, expected): ], ), ) -def test_get_setter(prop, expected): +def test_get_setter(prop: Var, expected): """Test that the name of the setter function of a var is correct. Args: prop: The var to test. expected: The expected name of the setter function. """ - assert prop.get_setter_name() == expected + assert prop._get_setter_name() == expected @pytest.mark.parametrize( @@ -921,13 +925,13 @@ def test_function_var(): ) assert ( str(manual_addition_func.call(1, 2)) - == '(((a, b) => (({ ["args"] : [a, b], ["result"] : a + b })))(1, 2))' + == '(((a, b) => ({ ["args"] : [a, b], ["result"] : a + b }))(1, 2))' ) - increment_func = addition_func(1) + increment_func = addition_func.partial(1) assert ( str(increment_func.call(2)) - == "(((...args) => ((((a, b) => a + b)(1, ...args))))(2))" + == "(((...args) => (((a, b) => a + b)(1, ...args)))(2))" ) create_hello_statement = ArgsFunctionOperation.create( @@ -937,9 +941,25 @@ def test_function_var(): last_name = LiteralStringVar.create("Universe") assert ( str(create_hello_statement.call(f"{first_name} {last_name}")) - == '(((name) => (("Hello, "+name+"!")))("Steven Universe"))' + == '(((name) => ("Hello, "+name+"!"))("Steven Universe"))' ) + # Test with destructured arguments + destructured_func = ArgsFunctionOperation.create( + (DestructuredArg(fields=("a", "b")),), + Var(_js_expr="a + b"), + ) + assert ( + str(destructured_func.call({"a": 1, "b": 2})) + == '((({a, b}) => a + b)(({ ["a"] : 1, ["b"] : 2 })))' + ) + + # Test with explicit return + explicit_return_func = ArgsFunctionOperation.create( + ("a", "b"), Var(_js_expr="return a + b"), explicit_return=True + ) + assert str(explicit_return_func.call(1, 2)) == "(((a, b) => {return a + b})(1, 2))" + def test_var_operation(): @var_operation @@ -1302,7 +1322,6 @@ def test_fstring_roundtrip(value): Var(_js_expr="var", _var_type=float).guess_type(), Var(_js_expr="var", _var_type=str).guess_type(), Var(_js_expr="var", _var_type=bool).guess_type(), - Var(_js_expr="var", _var_type=dict).guess_type(), Var(_js_expr="var", _var_type=None).guess_type(), ], ) @@ -1323,10 +1342,10 @@ def test_unsupported_types_for_reverse(var): Var(_js_expr="var", _var_type=int).guess_type(), Var(_js_expr="var", _var_type=float).guess_type(), Var(_js_expr="var", _var_type=bool).guess_type(), - Var(_js_expr="var", _var_type=None).guess_type(), + Var(_js_expr="var", _var_type=type(None)).guess_type(), ], ) -def test_unsupported_types_for_contains(var): +def test_unsupported_types_for_contains(var: Var): """Test that unsupported types for contains throw a type error. Args: diff --git a/tests/units/utils/test_format.py b/tests/units/utils/test_format.py index f8b605541..cd1d0179d 100644 --- a/tests/units/utils/test_format.py +++ b/tests/units/utils/test_format.py @@ -374,7 +374,7 @@ def test_format_match( events=[EventSpec(handler=EventHandler(fn=mock_event))], args_spec=lambda: [], ), - '((...args) => ((addEvents([(Event("mock_event", ({ }), ({ })))], args, ({ })))))', + '((...args) => (addEvents([(Event("mock_event", ({ }), ({ })))], args, ({ }))))', ), ( EventChain( @@ -395,7 +395,7 @@ def test_format_match( ], args_spec=lambda e: [e.target.value], ), - '((_e) => ((addEvents([(Event("mock_event", ({ ["arg"] : _e["target"]["value"] }), ({ })))], [_e], ({ })))))', + '((_e) => (addEvents([(Event("mock_event", ({ ["arg"] : _e["target"]["value"] }), ({ })))], [_e], ({ }))))', ), ( EventChain( @@ -403,7 +403,7 @@ def test_format_match( args_spec=lambda: [], event_actions={"stopPropagation": True}, ), - '((...args) => ((addEvents([(Event("mock_event", ({ }), ({ })))], args, ({ ["stopPropagation"] : true })))))', + '((...args) => (addEvents([(Event("mock_event", ({ }), ({ })))], args, ({ ["stopPropagation"] : true }))))', ), ( EventChain( @@ -415,7 +415,7 @@ def test_format_match( ], args_spec=lambda: [], ), - '((...args) => ((addEvents([(Event("mock_event", ({ }), ({ ["stopPropagation"] : true })))], args, ({ })))))', + '((...args) => (addEvents([(Event("mock_event", ({ }), ({ ["stopPropagation"] : true })))], args, ({ }))))', ), ( EventChain( @@ -423,7 +423,7 @@ def test_format_match( args_spec=lambda: [], event_actions={"preventDefault": True}, ), - '((...args) => ((addEvents([(Event("mock_event", ({ }), ({ })))], args, ({ ["preventDefault"] : true })))))', + '((...args) => (addEvents([(Event("mock_event", ({ }), ({ })))], args, ({ ["preventDefault"] : true }))))', ), ({"a": "red", "b": "blue"}, '({ ["a"] : "red", ["b"] : "blue" })'), (Var(_js_expr="var", _var_type=int).guess_type(), "var"),