reflex 0.8.8a1__tar.gz → 0.8.9__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.8a1 → reflex-0.8.9}/PKG-INFO +1 -1
- {reflex-0.8.8a1 → reflex-0.8.9}/pyproject.toml +2 -2
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/.templates/web/utils/state.js +5 -5
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/app.py +17 -7
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/compiler/compiler.py +2 -2
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/compiler/templates.py +23 -7
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/compiler/utils.py +8 -5
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/component.py +69 -80
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/core/sticky.pyi +3 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/el/elements/media.py +518 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/el/elements/media.pyi +5869 -5
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/lucide/icon.py +4 -1
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/lucide/icon.pyi +4 -1
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/primitives/drawer.py +9 -21
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/primitives/drawer.pyi +4 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/config.py +34 -7
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/constants/compiler.py +1 -1
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/constants/installer.py +4 -4
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/environment.py +8 -3
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/event.py +1 -1
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/istate/data.py +15 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/plugins/sitemap.py +3 -6
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/reflex.py +8 -2
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/state.py +46 -6
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/testing.py +1 -1
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/utils/console.py +67 -7
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/utils/format.py +1 -1
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/utils/frontend_skeleton.py +6 -1
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/utils/imports.py +1 -1
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/utils/prerequisites.py +3 -1
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/utils/pyi_generator.py +2 -2
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/utils/serializers.py +4 -4
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/utils/types.py +11 -10
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/vars/base.py +24 -17
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/vars/object.py +4 -2
- {reflex-0.8.8a1 → reflex-0.8.9}/.gitignore +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/LICENSE +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/README.md +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/.templates/apps/blank/assets/favicon.ico +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/.templates/apps/blank/code/__init__.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/.templates/apps/blank/code/blank.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/.templates/web/.gitignore +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/.templates/web/app/entry.client.js +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/.templates/web/app/routes.js +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/.templates/web/components/reflex/radix_themes_color_mode_provider.js +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/.templates/web/components/shiki/code.js +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/.templates/web/jsconfig.json +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/.templates/web/postcss.config.js +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/.templates/web/react-router.config.js +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/.templates/web/styles/__reflex_style_reset.css +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/.templates/web/utils/helpers/dataeditor.js +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/.templates/web/utils/helpers/debounce.js +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/.templates/web/utils/helpers/paste.js +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/.templates/web/utils/helpers/range.js +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/.templates/web/utils/helpers/throttle.js +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/.templates/web/utils/react-theme.js +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/.templates/web/vite-plugin-safari-cachebust.js +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/__init__.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/__init__.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/__main__.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/admin.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/app_mixins/__init__.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/app_mixins/lifespan.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/app_mixins/middleware.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/app_mixins/mixin.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/assets.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/base.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/compiler/__init__.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/__init__.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/__init__.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/base/__init__.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/base/__init__.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/base/app_wrap.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/base/app_wrap.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/base/bare.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/base/body.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/base/body.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/base/document.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/base/document.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/base/error_boundary.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/base/error_boundary.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/base/fragment.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/base/fragment.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/base/link.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/base/link.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/base/meta.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/base/meta.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/base/script.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/base/script.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/base/strict_mode.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/base/strict_mode.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/core/__init__.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/core/__init__.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/core/auto_scroll.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/core/auto_scroll.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/core/banner.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/core/banner.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/core/breakpoints.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/core/clipboard.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/core/clipboard.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/core/colors.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/core/cond.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/core/debounce.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/core/debounce.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/core/foreach.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/core/helmet.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/core/helmet.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/core/html.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/core/html.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/core/layout/__init__.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/core/match.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/core/responsive.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/core/sticky.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/core/upload.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/core/upload.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/core/window_events.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/core/window_events.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/datadisplay/__init__.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/datadisplay/__init__.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/datadisplay/code.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/datadisplay/code.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/datadisplay/dataeditor.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/datadisplay/dataeditor.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/datadisplay/logo.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/datadisplay/shiki_code_block.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/datadisplay/shiki_code_block.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/dynamic.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/el/__init__.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/el/__init__.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/el/element.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/el/element.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/el/elements/__init__.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/el/elements/__init__.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/el/elements/base.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/el/elements/base.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/el/elements/forms.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/el/elements/forms.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/el/elements/inline.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/el/elements/inline.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/el/elements/metadata.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/el/elements/metadata.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/el/elements/other.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/el/elements/other.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/el/elements/scripts.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/el/elements/scripts.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/el/elements/sectioning.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/el/elements/sectioning.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/el/elements/tables.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/el/elements/tables.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/el/elements/typography.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/el/elements/typography.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/field.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/gridjs/__init__.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/gridjs/datatable.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/gridjs/datatable.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/literals.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/lucide/__init__.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/markdown/__init__.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/markdown/markdown.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/markdown/markdown.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/moment/__init__.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/moment/moment.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/moment/moment.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/plotly/__init__.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/plotly/plotly.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/plotly/plotly.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/props.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/__init__.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/__init__.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/primitives/__init__.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/primitives/__init__.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/primitives/accordion.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/primitives/accordion.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/primitives/base.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/primitives/base.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/primitives/form.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/primitives/form.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/primitives/progress.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/primitives/progress.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/primitives/slider.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/primitives/slider.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/__init__.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/__init__.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/base.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/base.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/color_mode.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/color_mode.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/__init__.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/__init__.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/alert_dialog.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/alert_dialog.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/aspect_ratio.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/aspect_ratio.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/avatar.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/avatar.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/badge.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/badge.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/button.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/button.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/callout.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/callout.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/card.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/card.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/checkbox.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/checkbox.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/checkbox_cards.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/checkbox_cards.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/checkbox_group.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/checkbox_group.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/context_menu.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/context_menu.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/data_list.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/data_list.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/dialog.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/dialog.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/dropdown_menu.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/dropdown_menu.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/hover_card.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/hover_card.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/icon_button.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/icon_button.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/inset.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/inset.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/popover.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/popover.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/progress.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/progress.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/radio.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/radio.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/radio_cards.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/radio_cards.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/radio_group.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/radio_group.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/scroll_area.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/scroll_area.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/segmented_control.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/segmented_control.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/select.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/select.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/separator.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/separator.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/skeleton.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/skeleton.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/slider.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/slider.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/spinner.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/spinner.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/switch.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/switch.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/table.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/table.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/tabs.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/tabs.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/text_area.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/text_area.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/text_field.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/text_field.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/tooltip.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/components/tooltip.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/layout/__init__.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/layout/__init__.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/layout/base.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/layout/base.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/layout/box.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/layout/box.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/layout/center.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/layout/center.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/layout/container.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/layout/container.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/layout/flex.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/layout/flex.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/layout/grid.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/layout/grid.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/layout/list.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/layout/list.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/layout/section.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/layout/section.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/layout/spacer.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/layout/spacer.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/layout/stack.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/layout/stack.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/typography/__init__.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/typography/__init__.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/typography/base.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/typography/blockquote.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/typography/blockquote.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/typography/code.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/typography/code.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/typography/heading.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/typography/heading.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/typography/link.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/typography/link.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/typography/text.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/radix/themes/typography/text.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/react_player/__init__.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/react_player/audio.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/react_player/audio.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/react_player/react_player.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/react_player/react_player.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/react_player/video.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/react_player/video.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/react_router/__init__.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/react_router/dom.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/react_router/dom.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/recharts/__init__.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/recharts/__init__.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/recharts/cartesian.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/recharts/cartesian.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/recharts/charts.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/recharts/charts.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/recharts/general.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/recharts/general.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/recharts/polar.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/recharts/polar.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/recharts/recharts.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/recharts/recharts.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/sonner/__init__.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/sonner/toast.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/sonner/toast.pyi +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/tags/__init__.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/tags/cond_tag.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/tags/iter_tag.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/tags/match_tag.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/tags/tag.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/components/tags/tagless.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/constants/__init__.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/constants/base.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/constants/colors.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/constants/config.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/constants/custom_components.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/constants/event.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/constants/route.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/constants/state.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/constants/utils.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/custom_components/__init__.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/custom_components/custom_components.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/experimental/__init__.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/experimental/client_state.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/experimental/hooks.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/istate/__init__.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/istate/dynamic.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/istate/manager.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/istate/proxy.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/istate/storage.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/istate/wrappers.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/middleware/__init__.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/middleware/hydrate_middleware.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/middleware/middleware.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/model.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/page.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/plugins/__init__.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/plugins/_screenshot.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/plugins/base.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/plugins/shared_tailwind.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/plugins/tailwind_v3.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/plugins/tailwind_v4.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/py.typed +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/route.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/style.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/utils/__init__.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/utils/build.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/utils/codespaces.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/utils/compat.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/utils/decorator.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/utils/exceptions.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/utils/exec.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/utils/export.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/utils/js_runtimes.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/utils/lazy_loader.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/utils/misc.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/utils/monitoring.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/utils/net.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/utils/path_ops.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/utils/processes.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/utils/redir.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/utils/registry.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/utils/rename.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/utils/telemetry.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/utils/templates.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/utils/token_manager.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/vars/__init__.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/vars/datetime.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/vars/dep_tracking.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/vars/function.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/vars/number.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/reflex/vars/sequence.py +0 -0
- {reflex-0.8.8a1 → reflex-0.8.9}/scripts/hatch_build.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "reflex"
|
|
3
|
-
version = "0.8.
|
|
3
|
+
version = "0.8.9"
|
|
4
4
|
description = "Web apps in pure Python."
|
|
5
5
|
license.text = "Apache-2.0"
|
|
6
6
|
authors = [
|
|
@@ -232,7 +232,7 @@ fail_fast = true
|
|
|
232
232
|
|
|
233
233
|
[[tool.pre-commit.repos]]
|
|
234
234
|
repo = "https://github.com/astral-sh/ruff-pre-commit"
|
|
235
|
-
rev = "v0.12.
|
|
235
|
+
rev = "v0.12.10"
|
|
236
236
|
hooks = [
|
|
237
237
|
{ id = "ruff-format", args = [
|
|
238
238
|
"reflex",
|
|
@@ -415,7 +415,7 @@ export const applyRestEvent = async (event, socket, navigate, params) => {
|
|
|
415
415
|
if (event.payload.files === undefined || event.payload.files.length === 0) {
|
|
416
416
|
// Submit the event over the websocket to trigger the event handler.
|
|
417
417
|
return await applyEvent(
|
|
418
|
-
|
|
418
|
+
ReflexEvent(event.name, { files: [] }),
|
|
419
419
|
socket,
|
|
420
420
|
navigate,
|
|
421
421
|
params,
|
|
@@ -775,7 +775,7 @@ export const uploadFiles = async (
|
|
|
775
775
|
* @param {string} handler The client handler to process event.
|
|
776
776
|
* @returns The event object.
|
|
777
777
|
*/
|
|
778
|
-
export const
|
|
778
|
+
export const ReflexEvent = (
|
|
779
779
|
name,
|
|
780
780
|
payload = {},
|
|
781
781
|
event_actions = {},
|
|
@@ -987,7 +987,7 @@ export const useEventLoop = (
|
|
|
987
987
|
|
|
988
988
|
window.onerror = function (msg, url, lineNo, columnNo, error) {
|
|
989
989
|
addEvents([
|
|
990
|
-
|
|
990
|
+
ReflexEvent(`${exception_state_name}.handle_frontend_exception`, {
|
|
991
991
|
info: error.name + ": " + error.message + "\n" + error.stack,
|
|
992
992
|
component_stack: "",
|
|
993
993
|
}),
|
|
@@ -999,7 +999,7 @@ export const useEventLoop = (
|
|
|
999
999
|
//https://github.com/mknichel/javascript-errors?tab=readme-ov-file#promise-rejection-events
|
|
1000
1000
|
window.onunhandledrejection = function (event) {
|
|
1001
1001
|
addEvents([
|
|
1002
|
-
|
|
1002
|
+
ReflexEvent(`${exception_state_name}.handle_frontend_exception`, {
|
|
1003
1003
|
info:
|
|
1004
1004
|
event.reason?.name +
|
|
1005
1005
|
": " +
|
|
@@ -1072,7 +1072,7 @@ export const useEventLoop = (
|
|
|
1072
1072
|
if (storage_to_state_map[e.key]) {
|
|
1073
1073
|
const vars = {};
|
|
1074
1074
|
vars[storage_to_state_map[e.key]] = e.newValue;
|
|
1075
|
-
const event =
|
|
1075
|
+
const event = ReflexEvent(
|
|
1076
1076
|
`${state_name}.reflex___state____update_vars_internal_state.update_vars_internal`,
|
|
1077
1077
|
{ vars: vars },
|
|
1078
1078
|
);
|
|
@@ -1100,12 +1100,18 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
1100
1100
|
for substate in state.class_subclasses:
|
|
1101
1101
|
self._validate_var_dependencies(substate)
|
|
1102
1102
|
|
|
1103
|
-
def _compile(
|
|
1103
|
+
def _compile(
|
|
1104
|
+
self,
|
|
1105
|
+
prerender_routes: bool = False,
|
|
1106
|
+
dry_run: bool = False,
|
|
1107
|
+
use_rich: bool = True,
|
|
1108
|
+
):
|
|
1104
1109
|
"""Compile the app and output it to the pages folder.
|
|
1105
1110
|
|
|
1106
1111
|
Args:
|
|
1107
1112
|
prerender_routes: Whether to prerender the routes.
|
|
1108
1113
|
dry_run: Whether to compile the app without saving it.
|
|
1114
|
+
use_rich: Whether to use rich progress bars.
|
|
1109
1115
|
|
|
1110
1116
|
Raises:
|
|
1111
1117
|
ReflexRuntimeError: When any page uses state, but no rx.State subclass is defined.
|
|
@@ -1171,10 +1177,14 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
1171
1177
|
return
|
|
1172
1178
|
|
|
1173
1179
|
# Create a progress bar.
|
|
1174
|
-
progress =
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1180
|
+
progress = (
|
|
1181
|
+
Progress(
|
|
1182
|
+
*Progress.get_default_columns()[:-1],
|
|
1183
|
+
MofNCompleteColumn(),
|
|
1184
|
+
TimeElapsedColumn(),
|
|
1185
|
+
)
|
|
1186
|
+
if use_rich
|
|
1187
|
+
else console.PoorProgress()
|
|
1178
1188
|
)
|
|
1179
1189
|
|
|
1180
1190
|
# try to be somewhat accurate - but still not 100%
|
|
@@ -1311,9 +1321,9 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
1311
1321
|
self.head_components,
|
|
1312
1322
|
html_lang=self.html_lang,
|
|
1313
1323
|
html_custom_attrs=(
|
|
1314
|
-
{"suppressHydrationWarning":
|
|
1324
|
+
{"suppressHydrationWarning": True, **self.html_custom_attrs}
|
|
1315
1325
|
if self.html_custom_attrs
|
|
1316
|
-
else {"suppressHydrationWarning":
|
|
1326
|
+
else {"suppressHydrationWarning": True}
|
|
1317
1327
|
),
|
|
1318
1328
|
)
|
|
1319
1329
|
)
|
|
@@ -6,7 +6,7 @@ import sys
|
|
|
6
6
|
from collections.abc import Callable, Iterable, Sequence
|
|
7
7
|
from inspect import getmodule
|
|
8
8
|
from pathlib import Path
|
|
9
|
-
from typing import TYPE_CHECKING
|
|
9
|
+
from typing import TYPE_CHECKING, Any
|
|
10
10
|
|
|
11
11
|
from reflex import constants
|
|
12
12
|
from reflex.compiler import templates, utils
|
|
@@ -465,7 +465,7 @@ def _compile_stateful_components(
|
|
|
465
465
|
def compile_document_root(
|
|
466
466
|
head_components: list[Component],
|
|
467
467
|
html_lang: str | None = None,
|
|
468
|
-
html_custom_attrs: dict[str, Var |
|
|
468
|
+
html_custom_attrs: dict[str, Var | Any] | None = None,
|
|
469
469
|
) -> tuple[str, str]:
|
|
470
470
|
"""Compile the document root.
|
|
471
471
|
|
|
@@ -303,7 +303,7 @@ export const onLoadInternalEvent = () => {{
|
|
|
303
303
|
// But only send the vars if any are actually set in the browser.
|
|
304
304
|
if (client_storage_vars && Object.keys(client_storage_vars).length !== 0) {{
|
|
305
305
|
internal_events.push(
|
|
306
|
-
|
|
306
|
+
ReflexEvent(
|
|
307
307
|
'{state_name}.{constants.CompileVars.UPDATE_VARS_INTERNAL}',
|
|
308
308
|
{{vars: client_storage_vars}},
|
|
309
309
|
),
|
|
@@ -312,14 +312,14 @@ export const onLoadInternalEvent = () => {{
|
|
|
312
312
|
|
|
313
313
|
// `on_load_internal` triggers the correct on_load event(s) for the current page.
|
|
314
314
|
// If the page does not define any on_load event, this will just set `is_hydrated = true`.
|
|
315
|
-
internal_events.push(
|
|
315
|
+
internal_events.push(ReflexEvent('{state_name}.{constants.CompileVars.ON_LOAD_INTERNAL}'));
|
|
316
316
|
|
|
317
317
|
return internal_events;
|
|
318
318
|
}}
|
|
319
319
|
|
|
320
320
|
// The following events are sent when the websocket connects or reconnects.
|
|
321
321
|
export const initialEvents = () => [
|
|
322
|
-
|
|
322
|
+
ReflexEvent('{state_name}.{constants.CompileVars.HYDRATE}'),
|
|
323
323
|
...onLoadInternalEvent()
|
|
324
324
|
]
|
|
325
325
|
"""
|
|
@@ -351,7 +351,7 @@ export const initialEvents = () => []
|
|
|
351
351
|
)
|
|
352
352
|
|
|
353
353
|
return rf"""import {{ createContext, useContext, useMemo, useReducer, useState, createElement, useEffect }} from "react"
|
|
354
|
-
import {{ applyDelta,
|
|
354
|
+
import {{ applyDelta, ReflexEvent, hydrateClientStorage, useEventLoop, refs }} from "$/utils/state"
|
|
355
355
|
import {{ jsx }} from "@emotion/react";
|
|
356
356
|
|
|
357
357
|
export const initialState = {"{}" if not initial_state else json_dumps(initial_state)}
|
|
@@ -362,7 +362,7 @@ export const UploadFilesContext = createContext(null);
|
|
|
362
362
|
export const DispatchContext = createContext(null);
|
|
363
363
|
export const StateContexts = {{{state_contexts_str}}};
|
|
364
364
|
export const EventLoopContext = createContext(null);
|
|
365
|
-
export const clientStorage = {"{}" if client_storage is None else
|
|
365
|
+
export const clientStorage = {"{}" if client_storage is None else json.dumps(client_storage)}
|
|
366
366
|
|
|
367
367
|
{state_str}
|
|
368
368
|
|
|
@@ -502,11 +502,13 @@ def package_json_template(
|
|
|
502
502
|
)
|
|
503
503
|
|
|
504
504
|
|
|
505
|
-
def vite_config_template(base: str):
|
|
505
|
+
def vite_config_template(base: str, hmr: bool, force_full_reload: bool):
|
|
506
506
|
"""Template for vite.config.js.
|
|
507
507
|
|
|
508
508
|
Args:
|
|
509
509
|
base: The base path for the Vite config.
|
|
510
|
+
hmr: Whether to enable hot module replacement.
|
|
511
|
+
force_full_reload: Whether to force a full reload on changes.
|
|
510
512
|
|
|
511
513
|
Returns:
|
|
512
514
|
Rendered vite.config.js content as string.
|
|
@@ -537,12 +539,25 @@ function alwaysUseReactDomServerNode() {{
|
|
|
537
539
|
}};
|
|
538
540
|
}}
|
|
539
541
|
|
|
542
|
+
function fullReload() {{
|
|
543
|
+
return {{
|
|
544
|
+
name: "full-reload",
|
|
545
|
+
enforce: "pre",
|
|
546
|
+
handleHotUpdate({{ server }}) {{
|
|
547
|
+
server.ws.send({{
|
|
548
|
+
type: "full-reload",
|
|
549
|
+
}});
|
|
550
|
+
return [];
|
|
551
|
+
}}
|
|
552
|
+
}};
|
|
553
|
+
}}
|
|
554
|
+
|
|
540
555
|
export default defineConfig((config) => ({{
|
|
541
556
|
plugins: [
|
|
542
557
|
alwaysUseReactDomServerNode(),
|
|
543
558
|
reactRouter(),
|
|
544
559
|
safariCacheBustPlugin(),
|
|
545
|
-
],
|
|
560
|
+
].concat({"[fullReload()]" if force_full_reload else "[]"}),
|
|
546
561
|
build: {{
|
|
547
562
|
assetsDir: "{base}assets".slice(1),
|
|
548
563
|
rollupOptions: {{
|
|
@@ -564,6 +579,7 @@ export default defineConfig((config) => ({{
|
|
|
564
579
|
}},
|
|
565
580
|
server: {{
|
|
566
581
|
port: process.env.PORT,
|
|
582
|
+
hmr: {"true" if hmr else "false"},
|
|
567
583
|
watch: {{
|
|
568
584
|
ignored: [
|
|
569
585
|
"**/.web/backend/**",
|
|
@@ -220,10 +220,13 @@ def compile_state(state: type[BaseState]) -> dict:
|
|
|
220
220
|
|
|
221
221
|
def _compile_client_storage_field(
|
|
222
222
|
field: Field,
|
|
223
|
-
) ->
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
]
|
|
223
|
+
) -> (
|
|
224
|
+
tuple[
|
|
225
|
+
type[Cookie] | type[LocalStorage] | type[SessionStorage],
|
|
226
|
+
dict[str, Any],
|
|
227
|
+
]
|
|
228
|
+
| tuple[None, None]
|
|
229
|
+
):
|
|
227
230
|
"""Compile the given cookie, local_storage or session_storage field.
|
|
228
231
|
|
|
229
232
|
Args:
|
|
@@ -350,7 +353,7 @@ def compile_custom_component(
|
|
|
350
353
|
def create_document_root(
|
|
351
354
|
head_components: Sequence[Component] | None = None,
|
|
352
355
|
html_lang: str | None = None,
|
|
353
|
-
html_custom_attrs: dict[str, Var |
|
|
356
|
+
html_custom_attrs: dict[str, Var | Any] | None = None,
|
|
354
357
|
) -> Component:
|
|
355
358
|
"""Create the document root.
|
|
356
359
|
|
|
@@ -419,7 +419,6 @@ def evaluate_style_namespaces(style: ComponentStyle) -> dict:
|
|
|
419
419
|
|
|
420
420
|
# Map from component to styling.
|
|
421
421
|
ComponentStyle = dict[str | type[BaseComponent] | Callable | ComponentNamespace, Any]
|
|
422
|
-
ComponentChild = types.PrimitiveType | Var | BaseComponent
|
|
423
422
|
ComponentChildTypes = (*types.PrimitiveTypes, Var, BaseComponent, type(None))
|
|
424
423
|
|
|
425
424
|
|
|
@@ -480,7 +479,21 @@ def _components_from(
|
|
|
480
479
|
return ()
|
|
481
480
|
|
|
482
481
|
|
|
483
|
-
def
|
|
482
|
+
def _hash_str(value: str) -> str:
|
|
483
|
+
return md5(f'"{value}"'.encode(), usedforsecurity=False).hexdigest()
|
|
484
|
+
|
|
485
|
+
|
|
486
|
+
def _hash_sequence(value: Sequence) -> str:
|
|
487
|
+
return _hash_str(str([_deterministic_hash(v) for v in value]))
|
|
488
|
+
|
|
489
|
+
|
|
490
|
+
def _hash_dict(value: dict) -> str:
|
|
491
|
+
return _hash_sequence(
|
|
492
|
+
sorted([(k, _deterministic_hash(v)) for k, v in value.items()])
|
|
493
|
+
)
|
|
494
|
+
|
|
495
|
+
|
|
496
|
+
def _deterministic_hash(value: object) -> str:
|
|
484
497
|
"""Hash a rendered dictionary.
|
|
485
498
|
|
|
486
499
|
Args:
|
|
@@ -492,37 +505,28 @@ def _deterministic_hash(value: object) -> int:
|
|
|
492
505
|
Raises:
|
|
493
506
|
TypeError: If the value is not hashable.
|
|
494
507
|
"""
|
|
495
|
-
if
|
|
496
|
-
#
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
if isinstance(value, Var):
|
|
500
|
-
return _deterministic_hash((value._js_expr, value._get_all_var_data()))
|
|
501
|
-
if isinstance(value, VarData):
|
|
502
|
-
return _deterministic_hash(dataclasses.asdict(value))
|
|
503
|
-
if isinstance(value, dict):
|
|
504
|
-
# Sort the dictionary to ensure consistent hashing.
|
|
505
|
-
return _deterministic_hash(
|
|
506
|
-
tuple(sorted((k, _deterministic_hash(v)) for k, v in value.items()))
|
|
507
|
-
)
|
|
508
|
-
if isinstance(value, int):
|
|
508
|
+
if value is None:
|
|
509
|
+
# Hash None as a special case.
|
|
510
|
+
return "None"
|
|
511
|
+
if isinstance(value, (int, float, enum.Enum)):
|
|
509
512
|
# Hash numbers and booleans directly.
|
|
510
|
-
return
|
|
511
|
-
if isinstance(value, float):
|
|
512
|
-
return _deterministic_hash(str(value))
|
|
513
|
+
return str(value)
|
|
513
514
|
if isinstance(value, str):
|
|
514
|
-
return
|
|
515
|
+
return _hash_str(value)
|
|
516
|
+
if isinstance(value, dict):
|
|
517
|
+
return _hash_dict(value)
|
|
515
518
|
if isinstance(value, (tuple, list)):
|
|
516
519
|
# Hash tuples by hashing each element.
|
|
517
|
-
return
|
|
518
|
-
|
|
520
|
+
return _hash_sequence(value)
|
|
521
|
+
if isinstance(value, Var):
|
|
522
|
+
return _hash_str(
|
|
523
|
+
str((value._js_expr, _deterministic_hash(value._get_all_var_data())))
|
|
519
524
|
)
|
|
520
|
-
if isinstance(value,
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
return _deterministic_hash("None")
|
|
525
|
+
if isinstance(value, VarData):
|
|
526
|
+
return _hash_dict(dataclasses.asdict(value))
|
|
527
|
+
if isinstance(value, BaseComponent):
|
|
528
|
+
# If the value is a component, hash its rendered code.
|
|
529
|
+
return _hash_dict(value.render())
|
|
526
530
|
|
|
527
531
|
msg = (
|
|
528
532
|
f"Cannot hash value `{value}` of type `{type(value).__name__}`. "
|
|
@@ -1017,44 +1021,8 @@ class Component(BaseComponent, ABC):
|
|
|
1017
1021
|
"""
|
|
1018
1022
|
return set()
|
|
1019
1023
|
|
|
1020
|
-
@
|
|
1021
|
-
def
|
|
1022
|
-
"""Check if all fields are known at compile time. True for most components.
|
|
1023
|
-
|
|
1024
|
-
Returns:
|
|
1025
|
-
Whether all fields are known at compile time.
|
|
1026
|
-
"""
|
|
1027
|
-
return True
|
|
1028
|
-
|
|
1029
|
-
@classmethod
|
|
1030
|
-
@functools.cache
|
|
1031
|
-
def _get_component_prop_names(cls) -> set[str]:
|
|
1032
|
-
"""Get the names of the component props. NOTE: This assumes all fields are known.
|
|
1033
|
-
|
|
1034
|
-
Returns:
|
|
1035
|
-
The names of the component props.
|
|
1036
|
-
"""
|
|
1037
|
-
return {
|
|
1038
|
-
name
|
|
1039
|
-
for name in cls.get_fields()
|
|
1040
|
-
if name in cls.get_props()
|
|
1041
|
-
and types._issubclass(
|
|
1042
|
-
types.value_inside_optional(types.get_field_type(cls, name)), Component
|
|
1043
|
-
)
|
|
1044
|
-
}
|
|
1045
|
-
|
|
1046
|
-
def _get_components_in_props(self) -> Sequence[BaseComponent]:
|
|
1047
|
-
"""Get the components in the props.
|
|
1048
|
-
|
|
1049
|
-
Returns:
|
|
1050
|
-
The components in the props
|
|
1051
|
-
"""
|
|
1052
|
-
if self._are_fields_known():
|
|
1053
|
-
return [
|
|
1054
|
-
component
|
|
1055
|
-
for name in self._get_component_prop_names()
|
|
1056
|
-
for component in _components_from(getattr(self, name))
|
|
1057
|
-
]
|
|
1024
|
+
@functools.cached_property
|
|
1025
|
+
def _get_component_prop_property(self) -> Sequence[BaseComponent]:
|
|
1058
1026
|
return [
|
|
1059
1027
|
component
|
|
1060
1028
|
for prop in self.get_props()
|
|
@@ -1063,6 +1031,14 @@ class Component(BaseComponent, ABC):
|
|
|
1063
1031
|
for component in _components_from(value)
|
|
1064
1032
|
]
|
|
1065
1033
|
|
|
1034
|
+
def _get_components_in_props(self) -> Sequence[BaseComponent]:
|
|
1035
|
+
"""Get the components in the props.
|
|
1036
|
+
|
|
1037
|
+
Returns:
|
|
1038
|
+
The components in the props
|
|
1039
|
+
"""
|
|
1040
|
+
return self._get_component_prop_property
|
|
1041
|
+
|
|
1066
1042
|
@classmethod
|
|
1067
1043
|
def _validate_children(cls, children: tuple | list):
|
|
1068
1044
|
from reflex.utils.exceptions import ChildrenTypeError
|
|
@@ -1508,8 +1484,9 @@ class Component(BaseComponent, ABC):
|
|
|
1508
1484
|
Returns:
|
|
1509
1485
|
A sequence of parent classes that define the method (differently than the base).
|
|
1510
1486
|
"""
|
|
1487
|
+
current_class_method = getattr(Component, method, None)
|
|
1511
1488
|
seen_methods = (
|
|
1512
|
-
{
|
|
1489
|
+
{current_class_method} if current_class_method is not None else set()
|
|
1513
1490
|
)
|
|
1514
1491
|
clzs: list[type[Component]] = []
|
|
1515
1492
|
for clz in cls.mro():
|
|
@@ -1807,7 +1784,7 @@ class Component(BaseComponent, ABC):
|
|
|
1807
1784
|
|
|
1808
1785
|
# Add the hook code from add_hooks for each parent class (this is reversed to preserve
|
|
1809
1786
|
# the order of the hooks in the final output)
|
|
1810
|
-
for clz in reversed(
|
|
1787
|
+
for clz in reversed(self._iter_parent_classes_with_method("add_hooks")):
|
|
1811
1788
|
for hook in clz.add_hooks(self):
|
|
1812
1789
|
if isinstance(hook, Var):
|
|
1813
1790
|
extract_var_hooks(hook)
|
|
@@ -2051,15 +2028,6 @@ class CustomComponent(Component):
|
|
|
2051
2028
|
self.props[camel_cased_key] = value
|
|
2052
2029
|
setattr(self, camel_cased_key, value)
|
|
2053
2030
|
|
|
2054
|
-
@classmethod
|
|
2055
|
-
def _are_fields_known(cls) -> bool:
|
|
2056
|
-
"""Check if the fields are known.
|
|
2057
|
-
|
|
2058
|
-
Returns:
|
|
2059
|
-
Whether the fields are known.
|
|
2060
|
-
"""
|
|
2061
|
-
return False
|
|
2062
|
-
|
|
2063
2031
|
def __eq__(self, other: Any) -> bool:
|
|
2064
2032
|
"""Check if the component is equal to another.
|
|
2065
2033
|
|
|
@@ -2190,6 +2158,9 @@ def _register_custom_component(
|
|
|
2190
2158
|
Args:
|
|
2191
2159
|
component_fn: The function that creates the component.
|
|
2192
2160
|
|
|
2161
|
+
Returns:
|
|
2162
|
+
The custom component.
|
|
2163
|
+
|
|
2193
2164
|
Raises:
|
|
2194
2165
|
TypeError: If the tag name cannot be determined.
|
|
2195
2166
|
"""
|
|
@@ -2214,6 +2185,7 @@ def _register_custom_component(
|
|
|
2214
2185
|
msg = f"Could not determine the tag name for {component_fn!r}"
|
|
2215
2186
|
raise TypeError(msg)
|
|
2216
2187
|
CUSTOM_COMPONENTS[dummy_component.tag] = dummy_component
|
|
2188
|
+
return dummy_component
|
|
2217
2189
|
|
|
2218
2190
|
|
|
2219
2191
|
def custom_component(
|
|
@@ -2237,7 +2209,24 @@ def custom_component(
|
|
|
2237
2209
|
)
|
|
2238
2210
|
|
|
2239
2211
|
# Register this component so it can be compiled.
|
|
2240
|
-
_register_custom_component(component_fn)
|
|
2212
|
+
dummy_component = _register_custom_component(component_fn)
|
|
2213
|
+
if tag := dummy_component.tag:
|
|
2214
|
+
object.__setattr__(
|
|
2215
|
+
wrapper,
|
|
2216
|
+
"_as_var",
|
|
2217
|
+
lambda: Var(
|
|
2218
|
+
tag,
|
|
2219
|
+
_var_type=type[Component],
|
|
2220
|
+
_var_data=VarData(
|
|
2221
|
+
imports={
|
|
2222
|
+
f"$/{constants.Dirs.UTILS}/components": [ImportVar(tag=tag)],
|
|
2223
|
+
"@emotion/react": [
|
|
2224
|
+
ImportVar(tag="jsx"),
|
|
2225
|
+
],
|
|
2226
|
+
}
|
|
2227
|
+
),
|
|
2228
|
+
),
|
|
2229
|
+
)
|
|
2241
2230
|
|
|
2242
2231
|
return wrapper
|
|
2243
2232
|
|
|
@@ -2457,7 +2446,7 @@ class StatefulComponent(BaseComponent):
|
|
|
2457
2446
|
return None
|
|
2458
2447
|
|
|
2459
2448
|
# Compute the hash based on the rendered code.
|
|
2460
|
-
code_hash = _deterministic_hash(rendered_code)
|
|
2449
|
+
code_hash = _hash_str(_deterministic_hash(rendered_code))
|
|
2461
2450
|
|
|
2462
2451
|
# Format the tag name including the hash.
|
|
2463
2452
|
return format.format_state_name(
|
|
@@ -2599,7 +2588,7 @@ class StatefulComponent(BaseComponent):
|
|
|
2599
2588
|
memo_name = f"{event_trigger}_{chain_hash}"
|
|
2600
2589
|
|
|
2601
2590
|
# Calculate Var dependencies accessed by the handler for useCallback dep array.
|
|
2602
|
-
var_deps = ["addEvents", "
|
|
2591
|
+
var_deps = ["addEvents", "ReflexEvent"]
|
|
2603
2592
|
|
|
2604
2593
|
# Get deps from event trigger var data.
|
|
2605
2594
|
var_deps.extend(cls._get_deps_from_event_trigger(event))
|
|
@@ -22,6 +22,9 @@ class StickyLogo(Svg):
|
|
|
22
22
|
width: Var[int | str] | int | str | None = None,
|
|
23
23
|
height: Var[int | str] | int | str | None = None,
|
|
24
24
|
xmlns: Var[str] | str | None = None,
|
|
25
|
+
view_box: Var[str] | str | None = None,
|
|
26
|
+
preserve_aspect_ratio: Var[str] | str | None = None,
|
|
27
|
+
transform: Var[str] | str | None = None,
|
|
25
28
|
access_key: Var[str] | str | None = None,
|
|
26
29
|
auto_capitalize: Literal[
|
|
27
30
|
"characters", "none", "off", "on", "sentences", "words"
|