[REF-144] Add context in each component to prevent rerenders (#2198)

This commit is contained in:
Masen Furer 2023-11-27 16:05:59 -08:00 committed by GitHub
parent ed5b3818cb
commit 527437cf23
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
140 changed files with 1688 additions and 736 deletions

View File

@ -540,6 +540,29 @@ def VarOperations():
rx.text(rx.Var.range(2, 10, 2).join(","), id="list_join_range2"), rx.text(rx.Var.range(2, 10, 2).join(","), id="list_join_range2"),
rx.text(rx.Var.range(5, 0, -1).join(","), id="list_join_range3"), rx.text(rx.Var.range(5, 0, -1).join(","), id="list_join_range3"),
rx.text(rx.Var.range(0, 3).join(","), id="list_join_range4"), rx.text(rx.Var.range(0, 3).join(","), id="list_join_range4"),
rx.box(
rx.foreach(
rx.Var.range(0, 2), lambda x: rx.text(VarOperationState.list1[x])
),
id="foreach_list_arg",
),
rx.box(
rx.foreach(
rx.Var.range(0, 2),
lambda x, ix: rx.text(VarOperationState.list1[ix]),
),
id="foreach_list_ix",
),
rx.box(
rx.foreach(
rx.Var.create_safe(list(range(0, 3))).to(list[int]),
lambda x: rx.foreach(
rx.Var.range(x),
lambda y: rx.text(VarOperationState.list1[y]),
),
),
id="foreach_list_nested",
),
) )
app.compile() app.compile()
@ -731,6 +754,10 @@ def test_var_operations(driver, var_operations: AppHarness):
("list_index_mod", "second"), ("list_index_mod", "second"),
# html component with var # html component with var
("html_str", "hello"), ("html_str", "hello"),
# index into list with foreach
("foreach_list_arg", "1\n2"),
("foreach_list_ix", "1\n2"),
("foreach_list_nested", "1\n1\n2"),
] ]
for tag, expected in tests: for tag, expected in tests:

View File

@ -0,0 +1,15 @@
{% import 'web/pages/utils.js.jinja2' as utils %}
export function {{tag_name}} () {
{% for hook in component.get_hooks() %}
{{ hook }}
{% endfor %}
{% for hook in memo_trigger_hooks %}
{{ hook }}
{% endfor %}
return (
{{utils.render(component.render(), indent_width=0)}}
)
}

View File

@ -0,0 +1,5 @@
{% extends "web/pages/base_page.js.jinja2" %}
{% block export %}
{{ memoized_code }}
{% endblock %}

View File

