reflex 0.8.0a4__tar.gz → 0.8.0a5__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of reflex might be problematic. Click here for more details.
- {reflex-0.8.0a4 → reflex-0.8.0a5}/PKG-INFO +2 -2
- {reflex-0.8.0a4 → reflex-0.8.0a5}/pyproject.toml +2 -2
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/jinja/web/styles/styles.css.jinja2 +1 -0
- reflex-0.8.0a5/reflex/.templates/web/app/routes.js +10 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/web/utils/client_side_routing.js +1 -1
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/web/utils/state.js +32 -21
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/app.py +34 -42
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/compiler/compiler.py +3 -1
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/compiler/utils.py +4 -2
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/base/meta.py +4 -15
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/foreach.py +2 -2
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/match.py +3 -3
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/upload.py +2 -1
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/datadisplay/code.py +12 -7
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/datadisplay/shiki_code_block.py +5 -3
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/markdown/markdown.py +5 -3
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/plotly/plotly.py +12 -6
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/color_mode.py +5 -6
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/recharts/cartesian.py +9 -2
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/constants/route.py +13 -6
- reflex-0.8.0a5/reflex/route.py +222 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/state.py +21 -4
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/utils/exec.py +10 -10
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/utils/format.py +1 -5
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/utils/misc.py +40 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/utils/prerequisites.py +6 -11
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/utils/pyi_generator.py +23 -40
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/utils/types.py +1 -1
- reflex-0.8.0a4/reflex/.templates/web/app/routes.js +0 -10
- reflex-0.8.0a4/reflex/route.py +0 -134
- {reflex-0.8.0a4 → reflex-0.8.0a5}/.gitignore +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/LICENSE +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/README.md +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/apps/blank/assets/favicon.ico +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/apps/blank/code/__init__.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/apps/blank/code/blank.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/jinja/app/rxconfig.py.jinja2 +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/jinja/custom_components/README.md.jinja2 +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/jinja/custom_components/__init__.py.jinja2 +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/jinja/custom_components/demo_app.py.jinja2 +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/jinja/custom_components/pyproject.toml.jinja2 +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/jinja/custom_components/src.py.jinja2 +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/jinja/web/package.json.jinja2 +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/jinja/web/pages/_app.js.jinja2 +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/jinja/web/pages/_document.js.jinja2 +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/jinja/web/pages/base_page.js.jinja2 +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/jinja/web/pages/component.js.jinja2 +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/jinja/web/pages/custom_component.js.jinja2 +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/jinja/web/pages/index.js.jinja2 +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/jinja/web/pages/macros.js.jinja2 +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/jinja/web/pages/stateful_component.js.jinja2 +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/jinja/web/pages/stateful_components.js.jinja2 +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/jinja/web/pages/utils.js.jinja2 +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/jinja/web/utils/context.js.jinja2 +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/jinja/web/utils/theme.js.jinja2 +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/web/.gitignore +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/web/app/entry.client.js +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/web/components/reflex/radix_themes_color_mode_provider.js +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/web/components/shiki/code.js +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/web/jsconfig.json +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/web/postcss.config.js +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/web/react-router.config.js +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/web/styles/__reflex_style_reset.css +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/web/utils/helpers/dataeditor.js +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/web/utils/helpers/debounce.js +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/web/utils/helpers/paste.js +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/web/utils/helpers/range.js +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/web/utils/helpers/throttle.js +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/web/utils/react-theme.js +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/web/vite.config.js +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/__init__.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/__init__.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/__main__.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/admin.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/app_mixins/__init__.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/app_mixins/lifespan.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/app_mixins/middleware.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/app_mixins/mixin.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/assets.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/base.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/compiler/__init__.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/compiler/templates.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/__init__.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/__init__.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/base/__init__.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/base/__init__.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/base/app_wrap.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/base/app_wrap.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/base/bare.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/base/body.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/base/body.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/base/document.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/base/document.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/base/error_boundary.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/base/error_boundary.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/base/fragment.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/base/fragment.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/base/link.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/base/link.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/base/meta.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/base/script.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/base/script.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/base/strict_mode.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/base/strict_mode.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/component.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/__init__.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/__init__.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/auto_scroll.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/auto_scroll.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/banner.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/banner.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/breakpoints.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/client_side_routing.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/client_side_routing.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/clipboard.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/clipboard.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/colors.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/cond.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/debounce.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/debounce.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/helmet.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/helmet.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/html.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/html.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/layout/__init__.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/responsive.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/sticky.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/sticky.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/upload.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/datadisplay/__init__.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/datadisplay/__init__.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/datadisplay/code.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/datadisplay/dataeditor.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/datadisplay/dataeditor.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/datadisplay/logo.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/datadisplay/shiki_code_block.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/dynamic.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/__init__.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/__init__.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/constants/__init__.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/constants/html.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/constants/react.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/constants/reflex.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/element.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/element.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/elements/__init__.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/elements/__init__.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/elements/base.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/elements/base.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/elements/forms.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/elements/forms.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/elements/inline.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/elements/inline.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/elements/media.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/elements/media.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/elements/metadata.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/elements/metadata.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/elements/other.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/elements/other.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/elements/scripts.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/elements/scripts.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/elements/sectioning.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/elements/sectioning.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/elements/tables.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/elements/tables.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/elements/typography.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/elements/typography.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/field.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/gridjs/__init__.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/gridjs/datatable.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/gridjs/datatable.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/literals.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/lucide/__init__.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/lucide/icon.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/lucide/icon.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/markdown/__init__.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/markdown/markdown.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/moment/__init__.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/moment/moment.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/moment/moment.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/plotly/__init__.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/plotly/plotly.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/props.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/__init__.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/__init__.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/primitives/__init__.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/primitives/__init__.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/primitives/accordion.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/primitives/accordion.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/primitives/base.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/primitives/base.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/primitives/drawer.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/primitives/drawer.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/primitives/form.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/primitives/form.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/primitives/progress.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/primitives/progress.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/primitives/slider.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/primitives/slider.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/__init__.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/__init__.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/base.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/base.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/color_mode.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/__init__.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/__init__.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/alert_dialog.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/alert_dialog.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/aspect_ratio.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/aspect_ratio.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/avatar.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/avatar.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/badge.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/badge.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/button.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/button.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/callout.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/callout.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/card.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/card.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/checkbox.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/checkbox.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/checkbox_cards.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/checkbox_cards.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/checkbox_group.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/checkbox_group.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/context_menu.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/context_menu.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/data_list.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/data_list.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/dialog.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/dialog.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/dropdown_menu.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/dropdown_menu.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/hover_card.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/hover_card.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/icon_button.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/icon_button.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/inset.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/inset.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/popover.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/popover.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/progress.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/progress.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/radio.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/radio.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/radio_cards.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/radio_cards.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/radio_group.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/radio_group.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/scroll_area.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/scroll_area.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/segmented_control.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/segmented_control.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/select.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/select.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/separator.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/separator.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/skeleton.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/skeleton.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/slider.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/slider.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/spinner.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/spinner.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/switch.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/switch.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/table.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/table.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/tabs.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/tabs.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/text_area.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/text_area.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/text_field.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/text_field.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/tooltip.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/tooltip.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/layout/__init__.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/layout/__init__.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/layout/base.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/layout/base.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/layout/box.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/layout/box.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/layout/center.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/layout/center.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/layout/container.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/layout/container.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/layout/flex.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/layout/flex.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/layout/grid.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/layout/grid.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/layout/list.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/layout/list.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/layout/section.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/layout/section.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/layout/spacer.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/layout/spacer.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/layout/stack.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/layout/stack.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/typography/__init__.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/typography/__init__.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/typography/base.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/typography/blockquote.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/typography/blockquote.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/typography/code.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/typography/code.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/typography/heading.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/typography/heading.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/typography/link.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/typography/link.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/typography/text.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/typography/text.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/react_player/__init__.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/react_player/audio.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/react_player/audio.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/react_player/react_player.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/react_player/react_player.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/react_player/video.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/react_player/video.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/recharts/__init__.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/recharts/__init__.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/recharts/cartesian.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/recharts/charts.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/recharts/charts.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/recharts/general.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/recharts/general.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/recharts/polar.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/recharts/polar.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/recharts/recharts.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/recharts/recharts.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/sonner/__init__.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/sonner/toast.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/sonner/toast.pyi +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/tags/__init__.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/tags/cond_tag.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/tags/iter_tag.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/tags/match_tag.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/tags/tag.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/tags/tagless.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/config.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/constants/__init__.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/constants/base.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/constants/colors.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/constants/compiler.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/constants/config.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/constants/custom_components.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/constants/event.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/constants/installer.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/constants/state.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/constants/utils.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/custom_components/__init__.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/custom_components/custom_components.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/environment.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/event.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/experimental/__init__.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/experimental/client_state.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/experimental/hooks.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/istate/__init__.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/istate/data.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/istate/dynamic.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/istate/manager.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/istate/proxy.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/istate/storage.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/istate/wrappers.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/middleware/__init__.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/middleware/hydrate_middleware.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/middleware/middleware.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/model.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/page.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/plugins/__init__.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/plugins/base.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/plugins/shared_tailwind.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/plugins/sitemap.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/plugins/tailwind_v3.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/plugins/tailwind_v4.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/py.typed +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/reflex.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/style.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/testing.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/utils/__init__.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/utils/build.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/utils/codespaces.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/utils/compat.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/utils/console.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/utils/decorator.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/utils/exceptions.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/utils/export.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/utils/imports.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/utils/lazy_loader.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/utils/net.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/utils/path_ops.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/utils/processes.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/utils/redir.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/utils/registry.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/utils/serializers.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/utils/telemetry.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/vars/__init__.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/vars/base.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/vars/datetime.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/vars/dep_tracking.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/vars/function.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/vars/number.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/vars/object.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/vars/sequence.py +0 -0
- {reflex-0.8.0a4 → reflex-0.8.0a5}/scripts/hatch_build.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: reflex
|
|
3
|
-
Version: 0.8.
|
|
3
|
+
Version: 0.8.0a5
|
|
4
4
|
Summary: Web apps in pure Python.
|
|
5
5
|
Project-URL: homepage, https://reflex.dev
|
|
6
6
|
Project-URL: repository, https://github.com/reflex-dev/reflex
|
|
@@ -19,7 +19,7 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
19
19
|
Classifier: Programming Language :: Python :: 3.13
|
|
20
20
|
Requires-Python: <4.0,>=3.10
|
|
21
21
|
Requires-Dist: alembic<2.0,>=1.15.2
|
|
22
|
-
Requires-Dist: click>=8
|
|
22
|
+
Requires-Dist: click>=8.2
|
|
23
23
|
Requires-Dist: fastapi>=0.115.0
|
|
24
24
|
Requires-Dist: granian[reload]>=2.2.5
|
|
25
25
|
Requires-Dist: httpx<1.0,>=0.28.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "reflex"
|
|
3
|
-
version = "0.8.
|
|
3
|
+
version = "0.8.0a5"
|
|
4
4
|
description = "Web apps in pure Python."
|
|
5
5
|
license.text = "Apache-2.0"
|
|
6
6
|
authors = [
|
|
@@ -35,7 +35,7 @@ dependencies = [
|
|
|
35
35
|
"reflex-hosting-cli >=0.1.47",
|
|
36
36
|
"rich >=13,<15",
|
|
37
37
|
"sqlmodel >=0.0.24,<0.1",
|
|
38
|
-
"click >=8",
|
|
38
|
+
"click >=8.2",
|
|
39
39
|
"typing_extensions >=4.13.0",
|
|
40
40
|
"wrapt >=1.17.0,<2.0",
|
|
41
41
|
]
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { route } from "@react-router/dev/routes";
|
|
2
|
+
import { flatRoutes } from "@react-router/fs-routes";
|
|
3
|
+
|
|
4
|
+
export default [
|
|
5
|
+
route("404", "routes/[404]._index.jsx", { id: "404" }),
|
|
6
|
+
...(await flatRoutes({
|
|
7
|
+
ignoredRouteFiles: ["routes/\\[404\\]._index.jsx"],
|
|
8
|
+
})),
|
|
9
|
+
route("*", "routes/[404]._index.jsx"),
|
|
10
|
+
];
|
|
@@ -25,7 +25,7 @@ export const useClientSideRouting = () => {
|
|
|
25
25
|
const search = window.location.search;
|
|
26
26
|
|
|
27
27
|
// Use navigate instead of replace
|
|
28
|
-
navigate(path + search, { replace: true })
|
|
28
|
+
navigate(path + search, { replace: true, state: { fromNotFound: true } })
|
|
29
29
|
.then(() => {
|
|
30
30
|
// Check if we're still on a NotFound route
|
|
31
31
|
// Note: This depends on how your routes are set up
|
|
@@ -5,7 +5,7 @@ import JSON5 from "json5";
|
|
|
5
5
|
import env from "$/env.json";
|
|
6
6
|
import reflexEnvironment from "$/reflex.json";
|
|
7
7
|
import Cookies from "universal-cookie";
|
|
8
|
-
import { useEffect, useRef, useState } from "react";
|
|
8
|
+
import { useCallback, useEffect, useRef, useState } from "react";
|
|
9
9
|
import {
|
|
10
10
|
useLocation,
|
|
11
11
|
useNavigate,
|
|
@@ -851,7 +851,7 @@ export const useEventLoop = (
|
|
|
851
851
|
}, [paramsR]);
|
|
852
852
|
|
|
853
853
|
// Function to add new events to the event queue.
|
|
854
|
-
const addEvents = (events, args, event_actions) => {
|
|
854
|
+
const addEvents = useCallback((events, args, event_actions) => {
|
|
855
855
|
const _events = events.filter((e) => e !== undefined && e !== null);
|
|
856
856
|
|
|
857
857
|
if (!(args instanceof Array)) {
|
|
@@ -894,7 +894,7 @@ export const useEventLoop = (
|
|
|
894
894
|
} else {
|
|
895
895
|
queueEvents(_events, socket, false, navigate, () => params.current);
|
|
896
896
|
}
|
|
897
|
-
};
|
|
897
|
+
}, []);
|
|
898
898
|
|
|
899
899
|
const sentHydrate = useRef(false); // Avoid double-hydrate due to React strict-mode
|
|
900
900
|
useEffect(() => {
|
|
@@ -1020,31 +1020,42 @@ export const useEventLoop = (
|
|
|
1020
1020
|
return () => window.removeEventListener("storage", handleStorage);
|
|
1021
1021
|
});
|
|
1022
1022
|
|
|
1023
|
+
const handleNavigationEvents = useRef(false);
|
|
1023
1024
|
// Route after the initial page hydration
|
|
1024
1025
|
useEffect(() => {
|
|
1026
|
+
// The first time this effect runs is initial load, so don't handle
|
|
1027
|
+
// any navigation events.
|
|
1028
|
+
if (!handleNavigationEvents.current) {
|
|
1029
|
+
handleNavigationEvents.current = true;
|
|
1030
|
+
return;
|
|
1031
|
+
}
|
|
1032
|
+
if (location.state?.fromNotFound) {
|
|
1033
|
+
// If the redirect is from a 404 page, we skip onLoadInternalEvent,
|
|
1034
|
+
// since it was already run when the 404 page was first rendered.
|
|
1035
|
+
return;
|
|
1036
|
+
}
|
|
1025
1037
|
// This will run when the location changes
|
|
1026
1038
|
if (
|
|
1027
|
-
location.pathname + location.search
|
|
1028
|
-
prevLocationRef.current.pathname +
|
|
1029
|
-
prevLocationRef.current.search +
|
|
1030
|
-
prevLocationRef.current.hash
|
|
1039
|
+
location.pathname + location.search ===
|
|
1040
|
+
prevLocationRef.current.pathname + prevLocationRef.current.search
|
|
1031
1041
|
) {
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
}
|
|
1038
|
-
};
|
|
1039
|
-
change_start();
|
|
1040
|
-
|
|
1041
|
-
// Equivalent to routeChangeComplete - runs after navigation completes
|
|
1042
|
-
const change_complete = () => addEvents(onLoadInternalEvent());
|
|
1043
|
-
change_complete();
|
|
1042
|
+
if (location.hash) {
|
|
1043
|
+
// If the hash is the same, we don't need to do anything.
|
|
1044
|
+
return;
|
|
1045
|
+
}
|
|
1046
|
+
}
|
|
1044
1047
|
|
|
1045
|
-
|
|
1046
|
-
|
|
1048
|
+
// Equivalent to routeChangeStart - runs when navigation begins
|
|
1049
|
+
const main_state_dispatch = dispatch["reflex___state____state"];
|
|
1050
|
+
if (main_state_dispatch !== undefined) {
|
|
1051
|
+
main_state_dispatch({ is_hydrated_rx_state_: false });
|
|
1047
1052
|
}
|
|
1053
|
+
|
|
1054
|
+
// Equivalent to routeChangeComplete - runs after navigation completes
|
|
1055
|
+
addEvents(onLoadInternalEvent());
|
|
1056
|
+
|
|
1057
|
+
// Update the ref
|
|
1058
|
+
prevLocationRef.current = location;
|
|
1048
1059
|
}, [location, dispatch, onLoadInternalEvent, addEvents]);
|
|
1049
1060
|
|
|
1050
1061
|
return [addEvents, connectErrors];
|
|
@@ -765,9 +765,9 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
765
765
|
msg = "Route must be set if component is not a callable."
|
|
766
766
|
raise exceptions.RouteValueError(msg)
|
|
767
767
|
# Format the route.
|
|
768
|
-
route = format.format_route(component.__name__)
|
|
768
|
+
route = format.format_route(format.to_kebab_case(component.__name__))
|
|
769
769
|
else:
|
|
770
|
-
route = format.format_route(route
|
|
770
|
+
route = format.format_route(route)
|
|
771
771
|
|
|
772
772
|
if route == constants.Page404.SLUG:
|
|
773
773
|
if component is None:
|
|
@@ -822,10 +822,11 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
822
822
|
state = self._state if self._state else State
|
|
823
823
|
state.setup_dynamic_args(get_route_args(route))
|
|
824
824
|
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
825
|
+
self._load_events[route] = (
|
|
826
|
+
(on_load if isinstance(on_load, list) else [on_load])
|
|
827
|
+
if on_load is not None
|
|
828
|
+
else []
|
|
829
|
+
)
|
|
829
830
|
|
|
830
831
|
self._unevaluated_pages[route] = unevaluated_page
|
|
831
832
|
|
|
@@ -854,48 +855,35 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
854
855
|
if save_page:
|
|
855
856
|
self._pages[route] = component
|
|
856
857
|
|
|
857
|
-
|
|
858
|
+
@functools.cached_property
|
|
859
|
+
def router(self) -> Callable[[str], str | None]:
|
|
860
|
+
"""Get the route computer function.
|
|
861
|
+
|
|
862
|
+
Returns:
|
|
863
|
+
The route computer function.
|
|
864
|
+
"""
|
|
865
|
+
from reflex.route import get_router
|
|
866
|
+
|
|
867
|
+
return get_router(list(self._pages))
|
|
868
|
+
|
|
869
|
+
def get_load_events(self, path: str) -> list[IndividualEventType[()]]:
|
|
858
870
|
"""Get the load events for a route.
|
|
859
871
|
|
|
860
872
|
Args:
|
|
861
|
-
|
|
873
|
+
path: The route to get the load events for.
|
|
862
874
|
|
|
863
875
|
Returns:
|
|
864
876
|
The load events for the route.
|
|
865
877
|
"""
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
if "[" in page_path and "]" in page_path:
|
|
876
|
-
dynamic_page_paths_to_page_route[page_path] = page_route
|
|
877
|
-
else:
|
|
878
|
-
static_page_paths_to_page_route[page_path] = page_route
|
|
879
|
-
|
|
880
|
-
# Check for static routes.
|
|
881
|
-
if (page_route := static_page_paths_to_page_route.get(route)) is not None:
|
|
882
|
-
return self._load_events.get(page_route, [])
|
|
883
|
-
|
|
884
|
-
# Check for dynamic routes.
|
|
885
|
-
parts = route.split("/")
|
|
886
|
-
for page_path, page_route in dynamic_page_paths_to_page_route.items():
|
|
887
|
-
page_parts = page_path.split("/")
|
|
888
|
-
if len(page_parts) != len(parts):
|
|
889
|
-
continue
|
|
890
|
-
if all(
|
|
891
|
-
part == page_part
|
|
892
|
-
or (page_part.startswith("[") and page_part.endswith("]"))
|
|
893
|
-
for part, page_part in zip(parts, page_parts, strict=False)
|
|
894
|
-
):
|
|
895
|
-
return self._load_events.get(page_route, [])
|
|
896
|
-
|
|
897
|
-
# Default to 404 page load events if no match found.
|
|
898
|
-
return self._load_events.get("404", [])
|
|
878
|
+
four_oh_four_load_events = self._load_events.get("404", [])
|
|
879
|
+
route = self.router(path)
|
|
880
|
+
if not route:
|
|
881
|
+
# If the path is not a valid route, return the 404 page load events.
|
|
882
|
+
return four_oh_four_load_events
|
|
883
|
+
return self._load_events.get(
|
|
884
|
+
route,
|
|
885
|
+
four_oh_four_load_events,
|
|
886
|
+
)
|
|
899
887
|
|
|
900
888
|
def _check_routes_conflict(self, new_route: str):
|
|
901
889
|
"""Verify if there is any conflict between the new route and any existing route.
|
|
@@ -916,7 +904,6 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
916
904
|
segments = (
|
|
917
905
|
constants.RouteRegex.SINGLE_SEGMENT,
|
|
918
906
|
constants.RouteRegex.DOUBLE_SEGMENT,
|
|
919
|
-
constants.RouteRegex.SINGLE_CATCHALL_SEGMENT,
|
|
920
907
|
constants.RouteRegex.DOUBLE_CATCHALL_SEGMENT,
|
|
921
908
|
)
|
|
922
909
|
for route in self._pages:
|
|
@@ -1742,6 +1729,11 @@ async def process(
|
|
|
1742
1729
|
# assignment will recurse into substates and force recalculation of
|
|
1743
1730
|
# dependent ComputedVar (dynamic route variables)
|
|
1744
1731
|
state.router_data = router_data
|
|
1732
|
+
router_data[constants.RouteVar.PATH] = "/" + (
|
|
1733
|
+
app.router(path) or "404"
|
|
1734
|
+
if (path := router_data.get(constants.RouteVar.PATH))
|
|
1735
|
+
else "404"
|
|
1736
|
+
).removeprefix("/")
|
|
1745
1737
|
state.router = RouterData(router_data)
|
|
1746
1738
|
|
|
1747
1739
|
# Preprocess the event.
|
|
@@ -86,6 +86,8 @@ def _compile_app(app_root: Component) -> str:
|
|
|
86
86
|
(_normalize_library_name(name), name) for name in bundled_libraries
|
|
87
87
|
]
|
|
88
88
|
|
|
89
|
+
window_libraries_deduped = list(dict.fromkeys(window_libraries))
|
|
90
|
+
|
|
89
91
|
app_root_imports = app_root._get_all_imports()
|
|
90
92
|
_apply_common_imports(app_root_imports)
|
|
91
93
|
|
|
@@ -93,7 +95,7 @@ def _compile_app(app_root: Component) -> str:
|
|
|
93
95
|
imports=utils.compile_imports(app_root_imports),
|
|
94
96
|
custom_codes=app_root._get_all_custom_code(),
|
|
95
97
|
hooks=app_root._get_all_hooks(),
|
|
96
|
-
window_libraries=
|
|
98
|
+
window_libraries=window_libraries_deduped,
|
|
97
99
|
render=app_root.render(),
|
|
98
100
|
dynamic_imports=app_root._get_all_dynamic_imports(),
|
|
99
101
|
)
|
|
@@ -417,9 +417,11 @@ def _format_route_part(part: str) -> str:
|
|
|
417
417
|
if part.startswith("[") and part.endswith("]"):
|
|
418
418
|
if part.startswith(("[...", "[[...")):
|
|
419
419
|
return "$"
|
|
420
|
+
if part.startswith("[["):
|
|
421
|
+
return "($" + part.removeprefix("[[").removesuffix("]]") + ")"
|
|
420
422
|
# We don't add [] here since we are reusing them from the input
|
|
421
|
-
return "$" + part
|
|
422
|
-
return "[" + part + "]
|
|
423
|
+
return "$" + part
|
|
424
|
+
return "[" + part + "]"
|
|
423
425
|
|
|
424
426
|
|
|
425
427
|
def _path_to_file_stem(path: str) -> str:
|
|
@@ -4,6 +4,7 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
from reflex.components.base.bare import Bare
|
|
6
6
|
from reflex.components.el import elements
|
|
7
|
+
from reflex.vars.base import Var
|
|
7
8
|
|
|
8
9
|
|
|
9
10
|
class Title(elements.Title):
|
|
@@ -28,31 +29,19 @@ class Title(elements.Title):
|
|
|
28
29
|
class Meta(elements.Meta):
|
|
29
30
|
"""A component that displays metadata for the current page."""
|
|
30
31
|
|
|
31
|
-
# The description of character encoding.
|
|
32
|
-
char_set: str | None = None
|
|
33
|
-
|
|
34
|
-
# The value of meta.
|
|
35
|
-
content: str | None = None
|
|
36
|
-
|
|
37
|
-
# The name of metadata.
|
|
38
|
-
name: str | None = None
|
|
39
|
-
|
|
40
|
-
# The type of metadata value.
|
|
41
|
-
property: str | None = None
|
|
42
|
-
|
|
43
32
|
# The type of metadata value.
|
|
44
|
-
|
|
33
|
+
property: Var[str]
|
|
45
34
|
|
|
46
35
|
|
|
47
36
|
class Description(elements.Meta):
|
|
48
37
|
"""A component that displays the title of the current page."""
|
|
49
38
|
|
|
50
39
|
# The type of the description.
|
|
51
|
-
name: str
|
|
40
|
+
name: Var[str] = Var.create("description")
|
|
52
41
|
|
|
53
42
|
|
|
54
43
|
class Image(elements.Meta):
|
|
55
44
|
"""A component that displays the title of the current page."""
|
|
56
45
|
|
|
57
46
|
# The type of the image.
|
|
58
|
-
property: str
|
|
47
|
+
property: Var[str] = Var.create("og:image")
|
|
@@ -8,7 +8,7 @@ from collections.abc import Callable, Iterable
|
|
|
8
8
|
from typing import Any
|
|
9
9
|
|
|
10
10
|
from reflex.components.base.fragment import Fragment
|
|
11
|
-
from reflex.components.component import Component
|
|
11
|
+
from reflex.components.component import Component, field
|
|
12
12
|
from reflex.components.core.cond import cond
|
|
13
13
|
from reflex.components.tags import IterTag
|
|
14
14
|
from reflex.constants import MemoizationMode
|
|
@@ -36,7 +36,7 @@ class Foreach(Component):
|
|
|
36
36
|
iterable: Var[Iterable]
|
|
37
37
|
|
|
38
38
|
# A function from the render args to the component.
|
|
39
|
-
render_fn: Callable = Fragment.create
|
|
39
|
+
render_fn: Callable = field(default=Fragment.create, is_javascript_property=False)
|
|
40
40
|
|
|
41
41
|
@classmethod
|
|
42
42
|
def create(
|
|
@@ -4,7 +4,7 @@ import textwrap
|
|
|
4
4
|
from typing import Any
|
|
5
5
|
|
|
6
6
|
from reflex.components.base import Fragment
|
|
7
|
-
from reflex.components.component import BaseComponent, Component, MemoizationLeaf
|
|
7
|
+
from reflex.components.component import BaseComponent, Component, MemoizationLeaf, field
|
|
8
8
|
from reflex.components.tags import MatchTag, Tag
|
|
9
9
|
from reflex.style import Style
|
|
10
10
|
from reflex.utils import format
|
|
@@ -21,10 +21,10 @@ class Match(MemoizationLeaf):
|
|
|
21
21
|
cond: Var[Any]
|
|
22
22
|
|
|
23
23
|
# The list of match cases to be matched.
|
|
24
|
-
match_cases: list[Any] =
|
|
24
|
+
match_cases: list[Any] = field(default_factory=list, is_javascript_property=False)
|
|
25
25
|
|
|
26
26
|
# The catchall case to match.
|
|
27
|
-
default: Any
|
|
27
|
+
default: Any = field(default=None, is_javascript_property=False)
|
|
28
28
|
|
|
29
29
|
@classmethod
|
|
30
30
|
def create(cls, cond: Any, *cases) -> Component | Var:
|
|
@@ -12,6 +12,7 @@ from reflex.components.component import (
|
|
|
12
12
|
ComponentNamespace,
|
|
13
13
|
MemoizationLeaf,
|
|
14
14
|
StatefulComponent,
|
|
15
|
+
field,
|
|
15
16
|
)
|
|
16
17
|
from reflex.components.core.cond import cond
|
|
17
18
|
from reflex.components.el.elements.forms import Input
|
|
@@ -234,7 +235,7 @@ class Upload(MemoizationLeaf):
|
|
|
234
235
|
on_drop: EventHandler[_on_drop_spec]
|
|
235
236
|
|
|
236
237
|
# Style rules to apply when actively dragging.
|
|
237
|
-
drag_active_style: Style | None = None
|
|
238
|
+
drag_active_style: Style | None = field(default=None, is_javascript_property=False)
|
|
238
239
|
|
|
239
240
|
@classmethod
|
|
240
241
|
def create(cls, *children, **props) -> Component:
|
|
@@ -5,7 +5,7 @@ from __future__ import annotations
|
|
|
5
5
|
import dataclasses
|
|
6
6
|
from typing import ClassVar, Literal
|
|
7
7
|
|
|
8
|
-
from reflex.components.component import Component, ComponentNamespace
|
|
8
|
+
from reflex.components.component import Component, ComponentNamespace, field
|
|
9
9
|
from reflex.components.core.cond import color_mode_cond
|
|
10
10
|
from reflex.components.lucide.icon import Icon
|
|
11
11
|
from reflex.components.markdown.markdown import MarkdownComponentMap
|
|
@@ -407,16 +407,24 @@ class CodeBlock(Component, MarkdownComponentMap):
|
|
|
407
407
|
wrap_long_lines: Var[bool]
|
|
408
408
|
|
|
409
409
|
# A custom style for the code block.
|
|
410
|
-
custom_style: dict[str, str | Var | Color] =
|
|
410
|
+
custom_style: dict[str, str | Var | Color] = field(
|
|
411
|
+
default_factory=dict, is_javascript_property=False
|
|
412
|
+
)
|
|
411
413
|
|
|
412
414
|
# Props passed down to the code tag.
|
|
413
415
|
code_tag_props: Var[dict[str, str]]
|
|
414
416
|
|
|
415
417
|
# Whether a copy button should appear.
|
|
416
|
-
can_copy: bool | None =
|
|
418
|
+
can_copy: bool | None = field(
|
|
419
|
+
default=False,
|
|
420
|
+
is_javascript_property=False,
|
|
421
|
+
)
|
|
417
422
|
|
|
418
423
|
# A custom copy button to override the default one.
|
|
419
|
-
copy_button: bool | Component | None =
|
|
424
|
+
copy_button: bool | Component | None = field(
|
|
425
|
+
default=None,
|
|
426
|
+
is_javascript_property=False,
|
|
427
|
+
)
|
|
420
428
|
|
|
421
429
|
@classmethod
|
|
422
430
|
def create(
|
|
@@ -498,9 +506,6 @@ class CodeBlock(Component, MarkdownComponentMap):
|
|
|
498
506
|
|
|
499
507
|
return out
|
|
500
508
|
|
|
501
|
-
def _exclude_props(self) -> list[str]:
|
|
502
|
-
return ["can_copy", "copy_button"]
|
|
503
|
-
|
|
504
509
|
|
|
505
510
|
class CodeblockNamespace(ComponentNamespace):
|
|
506
511
|
"""Namespace for the CodeBlock component."""
|
|
@@ -8,7 +8,7 @@ from collections import defaultdict
|
|
|
8
8
|
from dataclasses import dataclass
|
|
9
9
|
from typing import Any, Literal
|
|
10
10
|
|
|
11
|
-
from reflex.components.component import Component, ComponentNamespace
|
|
11
|
+
from reflex.components.component import Component, ComponentNamespace, field
|
|
12
12
|
from reflex.components.core.colors import color
|
|
13
13
|
from reflex.components.core.cond import color_mode_cond
|
|
14
14
|
from reflex.components.el.elements.forms import Button
|
|
@@ -721,10 +721,12 @@ class ShikiHighLevelCodeBlock(ShikiCodeBlock):
|
|
|
721
721
|
show_line_numbers: Var[bool]
|
|
722
722
|
|
|
723
723
|
# Whether a copy button should appear.
|
|
724
|
-
can_copy: bool = False
|
|
724
|
+
can_copy: bool = field(default=False, is_javascript_property=False)
|
|
725
725
|
|
|
726
726
|
# copy_button: A custom copy button to override the default one.
|
|
727
|
-
copy_button: Component | bool | None =
|
|
727
|
+
copy_button: Component | bool | None = field(
|
|
728
|
+
default=None, is_javascript_property=False
|
|
729
|
+
)
|
|
728
730
|
|
|
729
731
|
@classmethod
|
|
730
732
|
def create(
|
|
@@ -9,7 +9,7 @@ from functools import lru_cache
|
|
|
9
9
|
from hashlib import md5
|
|
10
10
|
from typing import Any
|
|
11
11
|
|
|
12
|
-
from reflex.components.component import BaseComponent, Component, CustomComponent
|
|
12
|
+
from reflex.components.component import BaseComponent, Component, CustomComponent, field
|
|
13
13
|
from reflex.components.tags.tag import Tag
|
|
14
14
|
from reflex.utils.imports import ImportDict, ImportVar
|
|
15
15
|
from reflex.vars.base import LiteralVar, Var, VarData
|
|
@@ -150,10 +150,12 @@ class Markdown(Component):
|
|
|
150
150
|
is_default = True
|
|
151
151
|
|
|
152
152
|
# The component map from a tag to a lambda that creates a component.
|
|
153
|
-
component_map: dict[str, Any] =
|
|
153
|
+
component_map: dict[str, Any] = field(
|
|
154
|
+
default_factory=dict, is_javascript_property=False
|
|
155
|
+
)
|
|
154
156
|
|
|
155
157
|
# The hash of the component map, generated at create() time.
|
|
156
|
-
component_map_hash: str = ""
|
|
158
|
+
component_map_hash: str = field(default="", is_javascript_property=False)
|
|
157
159
|
|
|
158
160
|
@classmethod
|
|
159
161
|
def create(cls, *children, **props) -> Component:
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
-
from typing import Any, TypedDict, TypeVar
|
|
5
|
+
from typing import TYPE_CHECKING, Any, TypedDict, TypeVar
|
|
6
6
|
|
|
7
7
|
from reflex.components.component import Component, NoSSRComponent
|
|
8
8
|
from reflex.components.core.cond import color_mode_cond
|
|
@@ -17,8 +17,9 @@ try:
|
|
|
17
17
|
|
|
18
18
|
except ImportError:
|
|
19
19
|
console.warn("Plotly is not installed. Please run `pip install plotly`.")
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
if not TYPE_CHECKING:
|
|
21
|
+
Figure = Any
|
|
22
|
+
Template = Any
|
|
22
23
|
|
|
23
24
|
|
|
24
25
|
def _event_points_data_signature(e0: Var) -> tuple[Var[list[Point]]]:
|
|
@@ -78,13 +79,13 @@ class Plotly(NoSSRComponent):
|
|
|
78
79
|
is_default = True
|
|
79
80
|
|
|
80
81
|
# The figure to display. This can be a plotly figure or a plotly data json.
|
|
81
|
-
data: Var[Figure]
|
|
82
|
+
data: Var[Figure]
|
|
82
83
|
|
|
83
84
|
# The layout of the graph.
|
|
84
85
|
layout: Var[dict]
|
|
85
86
|
|
|
86
87
|
# The template for visual appearance of the graph.
|
|
87
|
-
template: Var[Template]
|
|
88
|
+
template: Var[Template]
|
|
88
89
|
|
|
89
90
|
# The config of the graph.
|
|
90
91
|
config: Var[dict]
|
|
@@ -213,6 +214,7 @@ const extractPoints = (points) => {
|
|
|
213
214
|
Returns:
|
|
214
215
|
The Plotly component.
|
|
215
216
|
"""
|
|
217
|
+
from plotly.graph_objs.layout import Template
|
|
216
218
|
from plotly.io import templates
|
|
217
219
|
|
|
218
220
|
responsive_template = color_mode_cond(
|
|
@@ -277,8 +279,12 @@ def dynamic_plotly_import(name: str, package: str) -> str:
|
|
|
277
279
|
Returns:
|
|
278
280
|
The dynamic import for the plotly component.
|
|
279
281
|
"""
|
|
282
|
+
library_import = f"import('{package}')"
|
|
283
|
+
mod_import = ".then((mod) => ({ default: createPlotlyComponent(mod) }))"
|
|
280
284
|
return f"""
|
|
281
|
-
const {name} =
|
|
285
|
+
const {name} = ClientSide(lazy(() =>
|
|
286
|
+
{library_import}{mod_import}
|
|
287
|
+
))
|
|
282
288
|
"""
|
|
283
289
|
|
|
284
290
|
|
|
@@ -19,7 +19,7 @@ from __future__ import annotations
|
|
|
19
19
|
|
|
20
20
|
from typing import Any, Literal, get_args
|
|
21
21
|
|
|
22
|
-
from reflex.components.component import BaseComponent
|
|
22
|
+
from reflex.components.component import BaseComponent, field
|
|
23
23
|
from reflex.components.core.cond import Cond, color_mode_cond, cond
|
|
24
24
|
from reflex.components.lucide.icon import Icon
|
|
25
25
|
from reflex.components.radix.themes.components.dropdown_menu import dropdown_menu
|
|
@@ -99,10 +99,12 @@ class ColorModeIconButton(IconButton):
|
|
|
99
99
|
"""Icon Button for toggling light / dark mode via toggle_color_mode."""
|
|
100
100
|
|
|
101
101
|
# The position of the icon button. Follow document flow if None.
|
|
102
|
-
position: LiteralPosition | Var[LiteralPosition] | None =
|
|
102
|
+
position: LiteralPosition | Var[LiteralPosition] | None = field(
|
|
103
|
+
default=None, is_javascript_property=False
|
|
104
|
+
)
|
|
103
105
|
|
|
104
106
|
# Allow picking the "system" value for the color mode.
|
|
105
|
-
allow_system: bool = False
|
|
107
|
+
allow_system: bool = field(default=False, is_javascript_property=False)
|
|
106
108
|
|
|
107
109
|
@classmethod
|
|
108
110
|
def create(
|
|
@@ -168,9 +170,6 @@ class ColorModeIconButton(IconButton):
|
|
|
168
170
|
**props,
|
|
169
171
|
)
|
|
170
172
|
|
|
171
|
-
def _exclude_props(self) -> list[str]:
|
|
172
|
-
return ["position", "allow_system"]
|
|
173
|
-
|
|
174
173
|
|
|
175
174
|
class ColorModeSwitch(Switch):
|
|
176
175
|
"""Switch for toggling light / dark mode via toggle_color_mode."""
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
from collections.abc import Sequence
|
|
6
|
-
from typing import Any, ClassVar
|
|
6
|
+
from typing import Any, ClassVar, TypedDict
|
|
7
7
|
|
|
8
8
|
from reflex.constants import EventTriggers
|
|
9
9
|
from reflex.constants.colors import Color
|
|
@@ -663,6 +663,13 @@ class Reference(Recharts):
|
|
|
663
663
|
is_front: Var[bool]
|
|
664
664
|
|
|
665
665
|
|
|
666
|
+
class Segment(TypedDict):
|
|
667
|
+
"""A segment in a ReferenceLine or ReferenceArea."""
|
|
668
|
+
|
|
669
|
+
x: str | int
|
|
670
|
+
y: str | int
|
|
671
|
+
|
|
672
|
+
|
|
666
673
|
class ReferenceLine(Reference):
|
|
667
674
|
"""A ReferenceLine component in Recharts."""
|
|
668
675
|
|
|
@@ -686,7 +693,7 @@ class ReferenceLine(Reference):
|
|
|
686
693
|
_valid_children: ClassVar[list[str]] = ["Label"]
|
|
687
694
|
|
|
688
695
|
# Array of endpoints in { x, y } format. These endpoints would be used to draw the ReferenceLine.
|
|
689
|
-
segment: Sequence[
|
|
696
|
+
segment: Var[Sequence[Segment]]
|
|
690
697
|
|
|
691
698
|
|
|
692
699
|
class ReferenceDot(Reference):
|
|
@@ -41,23 +41,30 @@ class RouteRegex(SimpleNamespace):
|
|
|
41
41
|
_CLOSING_BRACKET = r"\]"
|
|
42
42
|
_ARG_NAME = r"[a-zA-Z_]\w*"
|
|
43
43
|
|
|
44
|
+
# The regex for a valid arg name, e.g. "slug" in "[slug]"
|
|
45
|
+
_ARG_NAME_PATTERN = re.compile(_ARG_NAME)
|
|
46
|
+
|
|
47
|
+
SLUG = re.compile(r"[a-zA-Z0-9_-]+")
|
|
44
48
|
# match a single arg (i.e. "[slug]"), returns the name of the arg
|
|
45
49
|
ARG = re.compile(rf"{_OPENING_BRACKET}({_ARG_NAME}){_CLOSING_BRACKET}")
|
|
46
|
-
# match a single
|
|
47
|
-
|
|
48
|
-
rf"
|
|
50
|
+
# match a single optional arg (i.e. "[[slug]]"), returns the name of the arg
|
|
51
|
+
OPTIONAL_ARG = re.compile(
|
|
52
|
+
rf"{_OPENING_BRACKET * 2}({_ARG_NAME}){_CLOSING_BRACKET * 2}"
|
|
49
53
|
)
|
|
54
|
+
|
|
50
55
|
# match a single non-optional catch-all arg (i.e. "[...slug]"), returns the name of the arg
|
|
51
56
|
STRICT_CATCHALL = re.compile(
|
|
52
57
|
rf"{_OPENING_BRACKET}{_DOT_DOT_DOT}({_ARG_NAME}){_CLOSING_BRACKET}"
|
|
53
58
|
)
|
|
54
|
-
|
|
55
|
-
|
|
59
|
+
|
|
60
|
+
# match a single optional catch-all arg (i.e. "[[...slug]]"), returns the name of the arg
|
|
61
|
+
OPTIONAL_CATCHALL = re.compile(
|
|
56
62
|
rf"{_OPENING_BRACKET * 2}{_DOT_DOT_DOT}({_ARG_NAME}){_CLOSING_BRACKET * 2}"
|
|
57
63
|
)
|
|
64
|
+
|
|
65
|
+
SPLAT_CATCHALL = "[[...splat]]"
|
|
58
66
|
SINGLE_SEGMENT = "__SINGLE_SEGMENT__"
|
|
59
67
|
DOUBLE_SEGMENT = "__DOUBLE_SEGMENT__"
|
|
60
|
-
SINGLE_CATCHALL_SEGMENT = "__SINGLE_CATCHALL_SEGMENT__"
|
|
61
68
|
DOUBLE_CATCHALL_SEGMENT = "__DOUBLE_CATCHALL_SEGMENT__"
|
|
62
69
|
|
|
63
70
|
|