[REF-2821]Improve Dynamic Imports (#3345)

* Improve import times

* add lazy loading to rx.el

* add lazy loading to reflex core components

* minor refactor

* Get imports working with reflex web

* get imports to work with all reflex examples

* refactor to define imports only in the root.

* lint

* deadcode remove

* update poetry deps

* unit tests fix

* app_harness fix

* app_harness fix

* pyi file generate

* pyi file generate

* sort pyi order

* fix pyi

* fix docker ci

* rework pyi-generator

* generate pyi for __init__ files

* test pyright

* test pyright ci

* partial pyright fix

* more pyright fix

* pyright fix

* fix pyi_generator

* add rx.serializer and others

* add future annotation import which fixes container CI, then also load recharts lazily

* add new pyi files

* pyright fix

* minor fixes for reflex-web and flexdown

* forward references for py38

* ruff fix

* pyi fix

* unit tests fix

* reduce coverage to 68%

* reduce coverage to 67%

* reduce coverage to 66%as a workaround to coverage's rounding issue

* reduce coverage to 66%as a workaround to coverage's rounding issue

* exclude lazy_loader dependency review checks.

* its lazy-loader

* Add docstrings and regenerate pyi files

* add link

* address Pr comments

* CI fix

* partially address PR comments.

* edit docstrings and fix integration tests

* fix typo in docstring

* pyi fix
This commit is contained in:
Elijah Ahianyo 2024-05-31 09:43:10 -07:00 committed by GitHub
parent 83d99889ec
commit 34bf25071a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
148 changed files with 2816 additions and 1087 deletions

View File

@ -11,7 +11,7 @@ omit =
[report] [report]
show_missing = true show_missing = true
# TODO bump back to 79 # TODO bump back to 79
fail_under = 70 fail_under = 66
precision = 2 precision = 2
# Regexes for lines to exclude from consideration # Regexes for lines to exclude from consideration

View File

@ -14,3 +14,4 @@ jobs:
uses: actions/dependency-review-action@v4 uses: actions/dependency-review-action@v4
with: with:
allow-licenses: Apache-2.0, BSD-2-Clause, BSD-3-Clause, HPND, ISC, MIT, MPL-2.0, PSF-2.0, Unlicense allow-licenses: Apache-2.0, BSD-2-Clause, BSD-3-Clause, HPND, ISC, MIT, MPL-2.0, PSF-2.0, Unlicense
allow-dependencies-licenses: 'pkg:pypi/lazy-loader'

View File

@ -26,7 +26,6 @@ def TailwindApp(
paragraph_class_name: Tailwind class_name for the paragraph. paragraph_class_name: Tailwind class_name for the paragraph.
""" """
import reflex as rx import reflex as rx
import reflex.components.radix.themes as rdxt
class UnusedState(rx.State): class UnusedState(rx.State):
pass pass
@ -35,7 +34,7 @@ def TailwindApp(
return rx.el.div( return rx.el.div(
rx.chakra.text(paragraph_text, class_name=paragraph_class_name), rx.chakra.text(paragraph_text, class_name=paragraph_class_name),
rx.el.p(paragraph_text, class_name=paragraph_class_name), rx.el.p(paragraph_text, class_name=paragraph_class_name),
rdxt.text(paragraph_text, as_="p", class_name=paragraph_class_name), rx.text(paragraph_text, as_="p", class_name=paragraph_class_name),
id="p-content", id="p-content",
) )

167
poetry.lock generated
View File

@ -1,9 +1,10 @@
# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. # This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand.
[[package]] [[package]]
name = "alembic" name = "alembic"
version = "1.13.1" version = "1.13.1"
description = "A database migration tool for SQLAlchemy." description = "A database migration tool for SQLAlchemy."
category = "main"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -25,6 +26,7 @@ tz = ["backports.zoneinfo"]
name = "annotated-types" name = "annotated-types"
version = "0.6.0" version = "0.6.0"
description = "Reusable constraint types to use with typing.Annotated" description = "Reusable constraint types to use with typing.Annotated"
category = "main"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -39,6 +41,7 @@ typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.9\""}
name = "anyio" name = "anyio"
version = "4.3.0" version = "4.3.0"
description = "High level compatibility layer for multiple asynchronous event loop implementations" description = "High level compatibility layer for multiple asynchronous event loop implementations"
category = "main"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -61,6 +64,7 @@ trio = ["trio (>=0.23)"]
name = "async-timeout" name = "async-timeout"
version = "4.0.3" version = "4.0.3"
description = "Timeout context manager for asyncio programs" description = "Timeout context manager for asyncio programs"
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -72,6 +76,7 @@ files = [
name = "asynctest" name = "asynctest"
version = "0.13.0" version = "0.13.0"
description = "Enhance the standard unittest package with features for testing asyncio libraries" description = "Enhance the standard unittest package with features for testing asyncio libraries"
category = "dev"
optional = false optional = false
python-versions = ">=3.5" python-versions = ">=3.5"
files = [ files = [
@ -83,6 +88,7 @@ files = [
name = "attrs" name = "attrs"
version = "23.2.0" version = "23.2.0"
description = "Classes Without Boilerplate" description = "Classes Without Boilerplate"
category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -102,6 +108,7 @@ tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "p
name = "backports-tarfile" name = "backports-tarfile"
version = "1.1.1" version = "1.1.1"
description = "Backport of CPython tarfile module" description = "Backport of CPython tarfile module"
category = "main"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -117,6 +124,7 @@ testing = ["jaraco.test", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "p
name = "bidict" name = "bidict"
version = "0.23.1" version = "0.23.1"
description = "The bidirectional mapping library for Python." description = "The bidirectional mapping library for Python."
category = "main"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -128,6 +136,7 @@ files = [
name = "black" name = "black"
version = "22.12.0" version = "22.12.0"
description = "The uncompromising code formatter." description = "The uncompromising code formatter."
category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -163,6 +172,7 @@ uvloop = ["uvloop (>=0.15.2)"]
name = "build" name = "build"
version = "1.2.1" version = "1.2.1"
description = "A simple, correct Python build frontend" description = "A simple, correct Python build frontend"
category = "main"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -188,6 +198,7 @@ virtualenv = ["virtualenv (>=20.0.35)"]
name = "certifi" name = "certifi"
version = "2024.2.2" version = "2024.2.2"
description = "Python package for providing Mozilla's CA Bundle." description = "Python package for providing Mozilla's CA Bundle."
category = "main"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
files = [ files = [
@ -199,6 +210,7 @@ files = [
name = "cffi" name = "cffi"
version = "1.16.0" version = "1.16.0"
description = "Foreign Function Interface for Python calling C code." description = "Foreign Function Interface for Python calling C code."
category = "main"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -263,6 +275,7 @@ pycparser = "*"
name = "cfgv" name = "cfgv"
version = "3.4.0" version = "3.4.0"
description = "Validate configuration and produce human readable error messages." description = "Validate configuration and produce human readable error messages."
category = "dev"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -274,6 +287,7 @@ files = [
name = "charset-normalizer" name = "charset-normalizer"
version = "3.3.2" version = "3.3.2"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
category = "main"
optional = false optional = false
python-versions = ">=3.7.0" python-versions = ">=3.7.0"
files = [ files = [
@ -373,6 +387,7 @@ files = [
name = "click" name = "click"
version = "8.1.7" version = "8.1.7"
description = "Composable command line interface toolkit" description = "Composable command line interface toolkit"
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -387,6 +402,7 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""}
name = "colorama" name = "colorama"
version = "0.4.6" version = "0.4.6"
description = "Cross-platform colored terminal text." description = "Cross-platform colored terminal text."
category = "main"
optional = false optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
files = [ files = [
@ -398,6 +414,7 @@ files = [
name = "coverage" name = "coverage"
version = "7.5.1" version = "7.5.1"
description = "Code coverage measurement for Python" description = "Code coverage measurement for Python"
category = "dev"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -465,6 +482,7 @@ toml = ["tomli"]
name = "cryptography" name = "cryptography"
version = "42.0.7" version = "42.0.7"
description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -519,6 +537,7 @@ test-randomorder = ["pytest-randomly"]
name = "darglint" name = "darglint"
version = "1.8.1" version = "1.8.1"
description = "A utility for ensuring Google-style docstrings stay up to date with the source code." description = "A utility for ensuring Google-style docstrings stay up to date with the source code."
category = "dev"
optional = false optional = false
python-versions = ">=3.6,<4.0" python-versions = ">=3.6,<4.0"
files = [ files = [
@ -530,6 +549,7 @@ files = [
name = "dill" name = "dill"
version = "0.3.8" version = "0.3.8"
description = "serialize all of Python" description = "serialize all of Python"
category = "main"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -545,6 +565,7 @@ profile = ["gprof2dot (>=2022.7.29)"]
name = "distlib" name = "distlib"
version = "0.3.8" version = "0.3.8"
description = "Distribution utilities" description = "Distribution utilities"
category = "dev"
optional = false optional = false
python-versions = "*" python-versions = "*"
files = [ files = [
@ -556,6 +577,7 @@ files = [
name = "distro" name = "distro"
version = "1.9.0" version = "1.9.0"
description = "Distro - an OS platform information API" description = "Distro - an OS platform information API"
category = "main"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
files = [ files = [
@ -567,14 +589,19 @@ files = [
name = "docutils" name = "docutils"
version = "0.20.1" version = "0.20.1"
description = "Docutils -- Python Documentation Utilities" description = "Docutils -- Python Documentation Utilities"
category = "main"
optional = false optional = false
python-versions = "*" python-versions = ">=3.7"
files = [] files = [
{file = "docutils-0.20.1-py3-none-any.whl", hash = "sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6"},
{file = "docutils-0.20.1.tar.gz", hash = "sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b"},
]
[[package]] [[package]]
name = "exceptiongroup" name = "exceptiongroup"
version = "1.2.1" version = "1.2.1"
description = "Backport of PEP 654 (exception groups)" description = "Backport of PEP 654 (exception groups)"
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -589,6 +616,7 @@ test = ["pytest (>=6)"]
name = "fastapi" name = "fastapi"
version = "0.110.3" version = "0.110.3"
description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production"
category = "main"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -608,6 +636,7 @@ all = ["email_validator (>=2.0.0)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)"
name = "filelock" name = "filelock"
version = "3.14.0" version = "3.14.0"
description = "A platform independent file lock." description = "A platform independent file lock."
category = "dev"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -624,6 +653,7 @@ typing = ["typing-extensions (>=4.8)"]
name = "greenlet" name = "greenlet"
version = "3.0.3" version = "3.0.3"
description = "Lightweight in-process concurrent programming" description = "Lightweight in-process concurrent programming"
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -695,6 +725,7 @@ test = ["objgraph", "psutil"]
name = "gunicorn" name = "gunicorn"
version = "22.0.0" version = "22.0.0"
description = "WSGI HTTP Server for UNIX" description = "WSGI HTTP Server for UNIX"
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -716,6 +747,7 @@ tornado = ["tornado (>=0.2)"]
name = "h11" name = "h11"
version = "0.14.0" version = "0.14.0"
description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1"
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -727,6 +759,7 @@ files = [
name = "httpcore" name = "httpcore"
version = "1.0.5" version = "1.0.5"
description = "A minimal low-level HTTP client." description = "A minimal low-level HTTP client."
category = "main"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -741,13 +774,14 @@ h11 = ">=0.13,<0.15"
[package.extras] [package.extras]
asyncio = ["anyio (>=4.0,<5.0)"] asyncio = ["anyio (>=4.0,<5.0)"]
http2 = ["h2 (>=3,<5)"] http2 = ["h2 (>=3,<5)"]
socks = ["socksio (==1.*)"] socks = ["socksio (>=1.0.0,<2.0.0)"]
trio = ["trio (>=0.22.0,<0.26.0)"] trio = ["trio (>=0.22.0,<0.26.0)"]
[[package]] [[package]]
name = "httpx" name = "httpx"
version = "0.27.0" version = "0.27.0"
description = "The next generation HTTP client." description = "The next generation HTTP client."
category = "main"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -758,20 +792,21 @@ files = [
[package.dependencies] [package.dependencies]
anyio = "*" anyio = "*"
certifi = "*" certifi = "*"
httpcore = "==1.*" httpcore = ">=1.0.0,<2.0.0"
idna = "*" idna = "*"
sniffio = "*" sniffio = "*"
[package.extras] [package.extras]
brotli = ["brotli", "brotlicffi"] brotli = ["brotli", "brotlicffi"]
cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] cli = ["click (>=8.0.0,<9.0.0)", "pygments (>=2.0.0,<3.0.0)", "rich (>=10,<14)"]
http2 = ["h2 (>=3,<5)"] http2 = ["h2 (>=3,<5)"]
socks = ["socksio (==1.*)"] socks = ["socksio (>=1.0.0,<2.0.0)"]
[[package]] [[package]]
name = "identify" name = "identify"
version = "2.5.36" version = "2.5.36"
description = "File identification library for Python" description = "File identification library for Python"
category = "dev"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -786,6 +821,7 @@ license = ["ukkonen"]
name = "idna" name = "idna"
version = "3.7" version = "3.7"
description = "Internationalized Domain Names in Applications (IDNA)" description = "Internationalized Domain Names in Applications (IDNA)"
category = "main"
optional = false optional = false
python-versions = ">=3.5" python-versions = ">=3.5"
files = [ files = [
@ -797,6 +833,7 @@ files = [
name = "importlib-metadata" name = "importlib-metadata"
version = "7.1.0" version = "7.1.0"
description = "Read metadata from Python packages" description = "Read metadata from Python packages"
category = "main"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -816,6 +853,7 @@ testing = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)",
name = "importlib-resources" name = "importlib-resources"
version = "6.4.0" version = "6.4.0"
description = "Read resources from Python packages" description = "Read resources from Python packages"
category = "main"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -834,6 +872,7 @@ testing = ["jaraco.test (>=5.4)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "p
name = "iniconfig" name = "iniconfig"
version = "2.0.0" version = "2.0.0"
description = "brain-dead simple config-ini parsing" description = "brain-dead simple config-ini parsing"
category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -845,6 +884,7 @@ files = [
name = "jaraco-classes" name = "jaraco-classes"
version = "3.4.0" version = "3.4.0"
description = "Utility functions for Python class constructs" description = "Utility functions for Python class constructs"
category = "main"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -863,6 +903,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-ena
name = "jaraco-context" name = "jaraco-context"
version = "5.3.0" version = "5.3.0"
description = "Useful decorators and context managers" description = "Useful decorators and context managers"
category = "main"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -881,6 +922,7 @@ testing = ["portend", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytes
name = "jaraco-functools" name = "jaraco-functools"
version = "4.0.1" version = "4.0.1"
description = "Functools like those found in stdlib" description = "Functools like those found in stdlib"
category = "main"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -899,6 +941,7 @@ testing = ["jaraco.classes", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest
name = "jeepney" name = "jeepney"
version = "0.8.0" version = "0.8.0"
description = "Low-level, pure Python DBus protocol wrapper." description = "Low-level, pure Python DBus protocol wrapper."
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -914,6 +957,7 @@ trio = ["async_generator", "trio"]
name = "jinja2" name = "jinja2"
version = "3.1.4" version = "3.1.4"
description = "A very fast and expressive template engine." description = "A very fast and expressive template engine."
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -931,6 +975,7 @@ i18n = ["Babel (>=2.7)"]
name = "keyring" name = "keyring"
version = "25.2.0" version = "25.2.0"
description = "Store and access your passwords safely." description = "Store and access your passwords safely."
category = "main"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -953,10 +998,31 @@ completion = ["shtab (>=1.1.0)"]
docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
testing = ["pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)"] testing = ["pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)"]
[[package]]
name = "lazy-loader"
version = "0.4"
description = "Makes it easy to load subpackages and functions on demand."
category = "main"
optional = false
python-versions = ">=3.7"
files = [
{file = "lazy_loader-0.4-py3-none-any.whl", hash = "sha256:342aa8e14d543a154047afb4ba8ef17f5563baad3fc610d7b15b213b0f119efc"},
{file = "lazy_loader-0.4.tar.gz", hash = "sha256:47c75182589b91a4e1a85a136c074285a5ad4d9f39c63e0d7fb76391c4574cd1"},
]
[package.dependencies]
packaging = "*"
[package.extras]
dev = ["changelist (==0.5)"]
lint = ["pre-commit (==3.7.0)"]
test = ["pytest (>=7.4)", "pytest-cov (>=4.1)"]
[[package]] [[package]]
name = "mako" name = "mako"
version = "1.3.3" version = "1.3.3"
description = "A super-fast templating language that borrows the best ideas from the existing templating languages." description = "A super-fast templating language that borrows the best ideas from the existing templating languages."
category = "main"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -976,6 +1042,7 @@ testing = ["pytest"]
name = "markdown-it-py" name = "markdown-it-py"
version = "3.0.0" version = "3.0.0"
description = "Python port of markdown-it. Markdown parsing, done right!" description = "Python port of markdown-it. Markdown parsing, done right!"
category = "main"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -1000,6 +1067,7 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"]
name = "markupsafe" name = "markupsafe"
version = "2.1.5" version = "2.1.5"
description = "Safely add untrusted strings to HTML/XML markup." description = "Safely add untrusted strings to HTML/XML markup."
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -1069,6 +1137,7 @@ files = [
name = "mdurl" name = "mdurl"
version = "0.1.2" version = "0.1.2"
description = "Markdown URL utilities" description = "Markdown URL utilities"
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -1080,6 +1149,7 @@ files = [
name = "more-itertools" name = "more-itertools"
version = "10.2.0" version = "10.2.0"
description = "More routines for operating on iterables, beyond itertools" description = "More routines for operating on iterables, beyond itertools"
category = "main"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -1091,6 +1161,7 @@ files = [
name = "mypy-extensions" name = "mypy-extensions"
version = "1.0.0" version = "1.0.0"
description = "Type system extensions for programs checked with the mypy type checker." description = "Type system extensions for programs checked with the mypy type checker."
category = "dev"
optional = false optional = false
python-versions = ">=3.5" python-versions = ">=3.5"
files = [ files = [
@ -1102,6 +1173,7 @@ files = [
name = "nh3" name = "nh3"
version = "0.2.17" version = "0.2.17"
description = "Python bindings to the ammonia HTML sanitization library." description = "Python bindings to the ammonia HTML sanitization library."
category = "main"
optional = false optional = false
python-versions = "*" python-versions = "*"
files = [ files = [
@ -1127,6 +1199,7 @@ files = [
name = "nodeenv" name = "nodeenv"
version = "1.8.0" version = "1.8.0"
description = "Node.js virtual environment builder" description = "Node.js virtual environment builder"
category = "dev"
optional = false optional = false
python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*"
files = [ files = [
@ -1141,6 +1214,7 @@ setuptools = "*"
name = "numpy" name = "numpy"
version = "1.24.4" version = "1.24.4"
description = "Fundamental package for array computing in Python" description = "Fundamental package for array computing in Python"
category = "dev"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -1178,6 +1252,7 @@ files = [
name = "numpy" name = "numpy"
version = "1.26.4" version = "1.26.4"
description = "Fundamental package for array computing in Python" description = "Fundamental package for array computing in Python"
category = "dev"
optional = false optional = false
python-versions = ">=3.9" python-versions = ">=3.9"
files = [ files = [
@ -1223,6 +1298,7 @@ files = [
name = "outcome" name = "outcome"
version = "1.3.0.post0" version = "1.3.0.post0"
description = "Capture the outcome of Python function calls." description = "Capture the outcome of Python function calls."
category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -1237,6 +1313,7 @@ attrs = ">=19.2.0"
name = "packaging" name = "packaging"
version = "24.0" version = "24.0"
description = "Core utilities for Python packages" description = "Core utilities for Python packages"
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -1248,6 +1325,7 @@ files = [
name = "pandas" name = "pandas"
version = "1.5.3" version = "1.5.3"
description = "Powerful data structures for data analysis, time series, and statistics" description = "Powerful data structures for data analysis, time series, and statistics"
category = "dev"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -1292,6 +1370,7 @@ test = ["hypothesis (>=5.5.3)", "pytest (>=6.0)", "pytest-xdist (>=1.31)"]
name = "pandas" name = "pandas"
version = "2.2.2" version = "2.2.2"
description = "Powerful data structures for data analysis, time series, and statistics" description = "Powerful data structures for data analysis, time series, and statistics"
category = "dev"
optional = false optional = false
python-versions = ">=3.9" python-versions = ">=3.9"
files = [ files = [
@ -1365,6 +1444,7 @@ xml = ["lxml (>=4.9.2)"]
name = "pathspec" name = "pathspec"
version = "0.12.1" version = "0.12.1"
description = "Utility library for gitignore style pattern matching of file paths." description = "Utility library for gitignore style pattern matching of file paths."
category = "dev"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -1376,6 +1456,7 @@ files = [
name = "pillow" name = "pillow"
version = "10.3.0" version = "10.3.0"
description = "Python Imaging Library (Fork)" description = "Python Imaging Library (Fork)"
category = "dev"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -1462,6 +1543,7 @@ xmp = ["defusedxml"]
name = "pip" name = "pip"
version = "24.0" version = "24.0"
description = "The PyPA recommended tool for installing Python packages." description = "The PyPA recommended tool for installing Python packages."
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -1473,6 +1555,7 @@ files = [
name = "pipdeptree" name = "pipdeptree"
version = "2.16.2" version = "2.16.2"
description = "Command line utility to show dependency tree of packages." description = "Command line utility to show dependency tree of packages."
category = "main"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -1491,6 +1574,7 @@ test = ["covdefaults (>=2.3)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pyte
name = "pkginfo" name = "pkginfo"
version = "1.10.0" version = "1.10.0"
description = "Query metadata from sdists / bdists / installed packages." description = "Query metadata from sdists / bdists / installed packages."
category = "main"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
files = [ files = [
@ -1505,6 +1589,7 @@ testing = ["pytest", "pytest-cov", "wheel"]
name = "platformdirs" name = "platformdirs"
version = "4.2.1" version = "4.2.1"
description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`."
category = "main"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -1521,6 +1606,7 @@ type = ["mypy (>=1.8)"]
name = "plotly" name = "plotly"
version = "5.22.0" version = "5.22.0"
description = "An open-source, interactive data visualization library for Python" description = "An open-source, interactive data visualization library for Python"
category = "dev"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -1536,6 +1622,7 @@ tenacity = ">=6.2.0"
name = "pluggy" name = "pluggy"
version = "1.5.0" version = "1.5.0"
description = "plugin and hook calling mechanisms for python" description = "plugin and hook calling mechanisms for python"
category = "dev"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -1551,6 +1638,7 @@ testing = ["pytest", "pytest-benchmark"]
name = "pre-commit" name = "pre-commit"
version = "3.5.0" version = "3.5.0"
description = "A framework for managing and maintaining multi-language pre-commit hooks." description = "A framework for managing and maintaining multi-language pre-commit hooks."
category = "dev"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -1569,6 +1657,7 @@ virtualenv = ">=20.10.0"
name = "psutil" name = "psutil"
version = "5.9.8" version = "5.9.8"
description = "Cross-platform lib for process and system monitoring in Python." description = "Cross-platform lib for process and system monitoring in Python."
category = "main"
optional = false optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
files = [ files = [
@ -1597,6 +1686,7 @@ test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"]
name = "py-cpuinfo" name = "py-cpuinfo"
version = "9.0.0" version = "9.0.0"
description = "Get CPU info with pure Python" description = "Get CPU info with pure Python"
category = "dev"
optional = false optional = false
python-versions = "*" python-versions = "*"
files = [ files = [
@ -1608,6 +1698,7 @@ files = [
name = "pycparser" name = "pycparser"
version = "2.22" version = "2.22"
description = "C parser in Python" description = "C parser in Python"
category = "main"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -1619,6 +1710,7 @@ files = [
name = "pydantic" name = "pydantic"
version = "2.7.1" version = "2.7.1"
description = "Data validation using Python type hints" description = "Data validation using Python type hints"
category = "main"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -1638,6 +1730,7 @@ email = ["email-validator (>=2.0.0)"]
name = "pydantic-core" name = "pydantic-core"
version = "2.18.2" version = "2.18.2"
description = "Core functionality for Pydantic validation and serialization" description = "Core functionality for Pydantic validation and serialization"
category = "main"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -1729,6 +1822,7 @@ typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0"
name = "pygments" name = "pygments"
version = "2.18.0" version = "2.18.0"
description = "Pygments is a syntax highlighting package written in Python." description = "Pygments is a syntax highlighting package written in Python."
category = "main"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -1743,6 +1837,7 @@ windows-terminal = ["colorama (>=0.4.6)"]
name = "pyproject-hooks" name = "pyproject-hooks"
version = "1.1.0" version = "1.1.0"
description = "Wrappers to call pyproject.toml-based build backend hooks." description = "Wrappers to call pyproject.toml-based build backend hooks."
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -1754,6 +1849,7 @@ files = [
name = "pyright" name = "pyright"
version = "1.1.334" version = "1.1.334"
description = "Command line wrapper for pyright" description = "Command line wrapper for pyright"
category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -1772,6 +1868,7 @@ dev = ["twine (>=3.4.1)"]
name = "pysocks" name = "pysocks"
version = "1.7.1" version = "1.7.1"
description = "A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information." description = "A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information."
category = "dev"
optional = false optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
files = [ files = [
@ -1784,6 +1881,7 @@ files = [
name = "pytest" name = "pytest"
version = "7.4.4" version = "7.4.4"
description = "pytest: simple powerful testing with Python" description = "pytest: simple powerful testing with Python"
category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -1806,6 +1904,7 @@ testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "no
name = "pytest-asyncio" name = "pytest-asyncio"
version = "0.21.2" version = "0.21.2"
description = "Pytest support for asyncio" description = "Pytest support for asyncio"
category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -1824,6 +1923,7 @@ testing = ["coverage (>=6.2)", "flaky (>=3.5.0)", "hypothesis (>=5.7.1)", "mypy
name = "pytest-benchmark" name = "pytest-benchmark"
version = "4.0.0" version = "4.0.0"
description = "A ``pytest`` fixture for benchmarking code. It will group the tests into rounds that are calibrated to the chosen timer." description = "A ``pytest`` fixture for benchmarking code. It will group the tests into rounds that are calibrated to the chosen timer."
category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -1844,6 +1944,7 @@ histogram = ["pygal", "pygaljs"]
name = "pytest-cov" name = "pytest-cov"
version = "4.1.0" version = "4.1.0"
description = "Pytest plugin for measuring coverage." description = "Pytest plugin for measuring coverage."
category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -1862,6 +1963,7 @@ testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtuale
name = "pytest-mock" name = "pytest-mock"
version = "3.14.0" version = "3.14.0"
description = "Thin-wrapper around the mock package for easier use with pytest" description = "Thin-wrapper around the mock package for easier use with pytest"
category = "dev"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -1879,6 +1981,7 @@ dev = ["pre-commit", "pytest-asyncio", "tox"]
name = "python-dateutil" name = "python-dateutil"
version = "2.9.0.post0" version = "2.9.0.post0"
description = "Extensions to the standard Python datetime module" description = "Extensions to the standard Python datetime module"
category = "main"
optional = false optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
files = [ files = [
@ -1893,6 +1996,7 @@ six = ">=1.5"
name = "python-engineio" name = "python-engineio"
version = "4.9.0" version = "4.9.0"
description = "Engine.IO server and client for Python" description = "Engine.IO server and client for Python"
category = "main"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
files = [ files = [
@ -1912,6 +2016,7 @@ docs = ["sphinx"]
name = "python-multipart" name = "python-multipart"
version = "0.0.9" version = "0.0.9"
description = "A streaming multipart parser for Python" description = "A streaming multipart parser for Python"
category = "main"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -1926,6 +2031,7 @@ dev = ["atomicwrites (==1.4.1)", "attrs (==23.2.0)", "coverage (==7.4.1)", "hatc
name = "python-socketio" name = "python-socketio"
version = "5.11.2" version = "5.11.2"
description = "Socket.IO server and client for Python" description = "Socket.IO server and client for Python"
category = "main"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -1946,6 +2052,7 @@ docs = ["sphinx"]
name = "pytz" name = "pytz"
version = "2024.1" version = "2024.1"
description = "World timezone definitions, modern and historical" description = "World timezone definitions, modern and historical"
category = "dev"
optional = false optional = false
python-versions = "*" python-versions = "*"
files = [ files = [
@ -1957,6 +2064,7 @@ files = [
name = "pywin32-ctypes" name = "pywin32-ctypes"
version = "0.2.2" version = "0.2.2"
description = "A (partial) reimplementation of pywin32 using ctypes/cffi" description = "A (partial) reimplementation of pywin32 using ctypes/cffi"
category = "main"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
files = [ files = [
@ -1968,6 +2076,7 @@ files = [
name = "pyyaml" name = "pyyaml"
version = "6.0.1" version = "6.0.1"
description = "YAML parser and emitter for Python" description = "YAML parser and emitter for Python"
category = "dev"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
files = [ files = [
@ -2017,6 +2126,7 @@ files = [
name = "readme-renderer" name = "readme-renderer"
version = "43.0" version = "43.0"
description = "readme_renderer is a library for rendering readme descriptions for Warehouse" description = "readme_renderer is a library for rendering readme descriptions for Warehouse"
category = "main"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -2036,6 +2146,7 @@ md = ["cmarkgfm (>=0.8.0)"]
name = "redis" name = "redis"
version = "5.0.4" version = "5.0.4"
description = "Python client for Redis database and key-value store" description = "Python client for Redis database and key-value store"
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -2054,6 +2165,7 @@ ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==20.0.1)", "requests (>=2.26.0)"
name = "reflex-hosting-cli" name = "reflex-hosting-cli"
version = "0.1.13" version = "0.1.13"
description = "Reflex Hosting CLI" description = "Reflex Hosting CLI"
category = "main"
optional = false optional = false
python-versions = "<4.0,>=3.8" python-versions = "<4.0,>=3.8"
files = [ files = [
@ -2077,6 +2189,7 @@ websockets = ">=10.4"
name = "requests" name = "requests"
version = "2.31.0" version = "2.31.0"
description = "Python HTTP for Humans." description = "Python HTTP for Humans."
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -2098,6 +2211,7 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"]
name = "requests-toolbelt" name = "requests-toolbelt"
version = "1.0.0" version = "1.0.0"
description = "A utility belt for advanced users of python-requests" description = "A utility belt for advanced users of python-requests"
category = "main"
optional = false optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
files = [ files = [
@ -2112,6 +2226,7 @@ requests = ">=2.0.1,<3.0.0"
name = "rfc3986" name = "rfc3986"
version = "2.0.0" version = "2.0.0"
description = "Validating URI References per RFC 3986" description = "Validating URI References per RFC 3986"
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -2126,6 +2241,7 @@ idna2008 = ["idna"]
name = "rich" name = "rich"
version = "13.7.1" version = "13.7.1"
description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal"
category = "main"
optional = false optional = false
python-versions = ">=3.7.0" python-versions = ">=3.7.0"
files = [ files = [
@ -2145,6 +2261,7 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"]
name = "ruff" name = "ruff"
version = "0.1.0" version = "0.1.0"
description = "An extremely fast Python linter, written in Rust." description = "An extremely fast Python linter, written in Rust."
category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -2171,6 +2288,7 @@ files = [
name = "secretstorage" name = "secretstorage"
version = "3.3.3" version = "3.3.3"
description = "Python bindings to FreeDesktop.org Secret Service API" description = "Python bindings to FreeDesktop.org Secret Service API"
category = "main"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
files = [ files = [
@ -2186,6 +2304,7 @@ jeepney = ">=0.6"
name = "selenium" name = "selenium"
version = "4.20.0" version = "4.20.0"
description = "" description = ""
category = "dev"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -2204,6 +2323,7 @@ urllib3 = {version = ">=1.26,<3", extras = ["socks"]}
name = "setuptools" name = "setuptools"
version = "69.5.1" version = "69.5.1"
description = "Easily download, build, install, upgrade, and uninstall Python packages" description = "Easily download, build, install, upgrade, and uninstall Python packages"
category = "main"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -2220,6 +2340,7 @@ testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jar
name = "shellingham" name = "shellingham"
version = "1.5.4" version = "1.5.4"
description = "Tool to Detect Surrounding Shell" description = "Tool to Detect Surrounding Shell"
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -2231,6 +2352,7 @@ files = [
name = "simple-websocket" name = "simple-websocket"
version = "1.0.0" version = "1.0.0"
description = "Simple WebSocket server and client for Python" description = "Simple WebSocket server and client for Python"
category = "main"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
files = [ files = [
@ -2248,6 +2370,7 @@ docs = ["sphinx"]
name = "six" name = "six"
version = "1.16.0" version = "1.16.0"
description = "Python 2 and 3 compatibility utilities" description = "Python 2 and 3 compatibility utilities"
category = "main"
optional = false optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
files = [ files = [
@ -2259,6 +2382,7 @@ files = [
name = "sniffio" name = "sniffio"
version = "1.3.1" version = "1.3.1"
description = "Sniff out which async library your code is running under" description = "Sniff out which async library your code is running under"
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -2270,6 +2394,7 @@ files = [
name = "sortedcontainers" name = "sortedcontainers"
version = "2.4.0" version = "2.4.0"
description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set"
category = "dev"
optional = false optional = false
python-versions = "*" python-versions = "*"
files = [ files = [
@ -2281,6 +2406,7 @@ files = [
name = "sqlalchemy" name = "sqlalchemy"
version = "2.0.30" version = "2.0.30"
description = "Database Abstraction Library" description = "Database Abstraction Library"
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -2368,6 +2494,7 @@ sqlcipher = ["sqlcipher3_binary"]
name = "sqlmodel" name = "sqlmodel"
version = "0.0.18" version = "0.0.18"
description = "SQLModel, SQL databases in Python, designed for simplicity, compatibility, and robustness." description = "SQLModel, SQL databases in Python, designed for simplicity, compatibility, and robustness."
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -2383,6 +2510,7 @@ SQLAlchemy = ">=2.0.0,<2.1.0"
name = "starlette" name = "starlette"
version = "0.37.2" version = "0.37.2"
description = "The little ASGI library that shines." description = "The little ASGI library that shines."
category = "main"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -2401,6 +2529,7 @@ full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.7
name = "starlette-admin" name = "starlette-admin"
version = "0.13.2" version = "0.13.2"
description = "Fast, beautiful and extensible administrative interface framework for Starlette/FastApi applications" description = "Fast, beautiful and extensible administrative interface framework for Starlette/FastApi applications"
category = "main"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -2424,6 +2553,7 @@ test = ["aiomysql (>=0.1.1,<0.3.0)", "aiosqlite (>=0.17.0,<0.20.0)", "arrow (>=1
name = "tabulate" name = "tabulate"
version = "0.9.0" version = "0.9.0"
description = "Pretty-print tabular data" description = "Pretty-print tabular data"
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -2438,6 +2568,7 @@ widechars = ["wcwidth"]
name = "tenacity" name = "tenacity"
version = "8.3.0" version = "8.3.0"
description = "Retry code until it succeeds" description = "Retry code until it succeeds"
category = "dev"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -2453,6 +2584,7 @@ test = ["pytest", "tornado (>=4.5)", "typeguard"]
name = "toml" name = "toml"
version = "0.10.2" version = "0.10.2"
description = "Python Library for Tom's Obvious, Minimal Language" description = "Python Library for Tom's Obvious, Minimal Language"
category = "dev"
optional = false optional = false
python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
files = [ files = [
@ -2464,6 +2596,7 @@ files = [
name = "tomli" name = "tomli"
version = "2.0.1" version = "2.0.1"
description = "A lil' TOML parser" description = "A lil' TOML parser"
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -2475,6 +2608,7 @@ files = [
name = "tomlkit" name = "tomlkit"
version = "0.12.4" version = "0.12.4"
description = "Style preserving TOML library" description = "Style preserving TOML library"
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -2486,6 +2620,7 @@ files = [
name = "trio" name = "trio"
version = "0.25.0" version = "0.25.0"
description = "A friendly Python library for async concurrency and I/O" description = "A friendly Python library for async concurrency and I/O"
category = "dev"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -2506,6 +2641,7 @@ sortedcontainers = "*"
name = "trio-websocket" name = "trio-websocket"
version = "0.11.1" version = "0.11.1"
description = "WebSocket library for Trio" description = "WebSocket library for Trio"
category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -2522,6 +2658,7 @@ wsproto = ">=0.14"
name = "twine" name = "twine"
version = "5.0.0" version = "5.0.0"
description = "Collection of utilities for publishing packages on PyPI" description = "Collection of utilities for publishing packages on PyPI"
category = "main"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -2544,6 +2681,7 @@ urllib3 = ">=1.26.0"
name = "typer" name = "typer"
version = "0.12.3" version = "0.12.3"
description = "Typer, build great CLIs. Easy to code. Based on Python type hints." description = "Typer, build great CLIs. Easy to code. Based on Python type hints."
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -2561,6 +2699,7 @@ typing-extensions = ">=3.7.4.3"
name = "typing-extensions" name = "typing-extensions"
version = "4.11.0" version = "4.11.0"
description = "Backported and Experimental Type Hints for Python 3.8+" description = "Backported and Experimental Type Hints for Python 3.8+"
category = "main"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -2572,6 +2711,7 @@ files = [
name = "tzdata" name = "tzdata"
version = "2024.1" version = "2024.1"
description = "Provider of IANA time zone data" description = "Provider of IANA time zone data"
category = "dev"
optional = false optional = false
python-versions = ">=2" python-versions = ">=2"
files = [ files = [
@ -2583,6 +2723,7 @@ files = [
name = "urllib3" name = "urllib3"
version = "2.2.1" version = "2.2.1"
description = "HTTP library with thread-safe connection pooling, file post, and more." description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "main"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -2603,6 +2744,7 @@ zstd = ["zstandard (>=0.18.0)"]
name = "uvicorn" name = "uvicorn"
version = "0.20.0" version = "0.20.0"
description = "The lightning-fast ASGI server." description = "The lightning-fast ASGI server."
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -2621,6 +2763,7 @@ standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)",
name = "uvicorn" name = "uvicorn"
version = "0.24.0.post1" version = "0.24.0.post1"
description = "The lightning-fast ASGI server." description = "The lightning-fast ASGI server."
category = "main"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -2639,6 +2782,7 @@ standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)",
name = "virtualenv" name = "virtualenv"
version = "20.26.1" version = "20.26.1"
description = "Virtual Python Environment builder" description = "Virtual Python Environment builder"
category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -2659,6 +2803,7 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess
name = "watchdog" name = "watchdog"
version = "4.0.0" version = "4.0.0"
description = "Filesystem events monitoring" description = "Filesystem events monitoring"
category = "main"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -2700,6 +2845,7 @@ watchmedo = ["PyYAML (>=3.10)"]
name = "watchfiles" name = "watchfiles"
version = "0.21.0" version = "0.21.0"
description = "Simple, modern and high performance file watching and code reload in python." description = "Simple, modern and high performance file watching and code reload in python."
category = "main"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -2787,6 +2933,7 @@ anyio = ">=3.0.0"
name = "websockets" name = "websockets"
version = "12.0" version = "12.0"
description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)"
category = "main"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -2868,6 +3015,7 @@ files = [
name = "wheel" name = "wheel"
version = "0.43.0" version = "0.43.0"
description = "A built-package format for Python" description = "A built-package format for Python"
category = "main"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -2882,6 +3030,7 @@ test = ["pytest (>=6.0.0)", "setuptools (>=65)"]
name = "wrapt" name = "wrapt"
version = "1.16.0" version = "1.16.0"
description = "Module for decorators, wrappers and monkey patching." description = "Module for decorators, wrappers and monkey patching."
category = "main"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
files = [ files = [
@ -2961,6 +3110,7 @@ files = [
name = "wsproto" name = "wsproto"
version = "1.2.0" version = "1.2.0"
description = "WebSockets state-machine based protocol implementation" description = "WebSockets state-machine based protocol implementation"
category = "main"
optional = false optional = false
python-versions = ">=3.7.0" python-versions = ">=3.7.0"
files = [ files = [
@ -2975,6 +3125,7 @@ h11 = ">=0.9.0,<1"
name = "zipp" name = "zipp"
version = "3.18.1" version = "3.18.1"
description = "Backport of pathlib-compatible object wrapper for zip files" description = "Backport of pathlib-compatible object wrapper for zip files"
category = "main"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -2989,4 +3140,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p
[metadata] [metadata]
lock-version = "2.0" lock-version = "2.0"
python-versions = "^3.8" python-versions = "^3.8"
content-hash = "a5abcbe48c3d9d39752223c5abb7cebadf0ad444b8d6af400a7c2c769543bb13" content-hash = "586d6cce442baa6f294c9b0be6e8e84aed2cd243f776e0654d2c2fb03fbc29e7"

View File

@ -63,6 +63,7 @@ setuptools = ">=69.1.1,<70.0"
httpx = ">=0.25.1,<1.0" httpx = ">=0.25.1,<1.0"
twine = ">=4.0.0,<6.0" twine = ">=4.0.0,<6.0"
tomlkit = ">=0.12.4,<1.0" tomlkit = ">=0.12.4,<1.0"
lazy_loader = ">=0.4"
[tool.poetry.group.dev.dependencies] [tool.poetry.group.dev.dependencies]
pytest = ">=7.1.2,<8.0" pytest = ">=7.1.2,<8.0"

View File

@ -1,141 +1,281 @@
"""Import all classes and functions the end user will need to make an app. """Import all classes and functions the end user will need to make an app.
Anything imported here will be available in the default Reflex import as `rx.*`. Anything imported here will be available in the default Reflex import as `rx.*`.
To signal to typecheckers that something should be reexported,
we use the Flask "import name as name" syntax. Dynamic Imports
---------------
Reflex utilizes dynamic imports, or lazy loading, to reduce startup/import times.
With this approach, imports are delayed until they are actually needed. We use
the `lazy_loader` library(https://github.com/scientific-python/lazy_loader) to achieve this.
How it works
--------------
`lazy_loader.attach` takes two optional arguments: `submodules` and `submod_attrs`.
- `submodules` typically points to directories or files to be accessed.
- `submod_attrs` defines a mapping of directory or file names as keys with a list
of attributes or modules to access.
Example directory structure:
reflex/
|_ components/
|_ radix/
|_ themes/
|_ components/
|_ box.py
To add `box` under the `rx` namespace (`rx.box`), add the relative path to `submod_attrs` in
`reflex/__init__.py` (this file):
```python
lazy_loader.attach(
submodules={"components"},
submod_attrs={
"components.radix.themes.components.box": ["box"]
}
)
```
This implies that `box` will be imported from `reflex/components/radix/themes/components/box.py`.
To add box under the `rx.radix` namespace (`rx.radix.box`), add the relative path to the
submod_attrs argument in `reflex/components/radix/__init__.py`:
```python
lazy_loader.attach(
submodules = {"themes"},
submod_attrs = {
"themes.components.box": ["box"]
}
)
```
Note: It is important to specify the immediate submodules of a directory in the submodules
argument to ensure they are registered at runtime. For example, 'components' for reflex,
'radix' for components, 'themes' for radix, etc.
Pyi_generator
--------------
To generate `.pyi` files for `__init__.py` files, we read the `_SUBMODULES` and `_SUBMOD_ATTRS`
attributes to generate the import statements. It is highly recommended to define these with
the provided annotations to facilitate their generation.
Aliases
------------
This is a special case to specify an alias for a component.
As an example, we use this typically for `rx.list` where defining `list` attribute in the list.py
overshadows python's list object which messes up the pyi generation for `list.pyi`. As a result, aliases
should be used for similar cases like this. Note that this logic is employed to fix the pyi generation and alias
should still be defined or accessible. Check out the __getattr__ logic in `reflex/components/radix/themes/layouts/list.py`
```python
lazy_loader.attach(
submodules={"components"},
submod_attrs={
"components.radix.themes.layouts": [("list_ns", "list")]
}
)
```
In the example above, you will be able to do `rx.list`
""" """
from __future__ import annotations from __future__ import annotations
import importlib from reflex.utils import lazy_loader
from typing import Type
from reflex.page import page as page # import this here explicitly to avoid returning the page module since page attr has the
from reflex.utils import console # same name as page module(page.py)
from reflex.utils.format import to_snake_case from .page import page as page
_ALL_COMPONENTS = [ RADIX_THEMES_MAPPING: dict = {
# Core "components.radix.themes.base": ["color_mode", "theme", "theme_panel"],
"color", "components.radix.themes.color_mode": ["color_mode"],
"cond", }
"foreach", RADIX_THEMES_COMPONENTS_MAPPING: dict = {
"html", **{
"match", f"components.radix.themes.components.{mod}": [mod]
"color_mode_cond", for mod in [
"connection_banner", "alert_dialog",
"connection_modal", "aspect_ratio",
"debounce_input", "avatar",
# Base "badge",
"fragment", "button",
"Fragment", "callout",
"image", "card",
"script", "checkbox",
# Responsive "context_menu",
"desktop_only", "data_list",
"mobile_and_tablet", "dialog",
"mobile_only", "hover_card",
"tablet_and_desktop", "icon_button",
"tablet_only", "input",
# Upload "inset",
"cancel_upload", "popover",
"clear_selected_files", "scroll_area",
"get_upload_dir", "select",
"get_upload_url", "skeleton",
"selected_files", "slider",
"upload", "spinner",
# Radix "switch",
"accordion", "table",
"alert_dialog", "tabs",
"aspect_ratio", "text_area",
"avatar", "tooltip",
"badge", "segmented_control",
"blockquote", "radio_cards",
"box", "checkbox_cards",
"button", "checkbox_group",
"callout", ]
"card", },
"center", "components.radix.themes.components.text_field": ["text_field", "input"],
"checkbox", "components.radix.themes.components.radio_group": ["radio", "radio_group"],
"code", "components.radix.themes.components.dropdown_menu": ["menu", "dropdown_menu"],
"container", "components.radix.themes.components.separator": ["divider", "separator"],
"context_menu", }
"data_list",
"dialog",
"divider",
"drawer",
"flex",
"form",
"grid",
"heading",
"hover_card",
"hstack",
"icon_button",
"inset",
"input",
"link",
"menu",
"popover",
"progress",
"radio",
"scroll_area",
"section",
"select",
"skeleton",
"slider",
"spacer",
"spinner",
"stack",
"switch",
"table",
"tabs",
"text",
"text_area",
"theme",
"theme_panel",
"tooltip",
"vstack",
# Other
"code_block",
"data_editor",
"data_editor_theme",
"data_table",
"plotly",
"audio",
"video",
"editor",
"EditorButtonList",
"EditorOptions",
"icon",
"markdown",
"list",
"list_item",
"unordered_list",
"ordered_list",
"moment",
"logo",
# Toast is in experimental namespace initially
# "toast",
]
_MAPPING = { RADIX_THEMES_LAYOUT_MAPPING: dict = {
"reflex.experimental": ["_x"], "components.radix.themes.layout.box": [
"reflex.admin": ["admin", "AdminDash"], "box",
"reflex.app": ["app", "App", "UploadFile"], ],
"reflex.base": ["base", "Base"], "components.radix.themes.layout.center": [
"reflex.compiler": ["compiler"], "center",
"reflex.components": _ALL_COMPONENTS, ],
"reflex.components.component": ["Component", "NoSSRComponent", "memo"], "components.radix.themes.layout.container": [
"reflex.components.chakra": ["chakra"], "container",
"reflex.components.el": ["el"], ],
"reflex.components.lucide": ["lucide"], "components.radix.themes.layout.flex": [
"reflex.components.next": ["next"], "flex",
"reflex.components.radix": ["radix", "color_mode"], ],
"reflex.components.recharts": ["recharts"], "components.radix.themes.layout.grid": [
"reflex.components.moment.moment": ["MomentDelta"], "grid",
"reflex.config": ["config", "Config", "DBConfig"], ],
"reflex.constants": ["constants", "Env"], "components.radix.themes.layout.section": [
"reflex.event": [ "section",
"event", ],
"components.radix.themes.layout.spacer": [
"spacer",
],
"components.radix.themes.layout.stack": [
"stack",
"hstack",
"vstack",
],
"components.radix.themes.layout.list": [
("list_ns", "list"),
"list_item",
"ordered_list",
"unordered_list",
],
}
RADIX_THEMES_TYPOGRAPHY_MAPPING: dict = {
"components.radix.themes.typography.blockquote": [
"blockquote",
],
"components.radix.themes.typography.code": [
"code",
],
"components.radix.themes.typography.heading": [
"heading",
],
"components.radix.themes.typography.link": [
"link",
],
"components.radix.themes.typography.text": [
"text",
],
}
RADIX_PRIMITIVES_MAPPING: dict = {
"components.radix.primitives.accordion": [
"accordion",
],
"components.radix.primitives.drawer": [
"drawer",
],
"components.radix.primitives.form": [
"form",
],
"components.radix.primitives.progress": ["progress"],
}
COMPONENTS_CORE_MAPPING: dict = {
"components.core.banner": [
"connection_banner",
"connection_modal",
],
"components.core.cond": ["cond", "color_mode_cond"],
"components.core.foreach": ["foreach"],
"components.core.debounce": ["debounce_input"],
"components.core.html": ["html"],
"components.core.match": ["match"],
"components.core.colors": ["color"],
"components.core.responsive": [
"desktop_only",
"mobile_and_tablet",
"mobile_only",
"tablet_and_desktop",
"tablet_only",
],
"components.core.upload": [
"cancel_upload",
"clear_selected_files",
"get_upload_dir",
"get_upload_url",
"selected_files",
"upload",
],
}
COMPONENTS_BASE_MAPPING: dict = {
"components.base.fragment": ["fragment", "Fragment"],
"components.base.script": ["script", "Script"],
}
RADIX_MAPPING: dict = {
**RADIX_THEMES_MAPPING,
**RADIX_THEMES_COMPONENTS_MAPPING,
**RADIX_THEMES_TYPOGRAPHY_MAPPING,
**RADIX_THEMES_LAYOUT_MAPPING,
**RADIX_PRIMITIVES_MAPPING,
}
_MAPPING: dict = {
"experimental": ["_x"],
"admin": ["AdminDash"],
"app": ["App", "UploadFile"],
"base": ["Base"],
"components.component": ["Component", "NoSSRComponent", "memo"],
"components.el.elements.media": ["image"],
"components.lucide": ["icon"],
**COMPONENTS_BASE_MAPPING,
"components.suneditor": [
"editor",
"EditorButtonList",
"EditorOptions",
],
"components": ["el", "chakra", "radix", "lucide", "recharts", "next"],
"components.markdown": ["markdown"],
**RADIX_MAPPING,
"components.plotly": ["plotly"],
"components.react_player": ["audio", "video"],
**COMPONENTS_CORE_MAPPING,
"components.datadisplay.code": [
"code_block",
],
"components.datadisplay.dataeditor": [
"data_editor",
"data_editor_theme",
],
"components.datadisplay.logo": ["logo"],
"components.gridjs": ["data_table"],
"components.moment": ["MomentDelta", "moment"],
"config": ["Config", "DBConfig"],
"constants": ["Env"],
"event": [
"EventChain", "EventChain",
"EventHandler", "EventHandler",
"background", "background",
@ -155,84 +295,38 @@ _MAPPING = {
"upload_files", "upload_files",
"window_alert", "window_alert",
], ],
"reflex.middleware": ["middleware", "Middleware"], "middleware": ["middleware", "Middleware"],
"reflex.model": ["model", "session", "Model"], "model": ["session", "Model"],
"reflex.page": ["page"], "state": [
"reflex.route": ["route"],
"reflex.state": [
"state",
"var", "var",
"Cookie", "Cookie",
"LocalStorage", "LocalStorage",
"ComponentState", "ComponentState",
"State", "State",
], ],
"reflex.style": ["style", "toggle_color_mode"], "style": ["Style", "toggle_color_mode"],
"reflex.testing": ["testing"], "utils.imports": ["ImportVar"],
"reflex.utils": ["utils"], "utils.serializers": ["serializer"],
"reflex.utils.imports": ["ImportVar"], "vars": ["cached_var", "Var"],
"reflex.vars": ["vars", "cached_var", "Var"],
} }
_SUBMODULES: set[str] = {
def _reverse_mapping(mapping: dict[str, list]) -> dict[str, str]: "components",
"""Reverse the mapping used to lazy loading, and check for conflicting name. "event",
"app",
Args: "style",
mapping: The mapping to reverse. "admin",
"base",
Returns: "model",
The reversed mapping. "testing",
""" "utils",
reversed_mapping = {} "vars",
for key, values in mapping.items(): "config",
for value in values: "compiler",
if value not in reversed_mapping: }
reversed_mapping[value] = key _SUBMOD_ATTRS: dict = _MAPPING
else: __getattr__, __dir__, __all__ = lazy_loader.attach(
console.warn( __name__,
f"Key {value} is present multiple times in the imports _MAPPING: {key} / {reversed_mapping[value]}" submodules=_SUBMODULES,
) submod_attrs=_SUBMOD_ATTRS,
return reversed_mapping )
# _MAPPING = {value: key for key, values in _MAPPING.items() for value in values}
_MAPPING = _reverse_mapping(_MAPPING)
def _removeprefix(text, prefix):
return text[text.startswith(prefix) and len(prefix) :]
__all__ = (_removeprefix(mod, "reflex.") for mod in _MAPPING)
def __getattr__(name: str) -> Type:
"""Lazy load all modules.
Args:
name: name of the module to load.
Returns:
The module or the attribute of the module.
Raises:
AttributeError: If the module or the attribute does not exist.
"""
try:
# Check for import of a module that is not in the mapping.
if name not in _MAPPING:
# If the name does not start with reflex, add it.
if not name.startswith("reflex") and name != "__all__":
name = f"reflex.{name}"
return importlib.import_module(name)
# Import the module.
module = importlib.import_module(_MAPPING[name])
# Get the attribute from the module if the name is not the module itself.
return (
getattr(module, name) if name != _MAPPING[name].rsplit(".")[-1] else module
)
except ModuleNotFoundError:
raise AttributeError(f"module 'reflex' has no attribute {name}") from None

View File

@ -1,157 +1,196 @@
from reflex.experimental import _x as _x """Stub file for reflex/__init__.py"""
from reflex import admin as admin # ------------------- DO NOT EDIT ----------------------
from reflex.admin import AdminDash as AdminDash # This file was generated by `reflex/utils/pyi_generator.py`!
from reflex import app as app # ------------------------------------------------------
from reflex.app import App as App
from reflex.app import UploadFile as UploadFile from . import admin as admin
from reflex import base as base from . import app as app
from reflex.base import Base as Base from . import base as base
from reflex import compiler as compiler from . import compiler as compiler
from reflex.components import color as color from . import components as components
from reflex.components import cond as cond from . import config as config
from reflex.components import foreach as foreach from . import event as event
from reflex.components import html as html from . import model as model
from reflex.components import match as match from . import style as style
from reflex.components import color_mode_cond as color_mode_cond from . import testing as testing
from reflex.components import connection_banner as connection_banner from . import utils as utils
from reflex.components import connection_modal as connection_modal from . import vars as vars
from reflex.components import debounce_input as debounce_input
from reflex.components import fragment as fragment from .experimental import _x as _x
from reflex.components import Fragment as Fragment from .admin import AdminDash as AdminDash
from reflex.components import image as image from .app import App as App
from reflex.components import script as script from .app import UploadFile as UploadFile
from reflex.components import desktop_only as desktop_only from .base import Base as Base
from reflex.components import mobile_and_tablet as mobile_and_tablet from .components.component import Component as Component
from reflex.components import mobile_only as mobile_only from .components.component import NoSSRComponent as NoSSRComponent
from reflex.components import tablet_and_desktop as tablet_and_desktop from .components.component import memo as memo
from reflex.components import tablet_only as tablet_only from .components.el.elements.media import image as image
from reflex.components import cancel_upload as cancel_upload from .components.lucide import icon as icon
from reflex.components import clear_selected_files as clear_selected_files from .components.base.fragment import fragment as fragment
from reflex.components import get_upload_dir as get_upload_dir from .components.base.fragment import Fragment as Fragment
from reflex.components import get_upload_url as get_upload_url from .components.base.script import script as script
from reflex.components import selected_files as selected_files from .components.base.script import Script as Script
from reflex.components import upload as upload from .components.suneditor import editor as editor
from reflex.components import accordion as accordion from .components.suneditor import EditorButtonList as EditorButtonList
from reflex.components import alert_dialog as alert_dialog from .components.suneditor import EditorOptions as EditorOptions
from reflex.components import aspect_ratio as aspect_ratio from .components import el as el
from reflex.components import avatar as avatar from .components import chakra as chakra
from reflex.components import badge as badge from .components import radix as radix
from reflex.components import blockquote as blockquote from .components import lucide as lucide
from reflex.components import box as box from .components import recharts as recharts
from reflex.components import button as button from .components import next as next
from reflex.components import callout as callout from .components.markdown import markdown as markdown
from reflex.components import card as card from .components.radix.themes.color_mode import color_mode as color_mode
from reflex.components import center as center from .components.radix.themes.base import theme as theme
from reflex.components import checkbox as checkbox from .components.radix.themes.base import theme_panel as theme_panel
from reflex.components import code as code from .components.radix.themes.components.alert_dialog import (
from reflex.components import container as container alert_dialog as alert_dialog,
from reflex.components import context_menu as context_menu )
from reflex.components import data_list as data_list from .components.radix.themes.components.aspect_ratio import (
from reflex.components import dialog as dialog aspect_ratio as aspect_ratio,
from reflex.components import divider as divider )
from reflex.components import drawer as drawer from .components.radix.themes.components.avatar import avatar as avatar
from reflex.components import flex as flex from .components.radix.themes.components.badge import badge as badge
from reflex.components import form as form from .components.radix.themes.components.button import button as button
from reflex.components import grid as grid from .components.radix.themes.components.callout import callout as callout
from reflex.components import heading as heading from .components.radix.themes.components.card import card as card
from reflex.components import hover_card as hover_card from .components.radix.themes.components.checkbox import checkbox as checkbox
from reflex.components import hstack as hstack from .components.radix.themes.components.context_menu import (
from reflex.components import icon_button as icon_button context_menu as context_menu,
from reflex.components import inset as inset )
from reflex.components import input as input from .components.radix.themes.components.data_list import data_list as data_list
from reflex.components import link as link from .components.radix.themes.components.dialog import dialog as dialog
from reflex.components import menu as menu from .components.radix.themes.components.hover_card import hover_card as hover_card
from reflex.components import popover as popover from .components.radix.themes.components.icon_button import icon_button as icon_button
from reflex.components import progress as progress from .components.radix.themes.components.text_field import input as input
from reflex.components import radio as radio from .components.radix.themes.components.inset import inset as inset
from reflex.components import scroll_area as scroll_area from .components.radix.themes.components.popover import popover as popover
from reflex.components import section as section from .components.radix.themes.components.scroll_area import scroll_area as scroll_area
from reflex.components import select as select from .components.radix.themes.components.select import select as select
from reflex.components import skeleton as skeleton from .components.radix.themes.components.skeleton import skeleton as skeleton
from reflex.components import slider as slider from .components.radix.themes.components.slider import slider as slider
from reflex.components import spacer as spacer from .components.radix.themes.components.spinner import spinner as spinner
from reflex.components import spinner as spinner from .components.radix.themes.components.switch import switch as switch
from reflex.components import stack as stack from .components.radix.themes.components.table import table as table
from reflex.components import switch as switch from .components.radix.themes.components.tabs import tabs as tabs
from reflex.components import table as table from .components.radix.themes.components.text_area import text_area as text_area
from reflex.components import tabs as tabs from .components.radix.themes.components.tooltip import tooltip as tooltip
from reflex.components import text as text from .components.radix.themes.components.segmented_control import (
from reflex.components import text_area as text_area segmented_control as segmented_control,
from reflex.components import theme as theme )
from reflex.components import theme_panel as theme_panel from .components.radix.themes.components.radio_cards import radio_cards as radio_cards
from reflex.components import tooltip as tooltip from .components.radix.themes.components.checkbox_cards import (
from reflex.components import vstack as vstack checkbox_cards as checkbox_cards,
from reflex.components import code_block as code_block )
from reflex.components import data_editor as data_editor from .components.radix.themes.components.checkbox_group import (
from reflex.components import data_editor_theme as data_editor_theme checkbox_group as checkbox_group,
from reflex.components import data_table as data_table )
from reflex.components import plotly as plotly from .components.radix.themes.components.text_field import text_field as text_field
from reflex.components import audio as audio from .components.radix.themes.components.radio_group import radio as radio
from reflex.components import video as video from .components.radix.themes.components.radio_group import radio_group as radio_group
from reflex.components import editor as editor from .components.radix.themes.components.dropdown_menu import menu as menu
from reflex.components import EditorButtonList as EditorButtonList from .components.radix.themes.components.dropdown_menu import (
from reflex.components import EditorOptions as EditorOptions dropdown_menu as dropdown_menu,
from reflex.components import icon as icon )
from reflex.components import markdown as markdown from .components.radix.themes.components.separator import divider as divider
from reflex.components import list as list from .components.radix.themes.components.separator import separator as separator
from reflex.components import list_item as list_item from .components.radix.themes.typography.blockquote import blockquote as blockquote
from reflex.components import unordered_list as unordered_list from .components.radix.themes.typography.code import code as code
from reflex.components import ordered_list as ordered_list from .components.radix.themes.typography.heading import heading as heading
from reflex.components import moment as moment from .components.radix.themes.typography.link import link as link
from reflex.components import logo as logo from .components.radix.themes.typography.text import text as text
from reflex.components.component import Component as Component from .components.radix.themes.layout.box import box as box
from reflex.components.component import NoSSRComponent as NoSSRComponent from .components.radix.themes.layout.center import center as center
from reflex.components.component import memo as memo from .components.radix.themes.layout.container import container as container
from reflex.components import chakra as chakra from .components.radix.themes.layout.flex import flex as flex
from reflex.components import el as el from .components.radix.themes.layout.grid import grid as grid
from reflex.components import lucide as lucide from .components.radix.themes.layout.section import section as section
from reflex.components import next as next from .components.radix.themes.layout.spacer import spacer as spacer
from reflex.components import radix as radix from .components.radix.themes.layout.stack import stack as stack
from reflex.components.radix import color_mode as color_mode from .components.radix.themes.layout.stack import hstack as hstack
from reflex.components import recharts as recharts from .components.radix.themes.layout.stack import vstack as vstack
from reflex.components.moment.moment import MomentDelta as MomentDelta from .components.radix.themes.layout.list import list_ns as list
from reflex import config as config from .components.radix.themes.layout.list import list_item as list_item
from reflex.config import Config as Config from .components.radix.themes.layout.list import ordered_list as ordered_list
from reflex.config import DBConfig as DBConfig from .components.radix.themes.layout.list import unordered_list as unordered_list
from reflex import constants as constants from .components.radix.primitives.accordion import accordion as accordion
from reflex.constants import Env as Env from .components.radix.primitives.drawer import drawer as drawer
from reflex import event as event from .components.radix.primitives.form import form as form
from reflex.event import EventChain as EventChain from .components.radix.primitives.progress import progress as progress
from reflex.event import EventHandler as EventHandler from .components.plotly import plotly as plotly
from reflex.event import background as background from .components.react_player import audio as audio
from reflex.event import call_script as call_script from .components.react_player import video as video
from reflex.event import clear_local_storage as clear_local_storage from .components.core.banner import connection_banner as connection_banner
from reflex.event import console_log as console_log from .components.core.banner import connection_modal as connection_modal
from reflex.event import download as download from .components.core.cond import cond as cond
from reflex.event import prevent_default as prevent_default from .components.core.cond import color_mode_cond as color_mode_cond
from reflex.event import redirect as redirect from .components.core.foreach import foreach as foreach
from reflex.event import remove_cookie as remove_cookie from .components.core.debounce import debounce_input as debounce_input
from reflex.event import remove_local_storage as remove_local_storage from .components.core.html import html as html
from reflex.event import set_clipboard as set_clipboard from .components.core.match import match as match
from reflex.event import set_focus as set_focus from .components.core.colors import color as color
from reflex.event import scroll_to as scroll_to from .components.core.responsive import desktop_only as desktop_only
from reflex.event import set_value as set_value from .components.core.responsive import mobile_and_tablet as mobile_and_tablet
from reflex.event import stop_propagation as stop_propagation from .components.core.responsive import mobile_only as mobile_only
from reflex.event import upload_files as upload_files from .components.core.responsive import tablet_and_desktop as tablet_and_desktop
from reflex.event import window_alert as window_alert from .components.core.responsive import tablet_only as tablet_only
from reflex import middleware as middleware from .components.core.upload import cancel_upload as cancel_upload
from reflex.middleware import Middleware as Middleware from .components.core.upload import clear_selected_files as clear_selected_files
from reflex import model as model from .components.core.upload import get_upload_dir as get_upload_dir
from reflex.model import session as session from .components.core.upload import get_upload_url as get_upload_url
from reflex.model import Model as Model from .components.core.upload import selected_files as selected_files
from reflex.page import page as page from .components.core.upload import upload as upload
from reflex import route as route from .components.datadisplay.code import code_block as code_block
from reflex import state as state from .components.datadisplay.dataeditor import data_editor as data_editor
from reflex.state import var as var from .components.datadisplay.dataeditor import data_editor_theme as data_editor_theme
from reflex.state import Cookie as Cookie from .components.datadisplay.logo import logo as logo
from reflex.state import LocalStorage as LocalStorage from .components.gridjs import data_table as data_table
from reflex.state import ComponentState as ComponentState from .components.moment import MomentDelta as MomentDelta
from reflex.state import State as State from .components.moment import moment as moment
from reflex import style as style from .config import Config as Config
from reflex.style import toggle_color_mode as toggle_color_mode from .config import DBConfig as DBConfig
from reflex import testing as testing from .constants import Env as Env
from reflex import utils as utils from .event import EventChain as EventChain
from reflex.utils.imports import ImportVar as ImportVar from .event import EventHandler as EventHandler
from reflex import vars as vars from .event import background as background
from reflex.vars import cached_var as cached_var from .event import call_script as call_script
from reflex.vars import Var as Var from .event import clear_local_storage as clear_local_storage
from .event import console_log as console_log
from .event import download as download
from .event import prevent_default as prevent_default
from .event import redirect as redirect
from .event import remove_cookie as remove_cookie
from .event import remove_local_storage as remove_local_storage
from .event import set_clipboard as set_clipboard
from .event import set_focus as set_focus
from .event import scroll_to as scroll_to
from .event import set_value as set_value
from .event import stop_propagation as stop_propagation
from .event import upload_files as upload_files
from .event import window_alert as window_alert
from .middleware import middleware as middleware
from .middleware import Middleware as Middleware
from .model import session as session
from .model import Model as Model
from .state import var as var
from .state import Cookie as Cookie
from .state import LocalStorage as LocalStorage
from .state import ComponentState as ComponentState
from .state import State as State
from .style import Style as Style
from .style import toggle_color_mode as toggle_color_mode
from .utils.imports import ImportVar as ImportVar
from .utils.serializers import serializer as serializer
from .vars import cached_var as cached_var
from .vars import Var as Var
from reflex.utils import lazy_loader
from .page import page as page
RADIX_THEMES_MAPPING: dict
RADIX_THEMES_COMPONENTS_MAPPING: dict
RADIX_THEMES_LAYOUT_MAPPING: dict
RADIX_THEMES_TYPOGRAPHY_MAPPING: dict
RADIX_PRIMITIVES_MAPPING: dict
COMPONENTS_CORE_MAPPING: dict
COMPONENTS_BASE_MAPPING: dict
RADIX_MAPPING: dict

View File

@ -50,7 +50,7 @@ from reflex.components.component import (
ComponentStyle, ComponentStyle,
evaluate_style_namespaces, evaluate_style_namespaces,
) )
from reflex.components.core import connection_pulser, connection_toaster from reflex.components.core.banner import connection_pulser, connection_toaster
from reflex.components.core.client_side_routing import ( from reflex.components.core.client_side_routing import (
Default404Page, Default404Page,
wait_for_client_redirect, wait_for_client_redirect,

View File

@ -1,21 +1,35 @@
"""Import all the components.""" """Import all the components."""
from __future__ import annotations from __future__ import annotations
from . import lucide from reflex.utils import lazy_loader
from .base import Fragment, Script, fragment, script
from .component import Component
from .component import NoSSRComponent as NoSSRComponent
from .core import *
from .datadisplay import *
from .el import img as image
from .gridjs import *
from .markdown import *
from .moment import *
from .next import NextLink, next_link
from .plotly import *
from .radix import *
from .react_player import *
from .sonner import *
from .suneditor import *
icon = lucide.icon _SUBMODULES: set[str] = {
"lucide",
"core",
"datadisplay",
"gridjs",
"markdown",
"moment",
"plotly",
"radix",
"react_player",
"sonner",
"suneditor",
"chakra",
"el",
"base",
"recharts",
}
_SUBMOD_ATTRS: dict[str, list[str]] = {
"component": [
"Component",
"NoSSRComponent",
],
"next": ["NextLink", "next_link"],
}
__getattr__, __dir__, __all__ = lazy_loader.attach(
__name__,
submodules=_SUBMODULES,
submod_attrs=_SUBMOD_ATTRS,
)

View File

@ -0,0 +1,26 @@
"""Stub file for reflex/components/__init__.py"""
# ------------------- DO NOT EDIT ----------------------
# This file was generated by `reflex/utils/pyi_generator.py`!
# ------------------------------------------------------
from . import base as base
from . import chakra as chakra
from . import core as core
from . import datadisplay as datadisplay
from . import el as el
from . import gridjs as gridjs
from . import lucide as lucide
from . import markdown as markdown
from . import moment as moment
from . import plotly as plotly
from . import radix as radix
from . import react_player as react_player
from . import recharts as recharts
from . import sonner as sonner
from . import suneditor as suneditor
from .component import Component as Component
from .component import NoSSRComponent as NoSSRComponent
from .next import NextLink as NextLink
from .next import next_link as next_link
from reflex.utils import lazy_loader

View File

@ -1,12 +1,28 @@
"""Base components.""" """Base components."""
from __future__ import annotations
from .body import Body from reflex.utils import lazy_loader
from .document import DocumentHead, Html, Main, NextScript
from .fragment import Fragment
from .head import Head
from .link import RawLink, ScriptTag
from .meta import Description, Image, Meta, Title
from .script import Script
fragment = Fragment.create _SUBMODULES: set[str] = {"app_wrap", "bare"}
script = Script.create
_SUBMOD_ATTRS: dict[str, list[str]] = {
"body": ["Body"],
"document": ["DocumentHead", "Html", "Main", "NextScript"],
"fragment": [
"Fragment",
"fragment",
],
"head": [
"head",
"Head",
],
"link": ["RawLink", "ScriptTag"],
"meta": ["Description", "Image", "Meta", "Title"],
"script": ["Script", "script"],
}
__getattr__, __dir__, __all__ = lazy_loader.attach(
__name__,
submodules=_SUBMODULES,
submod_attrs=_SUBMOD_ATTRS,
)

View File

@ -0,0 +1,26 @@
"""Stub file for reflex/components/base/__init__.py"""
# ------------------- DO NOT EDIT ----------------------
# This file was generated by `reflex/utils/pyi_generator.py`!
# ------------------------------------------------------
from . import app_wrap as app_wrap
from . import bare as bare
from .body import Body as Body
from .document import DocumentHead as DocumentHead
from .document import Html as Html
from .document import Main as Main
from .document import NextScript as NextScript
from .fragment import Fragment as Fragment
from .fragment import fragment as fragment
from .head import head as head
from .head import Head as Head
from .link import RawLink as RawLink
from .link import ScriptTag as ScriptTag
from .meta import Description as Description
from .meta import Image as Image
from .meta import Meta as Meta
from .meta import Title as Title
from .script import Script as Script
from .script import script as script
from reflex.utils import lazy_loader

View File

@ -7,3 +7,6 @@ class Fragment(Component):
library = "react" library = "react"
tag = "Fragment" tag = "Fragment"
fragment = Fragment.create

View File

@ -84,3 +84,5 @@ class Fragment(Component):
The component. The component.
""" """
... ...
fragment = Fragment.create

View File

@ -15,3 +15,6 @@ class Head(NextHeadLib, MemoizationLeaf):
tag = "NextHead" tag = "NextHead"
is_default = True is_default = True
head = Head.create

View File

@ -160,3 +160,5 @@ class Head(NextHeadLib, MemoizationLeaf):
The memoization leaf The memoization leaf
""" """
... ...
head = Head.create

View File

@ -70,3 +70,6 @@ class Script(Component):
"on_ready": lambda: [], "on_ready": lambda: [],
"on_error": lambda: [], "on_error": lambda: [],
} }
script = Script.create

View File

@ -113,3 +113,5 @@ class Script(Component):
""" """
... ...
def get_event_triggers(self) -> dict[str, Union[Var, Any]]: ... def get_event_triggers(self) -> dict[str, Union[Var, Any]]: ...
script = Script.create

View File

@ -1,40 +1,54 @@
"""Core Reflex components.""" """Core Reflex components."""
from __future__ import annotations
from . import layout as layout from reflex.utils import lazy_loader
from .banner import (
ConnectionBanner,
ConnectionModal,
ConnectionPulser,
ConnectionToaster,
)
from .colors import color
from .cond import Cond, color_mode_cond, cond
from .debounce import DebounceInput
from .foreach import Foreach
from .html import Html
from .match import Match
from .responsive import (
desktop_only,
mobile_and_tablet,
mobile_only,
tablet_and_desktop,
tablet_only,
)
from .upload import (
UploadNamespace,
cancel_upload,
clear_selected_files,
get_upload_dir,
get_upload_url,
selected_files,
)
connection_banner = ConnectionBanner.create _SUBMODULES: set[str] = {"layout"}
connection_modal = ConnectionModal.create
connection_toaster = ConnectionToaster.create _SUBMOD_ATTRS: dict[str, list[str]] = {
connection_pulser = ConnectionPulser.create "banner": [
debounce_input = DebounceInput.create "ConnectionBanner",
foreach = Foreach.create "ConnectionModal",
html = Html.create "ConnectionPulser",
match = Match.create "ConnectionToaster",
upload = UploadNamespace() "connection_banner",
"connection_modal",
"connection_toaster",
"connection_pulser",
],
"colors": [
"color",
],
"cond": ["Cond", "color_mode_cond", "cond"],
"debounce": ["DebounceInput", "debounce_input"],
"foreach": [
"foreach",
"Foreach",
],
"html": ["html", "Html"],
"match": [
"match",
"Match",
],
"responsive": [
"desktop_only",
"mobile_and_tablet",
"mobile_only",
"tablet_and_desktop",
"tablet_only",
],
"upload": [
"upload",
"cancel_upload",
"clear_selected_files",
"get_upload_dir",
"get_upload_url",
"selected_files",
],
}
__getattr__, __dir__, __all__ = lazy_loader.attach(
__name__,
submodules=_SUBMODULES,
submod_attrs=_SUBMOD_ATTRS,
)

View File

@ -0,0 +1,39 @@
"""Stub file for reflex/components/core/__init__.py"""
# ------------------- DO NOT EDIT ----------------------
# This file was generated by `reflex/utils/pyi_generator.py`!
# ------------------------------------------------------
from . import layout as layout
from .banner import ConnectionBanner as ConnectionBanner
from .banner import ConnectionModal as ConnectionModal
from .banner import ConnectionPulser as ConnectionPulser
from .banner import ConnectionToaster as ConnectionToaster
from .banner import connection_banner as connection_banner
from .banner import connection_modal as connection_modal
from .banner import connection_toaster as connection_toaster
from .banner import connection_pulser as connection_pulser
from .colors import color as color
from .cond import Cond as Cond
from .cond import color_mode_cond as color_mode_cond
from .cond import cond as cond
from .debounce import DebounceInput as DebounceInput
from .debounce import debounce_input as debounce_input
from .foreach import foreach as foreach
from .foreach import Foreach as Foreach
from .html import html as html
from .html import Html as Html
from .match import match as match
from .match import Match as Match
from .responsive import desktop_only as desktop_only
from .responsive import mobile_and_tablet as mobile_and_tablet
from .responsive import mobile_only as mobile_only
from .responsive import tablet_and_desktop as tablet_and_desktop
from .responsive import tablet_only as tablet_only
from .upload import upload as upload
from .upload import cancel_upload as cancel_upload
from .upload import clear_selected_files as clear_selected_files
from .upload import get_upload_dir as get_upload_dir
from .upload import get_upload_url as get_upload_url
from .upload import selected_files as selected_files
from reflex.utils import lazy_loader

View File

@ -14,7 +14,7 @@ from reflex.components.radix.themes.components.dialog import (
DialogRoot, DialogRoot,
DialogTitle, DialogTitle,
) )
from reflex.components.radix.themes.layout import Flex from reflex.components.radix.themes.layout.flex import Flex
from reflex.components.radix.themes.typography.text import Text from reflex.components.radix.themes.typography.text import Text
from reflex.components.sonner.toast import Toaster, ToastProps from reflex.components.sonner.toast import Toaster, ToastProps
from reflex.constants import Dirs, Hooks, Imports from reflex.constants import Dirs, Hooks, Imports
@ -278,3 +278,9 @@ class ConnectionPulser(Div):
width="100vw", width="100vw",
height="0", height="0",
) )
connection_banner = ConnectionBanner.create
connection_modal = ConnectionModal.create
connection_toaster = ConnectionToaster.create
connection_pulser = ConnectionPulser.create

View File

@ -18,7 +18,7 @@ from reflex.components.radix.themes.components.dialog import (
DialogRoot, DialogRoot,
DialogTitle, DialogTitle,
) )
from reflex.components.radix.themes.layout import Flex from reflex.components.radix.themes.layout.flex import Flex
from reflex.components.radix.themes.typography.text import Text from reflex.components.radix.themes.typography.text import Text
from reflex.components.sonner.toast import Toaster, ToastProps from reflex.components.sonner.toast import Toaster, ToastProps
from reflex.constants import Dirs, Hooks, Imports from reflex.constants import Dirs, Hooks, Imports
@ -574,3 +574,8 @@ class ConnectionPulser(Div):
The connection pulser component. The connection pulser component.
""" """
... ...
connection_banner = ConnectionBanner.create
connection_modal = ConnectionModal.create
connection_toaster = ConnectionToaster.create
connection_pulser = ConnectionPulser.create

View File

@ -136,3 +136,6 @@ class DebounceInput(Component):
def _render(self): def _render(self):
return super()._render().remove_props("ref") return super()._render().remove_props("ref")
debounce_input = DebounceInput.create

View File

@ -106,3 +106,5 @@ class DebounceInput(Component):
""" """
... ...
def get_event_triggers(self) -> dict[str, Any]: ... def get_event_triggers(self) -> dict[str, Any]: ...
debounce_input = DebounceInput.create

View File

@ -139,3 +139,6 @@ class Foreach(Component):
arg_index=tag.get_index_var_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__,
) )
foreach = Foreach.create

View File

@ -43,3 +43,6 @@ class Html(Div):
# Create the component. # Create the component.
return super().create(**props) return super().create(**props)
html = Html.create

View File

@ -149,3 +149,5 @@ class Html(Div):
ValueError: If children are not provided or more than one child is provided. ValueError: If children are not provided or more than one child is provided.
""" """
... ...
html = Html.create

View File

@ -273,3 +273,6 @@ class Match(MemoizationLeaf):
super()._get_imports(), super()._get_imports(),
getattr(self.cond._var_data, "imports", {}), getattr(self.cond._var_data, "imports", {}),
) )
match = Match.create

View File

@ -1,6 +1,6 @@
"""Responsive components.""" """Responsive components."""
from reflex.components.radix.themes.layout import Box from reflex.components.radix.themes.layout.box import Box
# Add responsive styles shortcuts. # Add responsive styles shortcuts.

View File

@ -7,9 +7,9 @@ from pathlib import Path
from typing import Any, Callable, ClassVar, Dict, List, Optional, Union from typing import Any, Callable, ClassVar, Dict, List, Optional, Union
from reflex import constants from reflex import constants
from reflex.components.chakra.forms.input import Input
from reflex.components.chakra.layout.box import Box
from reflex.components.component import Component, ComponentNamespace, MemoizationLeaf from reflex.components.component import Component, ComponentNamespace, MemoizationLeaf
from reflex.components.el.elements.forms import Input
from reflex.components.radix.themes.layout.box import Box
from reflex.constants import Dirs from reflex.constants import Dirs
from reflex.event import ( from reflex.event import (
CallableEventSpec, CallableEventSpec,
@ -339,3 +339,6 @@ class UploadNamespace(ComponentNamespace):
root = Upload.create root = Upload.create
__call__ = StyledUpload.create __call__ = StyledUpload.create
upload = UploadNamespace()

View File

@ -11,9 +11,9 @@ import os
from pathlib import Path from pathlib import Path
from typing import Any, Callable, ClassVar, Dict, List, Optional, Union from typing import Any, Callable, ClassVar, Dict, List, Optional, Union
from reflex import constants from reflex import constants
from reflex.components.chakra.forms.input import Input
from reflex.components.chakra.layout.box import Box
from reflex.components.component import Component, ComponentNamespace, MemoizationLeaf from reflex.components.component import Component, ComponentNamespace, MemoizationLeaf
from reflex.components.el.elements.forms import Input
from reflex.components.radix.themes.layout.box import Box
from reflex.constants import Dirs from reflex.constants import Dirs
from reflex.event import ( from reflex.event import (
CallableEventSpec, CallableEventSpec,
@ -417,3 +417,5 @@ class UploadNamespace(ComponentNamespace):
The styled upload component. The styled upload component.
""" """
... ...
upload = UploadNamespace()

View File

@ -1,11 +1,20 @@
"""Data grid components.""" """Data grid components."""
from __future__ import annotations
from .code import CodeBlock from reflex.utils import lazy_loader
from .code import LiteralCodeBlockTheme as LiteralCodeBlockTheme
from .code import LiteralCodeLanguage as LiteralCodeLanguage
from .dataeditor import DataEditor, DataEditorTheme
from .logo import logo
code_block = CodeBlock.create _SUBMOD_ATTRS: dict[str, list[str]] = {
data_editor = DataEditor.create "code": [
data_editor_theme = DataEditorTheme "CodeBlock",
"code_block",
"LiteralCodeBlockTheme",
"LiteralCodeLanguage",
],
"dataeditor": ["data_editor", "data_editor_theme", "DataEditorTheme"],
"logo": ["logo"],
}
__getattr__, __dir__, __all__ = lazy_loader.attach(
__name__,
submod_attrs=_SUBMOD_ATTRS,
)

View File

@ -0,0 +1,14 @@
"""Stub file for reflex/components/datadisplay/__init__.py"""
# ------------------- DO NOT EDIT ----------------------
# This file was generated by `reflex/utils/pyi_generator.py`!
# ------------------------------------------------------
from .code import CodeBlock as CodeBlock
from .code import code_block as code_block
from .code import LiteralCodeBlockTheme as LiteralCodeBlockTheme
from .code import LiteralCodeLanguage as LiteralCodeLanguage
from .dataeditor import data_editor as data_editor
from .dataeditor import data_editor_theme as data_editor_theme
from .dataeditor import DataEditorTheme as DataEditorTheme
from .logo import logo as logo
from reflex.utils import lazy_loader

View File

@ -523,3 +523,6 @@ class CodeBlock(Component):
if theme in ["light", "dark"]: if theme in ["light", "dark"]:
return f"one-{theme}" return f"one-{theme}"
return theme return theme
code_block = CodeBlock.create

View File

@ -1114,3 +1114,5 @@ class CodeBlock(Component):
def add_style(self): ... def add_style(self): ...
@staticmethod @staticmethod
def convert_theme_name(theme) -> str: ... def convert_theme_name(theme) -> str: ...
code_block = CodeBlock.create

View File

@ -410,3 +410,7 @@ def serialize_dataeditortheme(theme: DataEditorTheme):
return format.json_dumps( return format.json_dumps(
{format.to_camel_case(k): v for k, v in theme.__dict__.items() if v is not None} {format.to_camel_case(k): v for k, v in theme.__dict__.items() if v is not None}
) )
data_editor = DataEditor.create
data_editor_theme = DataEditorTheme

View File

@ -236,3 +236,6 @@ class DataEditor(NoSSRComponent):
@serializer @serializer
def serialize_dataeditortheme(theme: DataEditorTheme): ... def serialize_dataeditortheme(theme: DataEditorTheme): ...
data_editor = DataEditor.create
data_editor_theme = DataEditorTheme

View File

@ -1,3 +1,17 @@
"""The el package exports raw HTML elements.""" """The el package exports raw HTML elements."""
from __future__ import annotations
from .elements import * from reflex.utils import lazy_loader
from . import elements
_SUBMODULES: set[str] = {"elements"}
_SUBMOD_ATTRS: dict[str, list[str]] = {
f"elements.{k}": v for k, v in elements._MAPPING.items()
}
__getattr__, __dir__, __all__ = lazy_loader.attach(
__name__,
submodules=_SUBMODULES,
submod_attrs=_SUBMOD_ATTRS,
)

View File

@ -0,0 +1,227 @@
"""Stub file for reflex/components/el/__init__.py"""
# ------------------- DO NOT EDIT ----------------------
# This file was generated by `reflex/utils/pyi_generator.py`!
# ------------------------------------------------------
from . import elements as elements
from .elements.forms import button as button
from .elements.forms import fieldset as fieldset
from .elements.forms import form as form
from .elements.forms import input as input
from .elements.forms import label as label
from .elements.forms import legend as legend
from .elements.forms import meter as meter
from .elements.forms import optgroup as optgroup
from .elements.forms import option as option
from .elements.forms import output as output
from .elements.forms import progress as progress
from .elements.forms import select as select
from .elements.forms import textarea as textarea
from .elements.forms import Button as Button
from .elements.forms import Fieldset as Fieldset
from .elements.forms import Form as Form
from .elements.forms import Input as Input
from .elements.forms import Label as Label
from .elements.forms import Legend as Legend
from .elements.forms import Meter as Meter
from .elements.forms import Optgroup as Optgroup
from .elements.forms import Option as Option
from .elements.forms import Output as Output
from .elements.forms import Progress as Progress
from .elements.forms import Select as Select
from .elements.forms import Textarea as Textarea
from .elements.inline import a as a
from .elements.inline import abbr as abbr
from .elements.inline import b as b
from .elements.inline import bdi as bdi
from .elements.inline import bdo as bdo
from .elements.inline import br as br
from .elements.inline import cite as cite
from .elements.inline import code as code
from .elements.inline import data as data
from .elements.inline import dfn as dfn
from .elements.inline import em as em
from .elements.inline import i as i
from .elements.inline import kbd as kbd
from .elements.inline import mark as mark
from .elements.inline import q as q
from .elements.inline import rp as rp
from .elements.inline import rt as rt
from .elements.inline import ruby as ruby
from .elements.inline import s as s
from .elements.inline import samp as samp
from .elements.inline import small as small
from .elements.inline import span as span
from .elements.inline import strong as strong
from .elements.inline import sub as sub
from .elements.inline import sup as sup
from .elements.inline import time as time
from .elements.inline import u as u
from .elements.inline import wbr as wbr
from .elements.inline import A as A
from .elements.inline import Abbr as Abbr
from .elements.inline import B as B
from .elements.inline import Bdi as Bdi
from .elements.inline import Bdo as Bdo
from .elements.inline import Br as Br
from .elements.inline import Cite as Cite
from .elements.inline import Code as Code
from .elements.inline import Data as Data
from .elements.inline import Dfn as Dfn
from .elements.inline import Em as Em
from .elements.inline import I as I
from .elements.inline import Kbd as Kbd
from .elements.inline import Mark as Mark
from .elements.inline import Q as Q
from .elements.inline import Rp as Rp
from .elements.inline import Rt as Rt
from .elements.inline import Ruby as Ruby
from .elements.inline import S as S
from .elements.inline import Samp as Samp
from .elements.inline import Small as Small
from .elements.inline import Span as Span
from .elements.inline import Strong as Strong
from .elements.inline import Sub as Sub
from .elements.inline import Sup as Sup
from .elements.inline import Time as Time
from .elements.inline import U as U
from .elements.inline import Wbr as Wbr
from .elements.media import area as area
from .elements.media import audio as audio
from .elements.media import img as img
from .elements.media import image as image
from .elements.media import map as map
from .elements.media import track as track
from .elements.media import video as video
from .elements.media import embed as embed
from .elements.media import iframe as iframe
from .elements.media import object as object
from .elements.media import picture as picture
from .elements.media import portal as portal
from .elements.media import source as source
from .elements.media import svg as svg
from .elements.media import path as path
from .elements.media import Area as Area
from .elements.media import Audio as Audio
from .elements.media import Img as Img
from .elements.media import Map as Map
from .elements.media import Track as Track
from .elements.media import Video as Video
from .elements.media import Embed as Embed
from .elements.media import Iframe as Iframe
from .elements.media import Object as Object
from .elements.media import Picture as Picture
from .elements.media import Portal as Portal
from .elements.media import Source as Source
from .elements.media import Svg as Svg
from .elements.media import Path as Path
from .elements.metadata import base as base
from .elements.metadata import head as head
from .elements.metadata import link as link
from .elements.metadata import meta as meta
from .elements.metadata import title as title
from .elements.metadata import Base as Base
from .elements.metadata import Head as Head
from .elements.metadata import Link as Link
from .elements.metadata import Meta as Meta
from .elements.metadata import Title as Title
from .elements.other import details as details
from .elements.other import dialog as dialog
from .elements.other import summary as summary
from .elements.other import slot as slot
from .elements.other import template as template
from .elements.other import math as math
from .elements.other import html as html
from .elements.other import Details as Details
from .elements.other import Dialog as Dialog
from .elements.other import Summary as Summary
from .elements.other import Slot as Slot
from .elements.other import Template as Template
from .elements.other import Math as Math
from .elements.other import Html as Html
from .elements.scripts import canvas as canvas
from .elements.scripts import noscript as noscript
from .elements.scripts import script as script
from .elements.scripts import Canvas as Canvas
from .elements.scripts import Noscript as Noscript
from .elements.scripts import Script as Script
from .elements.sectioning import address as address
from .elements.sectioning import article as article
from .elements.sectioning import aside as aside
from .elements.sectioning import body as body
from .elements.sectioning import header as header
from .elements.sectioning import footer as footer
from .elements.sectioning import h1 as h1
from .elements.sectioning import h2 as h2
from .elements.sectioning import h3 as h3
from .elements.sectioning import h4 as h4
from .elements.sectioning import h5 as h5
from .elements.sectioning import h6 as h6
from .elements.sectioning import main as main
from .elements.sectioning import nav as nav
from .elements.sectioning import section as section
from .elements.sectioning import Address as Address
from .elements.sectioning import Article as Article
from .elements.sectioning import Aside as Aside
from .elements.sectioning import Body as Body
from .elements.sectioning import Header as Header
from .elements.sectioning import Footer as Footer
from .elements.sectioning import H1 as H1
from .elements.sectioning import H2 as H2
from .elements.sectioning import H3 as H3
from .elements.sectioning import H4 as H4
from .elements.sectioning import H5 as H5
from .elements.sectioning import H6 as H6
from .elements.sectioning import Main as Main
from .elements.sectioning import Nav as Nav
from .elements.sectioning import Section as Section
from .elements.tables import caption as caption
from .elements.tables import col as col
from .elements.tables import colgroup as colgroup
from .elements.tables import table as table
from .elements.tables import td as td
from .elements.tables import tfoot as tfoot
from .elements.tables import th as th
from .elements.tables import thead as thead
from .elements.tables import tr as tr
from .elements.tables import Tbody as Tbody
from .elements.tables import Caption as Caption
from .elements.tables import Col as Col
from .elements.tables import Colgroup as Colgroup
from .elements.tables import Table as Table
from .elements.tables import Td as Td
from .elements.tables import Tfoot as Tfoot
from .elements.tables import Th as Th
from .elements.tables import Thead as Thead
from .elements.tables import Tr as Tr
from .elements.typography import blockquote as blockquote
from .elements.typography import dd as dd
from .elements.typography import div as div
from .elements.typography import dl as dl
from .elements.typography import dt as dt
from .elements.typography import figcaption as figcaption
from .elements.typography import hr as hr
from .elements.typography import ol as ol
from .elements.typography import li as li
from .elements.typography import p as p
from .elements.typography import pre as pre
from .elements.typography import ul as ul
from .elements.typography import ins as ins
from .elements.typography import del_ as del_
from .elements.typography import Del as Del
from .elements.typography import Blockquote as Blockquote
from .elements.typography import Dd as Dd
from .elements.typography import Div as Div
from .elements.typography import Dl as Dl
from .elements.typography import Dt as Dt
from .elements.typography import Figcaption as Figcaption
from .elements.typography import Hr as Hr
from .elements.typography import Ol as Ol
from .elements.typography import Li as Li
from .elements.typography import P as P
from .elements.typography import Pre as Pre
from .elements.typography import Ul as Ul
from .elements.typography import Ins as Ins
from reflex.utils import lazy_loader
from . import elements

View File

@ -1,227 +1,136 @@
"""Element classes.""" """Element classes."""
from .forms import ( from __future__ import annotations
Button,
Fieldset, from reflex.utils import lazy_loader
Form,
Input, _MAPPING = {
Label, "forms": [
Legend, "button",
Meter, "fieldset",
Optgroup, "form",
Option, "input",
Output, "label",
Progress, "legend",
Select, "meter",
Textarea, "optgroup",
"option",
"output",
"progress",
"select",
"textarea",
],
"inline": [
"a",
"abbr",
"b",
"bdi",
"bdo",
"br",
"cite",
"code",
"data",
"dfn",
"em",
"i",
"kbd",
"mark",
"q",
"rp",
"rt",
"ruby",
"s",
"samp",
"small",
"span",
"strong",
"sub",
"sup",
"time",
"u",
"wbr",
],
"media": [
"area",
"audio",
"img",
"image",
"map",
"track",
"video",
"embed",
"iframe",
"object",
"picture",
"portal",
"source",
"svg",
"path",
],
"metadata": [
"base",
"head",
"link",
"meta",
"title",
],
"other": ["details", "dialog", "summary", "slot", "template", "math", "html"],
"scripts": ["canvas", "noscript", "script"],
"sectioning": [
"address",
"article",
"aside",
"body",
"header",
"footer",
"h1",
"h2",
"h3",
"h4",
"h5",
"h6",
"main",
"nav",
"section",
],
"tables": [
"caption",
"col",
"colgroup",
"table",
"td",
"tfoot",
"th",
"thead",
"tr",
"Tbody",
],
"typography": [
"blockquote",
"dd",
"div",
"dl",
"dt",
"figcaption",
"hr",
"ol",
"li",
"p",
"pre",
"ul",
"ins",
"del_",
"Del",
],
}
EXCLUDE = ["del_", "Del", "image"]
for _, v in _MAPPING.items():
v.extend([mod.capitalize() for mod in v if mod not in EXCLUDE])
_SUBMOD_ATTRS: dict[str, list[str]] = _MAPPING
__getattr__, __dir__, __all__ = lazy_loader.attach(
__name__,
submod_attrs=_SUBMOD_ATTRS,
) )
from .inline import (
A,
Abbr,
B,
Bdi,
Bdo,
Br,
Cite,
Code,
Data,
Dfn,
Em,
I,
Kbd,
Mark,
Q,
Rp,
Rt,
Ruby,
S,
Samp,
Small,
Span,
Strong,
Sub,
Sup,
Time,
U,
Wbr,
)
from .media import (
Area,
Audio,
Embed,
Iframe,
Img,
Map,
Object,
Path,
Picture,
Portal,
Source,
Svg,
Track,
Video,
)
from .metadata import Base, Head, Link, Meta, Title
from .other import Details, Dialog, Html, Math, Slot, Summary, Template
from .scripts import Canvas, Noscript, Script
from .sectioning import (
H1,
H2,
H3,
H4,
H5,
H6,
Address,
Article,
Aside,
Body,
Footer,
Header,
Main,
Nav,
Section,
)
from .tables import Caption, Col, Colgroup, Table, Tbody, Td, Tfoot, Th, Thead, Tr
from .typography import (
Blockquote,
Dd,
Del,
Div,
Dl,
Dt,
Figcaption,
Hr,
Ins,
Li,
Ol,
P,
Pre,
Ul,
)
# Forms
button = Button.create
fieldset = Fieldset.create
form = Form.create
input = Input.create
label = Label.create
legend = Legend.create
meter = Meter.create
optgroup = Optgroup.create
option = Option.create
output = Output.create
progress = Progress.create
select = Select.create
textarea = Textarea.create
# Tables
caption = Caption.create
col = Col.create
colgroup = Colgroup.create
table = Table.create
tbody = Tbody.create
td = Td.create
tfoot = Tfoot.create
th = Th.create
thead = Thead.create
tr = Tr.create
# Media
area = Area.create
audio = Audio.create
img = Img.create
map = Map.create
track = Track.create
video = Video.create
embed = Embed.create
iframe = Iframe.create
object = Object.create
picture = Picture.create
portal = Portal.create
source = Source.create
svg = Svg.create
path = Path.create
# Sectioning
address = Address.create
article = Article.create
aside = Aside.create
body = Body.create
header = Header.create
footer = Footer.create
# Typography
blockquote = Blockquote.create
dd = Dd.create
div = Div.create
dl = Dl.create
dt = Dt.create
figcaption = Figcaption.create
hr = Hr.create
li = Li.create
ol = Ol.create
p = P.create
pre = Pre.create
ul = Ul.create
ins = Ins.create
del_ = Del.create # 'del' is a reserved keyword in Python
h1 = H1.create
h2 = H2.create
h3 = H3.create
h4 = H4.create
h5 = H5.create
h6 = H6.create
main = Main.create
nav = Nav.create
section = Section.create
# Inline
a = A.create
abbr = Abbr.create
b = B.create
bdi = Bdi.create
bdo = Bdo.create
br = Br.create
cite = Cite.create
code = Code.create
data = Data.create
dfn = Dfn.create
em = Em.create
i = I.create
kbd = Kbd.create
mark = Mark.create
q = Q.create
rp = Rp.create
rt = Rt.create
ruby = Ruby.create
s = S.create
samp = Samp.create
small = Small.create
span = Span.create
strong = Strong.create
sub = Sub.create
sup = Sup.create
time = Time.create
u = U.create
wbr = Wbr.create
# Metadata
base = Base.create
head = Head.create
link = Link.create
meta = Meta.create
title = Title.create
# Scripts
canvas = Canvas.create
noscript = Noscript.create
script = Script.create
# Other
details = Details.create
dialog = Dialog.create
summary = Summary.create
slot = Slot.create
template = Template.create
svg = Svg.create
math = Math.create
html = Html.create

View File

@ -0,0 +1,341 @@
"""Stub file for reflex/components/el/elements/__init__.py"""
# ------------------- DO NOT EDIT ----------------------
# This file was generated by `reflex/utils/pyi_generator.py`!
# ------------------------------------------------------
from .forms import button as button
from .forms import fieldset as fieldset
from .forms import form as form
from .forms import input as input
from .forms import label as label
from .forms import legend as legend
from .forms import meter as meter
from .forms import optgroup as optgroup
from .forms import option as option
from .forms import output as output
from .forms import progress as progress
from .forms import select as select
from .forms import textarea as textarea
from .forms import Button as Button
from .forms import Fieldset as Fieldset
from .forms import Form as Form
from .forms import Input as Input
from .forms import Label as Label
from .forms import Legend as Legend
from .forms import Meter as Meter
from .forms import Optgroup as Optgroup
from .forms import Option as Option
from .forms import Output as Output
from .forms import Progress as Progress
from .forms import Select as Select
from .forms import Textarea as Textarea
from .inline import a as a
from .inline import abbr as abbr
from .inline import b as b
from .inline import bdi as bdi
from .inline import bdo as bdo
from .inline import br as br
from .inline import cite as cite
from .inline import code as code
from .inline import data as data
from .inline import dfn as dfn
from .inline import em as em
from .inline import i as i
from .inline import kbd as kbd
from .inline import mark as mark
from .inline import q as q
from .inline import rp as rp
from .inline import rt as rt
from .inline import ruby as ruby
from .inline import s as s
from .inline import samp as samp
from .inline import small as small
from .inline import span as span
from .inline import strong as strong
from .inline import sub as sub
from .inline import sup as sup
from .inline import time as time
from .inline import u as u
from .inline import wbr as wbr
from .inline import A as A
from .inline import Abbr as Abbr
from .inline import B as B
from .inline import Bdi as Bdi
from .inline import Bdo as Bdo
from .inline import Br as Br
from .inline import Cite as Cite
from .inline import Code as Code
from .inline import Data as Data
from .inline import Dfn as Dfn
from .inline import Em as Em
from .inline import I as I
from .inline import Kbd as Kbd
from .inline import Mark as Mark
from .inline import Q as Q
from .inline import Rp as Rp
from .inline import Rt as Rt
from .inline import Ruby as Ruby
from .inline import S as S
from .inline import Samp as Samp
from .inline import Small as Small
from .inline import Span as Span
from .inline import Strong as Strong
from .inline import Sub as Sub
from .inline import Sup as Sup
from .inline import Time as Time
from .inline import U as U
from .inline import Wbr as Wbr
from .media import area as area
from .media import audio as audio
from .media import img as img
from .media import image as image
from .media import map as map
from .media import track as track
from .media import video as video
from .media import embed as embed
from .media import iframe as iframe
from .media import object as object
from .media import picture as picture
from .media import portal as portal
from .media import source as source
from .media import svg as svg
from .media import path as path
from .media import Area as Area
from .media import Audio as Audio
from .media import Img as Img
from .media import Map as Map
from .media import Track as Track
from .media import Video as Video
from .media import Embed as Embed
from .media import Iframe as Iframe
from .media import Object as Object
from .media import Picture as Picture
from .media import Portal as Portal
from .media import Source as Source
from .media import Svg as Svg
from .media import Path as Path
from .metadata import base as base
from .metadata import head as head
from .metadata import link as link
from .metadata import meta as meta
from .metadata import title as title
from .metadata import Base as Base
from .metadata import Head as Head
from .metadata import Link as Link
from .metadata import Meta as Meta
from .metadata import Title as Title
from .other import details as details
from .other import dialog as dialog
from .other import summary as summary
from .other import slot as slot
from .other import template as template
from .other import math as math
from .other import html as html
from .other import Details as Details
from .other import Dialog as Dialog
from .other import Summary as Summary
from .other import Slot as Slot
from .other import Template as Template
from .other import Math as Math
from .other import Html as Html
from .scripts import canvas as canvas
from .scripts import noscript as noscript
from .scripts import script as script
from .scripts import Canvas as Canvas
from .scripts import Noscript as Noscript
from .scripts import Script as Script
from .sectioning import address as address
from .sectioning import article as article
from .sectioning import aside as aside
from .sectioning import body as body
from .sectioning import header as header
from .sectioning import footer as footer
from .sectioning import h1 as h1
from .sectioning import h2 as h2
from .sectioning import h3 as h3
from .sectioning import h4 as h4
from .sectioning import h5 as h5
from .sectioning import h6 as h6
from .sectioning import main as main
from .sectioning import nav as nav
from .sectioning import section as section
from .sectioning import Address as Address
from .sectioning import Article as Article
from .sectioning import Aside as Aside
from .sectioning import Body as Body
from .sectioning import Header as Header
from .sectioning import Footer as Footer
from .sectioning import H1 as H1
from .sectioning import H2 as H2
from .sectioning import H3 as H3
from .sectioning import H4 as H4
from .sectioning import H5 as H5
from .sectioning import H6 as H6
from .sectioning import Main as Main
from .sectioning import Nav as Nav
from .sectioning import Section as Section
from .tables import caption as caption
from .tables import col as col
from .tables import colgroup as colgroup
from .tables import table as table
from .tables import td as td
from .tables import tfoot as tfoot
from .tables import th as th
from .tables import thead as thead
from .tables import tr as tr
from .tables import Tbody as Tbody
from .tables import Caption as Caption
from .tables import Col as Col
from .tables import Colgroup as Colgroup
from .tables import Table as Table
from .tables import Td as Td
from .tables import Tfoot as Tfoot
from .tables import Th as Th
from .tables import Thead as Thead
from .tables import Tr as Tr
from .typography import blockquote as blockquote
from .typography import dd as dd
from .typography import div as div
from .typography import dl as dl
from .typography import dt as dt
from .typography import figcaption as figcaption
from .typography import hr as hr
from .typography import ol as ol
from .typography import li as li
from .typography import p as p
from .typography import pre as pre
from .typography import ul as ul
from .typography import ins as ins
from .typography import del_ as del_
from .typography import Del as Del
from .typography import Blockquote as Blockquote
from .typography import Dd as Dd
from .typography import Div as Div
from .typography import Dl as Dl
from .typography import Dt as Dt
from .typography import Figcaption as Figcaption
from .typography import Hr as Hr
from .typography import Ol as Ol
from .typography import Li as Li
from .typography import P as P
from .typography import Pre as Pre
from .typography import Ul as Ul
from .typography import Ins as Ins
from reflex.utils import lazy_loader
_MAPPING = {
"forms": [
"button",
"fieldset",
"form",
"input",
"label",
"legend",
"meter",
"optgroup",
"option",
"output",
"progress",
"select",
"textarea",
],
"inline": [
"a",
"abbr",
"b",
"bdi",
"bdo",
"br",
"cite",
"code",
"data",
"dfn",
"em",
"i",
"kbd",
"mark",
"q",
"rp",
"rt",
"ruby",
"s",
"samp",
"small",
"span",
"strong",
"sub",
"sup",
"time",
"u",
"wbr",
],
"media": [
"area",
"audio",
"img",
"image",
"map",
"track",
"video",
"embed",
"iframe",
"object",
"picture",
"portal",
"source",
"svg",
"path",
],
"metadata": ["base", "head", "link", "meta", "title"],
"other": ["details", "dialog", "summary", "slot", "template", "math", "html"],
"scripts": ["canvas", "noscript", "script"],
"sectioning": [
"address",
"article",
"aside",
"body",
"header",
"footer",
"h1",
"h2",
"h3",
"h4",
"h5",
"h6",
"main",
"nav",
"section",
],
"tables": [
"caption",
"col",
"colgroup",
"table",
"td",
"tfoot",
"th",
"thead",
"tr",
"Tbody",
],
"typography": [
"blockquote",
"dd",
"div",
"dl",
"dt",
"figcaption",
"hr",
"ol",
"li",
"p",
"pre",
"ul",
"ins",
"del_",
"Del",
],
}
EXCLUDE = ["del_", "Del", "image"]
for _, v in _MAPPING.items():
v.extend([mod.capitalize() for mod in v if mod not in EXCLUDE])

View File

@ -650,3 +650,18 @@ class Textarea(BaseHTML):
EventTriggers.ON_KEY_DOWN: lambda e0: [e0.key], EventTriggers.ON_KEY_DOWN: lambda e0: [e0.key],
EventTriggers.ON_KEY_UP: lambda e0: [e0.key], EventTriggers.ON_KEY_UP: lambda e0: [e0.key],
} }
button = Button.create
fieldset = Fieldset.create
form = Form.create
input = Input.create
label = Label.create
legend = Legend.create
meter = Meter.create
optgroup = Optgroup.create
option = Option.create
output = Output.create
progress = Progress.create
select = Select.create
textarea = Textarea.create

View File

@ -2180,3 +2180,17 @@ class Textarea(BaseHTML):
The component. The component.
""" """
... ...
button = Button.create
fieldset = Fieldset.create
form = Form.create
input = Input.create
label = Label.create
legend = Legend.create
meter = Meter.create
optgroup = Optgroup.create
option = Option.create
output = Output.create
progress = Progress.create
select = Select.create
textarea = Textarea.create

View File

@ -208,3 +208,33 @@ class Wbr(BaseHTML):
"""Display the wbr element.""" """Display the wbr element."""
tag = "wbr" tag = "wbr"
a = A.create
abbr = Abbr.create
b = B.create
bdi = Bdi.create
bdo = Bdo.create
br = Br.create
cite = Cite.create
code = Code.create
data = Data.create
dfn = Dfn.create
em = Em.create
i = I.create
kbd = Kbd.create
mark = Mark.create
q = Q.create
rp = Rp.create
rt = Rt.create
ruby = Ruby.create
s = S.create
samp = Samp.create
small = Small.create
span = Span.create
strong = Strong.create
sub = Sub.create
sup = Sup.create
time = Time.create
u = U.create
wbr = Wbr.create

View File

@ -3746,3 +3746,32 @@ class Wbr(BaseHTML):
The component. The component.
""" """
... ...
a = A.create
abbr = Abbr.create
b = B.create
bdi = Bdi.create
bdo = Bdo.create
br = Br.create
cite = Cite.create
code = Code.create
data = Data.create
dfn = Dfn.create
em = Em.create
i = I.create
kbd = Kbd.create
mark = Mark.create
q = Q.create
rp = Rp.create
rt = Rt.create
ruby = Ruby.create
s = S.create
samp = Samp.create
small = Small.create
span = Span.create
strong = Strong.create
sub = Sub.create
sup = Sup.create
time = Time.create
u = U.create
wbr = Wbr.create

View File

@ -316,3 +316,19 @@ class Path(BaseHTML):
# Defines the shape of the path # Defines the shape of the path
d: Var[Union[str, int, bool]] d: Var[Union[str, int, bool]]
area = Area.create
audio = Audio.create
image = img = Img.create
map = Map.create
track = Track.create
video = Video.create
embed = Embed.create
iframe = Iframe.create
object = Object.create
picture = Picture.create
portal = Portal.create
source = Source.create
svg = Svg.create
path = Path.create

View File

@ -2086,3 +2086,18 @@ class Path(BaseHTML):
The component. The component.
""" """
... ...
area = Area.create
audio = Audio.create
image = img = Img.create
map = Map.create
track = Track.create
video = Video.create
embed = Embed.create
iframe = Iframe.create
object = Object.create
picture = Picture.create
portal = Portal.create
source = Source.create
svg = Svg.create
path = Path.create

View File

@ -53,3 +53,10 @@ class Title(Element): # noqa: E742
"""Display the title element.""" """Display the title element."""
tag = "title" tag = "title"
base = Base.create
head = Head.create
link = Link.create
meta = Meta.create
title = Title.create

View File

@ -650,3 +650,9 @@ class Title(Element):
The component. The component.
""" """
... ...
base = Base.create
head = Head.create
link = Link.create
meta = Meta.create
title = Title.create

View File

@ -59,3 +59,12 @@ class Html(BaseHTML):
# Specifies the URL of the document's cache manifest (obsolete in HTML5) # Specifies the URL of the document's cache manifest (obsolete in HTML5)
manifest: Var[Union[str, int, bool]] manifest: Var[Union[str, int, bool]]
details = Details.create
dialog = Dialog.create
summary = Summary.create
slot = Slot.create
template = Template.create
math = Math.create
html = Html.create

View File

@ -942,3 +942,11 @@ class Html(BaseHTML):
The component. The component.
""" """
... ...
details = Details.create
dialog = Dialog.create
summary = Summary.create
slot = Slot.create
template = Template.create
math = Math.create
html = Html.create

View File

@ -50,3 +50,8 @@ class Script(BaseHTML):
# Specifies the MIME type of the script # Specifies the MIME type of the script
type: Var[Union[str, int, bool]] type: Var[Union[str, int, bool]]
canvas = Canvas.create
noscript = Noscript.create
script = Script.create

View File

@ -438,3 +438,7 @@ class Script(BaseHTML):
The component. The component.
""" """
... ...
canvas = Canvas.create
noscript = Noscript.create
script = Script.create

View File

@ -93,3 +93,20 @@ class Section(BaseHTML): # noqa: E742
"""Display the section element.""" """Display the section element."""
tag = "section" tag = "section"
address = Address.create
article = Article.create
aside = Aside.create
body = Body.create
header = Header.create
footer = Footer.create
h1 = H1.create
h2 = H2.create
h3 = H3.create
h4 = H4.create
h5 = H5.create
h6 = H6.create
main = Main.create
nav = Nav.create
section = Section.create

View File

@ -1989,3 +1989,19 @@ class Section(BaseHTML):
The component. The component.
""" """
... ...
address = Address.create
article = Article.create
aside = Aside.create
body = Body.create
header = Header.create
footer = Footer.create
h1 = H1.create
h2 = H2.create
h3 = H3.create
h4 = H4.create
h5 = H5.create
h6 = H6.create
main = Main.create
nav = Nav.create
section = Section.create

View File

@ -124,3 +124,15 @@ class Tr(BaseHTML):
# Alignment of the content within the table row # Alignment of the content within the table row
align: Var[Union[str, int, bool]] align: Var[Union[str, int, bool]]
caption = Caption.create
col = Col.create
colgroup = Colgroup.create
table = Table.create
tbody = Tbody.create
td = Td.create
tfoot = Tfoot.create
th = Th.create
thead = Thead.create
tr = Tr.create

View File

@ -1406,3 +1406,14 @@ class Tr(BaseHTML):
The component. The component.
""" """
... ...
caption = Caption.create
col = Col.create
colgroup = Colgroup.create
table = Table.create
tbody = Tbody.create
td = Td.create
tfoot = Tfoot.create
th = Th.create
thead = Thead.create
tr = Tr.create

View File

@ -124,3 +124,19 @@ class Del(BaseHTML):
# Specifies the date and time of when the text was deleted. # Specifies the date and time of when the text was deleted.
date_time: Var[Union[str, int, bool]] date_time: Var[Union[str, int, bool]]
blockquote = Blockquote.create
dd = Dd.create
div = Div.create
dl = Dl.create
dt = Dt.create
figcaption = Figcaption.create
hr = Hr.create
li = Li.create
ol = Ol.create
p = P.create
pre = Pre.create
ul = Ul.create
ins = Ins.create
del_ = Del.create # 'del' is a reserved keyword in Python

View File

@ -2020,3 +2020,18 @@ class Del(BaseHTML):
The component. The component.
""" """
... ...
blockquote = Blockquote.create
dd = Dd.create
div = Div.create
dl = Dl.create
dt = Dt.create
figcaption = Figcaption.create
hr = Hr.create
li = Li.create
ol = Ol.create
p = P.create
pre = Pre.create
ul = Ul.create
ins = Ins.create
del_ = Del.create

View File

@ -1,5 +1,5 @@
"""Moment.js component.""" """Moment.js component."""
from .moment import Moment from .moment import Moment, MomentDelta
moment = Moment.create moment = Moment.create

View File

@ -1,4 +1,16 @@
"""Namespace for components provided by @radix-ui packages.""" """Namespace for components provided by @radix-ui packages."""
from __future__ import annotations
from .primitives import * from reflex import RADIX_MAPPING
from .themes import * from reflex.utils import lazy_loader
_SUBMODULES: set[str] = {"themes", "primitives"}
_SUBMOD_ATTRS: dict[str, list[str]] = {
"".join(k.split("components.radix.")[-1]): v for k, v in RADIX_MAPPING.items()
}
__getattr__, __dir__, __all__ = lazy_loader.attach(
__name__,
submodules=_SUBMODULES,
submod_attrs=_SUBMOD_ATTRS,
)

View File

@ -0,0 +1,73 @@
"""Stub file for reflex/components/radix/__init__.py"""
# ------------------- DO NOT EDIT ----------------------
# This file was generated by `reflex/utils/pyi_generator.py`!
# ------------------------------------------------------
from . import primitives as primitives
from . import themes as themes
from .themes.color_mode import color_mode as color_mode
from .themes.base import theme as theme
from .themes.base import theme_panel as theme_panel
from .themes.components.alert_dialog import alert_dialog as alert_dialog
from .themes.components.aspect_ratio import aspect_ratio as aspect_ratio
from .themes.components.avatar import avatar as avatar
from .themes.components.badge import badge as badge
from .themes.components.button import button as button
from .themes.components.callout import callout as callout
from .themes.components.card import card as card
from .themes.components.checkbox import checkbox as checkbox
from .themes.components.context_menu import context_menu as context_menu
from .themes.components.data_list import data_list as data_list
from .themes.components.dialog import dialog as dialog
from .themes.components.hover_card import hover_card as hover_card
from .themes.components.icon_button import icon_button as icon_button
from .themes.components.text_field import input as input
from .themes.components.inset import inset as inset
from .themes.components.popover import popover as popover
from .themes.components.scroll_area import scroll_area as scroll_area
from .themes.components.select import select as select
from .themes.components.skeleton import skeleton as skeleton
from .themes.components.slider import slider as slider
from .themes.components.spinner import spinner as spinner
from .themes.components.switch import switch as switch
from .themes.components.table import table as table
from .themes.components.tabs import tabs as tabs
from .themes.components.text_area import text_area as text_area
from .themes.components.tooltip import tooltip as tooltip
from .themes.components.segmented_control import segmented_control as segmented_control
from .themes.components.radio_cards import radio_cards as radio_cards
from .themes.components.checkbox_cards import checkbox_cards as checkbox_cards
from .themes.components.checkbox_group import checkbox_group as checkbox_group
from .themes.components.text_field import text_field as text_field
from .themes.components.radio_group import radio as radio
from .themes.components.radio_group import radio_group as radio_group
from .themes.components.dropdown_menu import menu as menu
from .themes.components.dropdown_menu import dropdown_menu as dropdown_menu
from .themes.components.separator import divider as divider
from .themes.components.separator import separator as separator
from .themes.typography.blockquote import blockquote as blockquote
from .themes.typography.code import code as code
from .themes.typography.heading import heading as heading
from .themes.typography.link import link as link
from .themes.typography.text import text as text
from .themes.layout.box import box as box
from .themes.layout.center import center as center
from .themes.layout.container import container as container
from .themes.layout.flex import flex as flex
from .themes.layout.grid import grid as grid
from .themes.layout.section import section as section
from .themes.layout.spacer import spacer as spacer
from .themes.layout.stack import stack as stack
from .themes.layout.stack import hstack as hstack
from .themes.layout.stack import vstack as vstack
from .themes.layout.list import list_ns as list
from .themes.layout.list import list_item as list_item
from .themes.layout.list import ordered_list as ordered_list
from .themes.layout.list import unordered_list as unordered_list
from .primitives.accordion import accordion as accordion
from .primitives.drawer import drawer as drawer
from .primitives.form import form as form
from .primitives.progress import progress as progress
from reflex import RADIX_MAPPING
from reflex.utils import lazy_loader

View File

@ -1,7 +1,15 @@
"""Radix primitive components (https://www.radix-ui.com/primitives).""" """Radix primitive components (https://www.radix-ui.com/primitives)."""
from __future__ import annotations
from .accordion import accordion from reflex import RADIX_PRIMITIVES_MAPPING
from .drawer import drawer from reflex.utils import lazy_loader
from .form import form
from .progress import progress _SUBMOD_ATTRS: dict[str, list[str]] = {
from .slider import slider "".join(k.split("components.radix.primitives.")[-1]): v
for k, v in RADIX_PRIMITIVES_MAPPING.items()
}
__getattr__, __dir__, __all__ = lazy_loader.attach(
__name__,
submod_attrs=_SUBMOD_ATTRS,
)

View File

@ -0,0 +1,11 @@
"""Stub file for reflex/components/radix/primitives/__init__.py"""
# ------------------- DO NOT EDIT ----------------------
# This file was generated by `reflex/utils/pyi_generator.py`!
# ------------------------------------------------------
from .accordion import accordion as accordion
from .drawer import drawer as drawer
from .form import form as form
from .progress import progress as progress
from reflex import RADIX_PRIMITIVES_MAPPING
from reflex.utils import lazy_loader

View File

@ -1,7 +1,21 @@
"""Namespace for components provided by the @radix-ui/themes library.""" """Namespace for components provided by the @radix-ui/themes library."""
from .base import theme as theme from __future__ import annotations
from .base import theme_panel as theme_panel
from .color_mode import color_mode_var_and_namespace as color_mode from reflex.utils import lazy_loader
from .components import *
from .layout import * _SUBMODULES: set[str] = {"components", "layout", "typography"}
from .typography import * _SUBMOD_ATTRS: dict[str, list[str]] = {
"base": [
"theme",
"theme_panel",
],
"color_mode": [
"color_mode",
],
}
__getattr__, __dir__, __all__ = lazy_loader.attach(
__name__,
submodules=_SUBMODULES,
submod_attrs=_SUBMOD_ATTRS,
)

View File

@ -0,0 +1,13 @@
"""Stub file for reflex/components/radix/themes/__init__.py"""
# ------------------- DO NOT EDIT ----------------------
# This file was generated by `reflex/utils/pyi_generator.py`!
# ------------------------------------------------------
from . import components as components
from . import layout as layout
from . import typography as typography
from .base import theme as theme
from .base import theme_panel as theme_panel
from .color_mode import color_mode as color_mode
from reflex.utils import lazy_loader

View File

@ -174,4 +174,6 @@ class ColorModeNamespace(BaseVar):
switch = staticmethod(ColorModeSwitch.create) switch = staticmethod(ColorModeSwitch.create)
color_mode_var_and_namespace = ColorModeNamespace(**dataclasses.asdict(color_mode)) color_mode = color_mode_var_and_namespace = ColorModeNamespace(
**dataclasses.asdict(color_mode)
)

View File

@ -543,4 +543,6 @@ class ColorModeNamespace(BaseVar):
button = staticmethod(ColorModeIconButton.create) button = staticmethod(ColorModeIconButton.create)
switch = staticmethod(ColorModeSwitch.create) switch = staticmethod(ColorModeSwitch.create)
color_mode_var_and_namespace = ColorModeNamespace(**dataclasses.asdict(color_mode)) color_mode = color_mode_var_and_namespace = ColorModeNamespace(
**dataclasses.asdict(color_mode)
)

View File

@ -1,83 +1,15 @@
"""Radix themes components.""" """Radix themes components."""
from __future__ import annotations
from .alert_dialog import alert_dialog as alert_dialog from reflex import RADIX_THEMES_COMPONENTS_MAPPING
from .aspect_ratio import aspect_ratio as aspect_ratio from reflex.utils import lazy_loader
from .avatar import avatar as avatar
from .badge import badge as badge
from .button import button as button
from .callout import callout as callout
from .card import card as card
from .checkbox import checkbox as checkbox
from .checkbox_cards import checkbox_cards as checkbox_cards
from .checkbox_group import checkbox_group as checkbox_group
from .context_menu import context_menu as context_menu
from .data_list import data_list as data_list
from .dialog import dialog as dialog
from .dropdown_menu import dropdown_menu as dropdown_menu
from .dropdown_menu import menu as menu
from .hover_card import hover_card as hover_card
from .icon_button import icon_button as icon_button
from .inset import inset as inset
from .popover import popover as popover
from .progress import progress as progress
from .radio_cards import radio_cards as radio_cards
from .radio_group import radio as radio
from .radio_group import radio_group as radio_group
from .scroll_area import scroll_area as scroll_area
from .segmented_control import segmented_control as segmented_control
from .select import select as select
from .separator import divider as divider
from .separator import separator as separator
from .skeleton import skeleton as skeleton
from .slider import slider as slider
from .spinner import spinner as spinner
from .switch import switch as switch
from .table import table as table
from .tabs import tabs as tabs
from .text_area import text_area as text_area
from .text_field import text_field as text_field
from .tooltip import tooltip as tooltip
input = text_field _SUBMOD_ATTRS: dict[str, list[str]] = {
"".join(k.split("components.radix.themes.components.")[-1]): v
for k, v in RADIX_THEMES_COMPONENTS_MAPPING.items()
}
__all__ = [ __getattr__, __dir__, __all__ = lazy_loader.attach(
"alert_dialog", __name__,
"aspect_ratio", submod_attrs=_SUBMOD_ATTRS,
"avatar", )
"badge",
"button",
"callout",
"card",
"checkbox",
"checkbox_cards",
"checkbox_group",
"context_menu",
"data_list",
"dialog",
"divider",
"dropdown_menu",
"hover_card",
"icon_button",
"input",
"inset",
"menu",
"popover",
# progress is in experimental namespace until https://github.com/radix-ui/themes/pull/492
# "progress",
"radio",
"radio_cards",
"radio_group",
"scroll_area",
"segmented_control",
"select",
"separator",
"skeleton",
"slider",
"spinner",
"switch",
"table",
"tabs",
"text_area",
"text_field",
"tooltip",
]

View File

@ -0,0 +1,44 @@
"""Stub file for reflex/components/radix/themes/components/__init__.py"""
# ------------------- DO NOT EDIT ----------------------
# This file was generated by `reflex/utils/pyi_generator.py`!
# ------------------------------------------------------
from .alert_dialog import alert_dialog as alert_dialog
from .aspect_ratio import aspect_ratio as aspect_ratio
from .avatar import avatar as avatar
from .badge import badge as badge
from .button import button as button
from .callout import callout as callout
from .card import card as card
from .checkbox import checkbox as checkbox
from .context_menu import context_menu as context_menu
from .data_list import data_list as data_list
from .dialog import dialog as dialog
from .hover_card import hover_card as hover_card
from .icon_button import icon_button as icon_button
from .text_field import input as input
from .inset import inset as inset
from .popover import popover as popover
from .scroll_area import scroll_area as scroll_area
from .select import select as select
from .skeleton import skeleton as skeleton
from .slider import slider as slider
from .spinner import spinner as spinner
from .switch import switch as switch
from .table import table as table
from .tabs import tabs as tabs
from .text_area import text_area as text_area
from .tooltip import tooltip as tooltip
from .segmented_control import segmented_control as segmented_control
from .radio_cards import radio_cards as radio_cards
from .checkbox_cards import checkbox_cards as checkbox_cards
from .checkbox_group import checkbox_group as checkbox_group
from .text_field import text_field as text_field
from .radio_group import radio as radio
from .radio_group import radio_group as radio_group
from .dropdown_menu import menu as menu
from .dropdown_menu import dropdown_menu as dropdown_menu
from .separator import divider as divider
from .separator import separator as separator
from reflex import RADIX_THEMES_COMPONENTS_MAPPING
from reflex.utils import lazy_loader

View File

@ -1,8 +1,8 @@
"""Interactive components provided by @radix-ui/themes.""" """Interactive components provided by @radix-ui/themes."""
from typing import Any, Dict, Literal from typing import Any, Dict, Literal
from reflex import el
from reflex.components.component import ComponentNamespace from reflex.components.component import ComponentNamespace
from reflex.components.el import elements
from reflex.constants import EventTriggers from reflex.constants import EventTriggers
from reflex.vars import Var from reflex.vars import Var
@ -37,7 +37,7 @@ class AlertDialogTrigger(RadixThemesTriggerComponent):
tag = "AlertDialog.Trigger" tag = "AlertDialog.Trigger"
class AlertDialogContent(el.Div, RadixThemesComponent): class AlertDialogContent(elements.Div, RadixThemesComponent):
"""Contains the content of the dialog. This component is based on the div element.""" """Contains the content of the dialog. This component is based on the div element."""
tag = "AlertDialog.Content" tag = "AlertDialog.Content"

View File

@ -8,8 +8,8 @@ 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, Literal from typing import Any, Dict, Literal
from reflex import el
from reflex.components.component import ComponentNamespace from reflex.components.component import ComponentNamespace
from reflex.components.el import elements
from reflex.constants import EventTriggers from reflex.constants import EventTriggers
from reflex.vars import Var from reflex.vars import Var
from ..base import RadixThemesComponent, RadixThemesTriggerComponent from ..base import RadixThemesComponent, RadixThemesTriggerComponent
@ -171,7 +171,7 @@ class AlertDialogTrigger(RadixThemesTriggerComponent):
""" """
... ...
class AlertDialogContent(el.Div, RadixThemesComponent): class AlertDialogContent(elements.Div, RadixThemesComponent):
def get_event_triggers(self) -> Dict[str, Any]: ... def get_event_triggers(self) -> Dict[str, Any]: ...
@overload @overload
@classmethod @classmethod

View File

@ -2,7 +2,7 @@
from typing import Literal from typing import Literal
from reflex import el from reflex.components.el import elements
from reflex.vars import Var from reflex.vars import Var
from ..base import ( from ..base import (
@ -12,7 +12,7 @@ from ..base import (
) )
class Badge(el.Span, RadixThemesComponent): class Badge(elements.Span, RadixThemesComponent):
"""A stylized badge element.""" """A stylized badge element."""
tag = "Badge" tag = "Badge"

View File

@ -8,11 +8,11 @@ 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 Literal from typing import Literal
from reflex import el from reflex.components.el import elements
from reflex.vars import Var from reflex.vars import Var
from ..base import LiteralAccentColor, LiteralRadius, RadixThemesComponent from ..base import LiteralAccentColor, LiteralRadius, RadixThemesComponent
class Badge(el.Span, RadixThemesComponent): class Badge(elements.Span, RadixThemesComponent):
@overload @overload
@classmethod @classmethod
def create( # type: ignore def create( # type: ignore

View File

@ -2,7 +2,7 @@
from typing import Literal from typing import Literal
from reflex import el from reflex.components.el import elements
from reflex.vars import Var from reflex.vars import Var
from ..base import ( from ..base import (
@ -16,7 +16,7 @@ from ..base import (
LiteralButtonSize = Literal["1", "2", "3", "4"] LiteralButtonSize = Literal["1", "2", "3", "4"]
class Button(el.Button, RadixLoadingProp, RadixThemesComponent): class Button(elements.Button, RadixLoadingProp, RadixThemesComponent):
"""Trigger an action or event, such as submitting a form or displaying a dialog.""" """Trigger an action or event, such as submitting a form or displaying a dialog."""
tag = "Button" tag = "Button"

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 Literal from typing import Literal
from reflex import el from reflex.components.el import elements
from reflex.vars import Var from reflex.vars import Var
from ..base import ( from ..base import (
LiteralAccentColor, LiteralAccentColor,
@ -20,7 +20,7 @@ from ..base import (
LiteralButtonSize = Literal["1", "2", "3", "4"] LiteralButtonSize = Literal["1", "2", "3", "4"]
class Button(el.Button, RadixLoadingProp, RadixThemesComponent): class Button(elements.Button, RadixLoadingProp, RadixThemesComponent):
@overload @overload
@classmethod @classmethod
def create( # type: ignore def create( # type: ignore

View File

@ -3,8 +3,8 @@
from typing import Literal, Union from typing import Literal, Union
import reflex as rx import reflex as rx
from reflex import el
from reflex.components.component import Component, ComponentNamespace from reflex.components.component import Component, ComponentNamespace
from reflex.components.el import elements
from reflex.components.lucide.icon import Icon from reflex.components.lucide.icon import Icon
from reflex.vars import Var from reflex.vars import Var
@ -16,7 +16,7 @@ from ..base import (
CalloutVariant = Literal["soft", "surface", "outline"] CalloutVariant = Literal["soft", "surface", "outline"]
class CalloutRoot(el.Div, RadixThemesComponent): class CalloutRoot(elements.Div, RadixThemesComponent):
"""Groups Icon and Text parts of a Callout.""" """Groups Icon and Text parts of a Callout."""
tag = "Callout.Root" tag = "Callout.Root"
@ -37,13 +37,13 @@ class CalloutRoot(el.Div, RadixThemesComponent):
high_contrast: Var[bool] high_contrast: Var[bool]
class CalloutIcon(el.Div, RadixThemesComponent): class CalloutIcon(elements.Div, RadixThemesComponent):
"""Provides width and height for the icon associated with the callout.""" """Provides width and height for the icon associated with the callout."""
tag = "Callout.Icon" tag = "Callout.Icon"
class CalloutText(el.P, RadixThemesComponent): class CalloutText(elements.P, RadixThemesComponent):
"""Renders the callout text. This component is based on the p element.""" """Renders the callout text. This component is based on the p element."""
tag = "Callout.Text" tag = "Callout.Text"

View File

@ -9,15 +9,15 @@ from reflex.event import EventChain, EventHandler, EventSpec
from reflex.style import Style from reflex.style import Style
from typing import Literal, Union from typing import Literal, Union
import reflex as rx import reflex as rx
from reflex import el
from reflex.components.component import Component, ComponentNamespace from reflex.components.component import Component, ComponentNamespace
from reflex.components.el import elements
from reflex.components.lucide.icon import Icon from reflex.components.lucide.icon import Icon
from reflex.vars import Var from reflex.vars import Var
from ..base import LiteralAccentColor, RadixThemesComponent from ..base import LiteralAccentColor, RadixThemesComponent
CalloutVariant = Literal["soft", "surface", "outline"] CalloutVariant = Literal["soft", "surface", "outline"]
class CalloutRoot(el.Div, RadixThemesComponent): class CalloutRoot(elements.Div, RadixThemesComponent):
@overload @overload
@classmethod @classmethod
def create( # type: ignore def create( # type: ignore
@ -230,7 +230,7 @@ class CalloutRoot(el.Div, RadixThemesComponent):
""" """
... ...
class CalloutIcon(el.Div, RadixThemesComponent): class CalloutIcon(elements.Div, RadixThemesComponent):
@overload @overload
@classmethod @classmethod
def create( # type: ignore def create( # type: ignore
@ -365,7 +365,7 @@ class CalloutIcon(el.Div, RadixThemesComponent):
""" """
... ...
class CalloutText(el.P, RadixThemesComponent): class CalloutText(elements.P, RadixThemesComponent):
@overload @overload
@classmethod @classmethod
def create( # type: ignore def create( # type: ignore

View File

@ -1,7 +1,7 @@
"""Interactive components provided by @radix-ui/themes.""" """Interactive components provided by @radix-ui/themes."""
from typing import Literal from typing import Literal
from reflex import el from reflex.components.el import elements
from reflex.vars import Var from reflex.vars import Var
from ..base import ( from ..base import (
@ -9,7 +9,7 @@ from ..base import (
) )
class Card(el.Div, RadixThemesComponent): class Card(elements.Div, RadixThemesComponent):
"""Container that groups related content and actions.""" """Container that groups related content and actions."""
tag = "Card" tag = "Card"

View File

@ -8,11 +8,11 @@ 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 Literal from typing import Literal
from reflex import el from reflex.components.el import elements
from reflex.vars import Var from reflex.vars import Var
from ..base import RadixThemesComponent from ..base import RadixThemesComponent
class Card(el.Div, RadixThemesComponent): class Card(elements.Div, RadixThemesComponent):
@overload @overload
@classmethod @classmethod
def create( # type: ignore def create( # type: ignore

View File

@ -2,8 +2,8 @@
from typing import Any, Dict, Literal from typing import Any, Dict, Literal
from reflex import el
from reflex.components.component import ComponentNamespace from reflex.components.component import ComponentNamespace
from reflex.components.el import elements
from reflex.constants import EventTriggers from reflex.constants import EventTriggers
from reflex.vars import Var from reflex.vars import Var
@ -45,7 +45,7 @@ class DialogTitle(RadixThemesComponent):
tag = "Dialog.Title" tag = "Dialog.Title"
class DialogContent(el.Div, RadixThemesComponent): class DialogContent(elements.Div, RadixThemesComponent):
"""Content component to display inside a Dialog modal.""" """Content component to display inside a Dialog modal."""
tag = "Dialog.Content" tag = "Dialog.Content"

View File

@ -8,8 +8,8 @@ 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, Literal from typing import Any, Dict, Literal
from reflex import el
from reflex.components.component import ComponentNamespace from reflex.components.component import ComponentNamespace
from reflex.components.el import elements
from reflex.constants import EventTriggers from reflex.constants import EventTriggers
from reflex.vars import Var from reflex.vars import Var
from ..base import RadixThemesComponent, RadixThemesTriggerComponent from ..base import RadixThemesComponent, RadixThemesTriggerComponent
@ -248,7 +248,7 @@ class DialogTitle(RadixThemesComponent):
""" """
... ...
class DialogContent(el.Div, RadixThemesComponent): class DialogContent(elements.Div, RadixThemesComponent):
def get_event_triggers(self) -> Dict[str, Any]: ... def get_event_triggers(self) -> Dict[str, Any]: ...
@overload @overload
@classmethod @classmethod

View File

@ -1,8 +1,8 @@
"""Interactive components provided by @radix-ui/themes.""" """Interactive components provided by @radix-ui/themes."""
from typing import Any, Dict, Literal from typing import Any, Dict, Literal
from reflex import el
from reflex.components.component import ComponentNamespace from reflex.components.component import ComponentNamespace
from reflex.components.el import elements
from reflex.constants import EventTriggers from reflex.constants import EventTriggers
from reflex.vars import Var from reflex.vars import Var
@ -47,7 +47,7 @@ class HoverCardTrigger(RadixThemesTriggerComponent):
tag = "HoverCard.Trigger" tag = "HoverCard.Trigger"
class HoverCardContent(el.Div, RadixThemesComponent): class HoverCardContent(elements.Div, RadixThemesComponent):
"""Contains the content of the open hover card.""" """Contains the content of the open hover card."""
tag = "HoverCard.Content" tag = "HoverCard.Content"

View File

@ -8,8 +8,8 @@ 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, Literal from typing import Any, Dict, Literal
from reflex import el
from reflex.components.component import ComponentNamespace from reflex.components.component import ComponentNamespace
from reflex.components.el import elements
from reflex.constants import EventTriggers from reflex.constants import EventTriggers
from reflex.vars import Var from reflex.vars import Var
from ..base import RadixThemesComponent, RadixThemesTriggerComponent from ..base import RadixThemesComponent, RadixThemesTriggerComponent
@ -175,7 +175,7 @@ class HoverCardTrigger(RadixThemesTriggerComponent):
""" """
... ...
class HoverCardContent(el.Div, RadixThemesComponent): class HoverCardContent(elements.Div, RadixThemesComponent):
@overload @overload
@classmethod @classmethod
def create( # type: ignore def create( # type: ignore

View File

@ -3,9 +3,9 @@ from __future__ import annotations
from typing import Literal from typing import Literal
from reflex import el
from reflex.components.component import Component from reflex.components.component import Component
from reflex.components.core.match import Match from reflex.components.core.match import Match
from reflex.components.el import elements
from reflex.components.lucide import Icon from reflex.components.lucide import Icon
from reflex.style import Style from reflex.style import Style
from reflex.vars import Var from reflex.vars import Var
@ -21,7 +21,7 @@ from ..base import (
LiteralButtonSize = Literal["1", "2", "3", "4"] LiteralButtonSize = Literal["1", "2", "3", "4"]
class IconButton(el.Button, RadixLoadingProp, RadixThemesComponent): class IconButton(elements.Button, RadixLoadingProp, RadixThemesComponent):
"""A button designed specifically for usage with a single icon.""" """A button designed specifically for usage with a single icon."""
tag = "IconButton" tag = "IconButton"

View File

@ -8,9 +8,9 @@ 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 Literal from typing import Literal
from reflex import el
from reflex.components.component import Component from reflex.components.component import Component
from reflex.components.core.match import Match from reflex.components.core.match import Match
from reflex.components.el import elements
from reflex.components.lucide import Icon from reflex.components.lucide import Icon
from reflex.style import Style from reflex.style import Style
from reflex.vars import Var from reflex.vars import Var
@ -24,7 +24,7 @@ from ..base import (
LiteralButtonSize = Literal["1", "2", "3", "4"] LiteralButtonSize = Literal["1", "2", "3", "4"]
class IconButton(el.Button, RadixLoadingProp, RadixThemesComponent): class IconButton(elements.Button, RadixLoadingProp, RadixThemesComponent):
@overload @overload
@classmethod @classmethod
def create( # type: ignore def create( # type: ignore

View File

@ -1,7 +1,7 @@
"""Interactive components provided by @radix-ui/themes.""" """Interactive components provided by @radix-ui/themes."""
from typing import Literal, Union from typing import Literal, Union
from reflex import el from reflex.components.el import elements
from reflex.vars import Var from reflex.vars import Var
from ..base import ( from ..base import (
@ -11,7 +11,7 @@ from ..base import (
LiteralButtonSize = Literal["1", "2", "3", "4"] LiteralButtonSize = Literal["1", "2", "3", "4"]
class Inset(el.Div, RadixThemesComponent): class Inset(elements.Div, RadixThemesComponent):
"""Applies a negative margin to allow content to bleed into the surrounding container.""" """Applies a negative margin to allow content to bleed into the surrounding container."""
tag = "Inset" tag = "Inset"

View File

@ -8,13 +8,13 @@ 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 Literal, Union from typing import Literal, Union
from reflex import el from reflex.components.el import elements
from reflex.vars import Var from reflex.vars import Var
from ..base import RadixThemesComponent from ..base import RadixThemesComponent
LiteralButtonSize = Literal["1", "2", "3", "4"] LiteralButtonSize = Literal["1", "2", "3", "4"]
class Inset(el.Div, RadixThemesComponent): class Inset(elements.Div, RadixThemesComponent):
@overload @overload
@classmethod @classmethod
def create( # type: ignore def create( # type: ignore

View File

@ -1,8 +1,8 @@
"""Interactive components provided by @radix-ui/themes.""" """Interactive components provided by @radix-ui/themes."""
from typing import Any, Dict, Literal from typing import Any, Dict, Literal
from reflex import el
from reflex.components.component import ComponentNamespace from reflex.components.component import ComponentNamespace
from reflex.components.el import elements
from reflex.constants import EventTriggers from reflex.constants import EventTriggers
from reflex.vars import Var from reflex.vars import Var
@ -41,7 +41,7 @@ class PopoverTrigger(RadixThemesTriggerComponent):
tag = "Popover.Trigger" tag = "Popover.Trigger"
class PopoverContent(el.Div, RadixThemesComponent): class PopoverContent(elements.Div, RadixThemesComponent):
"""Contains content to be rendered in the open popover.""" """Contains content to be rendered in the open popover."""
tag = "Popover.Content" tag = "Popover.Content"

View File

@ -8,8 +8,8 @@ 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, Literal from typing import Any, Dict, Literal
from reflex import el
from reflex.components.component import ComponentNamespace from reflex.components.component import ComponentNamespace
from reflex.components.el import elements
from reflex.constants import EventTriggers from reflex.constants import EventTriggers
from reflex.vars import Var from reflex.vars import Var
from ..base import RadixThemesComponent, RadixThemesTriggerComponent from ..base import RadixThemesComponent, RadixThemesTriggerComponent
@ -171,7 +171,7 @@ class PopoverTrigger(RadixThemesTriggerComponent):
""" """
... ...
class PopoverContent(el.Div, RadixThemesComponent): class PopoverContent(elements.Div, RadixThemesComponent):
def get_event_triggers(self) -> Dict[str, Any]: ... def get_event_triggers(self) -> Dict[str, Any]: ...
@overload @overload
@classmethod @classmethod

View File

@ -1,8 +1,8 @@
"""Interactive components provided by @radix-ui/themes.""" """Interactive components provided by @radix-ui/themes."""
from typing import List, Literal from typing import List, Literal
from reflex import el
from reflex.components.component import ComponentNamespace from reflex.components.component import ComponentNamespace
from reflex.components.el import elements
from reflex.vars import Var from reflex.vars import Var
from ..base import ( from ..base import (
@ -10,7 +10,7 @@ from ..base import (
) )
class TableRoot(el.Table, RadixThemesComponent): class TableRoot(elements.Table, RadixThemesComponent):
"""A semantic table for presenting tabular data.""" """A semantic table for presenting tabular data."""
tag = "Table.Root" tag = "Table.Root"
@ -22,7 +22,7 @@ class TableRoot(el.Table, RadixThemesComponent):
variant: Var[Literal["surface", "ghost"]] variant: Var[Literal["surface", "ghost"]]
class TableHeader(el.Thead, RadixThemesComponent): class TableHeader(elements.Thead, RadixThemesComponent):
"""The header of the table defines column names and other non-data elements.""" """The header of the table defines column names and other non-data elements."""
tag = "Table.Header" tag = "Table.Header"
@ -32,7 +32,7 @@ class TableHeader(el.Thead, RadixThemesComponent):
_valid_parents: List[str] = ["TableRoot"] _valid_parents: List[str] = ["TableRoot"]
class TableRow(el.Tr, RadixThemesComponent): class TableRow(elements.Tr, RadixThemesComponent):
"""A row containing table cells.""" """A row containing table cells."""
tag = "Table.Row" tag = "Table.Row"
@ -43,7 +43,7 @@ class TableRow(el.Tr, RadixThemesComponent):
_invalid_children: List[str] = ["TableBody", "TableHeader", "TableRow"] _invalid_children: List[str] = ["TableBody", "TableHeader", "TableRow"]
class TableColumnHeaderCell(el.Th, RadixThemesComponent): class TableColumnHeaderCell(elements.Th, RadixThemesComponent):
"""A table cell that is semantically treated as a column header.""" """A table cell that is semantically treated as a column header."""
tag = "Table.ColumnHeaderCell" tag = "Table.ColumnHeaderCell"
@ -61,7 +61,7 @@ class TableColumnHeaderCell(el.Th, RadixThemesComponent):
] ]
class TableBody(el.Tbody, RadixThemesComponent): class TableBody(elements.Tbody, RadixThemesComponent):
"""The body of the table contains the data rows.""" """The body of the table contains the data rows."""
tag = "Table.Body" tag = "Table.Body"
@ -76,7 +76,7 @@ class TableBody(el.Tbody, RadixThemesComponent):
_valid_parents: List[str] = ["TableRoot"] _valid_parents: List[str] = ["TableRoot"]
class TableCell(el.Td, RadixThemesComponent): class TableCell(elements.Td, RadixThemesComponent):
"""A cell containing data.""" """A cell containing data."""
tag = "Table.Cell" tag = "Table.Cell"
@ -93,7 +93,7 @@ class TableCell(el.Td, RadixThemesComponent):
] ]
class TableRowHeaderCell(el.Th, RadixThemesComponent): class TableRowHeaderCell(elements.Th, RadixThemesComponent):
"""A table cell that is semantically treated as a row header.""" """A table cell that is semantically treated as a row header."""
tag = "Table.RowHeaderCell" tag = "Table.RowHeaderCell"

View File

@ -8,12 +8,12 @@ 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 List, Literal from typing import List, Literal
from reflex import el
from reflex.components.component import ComponentNamespace from reflex.components.component import ComponentNamespace
from reflex.components.el import elements
from reflex.vars import Var from reflex.vars import Var
from ..base import RadixThemesComponent from ..base import RadixThemesComponent
class TableRoot(el.Table, RadixThemesComponent): class TableRoot(elements.Table, RadixThemesComponent):
@overload @overload
@classmethod @classmethod
def create( # type: ignore def create( # type: ignore
@ -164,7 +164,7 @@ class TableRoot(el.Table, RadixThemesComponent):
""" """
... ...
class TableHeader(el.Thead, RadixThemesComponent): class TableHeader(elements.Thead, RadixThemesComponent):
@overload @overload
@classmethod @classmethod
def create( # type: ignore def create( # type: ignore
@ -303,7 +303,7 @@ class TableHeader(el.Thead, RadixThemesComponent):
""" """
... ...
class TableRow(el.Tr, RadixThemesComponent): class TableRow(elements.Tr, RadixThemesComponent):
@overload @overload
@classmethod @classmethod
def create( # type: ignore def create( # type: ignore
@ -445,7 +445,7 @@ class TableRow(el.Tr, RadixThemesComponent):
""" """
... ...
class TableColumnHeaderCell(el.Th, RadixThemesComponent): class TableColumnHeaderCell(elements.Th, RadixThemesComponent):
@overload @overload
@classmethod @classmethod
def create( # type: ignore def create( # type: ignore
@ -607,7 +607,7 @@ class TableColumnHeaderCell(el.Th, RadixThemesComponent):
""" """
... ...
class TableBody(el.Tbody, RadixThemesComponent): class TableBody(elements.Tbody, RadixThemesComponent):
@overload @overload
@classmethod @classmethod
def create( # type: ignore def create( # type: ignore
@ -746,7 +746,7 @@ class TableBody(el.Tbody, RadixThemesComponent):
""" """
... ...
class TableCell(el.Td, RadixThemesComponent): class TableCell(elements.Td, RadixThemesComponent):
@overload @overload
@classmethod @classmethod
def create( # type: ignore def create( # type: ignore
@ -904,7 +904,7 @@ class TableCell(el.Td, RadixThemesComponent):
""" """
... ...
class TableRowHeaderCell(el.Th, RadixThemesComponent): class TableRowHeaderCell(elements.Th, RadixThemesComponent):
@overload @overload
@classmethod @classmethod
def create( # type: ignore def create( # type: ignore

View File

@ -1,9 +1,9 @@
"""Interactive components provided by @radix-ui/themes.""" """Interactive components provided by @radix-ui/themes."""
from typing import Any, Dict, Literal, Union from typing import Any, Dict, Literal, Union
from reflex import el
from reflex.components.component import Component from reflex.components.component import Component
from reflex.components.core.debounce import DebounceInput from reflex.components.core.debounce import DebounceInput
from reflex.components.el import elements
from reflex.constants import EventTriggers from reflex.constants import EventTriggers
from reflex.vars import Var from reflex.vars import Var
@ -15,7 +15,7 @@ from ..base import (
LiteralTextAreaSize = Literal["1", "2", "3"] LiteralTextAreaSize = Literal["1", "2", "3"]
class TextArea(RadixThemesComponent, el.Textarea): class TextArea(RadixThemesComponent, elements.Textarea):
"""The input part of a TextArea, may be used by itself.""" """The input part of a TextArea, may be used by itself."""
tag = "TextArea" tag = "TextArea"

View File

@ -8,16 +8,16 @@ 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, Literal, Union from typing import Any, Dict, Literal, Union
from reflex import el
from reflex.components.component import Component from reflex.components.component import Component
from reflex.components.core.debounce import DebounceInput from reflex.components.core.debounce import DebounceInput
from reflex.components.el import elements
from reflex.constants import EventTriggers from reflex.constants import EventTriggers
from reflex.vars import Var from reflex.vars import Var
from ..base import LiteralAccentColor, RadixThemesComponent from ..base import LiteralAccentColor, RadixThemesComponent
LiteralTextAreaSize = Literal["1", "2", "3"] LiteralTextAreaSize = Literal["1", "2", "3"]
class TextArea(RadixThemesComponent, el.Textarea): class TextArea(RadixThemesComponent, elements.Textarea):
@overload @overload
@classmethod @classmethod
def create( # type: ignore def create( # type: ignore

View File

@ -3,10 +3,10 @@ from __future__ import annotations
from typing import Any, Dict, Literal, Union from typing import Any, Dict, Literal, Union
from reflex.components import el
from reflex.components.base.fragment import Fragment from reflex.components.base.fragment import Fragment
from reflex.components.component import Component, ComponentNamespace from reflex.components.component import Component, ComponentNamespace
from reflex.components.core.debounce import DebounceInput from reflex.components.core.debounce import DebounceInput
from reflex.components.el import elements
from reflex.constants import EventTriggers from reflex.constants import EventTriggers
from reflex.style import Style, format_as_emotion from reflex.style import Style, format_as_emotion
from reflex.utils import console from reflex.utils import console
@ -22,7 +22,7 @@ LiteralTextFieldSize = Literal["1", "2", "3"]
LiteralTextFieldVariant = Literal["classic", "surface", "soft"] LiteralTextFieldVariant = Literal["classic", "surface", "soft"]
class TextFieldRoot(el.Div, RadixThemesComponent): class TextFieldRoot(elements.Div, RadixThemesComponent):
"""Captures user input with an optional slot for buttons and icons.""" """Captures user input with an optional slot for buttons and icons."""
tag = "TextField.Root" tag = "TextField.Root"
@ -197,4 +197,4 @@ class TextField(ComponentNamespace):
__call__ = staticmethod(TextFieldRoot.create) __call__ = staticmethod(TextFieldRoot.create)
text_field = TextField() input = text_field = TextField()

View File

@ -8,10 +8,10 @@ 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, Literal, Union from typing import Any, Dict, Literal, Union
from reflex.components import el
from reflex.components.base.fragment import Fragment from reflex.components.base.fragment import Fragment
from reflex.components.component import Component, ComponentNamespace from reflex.components.component import Component, ComponentNamespace
from reflex.components.core.debounce import DebounceInput from reflex.components.core.debounce import DebounceInput
from reflex.components.el import elements
from reflex.constants import EventTriggers from reflex.constants import EventTriggers
from reflex.style import Style, format_as_emotion from reflex.style import Style, format_as_emotion
from reflex.utils import console from reflex.utils import console
@ -21,7 +21,7 @@ from ..base import LiteralAccentColor, LiteralRadius, RadixThemesComponent
LiteralTextFieldSize = Literal["1", "2", "3"] LiteralTextFieldSize = Literal["1", "2", "3"]
LiteralTextFieldVariant = Literal["classic", "surface", "soft"] LiteralTextFieldVariant = Literal["classic", "surface", "soft"]
class TextFieldRoot(el.Div, RadixThemesComponent): class TextFieldRoot(elements.Div, RadixThemesComponent):
@overload @overload
@classmethod @classmethod
def create( # type: ignore def create( # type: ignore
@ -662,4 +662,4 @@ class TextField(ComponentNamespace):
""" """
... ...
text_field = TextField() input = text_field = TextField()

View File

@ -1,42 +1,16 @@
"""Layout components.""" """Layout components."""
from __future__ import annotations
from .box import Box from reflex import RADIX_THEMES_LAYOUT_MAPPING
from .center import Center from reflex.utils import lazy_loader
from .container import Container
from .flex import Flex
from .grid import Grid
from .list import list_ns as list
from .section import Section
from .spacer import Spacer
from .stack import HStack, Stack, VStack
box = Box.create _SUBMOD_ATTRS: dict[str, list[str]] = {
center = Center.create "".join(k.split("components.radix.themes.layout.")[-1]): v
container = Container.create for k, v in RADIX_THEMES_LAYOUT_MAPPING.items()
flex = Flex.create }
grid = Grid.create
section = Section.create
spacer = Spacer.create
stack = Stack.create
hstack = HStack.create
vstack = VStack.create
list_item = list.item
ordered_list = list.ordered
unordered_list = list.unordered
__all__ = [
"box", __getattr__, __dir__, __all__ = lazy_loader.attach(
"center", __name__,
"container", submod_attrs=_SUBMOD_ATTRS,
"flex", )
"grid",
"section",
"spacer",
"stack",
"hstack",
"vstack",
"list",
"list_item",
"ordered_list",
"unordered_list",
]

View File

@ -0,0 +1,21 @@
"""Stub file for reflex/components/radix/themes/layout/__init__.py"""
# ------------------- DO NOT EDIT ----------------------
# This file was generated by `reflex/utils/pyi_generator.py`!
# ------------------------------------------------------
from .box import box as box
from .center import center as center
from .container import container as container
from .flex import flex as flex
from .grid import grid as grid
from .section import section as section
from .spacer import spacer as spacer
from .stack import stack as stack
from .stack import hstack as hstack
from .stack import vstack as vstack
from .list import list_ns as list
from .list import list_item as list_item
from .list import ordered_list as ordered_list
from .list import unordered_list as unordered_list
from reflex import RADIX_THEMES_LAYOUT_MAPPING
from reflex.utils import lazy_loader

View File

@ -1,12 +1,15 @@
"""Declarative layout and common spacing props.""" """Declarative layout and common spacing props."""
from __future__ import annotations from __future__ import annotations
from reflex import el from reflex.components.el import elements
from ..base import RadixThemesComponent from ..base import RadixThemesComponent
class Box(el.Div, RadixThemesComponent): class Box(elements.Div, RadixThemesComponent):
"""A fundamental layout building block, based on `div` element.""" """A fundamental layout building block, based on `div` element."""
tag = "Box" tag = "Box"
box = Box.create

View File

@ -7,10 +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 reflex import el from reflex.components.el import elements
from ..base import RadixThemesComponent from ..base import RadixThemesComponent
class Box(el.Div, RadixThemesComponent): class Box(elements.Div, RadixThemesComponent):
@overload @overload
@classmethod @classmethod
def create( # type: ignore def create( # type: ignore
@ -144,3 +144,5 @@ class Box(el.Div, RadixThemesComponent):
A new component instance. A new component instance.
""" """
... ...
box = Box.create

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