@ -1,5 +1,5 @@
import { createContext, useContext, useMemo, useReducer, useState } from "react" import { createContext, useContext, useMemo, useReducer, useState } from "react"
import { applyDelta, Event, hydrateClientStorage, useEventLoop } from "/utils/state.js" import { applyDelta, Event, hydrateClientStorage, useEventLoop, refs } from "/utils/state.js"
{% if initial_state %} {% if initial_state %}
export const initialState = {{ initial_state|json_dumps }} export const initialState = {{ initial_state|json_dumps }}
@ -8,6 +8,7 @@ export const initialState = {}
{% endif %} {% endif %}
export const ColorModeContext = createContext(null); export const ColorModeContext = createContext(null);
export const UploadFilesContext = createContext(null);
export const DispatchContext = createContext(null); export const DispatchContext = createContext(null);
export const StateContexts = { export const StateContexts = {
{% for state_name in initial_state %} {% for state_name in initial_state %}
@ -31,6 +32,20 @@ export const initialEvents = () => []
export const isDevMode = {{ is_dev_mode|json_dumps }} export const isDevMode = {{ is_dev_mode|json_dumps }}
export function UploadFilesProvider({ children }) {
const [filesById, setFilesById] = useState({})
refs["__clear_selected_files"] = (id) => setFilesById(filesById => {
const newFilesById = {...filesById}
delete newFilesById[id]
return newFilesById
})
return (
<UploadFilesContext.Provider value={[filesById, setFilesById]}>
{children}
</UploadFilesContext.Provider>
)
}
export function EventLoopProvider({ children }) { export function EventLoopProvider({ children }) {
const dispatch = useContext(DispatchContext) const dispatch = useContext(DispatchContext)
const [addEvents, connectError] = useEventLoop( const [addEvents, connectError] = useEventLoop(

View File

@ -34,8 +34,6 @@ const event_queue = [];
// Pending upload promises, by id // Pending upload promises, by id
const upload_controllers = {}; const upload_controllers = {};
// Upload files state by id
export const upload_files = {};
/** /**
* Generate a UUID (Used for session tokens). * Generate a UUID (Used for session tokens).
@ -363,7 +361,10 @@ export const uploadFiles = async (handler, files, upload_id, on_upload_progress,
}) })
resp_idx += 1 resp_idx += 1
} catch (e) { } catch (e) {
console.log("Error parsing chunk", chunk, e) if (progressEvent.progress === 1) {
// Chunk may be incomplete, so only report errors when full response is available.
console.log("Error parsing chunk", chunk, e)
}
return return
} }
}) })

View File

@ -2,11 +2,11 @@
from __future__ import annotations from __future__ import annotations
import asyncio import asyncio
import concurrent.futures
import contextlib import contextlib
import copy import copy
import functools import functools
import os import os
from multiprocessing.pool import ThreadPool
from typing import ( from typing import (
Any, Any,
AsyncIterator, AsyncIterator,
@ -636,9 +636,6 @@ class App(Base):
TimeElapsedColumn(), TimeElapsedColumn(),
) )
task = progress.add_task("Compiling: ", total=len(self.pages))
# TODO: include all work done in progress indicator, not just self.pages
# Get the env mode. # Get the env mode.
config = get_config() config = get_config()
@ -648,9 +645,7 @@ class App(Base):
# Compile the pages in parallel. # Compile the pages in parallel.
custom_components = set() custom_components = set()
# TODO Anecdotally, processes=2 works 10% faster (cpu_count=12) # TODO Anecdotally, processes=2 works 10% faster (cpu_count=12)
thread_pool = ThreadPool()
all_imports = {} all_imports = {}
page_futures = []
app_wrappers: Dict[tuple[int, str], Component] = { app_wrappers: Dict[tuple[int, str], Component] = {
# Default app wrap component renders {children} # Default app wrap component renders {children}
(0, "AppWrap"): AppWrap.create() (0, "AppWrap"): AppWrap.create()
@ -659,81 +654,113 @@ class App(Base):
# If a theme component was provided, wrap the app with it # If a theme component was provided, wrap the app with it
app_wrappers[(20, "Theme")] = self.theme app_wrappers[(20, "Theme")] = self.theme
with progress: with progress, concurrent.futures.ThreadPoolExecutor() as thread_pool:
for route, component in self.pages.items(): fixed_pages = 7
# TODO: this progress does not reflect actual threaded task completion task = progress.add_task("Compiling:", total=len(self.pages) + fixed_pages)
def mark_complete(_=None):
progress.advance(task) progress.advance(task)
for _route, component in self.pages.items():
# Merge the component style with the app style.
component.add_style(self.style) component.add_style(self.style)
page_futures.append(
thread_pool.apply_async( # Add component.get_imports() to all_imports.
compiler.compile_page,
args=(
route,
component,
self.state,
),
)
)
# add component.get_imports() to all_imports
all_imports.update(component.get_imports()) all_imports.update(component.get_imports())
# add the app wrappers from this component # Add the app wrappers from this component.
app_wrappers.update(component.get_app_wrap_components()) app_wrappers.update(component.get_app_wrap_components())
# Add the custom components from the page to the set. # Add the custom components from the page to the set.
custom_components |= component.get_custom_components() custom_components |= component.get_custom_components()
thread_pool.close() # Perform auto-memoization of stateful components.
thread_pool.join() (
stateful_components_path,
stateful_components_code,
page_components,
) = compiler.compile_stateful_components(self.pages.values())
compile_results.append((stateful_components_path, stateful_components_code))
# Compile the app wrapper. result_futures = []
app_root = self._app_root(app_wrappers=app_wrappers)
all_imports.update(app_root.get_imports())
compile_results.append(compiler.compile_app(app_root))
# Get the compiled pages. def submit_work(fn, *args, **kwargs):
compile_results.extend(result.get() for result in page_futures) """Submit work to the thread pool and add a callback to mark the task as complete.
# TODO the compile tasks below may also benefit from parallelization too The Future will be added to the `result_futures` list.
# Compile the custom components. Args:
compile_results.append(compiler.compile_components(custom_components)) fn: The function to submit.
*args: The args to submit.
**kwargs: The kwargs to submit.
"""
f = thread_pool.submit(fn, *args, **kwargs)
f.add_done_callback(mark_complete)
result_futures.append(f)
# Iterate through all the custom components and add their imports to the all_imports # Compile all page components.
for component in custom_components: for route, component in zip(self.pages, page_components):
all_imports.update(component.get_imports()) submit_work(
compiler.compile_page,
route,
component,
self.state,
)
# Compile the root stylesheet with base styles. # Compile the app wrapper.
compile_results.append(compiler.compile_root_stylesheet(self.stylesheets)) app_root = self._app_root(app_wrappers=app_wrappers)
submit_work(compiler.compile_app, app_root)
# Compile the root document. # Compile the custom components.
compile_results.append(compiler.compile_document_root(self.head_components)) submit_work(compiler.compile_components, custom_components)
# Compile the theme. # Compile the root stylesheet with base styles.
compile_results.append(compiler.compile_theme(style=self.style)) submit_work(compiler.compile_root_stylesheet, self.stylesheets)
# Compile the contexts. # Compile the root document.
compile_results.append(compiler.compile_contexts(self.state)) submit_work(compiler.compile_document_root, self.head_components)
# Compile the Tailwind config. # Compile the theme.
if config.tailwind is not None: submit_work(compiler.compile_theme, style=self.style)
config.tailwind["content"] = config.tailwind.get(
"content", constants.Tailwind.CONTENT
)
compile_results.append(compiler.compile_tailwind(config.tailwind))
# Empty the .web pages directory # Compile the contexts.
compiler.purge_web_pages_dir() submit_work(compiler.compile_contexts, self.state)
# install frontend packages # Compile the Tailwind config.
self.get_frontend_packages(all_imports) if config.tailwind is not None:
config.tailwind["content"] = config.tailwind.get(
"content", constants.Tailwind.CONTENT
)
submit_work(compiler.compile_tailwind, config.tailwind)
# Write the pages at the end to trigger the NextJS hot reload only once. # Get imports from AppWrap components.
thread_pool = ThreadPool() all_imports.update(app_root.get_imports())
for output_path, code in compile_results:
thread_pool.apply_async(compiler_utils.write_page, args=(output_path, code)) # Iterate through all the custom components and add their imports to the all_imports.
thread_pool.close() for component in custom_components:
thread_pool.join() all_imports.update(component.get_imports())
# Wait for all compilation tasks to complete.
for future in concurrent.futures.as_completed(result_futures):
compile_results.append(future.result())
# Empty the .web pages directory.
compiler.purge_web_pages_dir()
# Avoid flickering when installing frontend packages
progress.stop()
# Install frontend packages.
self.get_frontend_packages(all_imports)
# Write the pages at the end to trigger the NextJS hot reload only once.
write_page_futures = []
for output_path, code in compile_results:
write_page_futures.append(
thread_pool.submit(compiler_utils.write_page, output_path, code)
)
for future in concurrent.futures.as_completed(write_page_futures):
future.result()
@contextlib.asynccontextmanager @contextlib.asynccontextmanager
async def modify_state(self, token: str) -> AsyncIterator[State]: async def modify_state(self, token: str) -> AsyncIterator[State]:

View File

@ -3,11 +3,17 @@ from __future__ import annotations
import os import os
from pathlib import Path from pathlib import Path
from typing import Optional, Type from typing import Iterable, Optional, Type
from reflex import constants from reflex import constants
from reflex.compiler import templates, utils from reflex.compiler import templates, utils
from reflex.components.component import Component, ComponentStyle, CustomComponent from reflex.components.component import (
BaseComponent,
Component,
ComponentStyle,
CustomComponent,
StatefulComponent,
)
from reflex.config import get_config from reflex.config import get_config
from reflex.state import State from reflex.state import State
from reflex.utils.imports import ImportDict, ImportVar from reflex.utils.imports import ImportDict, ImportVar
@ -99,8 +105,6 @@ def _compile_page(
""" """
# Merge the default imports with the app-specific imports. # Merge the default imports with the app-specific imports.
imports = utils.merge_imports(DEFAULT_IMPORTS, component.get_imports()) imports = utils.merge_imports(DEFAULT_IMPORTS, component.get_imports())
imports = {k: list(set(v)) for k, v in imports.items()}
utils.validate_imports(imports)
imports = utils.compile_imports(imports) imports = utils.compile_imports(imports)
# Compile the code to render the component. # Compile the code to render the component.
@ -205,6 +209,68 @@ def _compile_components(components: set[CustomComponent]) -> str:
) )
def _compile_stateful_components(
page_components: list[BaseComponent],
) -> str:
"""Walk the page components and extract shared stateful components.
Any StatefulComponent that is shared by more than one page will be rendered
to a separate module and marked rendered_as_shared so subsequent
renderings will import the component from the shared module instead of
directly including the code for it.
Args:
page_components: The Components or StatefulComponents to compile.
Returns:
The rendered stateful components code.
"""
all_import_dicts = []
rendered_components = {}
def get_shared_components_recursive(component: BaseComponent):
"""Get the shared components for a component and its children.
A shared component is a StatefulComponent that appears in 2 or more
pages and is a candidate for writing to a common file and importing
into each page where it is used.
Args:
component: The component to collect shared StatefulComponents for.
"""
for child in component.children:
# Depth-first traversal.
get_shared_components_recursive(child)
# When the component is referenced by more than one page, render it
# to be included in the STATEFUL_COMPONENTS module.
if isinstance(component, StatefulComponent) and component.references > 1:
# Reset this flag to render the actual component.
component.rendered_as_shared = False
rendered_components.update(
{code: None for code in component.get_custom_code()},
)
all_import_dicts.append(component.get_imports())
# Indicate that this component now imports from the shared file.
component.rendered_as_shared = True
for page_component in page_components:
get_shared_components_recursive(page_component)
# Don't import from the file that we're about to create.
all_imports = utils.merge_imports(*all_import_dicts)
all_imports.pop(
f"/{constants.Dirs.UTILS}/{constants.PageNames.STATEFUL_COMPONENTS}", None
)
return templates.STATEFUL_COMPONENTS.render(
imports=utils.compile_imports(all_imports),
memoized_code="\n".join(rendered_components),
)
def _compile_tailwind( def _compile_tailwind(
config: dict, config: dict,
) -> str: ) -> str:
@ -330,6 +396,29 @@ def compile_components(components: set[CustomComponent]):
return output_path, code return output_path, code
def compile_stateful_components(
pages: Iterable[Component],
) -> tuple[str, str, list[BaseComponent]]:
"""Separately compile components that depend on State vars.
StatefulComponents are compiled as their own component functions with their own
useContext declarations, which allows page components to be stateless and avoid
re-rendering along with parts of the page that actually depend on state.
Args:
pages: The pages to extract stateful components from.
Returns:
The path and code of the compiled stateful components.
"""
output_path = utils.get_stateful_components_path()
# Compile the stateful components.
page_components = [StatefulComponent.compile_from(page) or page for page in pages]
code = _compile_stateful_components(page_components)
return output_path, code, page_components
def compile_tailwind( def compile_tailwind(
config: dict, config: dict,
): ):

View File

@ -82,6 +82,12 @@ PAGE = get_template("web/pages/index.js.jinja2")
# Code to render the custom components page. # Code to render the custom components page.
COMPONENTS = get_template("web/pages/custom_component.js.jinja2") COMPONENTS = get_template("web/pages/custom_component.js.jinja2")
# Code to render Component instances as part of StatefulComponent
STATEFUL_COMPONENT = get_template("web/pages/stateful_component.js.jinja2")
# Code to render StatefulComponent to an external file to be shared
STATEFUL_COMPONENTS = get_template("web/pages/stateful_components.js.jinja2")
# Sitemap config file. # Sitemap config file.
SITEMAP_CONFIG = "module.exports = {config}".format SITEMAP_CONFIG = "module.exports = {config}".format

View File

@ -54,17 +54,17 @@ def compile_import_statement(fields: list[imports.ImportVar]) -> tuple[str, list
return default, list(rest) return default, list(rest)
def validate_imports(imports: imports.ImportDict): def validate_imports(import_dict: imports.ImportDict):
"""Verify that the same Tag is not used in multiple import. """Verify that the same Tag is not used in multiple import.
Args: Args:
imports: The dict of imports to validate import_dict: The dict of imports to validate
Raises: Raises:
ValueError: if a conflict on "tag/alias" is detected for an import. ValueError: if a conflict on "tag/alias" is detected for an import.
""" """
used_tags = {} used_tags = {}
for lib, _imports in imports.items(): for lib, _imports in import_dict.items():
for _import in _imports: for _import in _imports:
import_name = ( import_name = (
f"{_import.tag}/{_import.alias}" if _import.alias else _import.tag f"{_import.tag}/{_import.alias}" if _import.alias else _import.tag
@ -77,17 +77,19 @@ def validate_imports(imports: imports.ImportDict):
used_tags[import_name] = lib used_tags[import_name] = lib
def compile_imports(imports: imports.ImportDict) -> list[dict]: def compile_imports(import_dict: imports.ImportDict) -> list[dict]:
"""Compile an import dict. """Compile an import dict.
Args: Args:
imports: The import dict to compile. import_dict: The import dict to compile.
Returns: Returns:
The list of import dict. The list of import dict.
""" """
collapsed_import_dict = imports.collapse_imports(import_dict)
validate_imports(collapsed_import_dict)
import_dicts = [] import_dicts = []
for lib, fields in imports.items(): for lib, fields in collapsed_import_dict.items():
default, rest = compile_import_statement(fields) default, rest = compile_import_statement(fields)
# prevent lib from being rendered on the page if all imports are non rendered kind # prevent lib from being rendered on the page if all imports are non rendered kind
@ -356,6 +358,18 @@ def get_components_path() -> str:
return os.path.join(constants.Dirs.WEB_UTILS, "components" + constants.Ext.JS) return os.path.join(constants.Dirs.WEB_UTILS, "components" + constants.Ext.JS)
def get_stateful_components_path() -> str:
"""Get the path of the compiled stateful components.
Returns:
The path of the compiled stateful components.
"""
return os.path.join(
constants.Dirs.WEB_UTILS,
constants.PageNames.STATEFUL_COMPONENTS + constants.Ext.JS,
)
def get_asset_path(filename: str | None = None) -> str: def get_asset_path(filename: str | None = None) -> str:
"""Get the path for an asset. """Get the path for an asset.

View File

@ -22,7 +22,7 @@ class AppWrap(Bare):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -20,7 +20,7 @@ class Body(Component):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -21,7 +21,7 @@ class NextDocumentLib(Component):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -100,7 +100,7 @@ class Html(NextDocumentLib):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -179,7 +179,7 @@ class DocumentHead(NextDocumentLib):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -258,7 +258,7 @@ class Main(NextDocumentLib):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -337,7 +337,7 @@ class NextScript(NextDocumentLib):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -416,7 +416,7 @@ class ColorModeScript(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -20,7 +20,7 @@ class NextHeadLib(Component):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -99,7 +99,7 @@ class Head(NextHeadLib):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -23,7 +23,7 @@ class RawLink(Component):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -111,7 +111,7 @@ class ScriptTag(Component):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -23,7 +23,7 @@ class Title(Component):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -107,7 +107,7 @@ class Meta(Component):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -196,7 +196,7 @@ class Description(Meta):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -285,7 +285,7 @@ class Image(Meta):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -24,7 +24,7 @@ class Script(Component):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -2,14 +2,28 @@
from __future__ import annotations from __future__ import annotations
import copy
import typing import typing
from abc import ABC from abc import ABC, abstractmethod
from functools import lru_cache, wraps from functools import lru_cache, wraps
from typing import Any, Callable, Dict, Iterator, List, Optional, Set, Type, Union from hashlib import md5
from typing import (
Any,
Callable,
ClassVar,
Dict,
Iterator,
List,
Optional,
Set,
Type,
Union,
)
from reflex.base import Base from reflex.base import Base
from reflex.compiler.templates import STATEFUL_COMPONENT
from reflex.components.tags import Tag from reflex.components.tags import Tag
from reflex.constants import Dirs, EventTriggers, Hooks, Imports from reflex.constants import Dirs, EventTriggers, Hooks, Imports, PageNames
from reflex.event import ( from reflex.event import (
EventChain, EventChain,
EventHandler, EventHandler,
@ -22,20 +36,17 @@ from reflex.style import Style
from reflex.utils import console, format, imports, types from reflex.utils import console, format, imports, types
from reflex.utils.imports import ImportVar from reflex.utils.imports import ImportVar
from reflex.utils.serializers import serializer from reflex.utils.serializers import serializer
from reflex.vars import BaseVar, Var from reflex.vars import BaseVar, Var, VarData
class Component(Base, ABC): class BaseComponent(Base, ABC):
"""The base class for all Reflex components.""" """The base class for all Reflex components.
This is something that can be rendered as a Component via the Reflex compiler.
"""
# The children nested within the component. # The children nested within the component.
children: List[Component] = [] children: List[BaseComponent] = []
# The style of the component.
style: Style = Style()
# A mapping from event triggers to event chains.
event_triggers: Dict[str, Union[EventChain, Var]] = {}
# The library that the component is based on. # The library that the component is based on.
library: Optional[str] = None library: Optional[str] = None
@ -46,6 +57,69 @@ class Component(Base, ABC):
# The tag to use when rendering the component. # The tag to use when rendering the component.
tag: Optional[str] = None tag: Optional[str] = None
@abstractmethod
def render(self) -> dict:
"""Render the component.
Returns:
The dictionary for template of the component.
"""
@abstractmethod
def get_hooks(self) -> set[str]:
"""Get the React hooks for this component.
Returns:
The code that should appear just before returning the rendered component.
"""
@abstractmethod
def get_imports(self) -> imports.ImportDict:
"""Get all the libraries and fields that are used by the component.
Returns:
The import dict with the required imports.
"""
@abstractmethod
def get_dynamic_imports(self) -> set[str]:
"""Get dynamic imports for the component.
Returns:
The dynamic imports.
"""
@abstractmethod
def get_custom_code(self) -> set[str]:
"""Get custom code for the component.
Returns:
The custom code.
"""
@abstractmethod
def get_refs(self) -> set[str]:
"""Get the refs for the children of the component.
Returns:
The refs for the children.
"""
# Map from component to styling.
ComponentStyle = Dict[Union[str, Type[BaseComponent]], Any]
ComponentChild = Union[types.PrimitiveType, Var, BaseComponent]
class Component(BaseComponent, ABC):
"""A component with style, event trigger and other props."""
# The style of the component.
style: Style = Style()
# A mapping from event triggers to event chains.
event_triggers: Dict[str, Union[EventChain, Var]] = {}
# The alias for the tag. # The alias for the tag.
alias: Optional[str] = None alias: Optional[str] = None
@ -74,7 +148,7 @@ class Component(Base, ABC):
_valid_children: List[str] = [] _valid_children: List[str] = []
# custom attribute # custom attribute
custom_attrs: Dict[str, str] = {} custom_attrs: Dict[str, Union[Var, str]] = {}
@classmethod @classmethod
def __init_subclass__(cls, **kwargs): def __init_subclass__(cls, **kwargs):
@ -493,7 +567,7 @@ class Component(Base, ABC):
""" """
if type(self) in style: if type(self) in style:
# Extract the style for this component. # Extract the style for this component.
component_style = style[type(self)] component_style = Style(style[type(self)])
# Only add style props that are not overridden. # Only add style props that are not overridden.
component_style = { component_style = {
@ -505,6 +579,9 @@ class Component(Base, ABC):
# Recursively add style to the children. # Recursively add style to the children.
for child in self.children: for child in self.children:
# Skip BaseComponent and StatefulComponent children.
if not isinstance(child, Component):
continue
child.add_style(style) child.add_style(style)
return self return self
@ -818,7 +895,7 @@ class Component(Base, ABC):
""" """
ref = self.get_ref() ref = self.get_ref()
if ref is not None: if ref is not None:
return f"const {ref} = useRef(null); refs['{ref}'] = {ref};" return f"const {ref} = useRef(null); {str(Var.create_safe(ref).as_ref())} = {ref};"
def _get_vars_hooks(self) -> set[str]: def _get_vars_hooks(self) -> set[str]:
"""Get the hooks required by vars referenced in this component. """Get the hooks required by vars referenced in this component.
@ -953,6 +1030,9 @@ class Component(Base, ABC):
if seen is None: if seen is None:
seen = set() seen = set()
for child in self.children: for child in self.children:
# Skip BaseComponent and StatefulComponent children.
if not isinstance(child, Component):
continue
custom_components |= child.get_custom_components(seen=seen) custom_components |= child.get_custom_components(seen=seen)
return custom_components return custom_components
@ -991,17 +1071,15 @@ class Component(Base, ABC):
# Add the app wrap components for the children. # Add the app wrap components for the children.
for child in self.children: for child in self.children:
# Skip BaseComponent and StatefulComponent children.
if not isinstance(child, Component):
continue
components.update(child.get_app_wrap_components()) components.update(child.get_app_wrap_components())
# Return the components. # Return the components.
return components return components
# Map from component to styling.
ComponentStyle = Dict[Union[str, Type[Component]], Any]
ComponentChild = Union[types.PrimitiveType, Var, Component]
class CustomComponent(Component): class CustomComponent(Component):
"""A custom user-defined component.""" """A custom user-defined component."""
@ -1235,3 +1313,345 @@ def serialize_component(comp: Component):
The serialized component. The serialized component.
""" """
return str(comp) return str(comp)
class StatefulComponent(BaseComponent):
"""A component that depends on state and is rendered outside of the page component.
If a StatefulComponent is used in multiple pages, it will be rendered to a common file and
imported into each page that uses it.
A stateful component has a tag name that includes a hash of the code that it renders
to. This tag name refers to the specific component with the specific props that it
was created with.
"""
# A lookup table to caching memoized component instances.
tag_to_stateful_component: ClassVar[Dict[str, StatefulComponent]] = {}
# Reference to the original component that was memoized into this component.
component: Component
# The rendered (memoized) code that will be emitted.
code: str
# How many times this component is referenced in the app.
references: int = 0
# Whether the component has already been rendered to a shared file.
rendered_as_shared: bool = False
@classmethod
def create(cls, component: Component) -> StatefulComponent | None:
"""Create a stateful component from a component.
Args:
component: The component to memoize.
Returns:
The stateful component or None if the component should not be memoized.
"""
from reflex.components.layout.foreach import Foreach
if component.tag is None:
# Only memoize components with a tag.
return None
# If _var_data is found in this component, it is a candidate for auto-memoization.
has_var_data = False
# Determine if any Vars have associated data.
for prop_var in component._get_vars():
if prop_var._var_data:
has_var_data = True
break
if not has_var_data:
# Check for special-cases in child components.
for child in component.children:
# Skip BaseComponent and StatefulComponent children.
if not isinstance(child, Component):
continue
# Always consider Foreach something that must be memoized by the parent.
if isinstance(child, Foreach):
has_var_data = True
break
child = cls._child_var(child)
if isinstance(child, Var) and child._var_data:
has_var_data = True
break
if has_var_data or component.event_triggers:
# Render the component to determine tag+hash based on component code.
tag_name = cls._get_tag_name(component)
if tag_name is None:
return None
# Look up the tag in the cache
stateful_component = cls.tag_to_stateful_component.get(tag_name)
if stateful_component is None:
# Render the component as a string of javascript code.
code = cls._render_stateful_code(component, tag_name=tag_name)
# Set the stateful component in the cache for the given tag.
stateful_component = cls.tag_to_stateful_component.setdefault(
tag_name,
cls(
children=component.children,
component=component,
tag=tag_name,
code=code,
),
)
# Bump the reference count -- multiple pages referencing the same component
# will result in writing it to a common file.
stateful_component.references += 1
return stateful_component
# Return None to indicate this component should not be memoized.
return None
@staticmethod
def _child_var(child: Component) -> Var | Component:
"""Get the Var from a child component.
This method is used for special cases when the StatefulComponent should actually
wrap the parent component of the child instead of recursing into the children
and memoizing them independently.
Args:
child: The child component.
Returns:
The Var from the child component or the child itself (for regular cases).
"""
from reflex.components.base.bare import Bare
from reflex.components.layout.cond import Cond
from reflex.components.layout.foreach import Foreach
if isinstance(child, Bare):
return child.contents
if isinstance(child, Cond):
return child.cond
if isinstance(child, Foreach):
return child.iterable
return child
@classmethod
def _get_tag_name(cls, component: Component) -> str | None:
"""Get the tag based on rendering the given component.
Args:
component: The component to render.
Returns:
The tag for the stateful component.
"""
# Get the render dict for the component.
rendered_code = component.render()
if not rendered_code:
# Never memoize non-visual components.
return None
# Compute the hash based on the rendered code.
code_hash = md5(str(rendered_code).encode("utf-8")).hexdigest()
# Format the tag name including the hash.
return format.format_state_name(f"{component.tag or 'Comp'}_{code_hash}")
@classmethod
def _render_stateful_code(
cls,
component: Component,
tag_name: str,
) -> str:
"""Render the code for a stateful component.
Args:
component: The component to render.
tag_name: The tag name for the stateful component (see _get_tag_name).
Returns:
The rendered code.
"""
# Memoize event triggers useCallback to avoid unnecessary re-renders.
memo_event_triggers = tuple(cls._get_memoized_event_triggers(component).items())
# Trigger hooks stored separately to write after the normal hooks (see stateful_component.js.jinja2)
memo_trigger_hooks = []
if memo_event_triggers:
# Copy the component to avoid mutating the original.
component = copy.copy(component)
for event_trigger, (
memo_trigger,
memo_trigger_hook,
) in memo_event_triggers:
# Replace the event trigger with the memoized version.
memo_trigger_hooks.append(memo_trigger_hook)
component.event_triggers[event_trigger] = memo_trigger
# Render the code for this component and hooks.
return STATEFUL_COMPONENT.render(
tag_name=tag_name,
memo_trigger_hooks=memo_trigger_hooks,
component=component,
)
@staticmethod
def _get_hook_deps(hook: str) -> list[str]:
"""Extract var deps from a hook.
Args:
hook: The hook line to extract deps from.
Returns:
A list of var names created by the hook declaration.
"""
var_name = hook.partition("=")[0].strip().split(None, 1)[1].strip()
if var_name.startswith("["):
# Break up array destructuring.
return [v.strip() for v in var_name.strip("[]").split(",")]
return [var_name]
@classmethod
def _get_memoized_event_triggers(
cls,
component: Component,
) -> dict[str, tuple[Var, str]]:
"""Memoize event handler functions with useCallback to avoid unnecessary re-renders.
Args:
component: The component with events to memoize.
Returns:
A dict of event trigger name to a tuple of the memoized event trigger Var and
the hook code that memoizes the event handler.
"""
trigger_memo = {}
for event_trigger, event_args in component._get_vars_from_event_triggers(
component.event_triggers
):
if event_trigger in {
EventTriggers.ON_MOUNT,
EventTriggers.ON_UNMOUNT,
EventTriggers.ON_SUBMIT,
}:
# Do not memoize lifecycle or submit events.
continue
# Get the actual EventSpec and render it.
event = component.event_triggers[event_trigger]
rendered_chain = format.format_prop(event)
if isinstance(rendered_chain, str):
rendered_chain = rendered_chain.strip("{}")
# Hash the rendered EventChain to get a deterministic function name.
chain_hash = md5(str(rendered_chain).encode("utf-8")).hexdigest()
memo_name = f"{event_trigger}_{chain_hash}"
# Calculate Var dependencies accessed by the handler for useCallback dep array.
var_deps = ["addEvents", "Event"]
for arg in event_args:
if arg._var_data is None:
continue
for hook in arg._var_data.hooks:
var_deps.extend(cls._get_hook_deps(hook))
memo_var_data = VarData.merge(
*[var._var_data for var in event_args],
VarData( # type: ignore
imports={"react": {ImportVar(tag="useCallback")}},
),
)
# Store the memoized function name and hook code for this event trigger.
trigger_memo[event_trigger] = (
Var.create_safe(memo_name)._replace(
_var_type=EventChain, merge_var_data=memo_var_data
),
f"const {memo_name} = useCallback({rendered_chain}, [{', '.join(var_deps)}])",
)
return trigger_memo
def get_hooks(self) -> set[str]:
"""Get the React hooks for this component.
Returns:
The code that should appear just before returning the rendered component.
"""
return set()
def get_imports(self) -> imports.ImportDict:
"""Get all the libraries and fields that are used by the component.
Returns:
The import dict with the required imports.
"""
if self.rendered_as_shared:
return {
f"/{Dirs.UTILS}/{PageNames.STATEFUL_COMPONENTS}": [
ImportVar(tag=self.tag)
]
}
return self.component.get_imports()
def get_dynamic_imports(self) -> set[str]:
"""Get dynamic imports for the component.
Returns:
The dynamic imports.
"""
if self.rendered_as_shared:
return set()
return self.component.get_dynamic_imports()
def get_custom_code(self) -> set[str]:
"""Get custom code for the component.
Returns:
The custom code.
"""
if self.rendered_as_shared:
return set()
return self.component.get_custom_code().union({self.code})
def get_refs(self) -> set[str]:
"""Get the refs for the children of the component.
Returns:
The refs for the children.
"""
if self.rendered_as_shared:
return set()
return self.component.get_refs()
def render(self) -> dict:
"""Define how to render the component in React.
Returns:
The tag to render.
"""
return dict(Tag(name=self.tag))
@classmethod
def compile_from(cls, component: BaseComponent) -> BaseComponent:
"""Walk through the component tree and memoize all stateful components.
Args:
component: The component to memoize.
Returns:
The memoized component tree.
"""
from reflex.components.layout.foreach import Foreach
# Foreach must be memoized as a single component to retain index Var context.
if not isinstance(component, Foreach):
component.children = [
cls.compile_from(child) for child in component.children
]
if isinstance(component, Component):
stateful_component = cls.create(component)
if stateful_component is not None:
return stateful_component
return component

View File

@ -28,7 +28,7 @@ class Badge(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -1034,7 +1034,7 @@ class CodeBlock(Component):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1119,7 +1119,7 @@ class Code(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -134,7 +134,7 @@ class DataEditor(NoSSRComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_cell_activated: Optional[ on_cell_activated: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -25,7 +25,7 @@ class Gridjs(Component):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -110,7 +110,7 @@ class DataTable(Gridjs):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -31,7 +31,7 @@ class Divider(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -20,7 +20,7 @@ class KeyboardKey(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -27,7 +27,7 @@ class List(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -107,7 +107,7 @@ class ListItem(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -190,7 +190,7 @@ class OrderedList(List):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -274,7 +274,7 @@ class UnorderedList(List):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -56,7 +56,7 @@ class Moment(NoSSRComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -26,7 +26,7 @@ class Stat(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -106,7 +106,7 @@ class StatLabel(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -185,7 +185,7 @@ class StatNumber(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -264,7 +264,7 @@ class StatHelpText(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -344,7 +344,7 @@ class StatArrow(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -424,7 +424,7 @@ class StatGroup(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -33,7 +33,7 @@ class Table(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -118,7 +118,7 @@ class Thead(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -199,7 +199,7 @@ class Tbody(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -279,7 +279,7 @@ class Tfoot(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -360,7 +360,7 @@ class Tr(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -439,7 +439,7 @@ class Th(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -520,7 +520,7 @@ class Td(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -601,7 +601,7 @@ class TableCaption(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -681,7 +681,7 @@ class TableContainer(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -28,7 +28,7 @@ class TagLabel(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -107,7 +107,7 @@ class TagLeftIcon(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -186,7 +186,7 @@ class TagRightIcon(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -265,7 +265,7 @@ class TagCloseButton(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -386,7 +386,7 @@ class Tag(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -34,7 +34,7 @@ class Accordion(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -120,7 +120,7 @@ class AccordionItem(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -202,7 +202,7 @@ class AccordionButton(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -281,7 +281,7 @@ class AccordionPanel(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -360,7 +360,7 @@ class AccordionIcon(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -111,7 +111,7 @@ class Tabs(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -201,7 +201,7 @@ class Tab(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -284,7 +284,7 @@ class TabList(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -363,7 +363,7 @@ class TabPanels(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -442,7 +442,7 @@ class TabPanel(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -24,7 +24,7 @@ class Transition(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -107,7 +107,7 @@ class Fade(Transition):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -192,7 +192,7 @@ class ScaleFade(Transition):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -278,7 +278,7 @@ class Slide(Transition):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -365,7 +365,7 @@ class SlideFade(Transition):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -454,7 +454,7 @@ class Collapse(Transition):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -20,7 +20,7 @@ class VisuallyHidden(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -22,7 +22,7 @@ class Element(Component):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -65,7 +65,7 @@ class BaseHTML(Element):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -93,7 +93,7 @@ class Button(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -243,7 +243,7 @@ class Datalist(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -344,7 +344,7 @@ class Fieldset(Element):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -494,7 +494,7 @@ class Form(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -721,7 +721,7 @@ class Input(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -897,7 +897,7 @@ class Label(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1038,7 +1038,7 @@ class Legend(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1188,7 +1188,7 @@ class Meter(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1340,7 +1340,7 @@ class Optgroup(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1493,7 +1493,7 @@ class Option(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1641,7 +1641,7 @@ class Output(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1788,7 +1788,7 @@ class Progress(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1948,7 +1948,7 @@ class Select(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -2127,7 +2127,7 @@ class Textarea(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -86,7 +86,7 @@ class A(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -234,7 +234,7 @@ class Abbr(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -373,7 +373,7 @@ class B(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -512,7 +512,7 @@ class Bdi(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -651,7 +651,7 @@ class Bdo(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -790,7 +790,7 @@ class Br(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -929,7 +929,7 @@ class Cite(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1068,7 +1068,7 @@ class Code(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1210,7 +1210,7 @@ class Data(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1349,7 +1349,7 @@ class Dfn(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1488,7 +1488,7 @@ class Em(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1627,7 +1627,7 @@ class I(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1766,7 +1766,7 @@ class Kbd(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1905,7 +1905,7 @@ class Mark(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -2045,7 +2045,7 @@ class Q(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -2184,7 +2184,7 @@ class Rp(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -2323,7 +2323,7 @@ class Rt(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -2462,7 +2462,7 @@ class Ruby(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -2601,7 +2601,7 @@ class S(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -2740,7 +2740,7 @@ class Samp(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -2879,7 +2879,7 @@ class Small(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -3018,7 +3018,7 @@ class Span(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -3157,7 +3157,7 @@ class Strong(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -3296,7 +3296,7 @@ class Sub(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -3435,7 +3435,7 @@ class Sup(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -3577,7 +3577,7 @@ class Time(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -3716,7 +3716,7 @@ class U(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -3855,7 +3855,7 @@ class Wbr(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -90,7 +90,7 @@ class Area(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -260,7 +260,7 @@ class Audio(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -448,7 +448,7 @@ class Img(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -603,7 +603,7 @@ class Map(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -754,7 +754,7 @@ class Track(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -930,7 +930,7 @@ class Video(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1089,7 +1089,7 @@ class Embed(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1259,7 +1259,7 @@ class Iframe(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1425,7 +1425,7 @@ class Object(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1572,7 +1572,7 @@ class Picture(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1711,7 +1711,7 @@ class Portal(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1861,7 +1861,7 @@ class Source(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -2011,7 +2011,7 @@ class Svg(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -2153,7 +2153,7 @@ class Path(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -70,7 +70,7 @@ class Base(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -209,7 +209,7 @@ class Head(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -369,7 +369,7 @@ class Link(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -518,7 +518,7 @@ class Meta(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -614,7 +614,7 @@ class Title(Element):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -66,7 +66,7 @@ class Details(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -207,7 +207,7 @@ class Dialog(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -347,7 +347,7 @@ class Summary(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -486,7 +486,7 @@ class Slot(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -625,7 +625,7 @@ class Template(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -764,7 +764,7 @@ class Math(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -906,7 +906,7 @@ class Html(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -71,7 +71,7 @@ class Canvas(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -212,7 +212,7 @@ class Noscript(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -374,7 +374,7 @@ class Script(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -71,7 +71,7 @@ class Body(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -210,7 +210,7 @@ class Address(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -349,7 +349,7 @@ class Article(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -488,7 +488,7 @@ class Aside(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -627,7 +627,7 @@ class Footer(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -766,7 +766,7 @@ class Header(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -905,7 +905,7 @@ class H1(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1044,7 +1044,7 @@ class H2(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1183,7 +1183,7 @@ class H3(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1322,7 +1322,7 @@ class H4(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1461,7 +1461,7 @@ class H5(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1600,7 +1600,7 @@ class H6(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1739,7 +1739,7 @@ class Main(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1878,7 +1878,7 @@ class Nav(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -2017,7 +2017,7 @@ class Section(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -68,7 +68,7 @@ class Caption(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -215,7 +215,7 @@ class Col(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -364,7 +364,7 @@ class Colgroup(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -521,7 +521,7 @@ class Table(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -671,7 +671,7 @@ class Tbody(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -830,7 +830,7 @@ class Td(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -981,7 +981,7 @@ class Tfoot(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1143,7 +1143,7 @@ class Th(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1292,7 +1292,7 @@ class Thead(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1438,7 +1438,7 @@ class Tr(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -66,7 +66,7 @@ class Blockquote(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -206,7 +206,7 @@ class Dd(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -345,7 +345,7 @@ class Div(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -484,7 +484,7 @@ class Dl(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -623,7 +623,7 @@ class Dt(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -762,7 +762,7 @@ class Figcaption(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -907,7 +907,7 @@ class Hr(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1048,7 +1048,7 @@ class Li(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1188,7 +1188,7 @@ class Menu(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1335,7 +1335,7 @@ class Ol(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1477,7 +1477,7 @@ class P(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1616,7 +1616,7 @@ class Pre(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1755,7 +1755,7 @@ class Ul(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1898,7 +1898,7 @@ class Ins(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -2043,7 +2043,7 @@ class Del(BaseHTML):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -41,7 +41,7 @@ class Alert(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -122,7 +122,7 @@ class AlertIcon(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -201,7 +201,7 @@ class AlertTitle(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -280,7 +280,7 @@ class AlertDescription(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -34,7 +34,7 @@ class CircularProgress(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -121,7 +121,7 @@ class CircularProgressLabel(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -29,7 +29,7 @@ class Progress(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -26,7 +26,7 @@ class Skeleton(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -115,7 +115,7 @@ class SkeletonCircle(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -205,7 +205,7 @@ class SkeletonText(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -31,7 +31,7 @@ class Spinner(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -96,7 +96,7 @@ class Button(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -199,7 +199,7 @@ class ButtonGroup(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -51,7 +51,7 @@ class Checkbox(ChakraComponent):
name: Var[str] name: Var[str]
# The value of the input field when checked (use is_checked prop for a bool) # The value of the input field when checked (use is_checked prop for a bool)
value: Var[str] = Var.create(True) # type: ignore value: Var[str] = Var.create("true") # type: ignore
# The spacing between the checkbox and its label text (0.5rem) # The spacing between the checkbox and its label text (0.5rem)
spacing: Var[str] spacing: Var[str]

View File

@ -89,7 +89,7 @@ class Checkbox(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -187,7 +187,7 @@ class CheckboxGroup(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -18,7 +18,7 @@ from __future__ import annotations
from typing import Any from typing import Any
from reflex.components.component import Component from reflex.components.component import BaseComponent, Component
from reflex.components.layout.cond import Cond, cond from reflex.components.layout.cond import Cond, cond
from reflex.components.media.icon import Icon from reflex.components.media.icon import Icon
from reflex.style import color_mode, toggle_color_mode from reflex.style import color_mode, toggle_color_mode
@ -55,8 +55,8 @@ class ColorModeIcon(Cond):
@classmethod @classmethod
def create( def create(
cls, cls,
light_component: Component | None = None, light_component: BaseComponent | None = None,
dark_component: Component | None = None, dark_component: BaseComponent | None = None,
): ):
"""Create an icon component based on color_mode. """Create an icon component based on color_mode.

View File

@ -8,7 +8,7 @@ from reflex.vars import Var, BaseVar, ComputedVar
from reflex.event import EventChain, EventHandler, EventSpec from reflex.event import EventChain, EventHandler, EventSpec
from reflex.style import Style from reflex.style import Style
from typing import Any from typing import Any
from reflex.components.component import Component from reflex.components.component import BaseComponent, Component
from reflex.components.layout.cond import Cond, cond from reflex.components.layout.cond import Cond, cond
from reflex.components.media.icon import Icon from reflex.components.media.icon import Icon
from reflex.style import color_mode, toggle_color_mode from reflex.style import color_mode, toggle_color_mode
@ -29,14 +29,14 @@ class ColorModeIcon(Cond):
cls, cls,
*children, *children,
cond: Optional[Union[Var[Any], Any]] = None, cond: Optional[Union[Var[Any], Any]] = None,
comp1: Optional[Component] = None, comp1: Optional[BaseComponent] = None,
comp2: Optional[Component] = None, comp2: Optional[BaseComponent] = None,
style: Optional[Style] = None, style: Optional[Style] = None,
key: Optional[Any] = None, key: Optional[Any] = None,
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -164,7 +164,7 @@ class ColorModeSwitch(Switch):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -322,7 +322,7 @@ class ColorModeButton(Button):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -41,7 +41,7 @@ class DatePicker(Input):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -41,7 +41,7 @@ class DateTimePicker(Input):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -1,12 +1,11 @@
"""Wrapper around react-debounce-input.""" """Wrapper around react-debounce-input."""
from __future__ import annotations from __future__ import annotations
from typing import Any, Set from typing import Any, Type
from reflex.components import Component from reflex.components import Component
from reflex.components.tags import Tag from reflex.constants import EventTriggers
from reflex.utils import imports from reflex.vars import Var, VarData
from reflex.vars import Var
class DebounceInput(Component): class DebounceInput(Component):
@ -35,95 +34,97 @@ class DebounceInput(Component):
# If provided, create a fully-controlled input # If provided, create a fully-controlled input
value: Var[str] value: Var[str]
def _render(self) -> Tag: # The ref to attach to the created input
"""Carry first child props directly on this tag. input_ref: Var[str]
# The element to wrap
element: Var[Type[Component]]
@classmethod
def create(cls, *children: Component, **props: Any) -> Component:
"""Create a DebounceInput component.
Carry first child props directly on this tag.
Since react-debounce-input wants to create and manage the underlying Since react-debounce-input wants to create and manage the underlying
input component itself, we carry all props, events, and styles from input component itself, we carry all props, events, and styles from
the child, and then neuter the child's render method so it produces no output. the child, and then neuter the child's render method so it produces no output.
Args:
children: The child component to wrap.
props: The component props.
Returns: Returns:
The rendered debounce element wrapping the first child element. The DebounceInput component.
Raises: Raises:
RuntimeError: unless exactly one child element is provided. RuntimeError: unless exactly one child element is provided.
ValueError: if the child element does not have an on_change handler. ValueError: if the child element does not have an on_change handler.
""" """
child, props = _collect_first_child_and_props(self) if len(children) != 1:
if isinstance(child, type(self)) or len(self.children) > 1:
raise RuntimeError( raise RuntimeError(
"Provide a single child for DebounceInput, such as rx.input() or " "Provide a single child for DebounceInput, such as rx.input() or "
"rx.text_area()", "rx.text_area()",
) )
child = children[0]
if "on_change" not in child.event_triggers: if "on_change" not in child.event_triggers:
raise ValueError("DebounceInput child requires an on_change handler") raise ValueError("DebounceInput child requires an on_change handler")
# Carry known props and event_triggers from the child.
props_from_child = {
p: getattr(child, p)
for p in cls.get_props()
if getattr(child, p, None) is not None
}
props_from_child.update(child.event_triggers)
props = {**props_from_child, **props}
# Carry all other child props directly via custom_attrs
other_props = {
p: getattr(child, p)
for p in child.get_props()
if p not in props_from_child and getattr(child, p) is not None
}
props.setdefault("custom_attrs", {}).update(other_props, **child.custom_attrs)
# Carry base Component props.
props.setdefault("style", {}).update(child.style)
if child.class_name is not None:
props["class_name"] = f"{props.get('class_name', '')} {child.class_name}"
child_ref = child.get_ref() child_ref = child.get_ref()
if child_ref and not props.get("ref"): if not props.get("input_ref") and child_ref:
props["input_ref"] = Var.create(child_ref, _var_is_local=False) props["input_ref"] = Var.create_safe(child_ref, _var_is_local=False)
self.children = [] props["id"] = child.id
tag = super()._render()
tag.add_props( # Set the child element to wrap, including any imports/hooks from the child.
**props, props.setdefault(
**child.event_triggers, "element",
sx=child.style, Var.create_safe(
id=child.id,
class_name=child.class_name,
element=Var.create(
"{%s}" % (child.alias or child.tag), "{%s}" % (child.alias or child.tag),
_var_is_local=False, _var_is_local=False,
_var_is_string=False, _var_is_string=False,
)._replace(
_var_type=Type[Component],
merge_var_data=VarData( # type: ignore
imports=child._get_imports(),
hooks=child._get_hooks_internal(),
),
), ),
) )
# do NOT render the child, DebounceInput will create it
object.__setattr__(child, "render", lambda: "")
return tag
def _get_imports(self) -> imports.ImportDict: return super().create(**props)
return imports.merge_imports(
super()._get_imports(), *[c._get_imports() for c in self.children]
)
def _get_hooks_internal(self) -> Set[str]: def get_event_triggers(self) -> dict[str, Any]:
hooks = super()._get_hooks_internal() """Get the event triggers that pass the component's value to the handler.
for child in self.children:
hooks.update(child._get_hooks_internal())
return hooks
Returns:
A dict mapping the event trigger to the var that is passed to the handler.
"""
return {
**super().get_event_triggers(),
EventTriggers.ON_CHANGE: lambda e0: [e0.value],
}
def props_not_none(c: Component) -> dict[str, Any]: def _render(self):
"""Get all properties of the component that are not None. return super()._render().remove_props("ref")
Args:
c: the component to get_props from
Returns:
dict of all props that are not None.
"""
cdict = {a: getattr(c, a) for a in c.get_props() if getattr(c, a, None) is not None}
return cdict
def _collect_first_child_and_props(c: Component) -> tuple[Component, dict[str, Any]]:
"""Recursively find the first child of a different type than `c` with props.
This function is used to collapse nested DebounceInput components by
applying props from each level. Parent props take precedent over child
props. The first child component that differs in type will be returned
along with all combined parent props seen along the way.
Args:
c: the component to get_props from
Returns:
tuple containing the first nested child of a different type and the collected
props from each component traversed.
"""
props = props_not_none(c)
if not c.children:
return c, props
child = c.children[0]
if not isinstance(child, type(c)):
return child, {**props_not_none(child), **props}
# carry props from nested DebounceInput components
recursive_child, child_props = _collect_first_child_and_props(child)
return recursive_child, {**child_props, **props}

View File

@ -7,11 +7,10 @@ from typing import Any, Dict, Literal, Optional, Union, overload
from reflex.vars import Var, BaseVar, ComputedVar from reflex.vars import Var, BaseVar, ComputedVar
from reflex.event import EventChain, EventHandler, EventSpec from reflex.event import EventChain, EventHandler, EventSpec
from reflex.style import Style from reflex.style import Style
from typing import Any, Set from typing import Any, Type
from reflex.components import Component from reflex.components import Component
from reflex.components.tags import Tag from reflex.constants import EventTriggers
from reflex.utils import imports from reflex.vars import Var, VarData
from reflex.vars import Var
class DebounceInput(Component): class DebounceInput(Component):
@overload @overload
@ -24,15 +23,20 @@ class DebounceInput(Component):
force_notify_by_enter: Optional[Union[Var[bool], bool]] = None, force_notify_by_enter: Optional[Union[Var[bool], bool]] = None,
force_notify_on_blur: Optional[Union[Var[bool], bool]] = None, force_notify_on_blur: Optional[Union[Var[bool], bool]] = None,
value: Optional[Union[Var[str], str]] = None, value: Optional[Union[Var[str], str]] = None,
input_ref: Optional[Union[Var[str], str]] = None,
element: Optional[Union[Var[Type[Component]], Type[Component]]] = None,
style: Optional[Style] = None, style: Optional[Style] = None,
key: Optional[Any] = None, key: Optional[Any] = None,
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
on_change: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar]
] = None,
on_click: Optional[ on_click: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -77,29 +81,24 @@ class DebounceInput(Component):
] = None, ] = None,
**props **props
) -> "DebounceInput": ) -> "DebounceInput":
"""Create the component. """Create a DebounceInput component.
Carry first child props directly on this tag.
Since react-debounce-input wants to create and manage the underlying
input component itself, we carry all props, events, and styles from
the child, and then neuter the child's render method so it produces no output.
Args: Args:
*children: The children of the component. children: The child component to wrap.
min_length: Minimum input characters before triggering the on_change event props: The component props.
debounce_timeout: Time to wait between end of input and triggering on_change
force_notify_by_enter: If true, notify when Enter key is pressed
force_notify_on_blur: If true, notify when form control loses focus
value: If provided, create a fully-controlled input
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: Returns:
The component. The DebounceInput component.
Raises: Raises:
TypeError: If an invalid child is passed. RuntimeError: unless exactly one child element is provided.
ValueError: if the child element does not have an on_change handler.
""" """
... ...
def get_event_triggers(self) -> dict[str, Any]: ...
def props_not_none(c: Component) -> dict[str, Any]: ...

View File

@ -32,7 +32,7 @@ class Editable(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -131,7 +131,7 @@ class EditableInput(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -210,7 +210,7 @@ class EditableTextarea(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -289,7 +289,7 @@ class EditablePreview(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -126,7 +126,7 @@ class Editor(NoSSRComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -41,7 +41,7 @@ class Email(Input):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -1,7 +1,8 @@
"""Form components.""" """Form components."""
from __future__ import annotations from __future__ import annotations
from typing import Any, Dict from hashlib import md5
from typing import Any, Dict, Iterator
from jinja2 import Environment from jinja2 import Environment
@ -12,13 +13,12 @@ from reflex.constants import Dirs, EventTriggers
from reflex.event import EventChain from reflex.event import EventChain
from reflex.utils import imports from reflex.utils import imports
from reflex.utils.format import format_event_chain, to_camel_case from reflex.utils.format import format_event_chain, to_camel_case
from reflex.utils.serializers import serialize from reflex.vars import BaseVar, Var
from reflex.vars import BaseVar, Var, get_unique_variable_name
FORM_DATA = Var.create("form_data") FORM_DATA = Var.create("form_data")
HANDLE_SUBMIT_JS_JINJA2 = Environment().from_string( HANDLE_SUBMIT_JS_JINJA2 = Environment().from_string(
""" """
const handleSubmit{{ handle_submit_unique_name }} = useCallback((ev) => { const handleSubmit_{{ handle_submit_unique_name }} = useCallback((ev) => {
const $form = ev.target const $form = ev.target
ev.preventDefault() ev.preventDefault()
const {{ form_data }} = {...Object.fromEntries(new FormData($form).entries()), ...{{ field_ref_mapping }}} const {{ form_data }} = {...Object.fromEntries(new FormData($form).entries()), ...{{ field_ref_mapping }}}
@ -58,9 +58,15 @@ class Form(ChakraComponent):
Returns: Returns:
The form component. The form component.
""" """
if "handle_submit_unique_name" not in props: if "handle_submit_unique_name" in props:
props["handle_submit_unique_name"] = get_unique_variable_name() return super().create(*children, **props)
return super().create(*children, **props)
# Render the form hooks and use the hash of the resulting code to create a unique name.
props["handle_submit_unique_name"] = ""
form = super().create(*children, **props)
code_hash = md5(str(form.get_hooks()).encode("utf-8")).hexdigest()
form.handle_submit_unique_name = code_hash
return form
def _get_imports(self) -> imports.ImportDict: def _get_imports(self) -> imports.ImportDict:
return imports.merge_imports( return imports.merge_imports(
@ -80,7 +86,7 @@ class Form(ChakraComponent):
return HANDLE_SUBMIT_JS_JINJA2.render( return HANDLE_SUBMIT_JS_JINJA2.render(
handle_submit_unique_name=self.handle_submit_unique_name, handle_submit_unique_name=self.handle_submit_unique_name,
form_data=FORM_DATA, form_data=FORM_DATA,
field_ref_mapping=serialize(self._get_form_refs()), field_ref_mapping=str(Var.create_safe(self._get_form_refs())),
on_submit_event_chain=format_event_chain( on_submit_event_chain=format_event_chain(
self.event_triggers[EventTriggers.ON_SUBMIT] self.event_triggers[EventTriggers.ON_SUBMIT]
), ),
@ -101,7 +107,7 @@ class Form(ChakraComponent):
render_tag.add_props( render_tag.add_props(
**{ **{
EventTriggers.ON_SUBMIT: BaseVar( EventTriggers.ON_SUBMIT: BaseVar(
_var_name=f"handleSubmit{self.handle_submit_unique_name}", _var_name=f"handleSubmit_{self.handle_submit_unique_name}",
_var_type=EventChain, _var_type=EventChain,
) )
} }
@ -115,13 +121,15 @@ class Form(ChakraComponent):
# when ref start with refs_ it's an array of refs, so we need different method # when ref start with refs_ it's an array of refs, so we need different method
# to collect data # to collect data
if ref.startswith("refs_"): if ref.startswith("refs_"):
form_refs[ref[5:-3]] = Var.create( ref_var = Var.create_safe(ref[:-3]).as_ref()
f"getRefValues({ref[:-3]})", _var_is_local=False form_refs[ref[5:-3]] = Var.create_safe(
) f"getRefValues({str(ref_var)})", _var_is_local=False
)._replace(merge_var_data=ref_var._var_data)
else: else:
form_refs[ref[4:]] = Var.create( ref_var = Var.create_safe(ref).as_ref()
f"getRefValue({ref})", _var_is_local=False form_refs[ref[4:]] = Var.create_safe(
) f"getRefValue({str(ref_var)})", _var_is_local=False
)._replace(merge_var_data=ref_var._var_data)
return form_refs return form_refs
def get_event_triggers(self) -> Dict[str, Any]: def get_event_triggers(self) -> Dict[str, Any]:
@ -135,6 +143,10 @@ class Form(ChakraComponent):
EventTriggers.ON_SUBMIT: lambda e0: [FORM_DATA], EventTriggers.ON_SUBMIT: lambda e0: [FORM_DATA],
} }
def _get_vars(self) -> Iterator[Var]:
yield from super()._get_vars()
yield from self._get_form_refs().values()
class FormControl(ChakraComponent): class FormControl(ChakraComponent):
"""Provide context to form components.""" """Provide context to form components."""

View File

@ -7,7 +7,8 @@ from typing import Any, Dict, Literal, Optional, Union, overload
from reflex.vars import Var, BaseVar, ComputedVar from reflex.vars import Var, BaseVar, ComputedVar
from reflex.event import EventChain, EventHandler, EventSpec from reflex.event import EventChain, EventHandler, EventSpec
from reflex.style import Style from reflex.style import Style
from typing import Any, Dict from hashlib import md5
from typing import Any, Dict, Iterator
from jinja2 import Environment from jinja2 import Environment
from reflex.components.component import Component from reflex.components.component import Component
from reflex.components.libs.chakra import ChakraComponent from reflex.components.libs.chakra import ChakraComponent
@ -16,12 +17,11 @@ from reflex.constants import Dirs, EventTriggers
from reflex.event import EventChain from reflex.event import EventChain
from reflex.utils import imports from reflex.utils import imports
from reflex.utils.format import format_event_chain, to_camel_case from reflex.utils.format import format_event_chain, to_camel_case
from reflex.utils.serializers import serialize from reflex.vars import BaseVar, Var
from reflex.vars import BaseVar, Var, get_unique_variable_name
FORM_DATA = Var.create("form_data") FORM_DATA = Var.create("form_data")
HANDLE_SUBMIT_JS_JINJA2 = Environment().from_string( HANDLE_SUBMIT_JS_JINJA2 = Environment().from_string(
"\n const handleSubmit{{ handle_submit_unique_name }} = useCallback((ev) => {\n const $form = ev.target\n ev.preventDefault()\n const {{ form_data }} = {...Object.fromEntries(new FormData($form).entries()), ...{{ field_ref_mapping }}}\n\n {{ on_submit_event_chain }}\n\n if ({{ reset_on_submit }}) {\n $form.reset()\n }\n })\n " "\n const handleSubmit_{{ handle_submit_unique_name }} = useCallback((ev) => {\n const $form = ev.target\n ev.preventDefault()\n const {{ form_data }} = {...Object.fromEntries(new FormData($form).entries()), ...{{ field_ref_mapping }}}\n\n {{ on_submit_event_chain }}\n\n if ({{ reset_on_submit }}) {\n $form.reset()\n }\n })\n "
) )
class Form(ChakraComponent): class Form(ChakraComponent):
@ -38,7 +38,7 @@ class Form(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -129,7 +129,7 @@ class FormControl(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -216,7 +216,7 @@ class FormHelperText(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -296,7 +296,7 @@ class FormLabel(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -376,7 +376,7 @@ class FormErrorMessage(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -33,7 +33,7 @@ class IconButton(Text):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -51,7 +51,7 @@ class Input(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -149,7 +149,7 @@ class InputGroup(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -228,7 +228,7 @@ class InputLeftAddon(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -307,7 +307,7 @@ class InputRightAddon(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -386,7 +386,7 @@ class InputLeftElement(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -465,7 +465,7 @@ class InputRightElement(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -48,7 +48,7 @@ class NumberInput(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -146,7 +146,7 @@ class NumberInputField(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -225,7 +225,7 @@ class NumberInputStepper(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -304,7 +304,7 @@ class NumberIncrementStepper(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -383,7 +383,7 @@ class NumberDecrementStepper(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -41,7 +41,7 @@ class Password(Input):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -119,7 +119,10 @@ class PinInput(ChakraComponent):
) )
refs_declaration._var_is_local = True refs_declaration._var_is_local = True
if ref: if ref:
return f"const {ref} = {str(refs_declaration)}" return (
f"const {ref} = {str(refs_declaration)}; "
f"{str(Var.create_safe(ref).as_ref())} = {ref}"
)
return super()._get_ref_hook() return super()._get_ref_hook()
def _render(self) -> Tag: def _render(self) -> Tag:

View File

@ -49,7 +49,7 @@ class PinInput(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -154,7 +154,7 @@ class PinInputField(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -31,7 +31,7 @@ class RadioGroup(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -124,7 +124,7 @@ class Radio(Text):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -78,7 +78,10 @@ class RangeSlider(ChakraComponent):
if self.id: if self.id:
ref = format.format_array_ref(self.id, None) ref = format.format_array_ref(self.id, None)
if ref: if ref:
return f"const {ref} = Array.from({{length:2}}, () => useRef(null));" return (
f"const {ref} = Array.from({{length:2}}, () => useRef(null)); "
f"{str(Var.create_safe(ref).as_ref())} = {ref}"
)
return super()._get_ref_hook() return super()._get_ref_hook()
@classmethod @classmethod

View File

@ -40,7 +40,7 @@ class RangeSlider(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -138,7 +138,7 @@ class RangeSliderTrack(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -217,7 +217,7 @@ class RangeSliderFilledTrack(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -298,7 +298,7 @@ class RangeSliderThumb(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -44,7 +44,7 @@ class Select(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -140,7 +140,7 @@ class Option(Text):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -51,7 +51,7 @@ class Slider(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -156,7 +156,7 @@ class SliderTrack(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -235,7 +235,7 @@ class SliderFilledTrack(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -315,7 +315,7 @@ class SliderThumb(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -395,7 +395,7 @@ class SliderMark(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -82,7 +82,7 @@ class Switch(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -42,7 +42,7 @@ class TextArea(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -14,6 +14,18 @@ from reflex.vars import BaseVar, CallableVar, Var, VarData
DEFAULT_UPLOAD_ID: str = "default" DEFAULT_UPLOAD_ID: str = "default"
upload_files_context_var_data: VarData = VarData( # type: ignore
imports={
"react": {imports.ImportVar(tag="useContext")},
f"/{Dirs.CONTEXTS_PATH}": {
imports.ImportVar(tag="UploadFilesContext"),
},
},
hooks={
"const [filesById, setFilesById] = useContext(UploadFilesContext);",
},
)
@CallableVar @CallableVar
def upload_file(id_: str = DEFAULT_UPLOAD_ID) -> BaseVar: def upload_file(id_: str = DEFAULT_UPLOAD_ID) -> BaseVar:
@ -29,15 +41,9 @@ def upload_file(id_: str = DEFAULT_UPLOAD_ID) -> BaseVar:
A var referencing the file upload drop trigger. A var referencing the file upload drop trigger.
""" """
return BaseVar( return BaseVar(
_var_name=f"e => upload_files.{id_}[1]((files) => e)", _var_name=f"e => setFilesById(filesById => ({{...filesById, {id_}: e}}))",
_var_type=EventChain, _var_type=EventChain,
_var_data=VarData( # type: ignore _var_data=upload_files_context_var_data,
imports={
f"/{Dirs.STATE_PATH}": {
imports.ImportVar(tag="upload_files"),
},
},
),
) )
@ -52,15 +58,9 @@ def selected_files(id_: str = DEFAULT_UPLOAD_ID) -> BaseVar:
A var referencing the list of selected file paths. A var referencing the list of selected file paths.
""" """
return BaseVar( return BaseVar(
_var_name=f"(upload_files.{id_} ? upload_files.{id_}[0]?.map((f) => (f.path || f.name)) : [])", _var_name=f"(filesById.{id_} ? filesById.{id_}.map((f) => (f.path || f.name)) : [])",
_var_type=List[str], _var_type=List[str],
_var_data=VarData( # type: ignore _var_data=upload_files_context_var_data,
imports={
f"/{Dirs.STATE_PATH}": {
imports.ImportVar(tag="upload_files"),
},
},
),
) )
@ -74,7 +74,10 @@ def clear_selected_files(id_: str = DEFAULT_UPLOAD_ID) -> EventSpec:
Returns: Returns:
An event spec that clears the list of selected files when triggered. An event spec that clears the list of selected files when triggered.
""" """
return call_script(f"upload_files.{id_}[1]((files) => [])") # UploadFilesProvider assigns a special function to clear selected files
# into the shared global refs object to make it accessible outside a React
# component via `call_script` (otherwise backend could never clear files).
return call_script(f"refs['__clear_selected_files']({id_!r})")
def cancel_upload(upload_id: str) -> EventSpec: def cancel_upload(upload_id: str) -> EventSpec:
@ -89,6 +92,13 @@ def cancel_upload(upload_id: str) -> EventSpec:
return call_script(f"upload_controllers[{upload_id!r}]?.abort()") return call_script(f"upload_controllers[{upload_id!r}]?.abort()")
class UploadFilesProvider(Component):
"""AppWrap component that provides a dict of selected files by ID via useContext."""
library = f"/{Dirs.CONTEXTS_PATH}"
tag = "UploadFilesProvider"
class Upload(Component): class Upload(Component):
"""A file upload component.""" """A file upload component."""
@ -179,18 +189,8 @@ class Upload(Component):
out.args = ("getRootProps", "getInputProps") out.args = ("getRootProps", "getInputProps")
return out return out
def _get_hooks(self) -> str | None: @staticmethod
return ( def _get_app_wrap_components() -> dict[tuple[int, str], Component]:
super()._get_hooks() or "" return {
) + f"upload_files.{self.id or DEFAULT_UPLOAD_ID} = useState([]);" (5, "UploadFilesProvider"): UploadFilesProvider(),
}
def _get_imports(self) -> imports.ImportDict:
return imports.merge_imports(
super()._get_imports(),
{
"react": {imports.ImportVar(tag="useState")},
f"/{constants.Dirs.STATE_PATH}": [
imports.ImportVar(tag="upload_files")
],
},
)

View File

@ -18,6 +18,7 @@ from reflex.utils import imports
from reflex.vars import BaseVar, CallableVar, Var, VarData from reflex.vars import BaseVar, CallableVar, Var, VarData
DEFAULT_UPLOAD_ID: str DEFAULT_UPLOAD_ID: str
upload_files_context_var_data: VarData
@CallableVar @CallableVar
def upload_file(id_: str = DEFAULT_UPLOAD_ID) -> BaseVar: ... def upload_file(id_: str = DEFAULT_UPLOAD_ID) -> BaseVar: ...
@ -27,6 +28,85 @@ def selected_files(id_: str = DEFAULT_UPLOAD_ID) -> BaseVar: ...
def clear_selected_files(id_: str = DEFAULT_UPLOAD_ID) -> EventSpec: ... def clear_selected_files(id_: str = DEFAULT_UPLOAD_ID) -> EventSpec: ...
def cancel_upload(upload_id: str) -> EventSpec: ... def cancel_upload(upload_id: str) -> EventSpec: ...
class UploadFilesProvider(Component):
@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, str]]] = None,
on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar]
] = None,
on_click: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar]
] = None,
on_context_menu: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar]
] = None,
on_double_click: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar]
] = None,
on_focus: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar]
] = None,
on_mount: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar]
] = None,
on_mouse_down: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar]
] = None,
on_mouse_enter: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar]
] = None,
on_mouse_leave: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar]
] = None,
on_mouse_move: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar]
] = None,
on_mouse_out: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar]
] = None,
on_mouse_over: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar]
] = None,
on_mouse_up: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar]
] = None,
on_scroll: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar]
] = None,
on_unmount: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar]
] = None,
**props
) -> "UploadFilesProvider":
"""Create the component.
Args:
*children: The children of the component.
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.
Raises:
TypeError: If an invalid child is passed.
"""
...
class Upload(Component): class Upload(Component):
@overload @overload
@classmethod @classmethod
@ -49,7 +129,7 @@ class Upload(Component):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -29,7 +29,7 @@ class PlotlyLib(NoSSRComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -113,7 +113,7 @@ class Plotly(PlotlyLib):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -95,7 +95,7 @@ class Axis(Recharts):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_click: Optional[ on_click: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -218,7 +218,7 @@ class XAxis(Axis):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_click: Optional[ on_click: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -341,7 +341,7 @@ class YAxis(Axis):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_click: Optional[ on_click: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -451,7 +451,7 @@ class ZAxis(Recharts):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -547,7 +547,7 @@ class Brush(Recharts):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_change: Optional[ on_change: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -605,7 +605,7 @@ class Cartesian(Recharts):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_click: Optional[ on_click: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -634,7 +634,7 @@ class Cartesian(Recharts):
data_key: The key of a group of data which should be unique in an area chart. data_key: The key of a group of data which should be unique in an area chart.
x_axis_id: The id of x-axis which is corresponding to the data. x_axis_id: The id of x-axis which is corresponding to the data.
y_axis_id: The id of y-axis which is corresponding to the data. y_axis_id: The id of y-axis which is corresponding to the data.
style: The style of the component. style: The type of icon in legend. If set to 'none', no legend item will be rendered. 'line' | 'plainline' | 'square' | 'rect'| 'circle' | 'cross' | 'diamond' | 'star' | 'triangle' | 'wye' | 'none'optional legend_type: Var[LiteralLegendType] The style of the component.
key: A unique key for the component. key: A unique key for the component.
id: The id for the component. id: The id for the component.
class_name: The class name for the component. class_name: The class name for the component.
@ -717,7 +717,7 @@ class Area(Cartesian):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_click: Optional[ on_click: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -754,7 +754,7 @@ class Area(Cartesian):
data_key: The key of a group of data which should be unique in an area chart. data_key: The key of a group of data which should be unique in an area chart.
x_axis_id: The id of x-axis which is corresponding to the data. x_axis_id: The id of x-axis which is corresponding to the data.
y_axis_id: The id of y-axis which is corresponding to the data. y_axis_id: The id of y-axis which is corresponding to the data.
style: The style of the component. style: The type of icon in legend. If set to 'none', no legend item will be rendered. 'line' | 'plainline' | 'square' | 'rect'| 'circle' | 'cross' | 'diamond' | 'star' | 'triangle' | 'wye' | 'none'optional legend_type: Var[LiteralLegendType] The style of the component.
key: A unique key for the component. key: A unique key for the component.
id: The id for the component. id: The id for the component.
class_name: The class name for the component. class_name: The class name for the component.
@ -798,7 +798,7 @@ class Bar(Cartesian):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_click: Optional[ on_click: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -835,7 +835,7 @@ class Bar(Cartesian):
data_key: The key of a group of data which should be unique in an area chart. data_key: The key of a group of data which should be unique in an area chart.
x_axis_id: The id of x-axis which is corresponding to the data. x_axis_id: The id of x-axis which is corresponding to the data.
y_axis_id: The id of y-axis which is corresponding to the data. y_axis_id: The id of y-axis which is corresponding to the data.
style: The style of the component. style: The type of icon in legend. If set to 'none', no legend item will be rendered. 'line' | 'plainline' | 'square' | 'rect'| 'circle' | 'cross' | 'diamond' | 'star' | 'triangle' | 'wye' | 'none'optional legend_type: Var[LiteralLegendType] The style of the component.
key: A unique key for the component. key: A unique key for the component.
id: The id for the component. id: The id for the component.
class_name: The class name for the component. class_name: The class name for the component.
@ -918,7 +918,7 @@ class Line(Cartesian):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_click: Optional[ on_click: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -955,7 +955,7 @@ class Line(Cartesian):
data_key: The key of a group of data which should be unique in an area chart. data_key: The key of a group of data which should be unique in an area chart.
x_axis_id: The id of x-axis which is corresponding to the data. x_axis_id: The id of x-axis which is corresponding to the data.
y_axis_id: The id of y-axis which is corresponding to the data. y_axis_id: The id of y-axis which is corresponding to the data.
style: The style of the component. style: The type of icon in legend. If set to 'none', no legend item will be rendered. 'line' | 'plainline' | 'square' | 'rect'| 'circle' | 'cross' | 'diamond' | 'star' | 'triangle' | 'wye' | 'none'optional legend_type: Var[LiteralLegendType] The style of the component.
key: A unique key for the component. key: A unique key for the component.
id: The id for the component. id: The id for the component.
class_name: The class name for the component. class_name: The class name for the component.
@ -1017,7 +1017,7 @@ class Scatter(Cartesian):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_click: Optional[ on_click: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1053,7 +1053,7 @@ class Scatter(Cartesian):
data_key: The key of a group of data which should be unique in an area chart. data_key: The key of a group of data which should be unique in an area chart.
x_axis_id: The id of x-axis which is corresponding to the data. x_axis_id: The id of x-axis which is corresponding to the data.
y_axis_id: The id of y-axis which is corresponding to the data. y_axis_id: The id of y-axis which is corresponding to the data.
style: The style of the component. style: The type of icon in legend. If set to 'none', no legend item will be rendered. 'line' | 'plainline' | 'square' | 'rect'| 'circle' | 'cross' | 'diamond' | 'star' | 'triangle' | 'wye' | 'none'optional legend_type: Var[LiteralLegendType] The style of the component.
key: A unique key for the component. key: A unique key for the component.
id: The id for the component. id: The id for the component.
class_name: The class name for the component. class_name: The class name for the component.
@ -1098,7 +1098,7 @@ class Funnel(Cartesian):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_click: Optional[ on_click: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1131,7 +1131,7 @@ class Funnel(Cartesian):
data_key: The key of a group of data which should be unique in an area chart. data_key: The key of a group of data which should be unique in an area chart.
x_axis_id: The id of x-axis which is corresponding to the data. x_axis_id: The id of x-axis which is corresponding to the data.
y_axis_id: The id of y-axis which is corresponding to the data. y_axis_id: The id of y-axis which is corresponding to the data.
style: The style of the component. style: The type of icon in legend. If set to 'none', no legend item will be rendered. 'line' | 'plainline' | 'square' | 'rect'| 'circle' | 'cross' | 'diamond' | 'star' | 'triangle' | 'wye' | 'none'optional legend_type: Var[LiteralLegendType] The style of the component.
key: A unique key for the component. key: A unique key for the component.
id: The id for the component. id: The id for the component.
class_name: The class name for the component. class_name: The class name for the component.
@ -1165,7 +1165,7 @@ class ErrorBar(Recharts):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1260,7 +1260,7 @@ class Reference(Recharts):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1357,7 +1357,7 @@ class ReferenceLine(Reference):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1455,7 +1455,7 @@ class ReferenceDot(Reference):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_click: Optional[ on_click: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1529,7 +1529,7 @@ class ReferenceArea(Recharts):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1623,7 +1623,7 @@ class Grid(Recharts):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1715,7 +1715,7 @@ class CartesianGrid(Grid):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -1826,7 +1826,7 @@ class CartesianAxis(Grid):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -53,7 +53,7 @@ class ChartBase(RechartsCharts):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_click: Optional[ on_click: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -130,7 +130,7 @@ class AreaChart(ChartBase):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_click: Optional[ on_click: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -207,7 +207,7 @@ class BarChart(ChartBase):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_click: Optional[ on_click: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -283,7 +283,7 @@ class LineChart(ChartBase):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_click: Optional[ on_click: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -364,7 +364,7 @@ class ComposedChart(ChartBase):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_click: Optional[ on_click: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -441,7 +441,7 @@ class PieChart(ChartBase):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_click: Optional[ on_click: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -516,7 +516,7 @@ class RadarChart(ChartBase):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_click: Optional[ on_click: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -603,7 +603,7 @@ class RadialBarChart(ChartBase):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_click: Optional[ on_click: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -684,7 +684,7 @@ class ScatterChart(ChartBase):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_click: Optional[ on_click: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -755,7 +755,7 @@ class FunnelChart(RechartsCharts):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_click: Optional[ on_click: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -823,7 +823,7 @@ class Treemap(RechartsCharts):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -36,7 +36,7 @@ class ResponsiveContainer(Recharts):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -176,7 +176,7 @@ class Legend(Recharts):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_click: Optional[ on_click: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -246,7 +246,7 @@ class GraphingTooltip(Recharts):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -382,7 +382,7 @@ class Label(Recharts):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -515,7 +515,7 @@ class LabelList(Recharts):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -46,7 +46,7 @@ class Pie(Recharts):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_click: Optional[ on_click: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -130,7 +130,7 @@ class Radar(Recharts):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -226,7 +226,7 @@ class RadialBar(Recharts):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_click: Optional[ on_click: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -299,7 +299,7 @@ class PolarAngleAxis(Recharts):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_click: Optional[ on_click: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -371,7 +371,7 @@ class PolarGrid(Recharts):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -512,7 +512,7 @@ class PolarRadiusAxis(Recharts):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_click: Optional[ on_click: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -21,7 +21,7 @@ class Recharts(Component):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -100,7 +100,7 @@ class RechartsCharts(NoSSRComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -22,7 +22,7 @@ class AspectRatio(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -25,7 +25,7 @@ class Box(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -28,7 +28,7 @@ class CardHeader(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -107,7 +107,7 @@ class CardBody(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -186,7 +186,7 @@ class CardFooter(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -327,7 +327,7 @@ class Card(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -20,7 +20,7 @@ class Center(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -99,7 +99,7 @@ class Square(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -178,7 +178,7 @@ class Circle(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -3,7 +3,7 @@ from __future__ import annotations
from typing import Any, Dict, Optional, overload from typing import Any, Dict, Optional, overload
from reflex.components.component import Component from reflex.components.component import BaseComponent, Component
from reflex.components.layout.fragment import Fragment from reflex.components.layout.fragment import Fragment
from reflex.components.tags import CondTag, Tag from reflex.components.tags import CondTag, Tag
from reflex.constants import Dirs from reflex.constants import Dirs
@ -22,17 +22,17 @@ class Cond(Component):
cond: Var[Any] cond: Var[Any]
# The component to render if the cond is true. # The component to render if the cond is true.
comp1: Component = Fragment.create() comp1: BaseComponent = Fragment.create()
# The component to render if the cond is false. # The component to render if the cond is false.
comp2: Component = Fragment.create() comp2: BaseComponent = Fragment.create()
@classmethod @classmethod
def create( def create(
cls, cls,
cond: Var, cond: Var,
comp1: Component, comp1: BaseComponent,
comp2: Optional[Component] = None, comp2: Optional[BaseComponent] = None,
) -> Component: ) -> Component:
"""Create a conditional component. """Create a conditional component.
@ -141,9 +141,9 @@ def cond(condition: Any, c1: Any, c2: Any = None):
assert cond_var is not None, "The condition must be set." assert cond_var is not None, "The condition must be set."
# If the first component is a component, create a Cond component. # If the first component is a component, create a Cond component.
if isinstance(c1, Component): if isinstance(c1, BaseComponent):
assert c2 is None or isinstance( assert c2 is None or isinstance(
c2, Component c2, BaseComponent
), "Both arguments must be components." ), "Both arguments must be components."
return Cond.create(cond_var, c1, c2) return Cond.create(cond_var, c1, c2)
if isinstance(c1, Var): if isinstance(c1, Var):
@ -151,7 +151,7 @@ def cond(condition: Any, c1: Any, c2: Any = None):
# Otherwise, create a conditional Var. # Otherwise, create a conditional Var.
# Check that the second argument is valid. # Check that the second argument is valid.
if isinstance(c2, Component): if isinstance(c2, BaseComponent):
raise ValueError("Both arguments must be props.") raise ValueError("Both arguments must be props.")
if c2 is None: if c2 is None:
raise ValueError("For conditional vars, the second argument must be set.") raise ValueError("For conditional vars, the second argument must be set.")

View File

@ -22,7 +22,7 @@ class Container(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -31,7 +31,7 @@ class Flex(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -1,13 +1,14 @@
"""Create a list of components from an iterable.""" """Create a list of components from an iterable."""
from __future__ import annotations from __future__ import annotations
import typing import inspect
from hashlib import md5
from typing import Any, Callable, Iterable from typing import Any, Callable, Iterable
from reflex.components.component import Component from reflex.components.component import Component
from reflex.components.layout.fragment import Fragment from reflex.components.layout.fragment import Fragment
from reflex.components.tags import IterTag from reflex.components.tags import IterTag
from reflex.vars import BaseVar, Var, get_unique_variable_name from reflex.vars import Var
class Foreach(Component): class Foreach(Component):
@ -34,33 +35,43 @@ class Foreach(Component):
Raises: Raises:
TypeError: If the iterable is of type Any. TypeError: If the iterable is of type Any.
""" """
try:
type_ = (
iterable._var_type
if iterable._var_type.mro()[0] == dict
else iterable._var_type.__args__[0]
)
except Exception:
type_ = Any
iterable = Var.create(iterable) # type: ignore iterable = Var.create(iterable) # type: ignore
if iterable._var_type == Any: if iterable._var_type == Any:
raise TypeError( raise TypeError(
f"Could not foreach over var of type Any. (If you are trying to foreach over a state var, add a type annotation to the var.)" f"Could not foreach over var of type Any. (If you are trying to foreach over a state var, add a type annotation to the var.)"
) )
arg = BaseVar(_var_name="_", _var_type=type_, _var_is_local=True) component = cls(
comp = IterTag(iterable=iterable, render_fn=render_fn).render_component(arg)
return cls(
iterable=iterable, iterable=iterable,
render_fn=render_fn, render_fn=render_fn,
children=[comp],
**props, **props,
) )
# Keep a ref to a rendered component to determine correct imports.
component.children = [
component._render(props=dict(index_var_name="i")).render_component()
]
return component
def _render(self, props: dict[str, Any] | None = None) -> IterTag:
props = {} if props is None else props.copy()
# Determine the arg var name based on the params accepted by render_fn.
render_sig = inspect.signature(self.render_fn)
params = list(render_sig.parameters.values())
if len(params) >= 1:
props.setdefault("arg_var_name", params[0].name)
if len(params) >= 2:
# Determine the index var name based on the params accepted by render_fn.
props.setdefault("index_var_name", params[1].name)
elif "index_var_name" not in props:
# Otherwise, use a deterministic index, based on the rendered code.
code_hash = md5(str(self.children[0].render()).encode("utf-8")).hexdigest()
props.setdefault("index_var_name", f"index_{code_hash}")
def _render(self) -> IterTag:
return IterTag( return IterTag(
iterable=self.iterable, iterable=self.iterable,
render_fn=self.render_fn, render_fn=self.render_fn,
index_var_name=get_unique_variable_name(), **props,
) )
def render(self): def render(self):
@ -70,20 +81,7 @@ class Foreach(Component):
The dictionary for template of component. The dictionary for template of component.
""" """
tag = self._render() tag = self._render()
try: component = tag.render_component()
type_ = (
tag.iterable._var_type
if tag.iterable._var_type.mro()[0] == dict
else typing.get_args(tag.iterable._var_type)[0]
)
except Exception:
type_ = Any
arg = BaseVar(
_var_name=get_unique_variable_name(),
_var_type=type_,
)
index_arg = tag.get_index_var_arg()
component = tag.render_component(arg)
return dict( return dict(
tag.add_props( tag.add_props(
**self.event_triggers, **self.event_triggers,
@ -96,7 +94,7 @@ class Foreach(Component):
props=tag.format_props(), props=tag.format_props(),
), ),
iterable_state=tag.iterable._var_full_name, iterable_state=tag.iterable._var_full_name,
arg_name=arg._var_name, arg_name=tag.arg_var_name,
arg_index=index_arg, arg_index=tag.get_index_var_arg(),
iterable_type=tag.iterable._var_type.mro()[0].__name__, iterable_type=tag.iterable._var_type.mro()[0].__name__,
) )

View File

@ -20,7 +20,7 @@ class Fragment(Component):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -29,7 +29,7 @@ class Grid(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -122,7 +122,7 @@ class GridItem(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -221,7 +221,7 @@ class ResponsiveGrid(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -28,7 +28,7 @@ class Html(Box):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -20,7 +20,7 @@ class Spacer(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -35,7 +35,7 @@ class Stack(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -135,7 +135,7 @@ class Hstack(Stack):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -235,7 +235,7 @@ class Vstack(Stack):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -30,7 +30,7 @@ class Wrap(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -114,7 +114,7 @@ class WrapItem(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -24,7 +24,7 @@ class ChakraComponent(Component):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -104,7 +104,7 @@ class Global(Component):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -184,7 +184,7 @@ class ChakraProvider(ChakraComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,
@ -252,7 +252,7 @@ class ChakraColorModeProvider(Component):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -30,7 +30,7 @@ class ReactPlayerComponent(NoSSRComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

View File

@ -31,7 +31,7 @@ class Audio(ReactPlayerComponent):
id: Optional[Any] = None, id: Optional[Any] = None,
class_name: Optional[Any] = None, class_name: Optional[Any] = None,
autofocus: Optional[bool] = None, autofocus: Optional[bool] = None,
custom_attrs: Optional[Dict[str, str]] = None, custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
on_blur: Optional[ on_blur: Optional[
Union[EventHandler, EventSpec, list, function, BaseVar] Union[EventHandler, EventSpec, list, function, BaseVar]
] = None, ] = None,

Some files were not shown because too many files have changed in this diff Show More