reflex 0.8.3a2__tar.gz → 0.8.4__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.3a2 → reflex-0.8.4}/PKG-INFO +2 -2
- {reflex-0.8.3a2 → reflex-0.8.4}/pyproject.toml +41 -43
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/.templates/web/utils/react-theme.js +8 -1
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/.templates/web/utils/state.js +2 -2
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/app.py +6 -20
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/compiler/utils.py +6 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/separator.py +4 -4
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/separator.pyi +3 -3
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/constants/installer.py +4 -4
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/custom_components/custom_components.py +1 -1
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/environment.py +0 -3
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/event.py +2 -2
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/istate/data.py +7 -1
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/plugins/base.py +2 -2
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/route.py +4 -4
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/testing.py +288 -180
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/utils/console.py +5 -21
- reflex-0.8.4/reflex/utils/decorator.py +147 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/utils/exec.py +4 -5
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/utils/format.py +1 -1
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/utils/misc.py +40 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/utils/net.py +8 -3
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/utils/prerequisites.py +9 -67
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/utils/processes.py +46 -7
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/utils/redir.py +3 -5
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/utils/registry.py +14 -2
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/utils/telemetry.py +2 -2
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/vars/dep_tracking.py +27 -30
- reflex-0.8.3a2/reflex/utils/decorator.py +0 -72
- {reflex-0.8.3a2 → reflex-0.8.4}/.gitignore +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/LICENSE +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/README.md +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/.templates/apps/blank/assets/favicon.ico +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/.templates/apps/blank/code/__init__.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/.templates/apps/blank/code/blank.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/.templates/jinja/app/rxconfig.py.jinja2 +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/.templates/jinja/custom_components/README.md.jinja2 +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/.templates/jinja/custom_components/__init__.py.jinja2 +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/.templates/jinja/custom_components/demo_app.py.jinja2 +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/.templates/jinja/custom_components/pyproject.toml.jinja2 +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/.templates/jinja/custom_components/src.py.jinja2 +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/.templates/jinja/web/package.json.jinja2 +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/.templates/jinja/web/pages/_app.js.jinja2 +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/.templates/jinja/web/pages/_document.js.jinja2 +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/.templates/jinja/web/pages/base_page.js.jinja2 +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/.templates/jinja/web/pages/component.js.jinja2 +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/.templates/jinja/web/pages/custom_component.js.jinja2 +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/.templates/jinja/web/pages/index.js.jinja2 +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/.templates/jinja/web/pages/macros.js.jinja2 +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/.templates/jinja/web/pages/stateful_component.js.jinja2 +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/.templates/jinja/web/pages/stateful_components.js.jinja2 +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/.templates/jinja/web/pages/utils.js.jinja2 +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/.templates/jinja/web/styles/styles.css.jinja2 +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/.templates/jinja/web/utils/context.js.jinja2 +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/.templates/jinja/web/utils/theme.js.jinja2 +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/.templates/web/.gitignore +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/.templates/web/app/entry.client.js +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/.templates/web/app/routes.js +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/.templates/web/components/reflex/radix_themes_color_mode_provider.js +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/.templates/web/components/shiki/code.js +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/.templates/web/jsconfig.json +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/.templates/web/postcss.config.js +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/.templates/web/react-router.config.js +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/.templates/web/styles/__reflex_style_reset.css +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/.templates/web/utils/client_side_routing.js +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/.templates/web/utils/helpers/dataeditor.js +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/.templates/web/utils/helpers/debounce.js +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/.templates/web/utils/helpers/paste.js +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/.templates/web/utils/helpers/range.js +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/.templates/web/utils/helpers/throttle.js +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/.templates/web/vite-plugin-safari-cachebust.js +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/.templates/web/vite.config.js +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/__init__.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/__init__.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/__main__.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/admin.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/app_mixins/__init__.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/app_mixins/lifespan.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/app_mixins/middleware.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/app_mixins/mixin.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/assets.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/base.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/compiler/__init__.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/compiler/compiler.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/compiler/templates.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/__init__.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/__init__.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/base/__init__.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/base/__init__.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/base/app_wrap.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/base/app_wrap.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/base/bare.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/base/body.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/base/body.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/base/document.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/base/document.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/base/error_boundary.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/base/error_boundary.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/base/fragment.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/base/fragment.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/base/link.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/base/link.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/base/meta.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/base/meta.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/base/script.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/base/script.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/base/strict_mode.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/base/strict_mode.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/component.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/core/__init__.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/core/__init__.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/core/auto_scroll.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/core/auto_scroll.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/core/banner.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/core/banner.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/core/breakpoints.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/core/client_side_routing.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/core/client_side_routing.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/core/clipboard.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/core/clipboard.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/core/colors.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/core/cond.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/core/debounce.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/core/debounce.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/core/foreach.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/core/helmet.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/core/helmet.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/core/html.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/core/html.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/core/layout/__init__.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/core/match.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/core/responsive.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/core/sticky.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/core/sticky.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/core/upload.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/core/upload.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/core/window_events.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/core/window_events.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/datadisplay/__init__.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/datadisplay/__init__.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/datadisplay/code.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/datadisplay/code.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/datadisplay/dataeditor.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/datadisplay/dataeditor.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/datadisplay/logo.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/datadisplay/shiki_code_block.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/datadisplay/shiki_code_block.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/dynamic.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/el/__init__.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/el/__init__.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/el/constants/__init__.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/el/constants/html.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/el/constants/react.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/el/constants/reflex.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/el/element.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/el/element.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/el/elements/__init__.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/el/elements/__init__.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/el/elements/base.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/el/elements/base.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/el/elements/forms.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/el/elements/forms.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/el/elements/inline.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/el/elements/inline.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/el/elements/media.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/el/elements/media.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/el/elements/metadata.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/el/elements/metadata.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/el/elements/other.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/el/elements/other.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/el/elements/scripts.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/el/elements/scripts.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/el/elements/sectioning.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/el/elements/sectioning.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/el/elements/tables.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/el/elements/tables.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/el/elements/typography.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/el/elements/typography.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/field.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/gridjs/__init__.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/gridjs/datatable.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/gridjs/datatable.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/literals.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/lucide/__init__.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/lucide/icon.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/lucide/icon.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/markdown/__init__.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/markdown/markdown.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/markdown/markdown.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/moment/__init__.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/moment/moment.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/moment/moment.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/plotly/__init__.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/plotly/plotly.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/plotly/plotly.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/props.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/__init__.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/__init__.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/primitives/__init__.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/primitives/__init__.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/primitives/accordion.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/primitives/accordion.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/primitives/base.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/primitives/base.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/primitives/drawer.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/primitives/drawer.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/primitives/form.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/primitives/form.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/primitives/progress.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/primitives/progress.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/primitives/slider.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/primitives/slider.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/__init__.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/__init__.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/base.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/base.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/color_mode.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/color_mode.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/__init__.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/__init__.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/alert_dialog.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/alert_dialog.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/aspect_ratio.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/aspect_ratio.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/avatar.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/avatar.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/badge.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/badge.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/button.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/button.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/callout.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/callout.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/card.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/card.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/checkbox.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/checkbox.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/checkbox_cards.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/checkbox_cards.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/checkbox_group.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/checkbox_group.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/context_menu.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/context_menu.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/data_list.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/data_list.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/dialog.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/dialog.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/dropdown_menu.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/dropdown_menu.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/hover_card.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/hover_card.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/icon_button.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/icon_button.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/inset.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/inset.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/popover.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/popover.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/progress.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/progress.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/radio.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/radio.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/radio_cards.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/radio_cards.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/radio_group.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/radio_group.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/scroll_area.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/scroll_area.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/segmented_control.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/segmented_control.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/select.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/select.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/skeleton.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/skeleton.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/slider.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/slider.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/spinner.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/spinner.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/switch.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/switch.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/table.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/table.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/tabs.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/tabs.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/text_area.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/text_area.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/text_field.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/text_field.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/tooltip.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/components/tooltip.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/layout/__init__.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/layout/__init__.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/layout/base.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/layout/base.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/layout/box.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/layout/box.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/layout/center.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/layout/center.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/layout/container.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/layout/container.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/layout/flex.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/layout/flex.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/layout/grid.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/layout/grid.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/layout/list.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/layout/list.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/layout/section.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/layout/section.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/layout/spacer.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/layout/spacer.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/layout/stack.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/layout/stack.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/typography/__init__.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/typography/__init__.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/typography/base.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/typography/blockquote.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/typography/blockquote.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/typography/code.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/typography/code.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/typography/heading.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/typography/heading.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/typography/link.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/typography/link.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/typography/text.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/radix/themes/typography/text.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/react_player/__init__.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/react_player/audio.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/react_player/audio.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/react_player/react_player.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/react_player/react_player.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/react_player/video.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/react_player/video.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/react_router/__init__.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/react_router/dom.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/react_router/dom.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/recharts/__init__.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/recharts/__init__.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/recharts/cartesian.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/recharts/cartesian.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/recharts/charts.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/recharts/charts.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/recharts/general.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/recharts/general.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/recharts/polar.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/recharts/polar.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/recharts/recharts.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/recharts/recharts.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/sonner/__init__.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/sonner/toast.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/sonner/toast.pyi +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/tags/__init__.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/tags/cond_tag.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/tags/iter_tag.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/tags/match_tag.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/tags/tag.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/components/tags/tagless.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/config.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/constants/__init__.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/constants/base.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/constants/colors.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/constants/compiler.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/constants/config.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/constants/custom_components.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/constants/event.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/constants/route.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/constants/state.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/constants/utils.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/custom_components/__init__.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/experimental/__init__.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/experimental/client_state.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/experimental/hooks.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/istate/__init__.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/istate/dynamic.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/istate/manager.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/istate/proxy.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/istate/storage.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/istate/wrappers.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/middleware/__init__.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/middleware/hydrate_middleware.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/middleware/middleware.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/model.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/page.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/plugins/__init__.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/plugins/shared_tailwind.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/plugins/sitemap.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/plugins/tailwind_v3.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/plugins/tailwind_v4.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/py.typed +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/reflex.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/state.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/style.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/utils/__init__.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/utils/build.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/utils/codespaces.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/utils/compat.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/utils/exceptions.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/utils/export.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/utils/imports.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/utils/lazy_loader.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/utils/path_ops.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/utils/pyi_generator.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/utils/serializers.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/utils/types.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/vars/__init__.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/vars/base.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/vars/datetime.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/vars/function.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/vars/number.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/vars/object.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/reflex/vars/sequence.py +0 -0
- {reflex-0.8.3a2 → reflex-0.8.4}/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.4
|
|
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
|
|
@@ -20,7 +20,6 @@ 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
22
|
Requires-Dist: click>=8.2
|
|
23
|
-
Requires-Dist: fastapi>=0.115.0
|
|
24
23
|
Requires-Dist: granian[reload]>=2.4.0
|
|
25
24
|
Requires-Dist: httpx<1.0,>=0.28.0
|
|
26
25
|
Requires-Dist: jinja2<4.0,>=3.1.2
|
|
@@ -34,6 +33,7 @@ Requires-Dist: redis<7.0,>=5.2.1
|
|
|
34
33
|
Requires-Dist: reflex-hosting-cli>=0.1.51
|
|
35
34
|
Requires-Dist: rich<15,>=13
|
|
36
35
|
Requires-Dist: sqlmodel<0.1,>=0.0.24
|
|
36
|
+
Requires-Dist: starlette>=0.47.0
|
|
37
37
|
Requires-Dist: typing-extensions>=4.13.0
|
|
38
38
|
Requires-Dist: wrapt<2.0,>=1.17.0
|
|
39
39
|
Description-Content-Type: text/markdown
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "reflex"
|
|
3
|
-
version = "0.8.
|
|
3
|
+
version = "0.8.4"
|
|
4
4
|
description = "Web apps in pure Python."
|
|
5
5
|
license.text = "Apache-2.0"
|
|
6
6
|
authors = [
|
|
@@ -21,7 +21,7 @@ keywords = ["web", "framework"]
|
|
|
21
21
|
requires-python = ">=3.10,<4.0"
|
|
22
22
|
dependencies = [
|
|
23
23
|
"alembic >=1.15.2,<2.0",
|
|
24
|
-
"
|
|
24
|
+
"click >=8.2",
|
|
25
25
|
"granian[reload] >=2.4.0",
|
|
26
26
|
"httpx >=0.28.0,<1.0",
|
|
27
27
|
"jinja2 >=3.1.2,<4.0",
|
|
@@ -29,13 +29,13 @@ dependencies = [
|
|
|
29
29
|
"platformdirs >=4.3.7,<5.0",
|
|
30
30
|
"psutil >=7.0.0,<8.0; sys_platform == 'win32'",
|
|
31
31
|
"pydantic >=1.10.21,<3.0",
|
|
32
|
-
"python-socketio >=5.12.0,<6.0",
|
|
33
32
|
"python-multipart >=0.0.20,<1.0",
|
|
33
|
+
"python-socketio >=5.12.0,<6.0",
|
|
34
34
|
"redis >=5.2.1,<7.0",
|
|
35
35
|
"reflex-hosting-cli >=0.1.51",
|
|
36
36
|
"rich >=13,<15",
|
|
37
37
|
"sqlmodel >=0.0.24,<0.1",
|
|
38
|
-
"
|
|
38
|
+
"starlette >=0.47.0",
|
|
39
39
|
"typing_extensions >=4.13.0",
|
|
40
40
|
"wrapt >=1.17.0,<2.0",
|
|
41
41
|
]
|
|
@@ -58,18 +58,49 @@ documentation = "https://reflex.dev/docs/getting-started/introduction"
|
|
|
58
58
|
[project.scripts]
|
|
59
59
|
reflex = "reflex.reflex:cli"
|
|
60
60
|
|
|
61
|
+
[dependency-groups]
|
|
62
|
+
dev = [
|
|
63
|
+
"asynctest",
|
|
64
|
+
"darglint",
|
|
65
|
+
"dill",
|
|
66
|
+
"fastapi",
|
|
67
|
+
"hatchling",
|
|
68
|
+
"libsass",
|
|
69
|
+
"numpy",
|
|
70
|
+
"pandas",
|
|
71
|
+
"pillow",
|
|
72
|
+
"playwright",
|
|
73
|
+
"plotly",
|
|
74
|
+
"pre-commit",
|
|
75
|
+
"psutil",
|
|
76
|
+
"psycopg[binary]",
|
|
77
|
+
"pyright",
|
|
78
|
+
"pytest-asyncio",
|
|
79
|
+
"pytest-benchmark",
|
|
80
|
+
"pytest-codspeed",
|
|
81
|
+
"pytest-cov",
|
|
82
|
+
"pytest-mock",
|
|
83
|
+
"pytest-playwright",
|
|
84
|
+
"pytest-retry",
|
|
85
|
+
"pytest-split",
|
|
86
|
+
"pytest",
|
|
87
|
+
"python-dotenv",
|
|
88
|
+
"ruff",
|
|
89
|
+
"selenium",
|
|
90
|
+
"starlette-admin",
|
|
91
|
+
"toml",
|
|
92
|
+
"uvicorn",
|
|
93
|
+
]
|
|
94
|
+
|
|
95
|
+
|
|
61
96
|
[build-system]
|
|
62
97
|
requires = ["hatchling"]
|
|
63
98
|
build-backend = "hatchling.build"
|
|
64
99
|
|
|
65
100
|
[tool.hatch.build]
|
|
66
101
|
include = ["reflex", "scripts/hatch_build.py"]
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
artifacts = ["*.pyi"]
|
|
70
|
-
|
|
71
|
-
[tool.hatch.build.targets.wheel]
|
|
72
|
-
artifacts = ["*.pyi"]
|
|
102
|
+
targets.sdist.artifacts = ["*.pyi"]
|
|
103
|
+
targets.wheel.artifacts = ["*.pyi"]
|
|
73
104
|
|
|
74
105
|
[tool.hatch.build.hooks.custom]
|
|
75
106
|
path = "scripts/hatch_build.py"
|
|
@@ -152,39 +183,6 @@ asyncio_mode = "auto"
|
|
|
152
183
|
skip = "docs/*,*.html,examples/*, *.pyi, poetry.lock, uv.lock"
|
|
153
184
|
ignore-words-list = "te, TreeE"
|
|
154
185
|
|
|
155
|
-
[dependency-groups]
|
|
156
|
-
dev = [
|
|
157
|
-
"asynctest >=0.13",
|
|
158
|
-
"darglint >=1.8",
|
|
159
|
-
"dill >=0.3",
|
|
160
|
-
"hatchling >=1.27",
|
|
161
|
-
"libsass >=0.23",
|
|
162
|
-
"numpy >=2.2",
|
|
163
|
-
"pandas >=2.2",
|
|
164
|
-
"pillow >=11",
|
|
165
|
-
"playwright >=1.51",
|
|
166
|
-
"plotly >=6.0",
|
|
167
|
-
"pre-commit ==4.2.0",
|
|
168
|
-
"psutil >=7.0.0",
|
|
169
|
-
"psycopg[binary] >=3.2",
|
|
170
|
-
"pyright >=1.1.400",
|
|
171
|
-
"pytest >=8.3",
|
|
172
|
-
"pytest-asyncio >=0.26",
|
|
173
|
-
"pytest-benchmark >=5.1",
|
|
174
|
-
"pytest-codspeed >=3.2",
|
|
175
|
-
"pytest-cov >=6.1",
|
|
176
|
-
"pytest-mock >=3.14",
|
|
177
|
-
"pytest-playwright >=0.7",
|
|
178
|
-
"pytest-retry >=1.7",
|
|
179
|
-
"pytest-split >=0.10",
|
|
180
|
-
"python-dotenv >=1",
|
|
181
|
-
"ruff >=0.11",
|
|
182
|
-
"selenium >=4.31",
|
|
183
|
-
"starlette-admin >=0.14",
|
|
184
|
-
"toml >=0.10.2",
|
|
185
|
-
"uvicorn >=0.34.0",
|
|
186
|
-
]
|
|
187
|
-
|
|
188
186
|
|
|
189
187
|
[tool.coverage.run]
|
|
190
188
|
source = ["reflex"]
|
|
@@ -21,6 +21,7 @@ export function ThemeProvider({ children, defaultTheme = "system" }) {
|
|
|
21
21
|
const [systemTheme, setSystemTheme] = useState(
|
|
22
22
|
defaultTheme !== "system" ? defaultTheme : "light",
|
|
23
23
|
);
|
|
24
|
+
const [isInitialized, setIsInitialized] = useState(false);
|
|
24
25
|
|
|
25
26
|
const firstRender = useRef(true);
|
|
26
27
|
|
|
@@ -36,6 +37,7 @@ export function ThemeProvider({ children, defaultTheme = "system" }) {
|
|
|
36
37
|
if (lastCompiledTheme !== defaultColorMode) {
|
|
37
38
|
// on app startup, make sure the application color mode is persisted correctly.
|
|
38
39
|
localStorage.setItem("last_compiled_theme", defaultColorMode);
|
|
40
|
+
setIsInitialized(true);
|
|
39
41
|
return;
|
|
40
42
|
}
|
|
41
43
|
}
|
|
@@ -43,6 +45,7 @@ export function ThemeProvider({ children, defaultTheme = "system" }) {
|
|
|
43
45
|
// Load saved theme from localStorage
|
|
44
46
|
const savedTheme = localStorage.getItem("theme") || defaultTheme;
|
|
45
47
|
setTheme(savedTheme);
|
|
48
|
+
setIsInitialized(true);
|
|
46
49
|
});
|
|
47
50
|
|
|
48
51
|
const resolvedTheme = useMemo(
|
|
@@ -69,16 +72,20 @@ export function ThemeProvider({ children, defaultTheme = "system" }) {
|
|
|
69
72
|
});
|
|
70
73
|
|
|
71
74
|
// Save theme to localStorage whenever it changes
|
|
75
|
+
// Skip saving only if theme key already exists and we haven't initialized yet
|
|
72
76
|
useEffect(() => {
|
|
77
|
+
const existingTheme = localStorage.getItem("theme");
|
|
78
|
+
if (!isInitialized && existingTheme !== null) return;
|
|
73
79
|
localStorage.setItem("theme", theme);
|
|
74
80
|
}, [theme]);
|
|
75
81
|
|
|
76
82
|
useEffect(() => {
|
|
83
|
+
if (!isInitialized) return;
|
|
77
84
|
const root = window.document.documentElement;
|
|
78
85
|
root.classList.remove("light", "dark");
|
|
79
86
|
root.classList.add(resolvedTheme);
|
|
80
87
|
root.style.colorScheme = resolvedTheme;
|
|
81
|
-
}, [resolvedTheme]);
|
|
88
|
+
}, [resolvedTheme, isInitialized]);
|
|
82
89
|
|
|
83
90
|
return createElement(
|
|
84
91
|
ThemeContext.Provider,
|
|
@@ -791,9 +791,9 @@ export const hydrateClientStorage = (client_storage) => {
|
|
|
791
791
|
for (const state_key in client_storage.cookies) {
|
|
792
792
|
const cookie_options = client_storage.cookies[state_key];
|
|
793
793
|
const cookie_name = cookie_options.name || state_key;
|
|
794
|
-
const cookie_value = cookies.get(cookie_name);
|
|
794
|
+
const cookie_value = cookies.get(cookie_name, { doNotParse: true });
|
|
795
795
|
if (cookie_value !== undefined) {
|
|
796
|
-
client_storage_values[state_key] =
|
|
796
|
+
client_storage_values[state_key] = cookie_value;
|
|
797
797
|
}
|
|
798
798
|
}
|
|
799
799
|
}
|
|
@@ -28,7 +28,6 @@ from timeit import default_timer as timer
|
|
|
28
28
|
from types import SimpleNamespace
|
|
29
29
|
from typing import TYPE_CHECKING, Any, BinaryIO, ParamSpec, get_args, get_type_hints
|
|
30
30
|
|
|
31
|
-
from fastapi import FastAPI
|
|
32
31
|
from rich.progress import MofNCompleteColumn, Progress, TimeElapsedColumn
|
|
33
32
|
from socketio import ASGIApp as EngineIOApp
|
|
34
33
|
from socketio import AsyncNamespace, AsyncServer
|
|
@@ -441,9 +440,6 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
441
440
|
| None
|
|
442
441
|
) = None
|
|
443
442
|
|
|
444
|
-
# FastAPI app for compatibility with FastAPI.
|
|
445
|
-
_cached_fastapi_app: FastAPI | None = None
|
|
446
|
-
|
|
447
443
|
@property
|
|
448
444
|
def event_namespace(self) -> EventNamespace | None:
|
|
449
445
|
"""Get the event namespace.
|
|
@@ -598,32 +594,22 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
598
594
|
Returns:
|
|
599
595
|
The backend api.
|
|
600
596
|
"""
|
|
597
|
+
from reflex.vars.base import GLOBAL_CACHE
|
|
598
|
+
|
|
601
599
|
# For py3.9 compatibility when redis is used, we MUST add any decorator pages
|
|
602
600
|
# before compiling the app in a thread to avoid event loop error (REF-2172).
|
|
603
601
|
self._apply_decorated_pages()
|
|
604
602
|
|
|
605
|
-
|
|
606
|
-
self._compile, prerender_routes=is_prod_mode()
|
|
607
|
-
)
|
|
603
|
+
self._compile(prerender_routes=is_prod_mode())
|
|
608
604
|
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
return f.result()
|
|
612
|
-
|
|
613
|
-
compile_future.add_done_callback(callback)
|
|
614
|
-
# Wait for the compile to finish to ensure all optional endpoints are mounted.
|
|
615
|
-
compile_future.result()
|
|
605
|
+
# We will not be making more vars, so we can clear the global cache to free up memory.
|
|
606
|
+
GLOBAL_CACHE.clear()
|
|
616
607
|
|
|
617
608
|
if not self._api:
|
|
618
609
|
msg = "The app has not been initialized."
|
|
619
610
|
raise ValueError(msg)
|
|
620
611
|
|
|
621
|
-
|
|
622
|
-
asgi_app = self._cached_fastapi_app
|
|
623
|
-
asgi_app.mount("", self._api)
|
|
624
|
-
App._add_cors(asgi_app)
|
|
625
|
-
else:
|
|
626
|
-
asgi_app = self._api
|
|
612
|
+
asgi_app = self._api
|
|
627
613
|
|
|
628
614
|
if self.api_transformer is not None:
|
|
629
615
|
api_transformers: Sequence[Starlette | Callable[[ASGIApp], ASGIApp]] = (
|
|
@@ -359,6 +359,8 @@ def create_document_root(
|
|
|
359
359
|
Returns:
|
|
360
360
|
The document root.
|
|
361
361
|
"""
|
|
362
|
+
from reflex.utils.misc import preload_color_theme
|
|
363
|
+
|
|
362
364
|
existing_meta_types = set()
|
|
363
365
|
|
|
364
366
|
for component in head_components or []:
|
|
@@ -385,7 +387,11 @@ def create_document_root(
|
|
|
385
387
|
Meta.create(name="viewport", content="width=device-width, initial-scale=1")
|
|
386
388
|
)
|
|
387
389
|
|
|
390
|
+
# Add theme preload script as the very first component to prevent FOUC
|
|
391
|
+
theme_preload_components = [preload_color_theme()]
|
|
392
|
+
|
|
388
393
|
head_components = [
|
|
394
|
+
*theme_preload_components,
|
|
389
395
|
*(head_components or []),
|
|
390
396
|
*maybe_head_components,
|
|
391
397
|
*always_head_components,
|
|
@@ -6,7 +6,7 @@ from reflex.components.core.breakpoints import Responsive
|
|
|
6
6
|
from reflex.components.radix.themes.base import LiteralAccentColor, RadixThemesComponent
|
|
7
7
|
from reflex.vars.base import LiteralVar, Var
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
LiteralSeparatorSize = Literal["1", "2", "3", "4"]
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
class Separator(RadixThemesComponent):
|
|
@@ -14,10 +14,10 @@ class Separator(RadixThemesComponent):
|
|
|
14
14
|
|
|
15
15
|
tag = "Separator"
|
|
16
16
|
|
|
17
|
-
# The size of the
|
|
18
|
-
size: Var[Responsive[
|
|
17
|
+
# The size of the separator: "1" | "2" | "3" | "4"
|
|
18
|
+
size: Var[Responsive[LiteralSeparatorSize]] = LiteralVar.create("4")
|
|
19
19
|
|
|
20
|
-
# The color of the
|
|
20
|
+
# The color of the separator
|
|
21
21
|
color_scheme: Var[LiteralAccentColor]
|
|
22
22
|
|
|
23
23
|
# The orientation of the separator.
|
|
@@ -11,7 +11,7 @@ from reflex.components.radix.themes.base import RadixThemesComponent
|
|
|
11
11
|
from reflex.event import EventType, PointerEventInfo
|
|
12
12
|
from reflex.vars.base import Var
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
LiteralSeparatorSize = Literal["1", "2", "3", "4"]
|
|
15
15
|
|
|
16
16
|
class Separator(RadixThemesComponent):
|
|
17
17
|
@classmethod
|
|
@@ -127,8 +127,8 @@ class Separator(RadixThemesComponent):
|
|
|
127
127
|
|
|
128
128
|
Args:
|
|
129
129
|
*children: Child components.
|
|
130
|
-
size: The size of the
|
|
131
|
-
color_scheme: The color of the
|
|
130
|
+
size: The size of the separator: "1" | "2" | "3" | "4"
|
|
131
|
+
color_scheme: The color of the separator
|
|
132
132
|
orientation: The orientation of the separator.
|
|
133
133
|
decorative: When true, signifies that it is purely visual, carries no semantic meaning, and ensures it is not present in the accessibility tree.
|
|
134
134
|
style: The style of the component.
|
|
@@ -14,7 +14,7 @@ class Bun(SimpleNamespace):
|
|
|
14
14
|
"""Bun constants."""
|
|
15
15
|
|
|
16
16
|
# The Bun version.
|
|
17
|
-
VERSION = "1.2.
|
|
17
|
+
VERSION = "1.2.19"
|
|
18
18
|
|
|
19
19
|
# Min Bun Version
|
|
20
20
|
MIN_VERSION = "1.2.17"
|
|
@@ -75,7 +75,7 @@ fetch-retries=0
|
|
|
75
75
|
|
|
76
76
|
|
|
77
77
|
def _determine_react_router_version() -> str:
|
|
78
|
-
default_version = "7.
|
|
78
|
+
default_version = "7.7.0"
|
|
79
79
|
if (version := os.getenv("REACT_ROUTER_VERSION")) and version != default_version:
|
|
80
80
|
from reflex.utils import console
|
|
81
81
|
|
|
@@ -143,11 +143,11 @@ class PackageJson(SimpleNamespace):
|
|
|
143
143
|
"postcss-import": "16.1.1",
|
|
144
144
|
"@react-router/dev": _react_router_version,
|
|
145
145
|
"@react-router/fs-routes": _react_router_version,
|
|
146
|
-
"rolldown-vite": "7.0.
|
|
146
|
+
"rolldown-vite": "7.0.11",
|
|
147
147
|
}
|
|
148
148
|
OVERRIDES = {
|
|
149
149
|
# This should always match the `react` version in DEPENDENCIES for recharts compatibility.
|
|
150
150
|
"react-is": _react_version,
|
|
151
151
|
"cookie": "1.0.2",
|
|
152
|
-
"rollup": "4.
|
|
152
|
+
"rollup": "4.45.1",
|
|
153
153
|
}
|
|
@@ -12,7 +12,6 @@ from pathlib import Path
|
|
|
12
12
|
from typing import Any
|
|
13
13
|
|
|
14
14
|
import click
|
|
15
|
-
import httpx
|
|
16
15
|
|
|
17
16
|
from reflex import constants
|
|
18
17
|
from reflex.constants import CustomComponents
|
|
@@ -467,6 +466,7 @@ def _collect_details_for_gallery():
|
|
|
467
466
|
Raises:
|
|
468
467
|
Exit: If pyproject.toml file is ill-formed or the request to the backend services fails.
|
|
469
468
|
"""
|
|
469
|
+
import httpx
|
|
470
470
|
from reflex_cli.utils import hosting
|
|
471
471
|
|
|
472
472
|
console.rule("[bold]Authentication with Reflex Services")
|
|
@@ -650,9 +650,6 @@ class EnvironmentVariables:
|
|
|
650
650
|
# Enable full logging of debug messages to reflex user directory.
|
|
651
651
|
REFLEX_ENABLE_FULL_LOGGING: EnvVar[bool] = env_var(False)
|
|
652
652
|
|
|
653
|
-
# The path to the reflex errors log file. If not set, no separate error log will be used.
|
|
654
|
-
REFLEX_ERROR_LOG_FILE: EnvVar[Path | None] = env_var(None)
|
|
655
|
-
|
|
656
653
|
|
|
657
654
|
environment = EnvironmentVariables()
|
|
658
655
|
|
|
@@ -577,7 +577,7 @@ class JavascriptInputEvent:
|
|
|
577
577
|
init=True,
|
|
578
578
|
frozen=True,
|
|
579
579
|
)
|
|
580
|
-
class
|
|
580
|
+
class JavascriptKeyboardEvent:
|
|
581
581
|
"""Interface for a Javascript KeyboardEvent https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent."""
|
|
582
582
|
|
|
583
583
|
key: str = ""
|
|
@@ -645,7 +645,7 @@ class KeyInputInfo(TypedDict):
|
|
|
645
645
|
|
|
646
646
|
|
|
647
647
|
def key_event(
|
|
648
|
-
e: ObjectVar[
|
|
648
|
+
e: ObjectVar[JavascriptKeyboardEvent],
|
|
649
649
|
) -> tuple[Var[str], Var[KeyInputInfo]]:
|
|
650
650
|
"""Get the key from a keyboard event.
|
|
651
651
|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import dataclasses
|
|
4
4
|
from collections.abc import Mapping
|
|
5
5
|
from typing import TYPE_CHECKING
|
|
6
|
-
from urllib.parse import _NetlocResultMixinStr, urlsplit
|
|
6
|
+
from urllib.parse import _NetlocResultMixinStr, parse_qsl, urlsplit
|
|
7
7
|
|
|
8
8
|
from reflex import constants
|
|
9
9
|
from reflex.utils import console, format
|
|
@@ -102,8 +102,10 @@ class ReflexURL(str, _NetlocResultMixinStr):
|
|
|
102
102
|
if TYPE_CHECKING:
|
|
103
103
|
scheme: str
|
|
104
104
|
netloc: str
|
|
105
|
+
origin: str
|
|
105
106
|
path: str
|
|
106
107
|
query: str
|
|
108
|
+
query_parameters: Mapping[str, str]
|
|
107
109
|
fragment: str
|
|
108
110
|
|
|
109
111
|
def __new__(cls, url: str):
|
|
@@ -121,6 +123,10 @@ class ReflexURL(str, _NetlocResultMixinStr):
|
|
|
121
123
|
object.__setattr__(obj, "netloc", netloc)
|
|
122
124
|
object.__setattr__(obj, "path", path)
|
|
123
125
|
object.__setattr__(obj, "query", query)
|
|
126
|
+
object.__setattr__(obj, "origin", f"{scheme}://{netloc}")
|
|
127
|
+
object.__setattr__(
|
|
128
|
+
obj, "query_parameters", _FrozenDictStrStr(**dict(parse_qsl(query)))
|
|
129
|
+
)
|
|
124
130
|
object.__setattr__(obj, "fragment", fragment)
|
|
125
131
|
return obj
|
|
126
132
|
|
|
@@ -17,7 +17,7 @@ class CommonContext(TypedDict):
|
|
|
17
17
|
P = ParamSpec("P")
|
|
18
18
|
|
|
19
19
|
|
|
20
|
-
class
|
|
20
|
+
class AddTaskProtocol(Protocol):
|
|
21
21
|
"""Protocol for adding a task to the pre-compile context."""
|
|
22
22
|
|
|
23
23
|
def __call__(
|
|
@@ -39,7 +39,7 @@ class AddTaskProtcol(Protocol):
|
|
|
39
39
|
class PreCompileContext(CommonContext):
|
|
40
40
|
"""Context for pre-compile hooks."""
|
|
41
41
|
|
|
42
|
-
add_save_task:
|
|
42
|
+
add_save_task: AddTaskProtocol
|
|
43
43
|
add_modify_task: Callable[[str, Callable[[str], str]], None]
|
|
44
44
|
unevaluated_pages: Sequence["UnevaluatedPage"]
|
|
45
45
|
|
|
@@ -131,7 +131,7 @@ def replace_brackets_with_keywords(input_string: str) -> str:
|
|
|
131
131
|
)
|
|
132
132
|
|
|
133
133
|
|
|
134
|
-
def
|
|
134
|
+
def route_specificity(keyworded_route: str) -> tuple[int, int, int]:
|
|
135
135
|
"""Get the specificity of a route with keywords.
|
|
136
136
|
|
|
137
137
|
The smaller the number, the more specific the route is.
|
|
@@ -193,13 +193,13 @@ def get_router(routes: list[str]) -> Callable[[str], str | None]:
|
|
|
193
193
|
keyworded_routes = {
|
|
194
194
|
replace_brackets_with_keywords(route): route for route in routes
|
|
195
195
|
}
|
|
196
|
-
|
|
196
|
+
sorted_routes_by_specificity = sorted(
|
|
197
197
|
keyworded_routes.items(),
|
|
198
|
-
key=lambda item:
|
|
198
|
+
key=lambda item: route_specificity(item[0]),
|
|
199
199
|
)
|
|
200
200
|
regexed_routes = [
|
|
201
201
|
(get_route_regex(keyworded_route), original_route)
|
|
202
|
-
for keyworded_route, original_route in
|
|
202
|
+
for keyworded_route, original_route in sorted_routes_by_specificity
|
|
203
203
|
]
|
|
204
204
|
|
|
205
205
|
def get_route(path: str) -> str | None:
|