reflex 0.8.21__tar.gz → 0.8.23a4__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.
- {reflex-0.8.21 → reflex-0.8.23a4}/PKG-INFO +1 -1
- {reflex-0.8.21 → reflex-0.8.23a4}/pyproject.toml +2 -2
- reflex-0.8.23a4/reflex/.templates/web/utils/helpers/paste.js +105 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/.templates/web/utils/state.js +2 -2
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/__init__.py +1 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/__init__.pyi +2 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/app.py +14 -6
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/compiler/templates.py +5 -1
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/compiler/utils.py +6 -4
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/component.py +12 -9
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/el/__init__.py +2 -2
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/lucide/icon.py +10 -3
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/lucide/icon.pyi +10 -3
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/markdown/markdown.py +2 -2
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/plotly/plotly.py +3 -3
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/recharts/recharts.py +2 -2
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/constants/installer.py +6 -6
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/environment.py +3 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/istate/data.py +21 -6
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/istate/manager/__init__.py +29 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/istate/manager/redis.py +3 -3
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/istate/proxy.py +8 -4
- reflex-0.8.23a4/reflex/istate/shared.py +402 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/model.py +6 -1
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/state.py +32 -3
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/testing.py +4 -3
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/utils/build.py +3 -2
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/utils/processes.py +6 -5
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/vars/base.py +13 -7
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/vars/dep_tracking.py +163 -22
- reflex-0.8.21/reflex/.templates/web/utils/helpers/paste.js +0 -59
- {reflex-0.8.21 → reflex-0.8.23a4}/.gitignore +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/LICENSE +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/README.md +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/.templates/apps/blank/assets/favicon.ico +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/.templates/apps/blank/code/__init__.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/.templates/apps/blank/code/blank.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/.templates/web/.gitignore +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/.templates/web/app/entry.client.js +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/.templates/web/app/routes.js +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/.templates/web/components/reflex/radix_themes_color_mode_provider.js +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/.templates/web/components/shiki/code.js +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/.templates/web/jsconfig.json +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/.templates/web/postcss.config.js +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/.templates/web/react-router.config.js +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/.templates/web/styles/__reflex_style_reset.css +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/.templates/web/utils/helpers/dataeditor.js +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/.templates/web/utils/helpers/debounce.js +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/.templates/web/utils/helpers/range.js +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/.templates/web/utils/helpers/throttle.js +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/.templates/web/utils/helpers/upload.js +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/.templates/web/utils/react-theme.js +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/.templates/web/vite-plugin-safari-cachebust.js +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/__main__.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/admin.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/app_mixins/__init__.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/app_mixins/lifespan.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/app_mixins/middleware.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/app_mixins/mixin.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/assets.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/base.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/compiler/__init__.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/compiler/compiler.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/__init__.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/__init__.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/base/__init__.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/base/__init__.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/base/app_wrap.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/base/app_wrap.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/base/bare.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/base/body.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/base/body.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/base/document.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/base/document.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/base/error_boundary.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/base/error_boundary.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/base/fragment.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/base/fragment.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/base/link.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/base/link.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/base/meta.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/base/meta.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/base/script.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/base/script.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/base/strict_mode.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/base/strict_mode.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/core/__init__.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/core/__init__.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/core/auto_scroll.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/core/auto_scroll.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/core/banner.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/core/banner.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/core/breakpoints.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/core/clipboard.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/core/clipboard.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/core/colors.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/core/cond.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/core/debounce.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/core/debounce.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/core/foreach.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/core/helmet.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/core/helmet.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/core/html.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/core/html.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/core/layout/__init__.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/core/match.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/core/responsive.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/core/sticky.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/core/sticky.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/core/upload.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/core/upload.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/core/window_events.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/core/window_events.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/datadisplay/__init__.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/datadisplay/__init__.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/datadisplay/code.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/datadisplay/code.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/datadisplay/dataeditor.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/datadisplay/dataeditor.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/datadisplay/logo.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/datadisplay/shiki_code_block.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/datadisplay/shiki_code_block.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/dynamic.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/el/__init__.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/el/element.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/el/element.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/el/elements/__init__.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/el/elements/__init__.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/el/elements/base.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/el/elements/base.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/el/elements/forms.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/el/elements/forms.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/el/elements/inline.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/el/elements/inline.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/el/elements/media.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/el/elements/media.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/el/elements/metadata.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/el/elements/metadata.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/el/elements/other.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/el/elements/other.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/el/elements/scripts.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/el/elements/scripts.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/el/elements/sectioning.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/el/elements/sectioning.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/el/elements/tables.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/el/elements/tables.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/el/elements/typography.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/el/elements/typography.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/field.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/gridjs/__init__.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/gridjs/datatable.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/gridjs/datatable.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/literals.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/lucide/__init__.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/markdown/__init__.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/markdown/markdown.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/moment/__init__.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/moment/moment.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/moment/moment.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/plotly/__init__.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/plotly/plotly.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/props.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/__init__.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/__init__.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/primitives/__init__.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/primitives/__init__.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/primitives/accordion.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/primitives/accordion.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/primitives/base.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/primitives/base.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/primitives/dialog.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/primitives/dialog.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/primitives/drawer.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/primitives/drawer.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/primitives/form.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/primitives/form.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/primitives/progress.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/primitives/progress.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/primitives/slider.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/primitives/slider.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/__init__.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/__init__.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/base.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/base.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/color_mode.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/color_mode.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/__init__.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/__init__.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/alert_dialog.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/alert_dialog.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/aspect_ratio.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/aspect_ratio.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/avatar.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/avatar.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/badge.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/badge.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/button.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/button.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/callout.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/callout.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/card.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/card.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/checkbox.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/checkbox.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/checkbox_cards.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/checkbox_cards.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/checkbox_group.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/checkbox_group.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/context_menu.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/context_menu.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/data_list.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/data_list.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/dialog.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/dialog.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/dropdown_menu.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/dropdown_menu.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/hover_card.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/hover_card.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/icon_button.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/icon_button.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/inset.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/inset.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/popover.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/popover.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/progress.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/progress.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/radio.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/radio.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/radio_cards.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/radio_cards.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/radio_group.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/radio_group.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/scroll_area.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/scroll_area.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/segmented_control.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/segmented_control.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/select.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/select.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/separator.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/separator.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/skeleton.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/skeleton.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/slider.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/slider.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/spinner.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/spinner.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/switch.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/switch.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/table.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/table.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/tabs.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/tabs.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/text_area.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/text_area.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/text_field.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/text_field.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/tooltip.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/components/tooltip.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/layout/__init__.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/layout/__init__.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/layout/base.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/layout/base.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/layout/box.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/layout/box.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/layout/center.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/layout/center.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/layout/container.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/layout/container.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/layout/flex.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/layout/flex.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/layout/grid.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/layout/grid.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/layout/list.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/layout/list.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/layout/section.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/layout/section.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/layout/spacer.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/layout/spacer.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/layout/stack.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/layout/stack.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/typography/__init__.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/typography/__init__.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/typography/base.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/typography/blockquote.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/typography/blockquote.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/typography/code.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/typography/code.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/typography/heading.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/typography/heading.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/typography/link.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/typography/link.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/typography/text.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/radix/themes/typography/text.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/react_player/__init__.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/react_player/audio.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/react_player/audio.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/react_player/react_player.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/react_player/react_player.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/react_player/video.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/react_player/video.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/react_router/__init__.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/react_router/dom.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/react_router/dom.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/recharts/__init__.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/recharts/__init__.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/recharts/cartesian.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/recharts/cartesian.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/recharts/charts.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/recharts/charts.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/recharts/general.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/recharts/general.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/recharts/polar.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/recharts/polar.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/recharts/recharts.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/sonner/__init__.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/sonner/toast.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/sonner/toast.pyi +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/tags/__init__.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/tags/cond_tag.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/tags/iter_tag.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/tags/match_tag.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/tags/tag.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/components/tags/tagless.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/config.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/constants/__init__.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/constants/base.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/constants/colors.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/constants/compiler.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/constants/config.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/constants/custom_components.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/constants/event.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/constants/route.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/constants/state.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/constants/utils.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/custom_components/__init__.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/custom_components/custom_components.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/event.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/experimental/__init__.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/experimental/client_state.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/experimental/hooks.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/istate/__init__.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/istate/dynamic.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/istate/manager/disk.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/istate/manager/memory.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/istate/storage.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/istate/wrappers.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/middleware/__init__.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/middleware/hydrate_middleware.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/middleware/middleware.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/page.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/plugins/__init__.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/plugins/_screenshot.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/plugins/base.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/plugins/shared_tailwind.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/plugins/sitemap.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/plugins/tailwind_v3.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/plugins/tailwind_v4.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/py.typed +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/reflex.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/route.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/style.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/utils/__init__.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/utils/codespaces.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/utils/compat.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/utils/console.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/utils/decorator.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/utils/exceptions.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/utils/exec.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/utils/export.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/utils/format.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/utils/frontend_skeleton.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/utils/imports.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/utils/js_runtimes.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/utils/lazy_loader.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/utils/misc.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/utils/monitoring.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/utils/net.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/utils/path_ops.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/utils/prerequisites.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/utils/pyi_generator.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/utils/redir.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/utils/registry.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/utils/rename.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/utils/serializers.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/utils/tasks.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/utils/telemetry.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/utils/templates.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/utils/token_manager.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/utils/types.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/vars/__init__.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/vars/color.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/vars/datetime.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/vars/function.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/vars/number.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/vars/object.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/reflex/vars/sequence.py +0 -0
- {reflex-0.8.21 → reflex-0.8.23a4}/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.23a4"
|
|
4
4
|
description = "Web apps in pure Python."
|
|
5
5
|
license.text = "Apache-2.0"
|
|
6
6
|
authors = [
|
|
@@ -243,7 +243,7 @@ fail_fast = true
|
|
|
243
243
|
|
|
244
244
|
[[tool.pre-commit.repos]]
|
|
245
245
|
repo = "https://github.com/astral-sh/ruff-pre-commit"
|
|
246
|
-
rev = "v0.14.
|
|
246
|
+
rev = "v0.14.8"
|
|
247
247
|
hooks = [
|
|
248
248
|
{ id = "ruff-format", args = [
|
|
249
249
|
"reflex",
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { useEffect, useRef } from "react";
|
|
2
|
+
|
|
3
|
+
const handle_paste_data = (clipboardData) =>
|
|
4
|
+
new Promise((resolve, reject) => {
|
|
5
|
+
const pasted_data = [];
|
|
6
|
+
const n_items = clipboardData.items.length;
|
|
7
|
+
const extract_data = (item) => {
|
|
8
|
+
const type = item.type;
|
|
9
|
+
if (item.kind === "string") {
|
|
10
|
+
item.getAsString((data) => {
|
|
11
|
+
pasted_data.push([type, data]);
|
|
12
|
+
if (pasted_data.length === n_items) {
|
|
13
|
+
resolve(pasted_data);
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
} else if (item.kind === "file") {
|
|
17
|
+
const file = item.getAsFile();
|
|
18
|
+
const reader = new FileReader();
|
|
19
|
+
reader.onload = (e) => {
|
|
20
|
+
pasted_data.push([type, e.target.result]);
|
|
21
|
+
if (pasted_data.length === n_items) {
|
|
22
|
+
resolve(pasted_data);
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
if (type.indexOf("text/") === 0) {
|
|
26
|
+
reader.readAsText(file);
|
|
27
|
+
} else {
|
|
28
|
+
reader.readAsDataURL(file);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
for (const item of clipboardData.items) {
|
|
33
|
+
extract_data(item);
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
export default function usePasteHandler(target_ids, event_actions, on_paste) {
|
|
38
|
+
const onPasteRef = useRef(on_paste);
|
|
39
|
+
const eventActionsRef = useRef(event_actions);
|
|
40
|
+
|
|
41
|
+
useEffect(() => {
|
|
42
|
+
onPasteRef.current = on_paste;
|
|
43
|
+
}, [on_paste]);
|
|
44
|
+
useEffect(() => {
|
|
45
|
+
eventActionsRef.current = event_actions;
|
|
46
|
+
}, [event_actions]);
|
|
47
|
+
|
|
48
|
+
useEffect(() => {
|
|
49
|
+
const handle_paste = (_ev) => {
|
|
50
|
+
eventActionsRef.current?.preventDefault && _ev.preventDefault();
|
|
51
|
+
eventActionsRef.current?.stopPropagation && _ev.stopPropagation();
|
|
52
|
+
handle_paste_data(_ev.clipboardData).then(onPasteRef.current);
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
let cleanupListeners = null;
|
|
56
|
+
let observer = null;
|
|
57
|
+
|
|
58
|
+
const attachListeners = (targets) => {
|
|
59
|
+
targets.forEach((target) =>
|
|
60
|
+
target.addEventListener("paste", handle_paste, false),
|
|
61
|
+
);
|
|
62
|
+
return () => {
|
|
63
|
+
targets.forEach((target) =>
|
|
64
|
+
target.removeEventListener("paste", handle_paste, false),
|
|
65
|
+
);
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
const tryAttach = () => {
|
|
70
|
+
if (target_ids.length === 0) {
|
|
71
|
+
cleanupListeners = attachListeners([document]);
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
const targets = target_ids
|
|
75
|
+
.map((id) => document.getElementById(id))
|
|
76
|
+
.filter((element) => !!element);
|
|
77
|
+
|
|
78
|
+
if (targets.length === target_ids.length) {
|
|
79
|
+
cleanupListeners = attachListeners(targets);
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return false;
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
if (!tryAttach()) {
|
|
87
|
+
observer = new MutationObserver(() => {
|
|
88
|
+
if (tryAttach()) {
|
|
89
|
+
observer.disconnect();
|
|
90
|
+
observer = null;
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
observer.observe(document.body, { childList: true, subtree: true });
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
return () => {
|
|
97
|
+
if (observer) {
|
|
98
|
+
observer.disconnect();
|
|
99
|
+
}
|
|
100
|
+
if (cleanupListeners) {
|
|
101
|
+
cleanupListeners();
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
}, [target_ids]);
|
|
105
|
+
}
|
|
@@ -56,10 +56,10 @@ export const generateUUID = () => {
|
|
|
56
56
|
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
|
|
57
57
|
let r = Math.random() * 16;
|
|
58
58
|
if (d > 0) {
|
|
59
|
-
r = (d + r) % 16 | 0;
|
|
59
|
+
r = ((d + r) % 16) | 0;
|
|
60
60
|
d = Math.floor(d / 16);
|
|
61
61
|
} else {
|
|
62
|
-
r = (d2 + r) % 16 | 0;
|
|
62
|
+
r = ((d2 + r) % 16) | 0;
|
|
63
63
|
d2 = Math.floor(d2 / 16);
|
|
64
64
|
}
|
|
65
65
|
return (c == "x" ? r : (r & 0x7) | 0x8).toString(16);
|
|
@@ -148,6 +148,7 @@ from .event import (
|
|
|
148
148
|
window_alert,
|
|
149
149
|
)
|
|
150
150
|
from .experimental import _x
|
|
151
|
+
from .istate.shared import SharedState
|
|
151
152
|
from .istate.storage import Cookie, LocalStorage, SessionStorage
|
|
152
153
|
from .istate.wrappers import get_state
|
|
153
154
|
from .middleware import Middleware, middleware
|
|
@@ -205,6 +206,7 @@ __all__ = [
|
|
|
205
206
|
"PropsBase",
|
|
206
207
|
"Script",
|
|
207
208
|
"SessionStorage",
|
|
209
|
+
"SharedState",
|
|
208
210
|
"State",
|
|
209
211
|
"Style",
|
|
210
212
|
"UploadFile",
|
|
@@ -297,7 +297,7 @@ class UnevaluatedPage:
|
|
|
297
297
|
description: Var | str | None
|
|
298
298
|
image: str
|
|
299
299
|
on_load: EventType[()] | None
|
|
300
|
-
meta: Sequence[Mapping[str,
|
|
300
|
+
meta: Sequence[Mapping[str, Any] | Component]
|
|
301
301
|
context: Mapping[str, Any]
|
|
302
302
|
|
|
303
303
|
def merged_with(self, other: UnevaluatedPage) -> UnevaluatedPage:
|
|
@@ -772,7 +772,7 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
772
772
|
description: str | Var | None = None,
|
|
773
773
|
image: str = constants.DefaultPage.IMAGE,
|
|
774
774
|
on_load: EventType[()] | None = None,
|
|
775
|
-
meta:
|
|
775
|
+
meta: Sequence[Mapping[str, Any] | Component] = constants.DefaultPage.META_LIST,
|
|
776
776
|
context: dict[str, Any] | None = None,
|
|
777
777
|
):
|
|
778
778
|
"""Add a page to the app.
|
|
@@ -1562,13 +1562,17 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
1562
1562
|
|
|
1563
1563
|
@contextlib.asynccontextmanager
|
|
1564
1564
|
async def modify_state(
|
|
1565
|
-
self,
|
|
1565
|
+
self,
|
|
1566
|
+
token: str,
|
|
1567
|
+
background: bool = False,
|
|
1568
|
+
previous_dirty_vars: dict[str, set[str]] | None = None,
|
|
1566
1569
|
) -> AsyncIterator[BaseState]:
|
|
1567
1570
|
"""Modify the state out of band.
|
|
1568
1571
|
|
|
1569
1572
|
Args:
|
|
1570
1573
|
token: The token to modify the state for.
|
|
1571
1574
|
background: Whether the modification is happening in a background task.
|
|
1575
|
+
previous_dirty_vars: Vars that are considered dirty from a previous operation.
|
|
1572
1576
|
|
|
1573
1577
|
Yields:
|
|
1574
1578
|
The state to modify.
|
|
@@ -1581,7 +1585,9 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
1581
1585
|
raise RuntimeError(msg)
|
|
1582
1586
|
|
|
1583
1587
|
# Get exclusive access to the state.
|
|
1584
|
-
async with self.state_manager.
|
|
1588
|
+
async with self.state_manager.modify_state_with_links(
|
|
1589
|
+
token, previous_dirty_vars=previous_dirty_vars
|
|
1590
|
+
) as state:
|
|
1585
1591
|
# No other event handler can modify the state while in this context.
|
|
1586
1592
|
yield state
|
|
1587
1593
|
delta = await state._get_resolved_delta()
|
|
@@ -1769,7 +1775,7 @@ async def process(
|
|
|
1769
1775
|
constants.RouteVar.CLIENT_IP: client_ip,
|
|
1770
1776
|
})
|
|
1771
1777
|
# Get the state for the session exclusively.
|
|
1772
|
-
async with app.state_manager.
|
|
1778
|
+
async with app.state_manager.modify_state_with_links(
|
|
1773
1779
|
event.substate_token, event=event
|
|
1774
1780
|
) as state:
|
|
1775
1781
|
# When this is a brand new instance of the state, signal the
|
|
@@ -2003,7 +2009,9 @@ def upload(app: App):
|
|
|
2003
2009
|
Each state update as JSON followed by a new line.
|
|
2004
2010
|
"""
|
|
2005
2011
|
# Process the event.
|
|
2006
|
-
async with app.state_manager.
|
|
2012
|
+
async with app.state_manager.modify_state_with_links(
|
|
2013
|
+
event.substate_token
|
|
2014
|
+
) as state:
|
|
2007
2015
|
async for update in state._process(event):
|
|
2008
2016
|
# Postprocess the event.
|
|
2009
2017
|
update = await app._postprocess(state, event, update)
|
|
@@ -378,7 +378,11 @@ export function ClientSide(component) {{
|
|
|
378
378
|
return ({{ children, ...props }}) => {{
|
|
379
379
|
const [Component, setComponent] = useState(null);
|
|
380
380
|
useEffect(() => {{
|
|
381
|
-
|
|
381
|
+
async function load() {{
|
|
382
|
+
const comp = await component();
|
|
383
|
+
setComponent(() => comp);
|
|
384
|
+
}}
|
|
385
|
+
load();
|
|
382
386
|
}}, []);
|
|
383
387
|
return Component ? jsx(Component, props, children) : null;
|
|
384
388
|
}};
|
|
@@ -73,10 +73,12 @@ def validate_imports(import_dict: ParsedImportDict):
|
|
|
73
73
|
ValueError: if a conflict on "tag/alias" is detected for an import.
|
|
74
74
|
"""
|
|
75
75
|
used_tags = {}
|
|
76
|
-
for lib,
|
|
77
|
-
for
|
|
76
|
+
for lib, imported_items in import_dict.items():
|
|
77
|
+
for imported_item in imported_items:
|
|
78
78
|
import_name = (
|
|
79
|
-
f"{
|
|
79
|
+
f"{imported_item.tag}/{imported_item.alias}"
|
|
80
|
+
if imported_item.alias
|
|
81
|
+
else imported_item.tag
|
|
80
82
|
)
|
|
81
83
|
if import_name in used_tags:
|
|
82
84
|
already_imported = used_tags[import_name]
|
|
@@ -562,7 +564,7 @@ def add_meta(
|
|
|
562
564
|
page: Component,
|
|
563
565
|
title: str,
|
|
564
566
|
image: str,
|
|
565
|
-
meta:
|
|
567
|
+
meta: Sequence[Mapping[str, Any] | Component],
|
|
566
568
|
description: str | None = None,
|
|
567
569
|
) -> Component:
|
|
568
570
|
"""Add metadata to a page.
|
|
@@ -515,8 +515,10 @@ def _deterministic_hash(value: object) -> str:
|
|
|
515
515
|
return _hash_str(
|
|
516
516
|
str((value._js_expr, _deterministic_hash(value._get_all_var_data())))
|
|
517
517
|
)
|
|
518
|
-
if
|
|
519
|
-
return _hash_dict(
|
|
518
|
+
if dataclasses.is_dataclass(value):
|
|
519
|
+
return _hash_dict({
|
|
520
|
+
k.name: getattr(value, k.name) for k in dataclasses.fields(value)
|
|
521
|
+
})
|
|
520
522
|
if isinstance(value, BaseComponent):
|
|
521
523
|
# If the value is a component, hash its rendered code.
|
|
522
524
|
return _hash_dict(value.render())
|
|
@@ -758,9 +760,11 @@ class Component(BaseComponent, ABC):
|
|
|
758
760
|
and key not in component_specific_triggers
|
|
759
761
|
and key not in props
|
|
760
762
|
):
|
|
763
|
+
valid_triggers = sorted(component_specific_triggers.keys())
|
|
761
764
|
msg = (
|
|
762
|
-
f"The {(comp_name := type(self).__name__)} does not take in an `{key}` event trigger.
|
|
763
|
-
f"
|
|
765
|
+
f"The {(comp_name := type(self).__name__)} does not take in an `{key}` event trigger. "
|
|
766
|
+
f"Valid triggers for {comp_name}: {valid_triggers}. "
|
|
767
|
+
f"If {comp_name} is a third party component make sure to add `{key}` to the component's event triggers. "
|
|
764
768
|
f"visit https://reflex.dev/docs/wrapping-react/guide/#event-triggers for more info."
|
|
765
769
|
)
|
|
766
770
|
raise ValueError(msg)
|
|
@@ -2228,7 +2232,6 @@ class NoSSRComponent(Component):
|
|
|
2228
2232
|
"""
|
|
2229
2233
|
# React lazy import mechanism.
|
|
2230
2234
|
dynamic_import = {
|
|
2231
|
-
"react": [ImportVar(tag="lazy")],
|
|
2232
2235
|
f"$/{constants.Dirs.UTILS}/context": [ImportVar(tag="ClientSide")],
|
|
2233
2236
|
}
|
|
2234
2237
|
|
|
@@ -2259,15 +2262,15 @@ class NoSSRComponent(Component):
|
|
|
2259
2262
|
library_import = f"import('{import_name}')"
|
|
2260
2263
|
mod_import = (
|
|
2261
2264
|
# https://nextjs.org/docs/pages/building-your-application/optimizing/lazy-loading#with-named-exports
|
|
2262
|
-
f".then((mod) =>
|
|
2265
|
+
f".then((mod) => mod.{self.tag})"
|
|
2263
2266
|
if not self.is_default
|
|
2264
|
-
else ""
|
|
2267
|
+
else ".then((mod) => mod.default.default ?? mod.default)"
|
|
2265
2268
|
)
|
|
2266
2269
|
return (
|
|
2267
|
-
f"const {self.alias or self.tag} = ClientSide(
|
|
2270
|
+
f"const {self.alias or self.tag} = ClientSide(() => "
|
|
2268
2271
|
+ library_import
|
|
2269
2272
|
+ mod_import
|
|
2270
|
-
+ ")
|
|
2273
|
+
+ ")"
|
|
2271
2274
|
)
|
|
2272
2275
|
|
|
2273
2276
|
|
|
@@ -9,8 +9,8 @@ from . import elements
|
|
|
9
9
|
_SUBMODULES: set[str] = {"elements"}
|
|
10
10
|
_SUBMOD_ATTRS: dict[str, list[str]] = {
|
|
11
11
|
# rx.el.a is replaced by React Router's Link.
|
|
12
|
-
f"elements.{k}": [
|
|
13
|
-
for k,
|
|
12
|
+
f"elements.{k}": [attr for attr in attrs if attr != "a"]
|
|
13
|
+
for k, attrs in elements._MAPPING.items()
|
|
14
14
|
}
|
|
15
15
|
_EXTRA_MAPPINGS: dict[str, str] = {
|
|
16
16
|
"a": "reflex.components.react_router.link",
|
|
@@ -6,7 +6,7 @@ from reflex.utils.imports import ImportVar
|
|
|
6
6
|
from reflex.vars.base import LiteralVar, Var
|
|
7
7
|
from reflex.vars.sequence import LiteralStringVar, StringVar
|
|
8
8
|
|
|
9
|
-
LUCIDE_LIBRARY = "lucide-react@0.
|
|
9
|
+
LUCIDE_LIBRARY = "lucide-react@0.556.0"
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
class LucideIconComponent(Component):
|
|
@@ -317,6 +317,7 @@ LUCIDE_ICON_LIST = [
|
|
|
317
317
|
"book_open_text",
|
|
318
318
|
"book_open",
|
|
319
319
|
"book_plus",
|
|
320
|
+
"book_search",
|
|
320
321
|
"book_text",
|
|
321
322
|
"book_type",
|
|
322
323
|
"book_up_2",
|
|
@@ -386,8 +387,8 @@ LUCIDE_ICON_LIST = [
|
|
|
386
387
|
"calendar_sync",
|
|
387
388
|
"calendar_x_2",
|
|
388
389
|
"calendar_x",
|
|
389
|
-
"calendars",
|
|
390
390
|
"calendar",
|
|
391
|
+
"calendars",
|
|
391
392
|
"camera_off",
|
|
392
393
|
"camera",
|
|
393
394
|
"candlestick_chart",
|
|
@@ -764,8 +765,8 @@ LUCIDE_ICON_LIST = [
|
|
|
764
765
|
"film",
|
|
765
766
|
"filter_x",
|
|
766
767
|
"filter",
|
|
767
|
-
"fingerprint",
|
|
768
768
|
"fingerprint_pattern",
|
|
769
|
+
"fingerprint",
|
|
769
770
|
"fire_extinguisher",
|
|
770
771
|
"fish_off",
|
|
771
772
|
"fish_symbol",
|
|
@@ -823,6 +824,7 @@ LUCIDE_ICON_LIST = [
|
|
|
823
824
|
"folders",
|
|
824
825
|
"footprints",
|
|
825
826
|
"forklift",
|
|
827
|
+
"form",
|
|
826
828
|
"forward",
|
|
827
829
|
"frame",
|
|
828
830
|
"framer",
|
|
@@ -1394,6 +1396,7 @@ LUCIDE_ICON_LIST = [
|
|
|
1394
1396
|
"school",
|
|
1395
1397
|
"scissors_line_dashed",
|
|
1396
1398
|
"scissors",
|
|
1399
|
+
"scooter",
|
|
1397
1400
|
"screen_share_off",
|
|
1398
1401
|
"screen_share",
|
|
1399
1402
|
"scroll_text",
|
|
@@ -1721,6 +1724,7 @@ LUCIDE_ICON_LIST = [
|
|
|
1721
1724
|
"utensils_crossed",
|
|
1722
1725
|
"utensils",
|
|
1723
1726
|
"utility_pole",
|
|
1727
|
+
"van",
|
|
1724
1728
|
"variable",
|
|
1725
1729
|
"vault",
|
|
1726
1730
|
"vector_square",
|
|
@@ -1751,12 +1755,15 @@ LUCIDE_ICON_LIST = [
|
|
|
1751
1755
|
"warehouse",
|
|
1752
1756
|
"washing_machine",
|
|
1753
1757
|
"watch",
|
|
1758
|
+
"waves_arrow_down",
|
|
1759
|
+
"waves_arrow_up",
|
|
1754
1760
|
"waves_ladder",
|
|
1755
1761
|
"waves",
|
|
1756
1762
|
"waypoints",
|
|
1757
1763
|
"webcam",
|
|
1758
1764
|
"webhook_off",
|
|
1759
1765
|
"webhook",
|
|
1766
|
+
"weight_tilde",
|
|
1760
1767
|
"weight",
|
|
1761
1768
|
"wheat_off",
|
|
1762
1769
|
"wheat",
|
|
@@ -11,7 +11,7 @@ from reflex.components.core.breakpoints import Breakpoints
|
|
|
11
11
|
from reflex.event import EventType, PointerEventInfo
|
|
12
12
|
from reflex.vars.base import Var
|
|
13
13
|
|
|
14
|
-
LUCIDE_LIBRARY = "lucide-react@0.
|
|
14
|
+
LUCIDE_LIBRARY = "lucide-react@0.556.0"
|
|
15
15
|
|
|
16
16
|
class LucideIconComponent(Component):
|
|
17
17
|
@classmethod
|
|
@@ -378,6 +378,7 @@ LUCIDE_ICON_LIST = [
|
|
|
378
378
|
"book_open_text",
|
|
379
379
|
"book_open",
|
|
380
380
|
"book_plus",
|
|
381
|
+
"book_search",
|
|
381
382
|
"book_text",
|
|
382
383
|
"book_type",
|
|
383
384
|
"book_up_2",
|
|
@@ -447,8 +448,8 @@ LUCIDE_ICON_LIST = [
|
|
|
447
448
|
"calendar_sync",
|
|
448
449
|
"calendar_x_2",
|
|
449
450
|
"calendar_x",
|
|
450
|
-
"calendars",
|
|
451
451
|
"calendar",
|
|
452
|
+
"calendars",
|
|
452
453
|
"camera_off",
|
|
453
454
|
"camera",
|
|
454
455
|
"candlestick_chart",
|
|
@@ -825,8 +826,8 @@ LUCIDE_ICON_LIST = [
|
|
|
825
826
|
"film",
|
|
826
827
|
"filter_x",
|
|
827
828
|
"filter",
|
|
828
|
-
"fingerprint",
|
|
829
829
|
"fingerprint_pattern",
|
|
830
|
+
"fingerprint",
|
|
830
831
|
"fire_extinguisher",
|
|
831
832
|
"fish_off",
|
|
832
833
|
"fish_symbol",
|
|
@@ -884,6 +885,7 @@ LUCIDE_ICON_LIST = [
|
|
|
884
885
|
"folders",
|
|
885
886
|
"footprints",
|
|
886
887
|
"forklift",
|
|
888
|
+
"form",
|
|
887
889
|
"forward",
|
|
888
890
|
"frame",
|
|
889
891
|
"framer",
|
|
@@ -1455,6 +1457,7 @@ LUCIDE_ICON_LIST = [
|
|
|
1455
1457
|
"school",
|
|
1456
1458
|
"scissors_line_dashed",
|
|
1457
1459
|
"scissors",
|
|
1460
|
+
"scooter",
|
|
1458
1461
|
"screen_share_off",
|
|
1459
1462
|
"screen_share",
|
|
1460
1463
|
"scroll_text",
|
|
@@ -1782,6 +1785,7 @@ LUCIDE_ICON_LIST = [
|
|
|
1782
1785
|
"utensils_crossed",
|
|
1783
1786
|
"utensils",
|
|
1784
1787
|
"utility_pole",
|
|
1788
|
+
"van",
|
|
1785
1789
|
"variable",
|
|
1786
1790
|
"vault",
|
|
1787
1791
|
"vector_square",
|
|
@@ -1812,12 +1816,15 @@ LUCIDE_ICON_LIST = [
|
|
|
1812
1816
|
"warehouse",
|
|
1813
1817
|
"washing_machine",
|
|
1814
1818
|
"watch",
|
|
1819
|
+
"waves_arrow_down",
|
|
1820
|
+
"waves_arrow_up",
|
|
1815
1821
|
"waves_ladder",
|
|
1816
1822
|
"waves",
|
|
1817
1823
|
"waypoints",
|
|
1818
1824
|
"webcam",
|
|
1819
1825
|
"webhook_off",
|
|
1820
1826
|
"webhook",
|
|
1827
|
+
"weight_tilde",
|
|
1821
1828
|
"weight",
|
|
1822
1829
|
"wheat_off",
|
|
1823
1830
|
"wheat",
|
|
@@ -494,8 +494,8 @@ let {_LANGUAGE!s} = match ? match[1] : '';
|
|
|
494
494
|
hooks = {}
|
|
495
495
|
from reflex.compiler.templates import _render_hooks
|
|
496
496
|
|
|
497
|
-
for
|
|
498
|
-
comp =
|
|
497
|
+
for component_factory in self.component_map.values():
|
|
498
|
+
comp = component_factory(_MOCK_ARG)
|
|
499
499
|
hooks.update(comp._get_all_hooks())
|
|
500
500
|
formatted_hooks = _render_hooks(hooks)
|
|
501
501
|
return f"""
|
|
@@ -288,11 +288,11 @@ def dynamic_plotly_import(name: str, package: str) -> str:
|
|
|
288
288
|
The dynamic import for the plotly component.
|
|
289
289
|
"""
|
|
290
290
|
library_import = f"import('{package}')"
|
|
291
|
-
mod_import = ".then((mod) =>
|
|
291
|
+
mod_import = ".then((mod) => createPlotlyComponent(mod))"
|
|
292
292
|
return f"""
|
|
293
|
-
const {name} = ClientSide(
|
|
293
|
+
const {name} = ClientSide(() =>
|
|
294
294
|
{library_import}{mod_import}
|
|
295
|
-
)
|
|
295
|
+
)
|
|
296
296
|
"""
|
|
297
297
|
|
|
298
298
|
|
|
@@ -8,7 +8,7 @@ from reflex.components.component import Component, MemoizationLeaf, NoSSRCompone
|
|
|
8
8
|
class Recharts(Component):
|
|
9
9
|
"""A component that wraps a recharts lib."""
|
|
10
10
|
|
|
11
|
-
library = "recharts@3.
|
|
11
|
+
library = "recharts@3.5.1"
|
|
12
12
|
|
|
13
13
|
def _get_style(self) -> dict:
|
|
14
14
|
return {"wrapperStyle": self.style}
|
|
@@ -17,7 +17,7 @@ class Recharts(Component):
|
|
|
17
17
|
class RechartsCharts(NoSSRComponent, MemoizationLeaf):
|
|
18
18
|
"""A component that wraps a recharts lib."""
|
|
19
19
|
|
|
20
|
-
library = "recharts@3.
|
|
20
|
+
library = "recharts@3.5.1"
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
LiteralAnimationEasing = Literal["ease", "ease-in", "ease-out", "ease-in-out", "linear"]
|
|
@@ -14,7 +14,7 @@ class Bun(SimpleNamespace):
|
|
|
14
14
|
"""Bun constants."""
|
|
15
15
|
|
|
16
16
|
# The Bun version.
|
|
17
|
-
VERSION = "1.3.
|
|
17
|
+
VERSION = "1.3.4"
|
|
18
18
|
|
|
19
19
|
# Min Bun Version
|
|
20
20
|
MIN_VERSION = "1.3.0"
|
|
@@ -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.10.1"
|
|
79
79
|
if (version := os.getenv("REACT_ROUTER_VERSION")) and version != default_version:
|
|
80
80
|
from reflex.utils import console
|
|
81
81
|
|
|
@@ -87,7 +87,7 @@ def _determine_react_router_version() -> str:
|
|
|
87
87
|
|
|
88
88
|
|
|
89
89
|
def _determine_react_version() -> str:
|
|
90
|
-
default_version = "19.2.
|
|
90
|
+
default_version = "19.2.1"
|
|
91
91
|
if (version := os.getenv("REACT_VERSION")) and version != default_version:
|
|
92
92
|
from reflex.utils import console
|
|
93
93
|
|
|
@@ -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
|
-
"vite": "npm:rolldown-vite@7.
|
|
146
|
+
"vite": "npm:rolldown-vite@7.2.10",
|
|
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
|
-
"cookie": "1.
|
|
152
|
-
"vite": "npm:rolldown-vite@7.
|
|
151
|
+
"cookie": "1.1.1",
|
|
152
|
+
"vite": "npm:rolldown-vite@7.2.10",
|
|
153
153
|
}
|
|
@@ -583,6 +583,9 @@ class EnvironmentVariables:
|
|
|
583
583
|
# Path to the alembic config file
|
|
584
584
|
ALEMBIC_CONFIG: EnvVar[ExistingPath] = env_var(Path(constants.ALEMBIC_CONFIG))
|
|
585
585
|
|
|
586
|
+
# Include schemas in alembic migrations.
|
|
587
|
+
ALEMBIC_INCLUDE_SCHEMAS: EnvVar[bool] = env_var(False)
|
|
588
|
+
|
|
586
589
|
# Disable SSL verification for HTTPX requests.
|
|
587
590
|
SSL_NO_VERIFY: EnvVar[bool] = env_var(False)
|
|
588
591
|
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import dataclasses
|
|
4
4
|
from collections.abc import Mapping
|
|
5
|
+
from types import MappingProxyType
|
|
5
6
|
from typing import TYPE_CHECKING
|
|
6
7
|
from urllib.parse import _NetlocResultMixinStr, parse_qsl, urlsplit
|
|
7
8
|
|
|
@@ -12,20 +13,34 @@ from reflex.utils.serializers import serializer
|
|
|
12
13
|
|
|
13
14
|
@dataclasses.dataclass(frozen=True, init=False)
|
|
14
15
|
class _FrozenDictStrStr(Mapping[str, str]):
|
|
15
|
-
_data:
|
|
16
|
+
_data: MappingProxyType[str, str]
|
|
16
17
|
|
|
17
18
|
def __init__(self, **kwargs):
|
|
18
|
-
object.__setattr__(
|
|
19
|
+
object.__setattr__(
|
|
20
|
+
self, "_data", MappingProxyType(dict(sorted(kwargs.items())))
|
|
21
|
+
)
|
|
19
22
|
|
|
20
23
|
def __getitem__(self, key: str) -> str:
|
|
21
|
-
return
|
|
24
|
+
return self._data[key]
|
|
22
25
|
|
|
23
26
|
def __iter__(self):
|
|
24
|
-
return (
|
|
27
|
+
return iter(self._data)
|
|
25
28
|
|
|
26
29
|
def __len__(self):
|
|
27
30
|
return len(self._data)
|
|
28
31
|
|
|
32
|
+
def __hash__(self) -> int:
|
|
33
|
+
return hash(frozenset(self._data.items()))
|
|
34
|
+
|
|
35
|
+
def __getstate__(self) -> object:
|
|
36
|
+
return dict(self._data)
|
|
37
|
+
|
|
38
|
+
def __setstate__(self, state: object) -> None:
|
|
39
|
+
if not isinstance(state, dict):
|
|
40
|
+
msg = "Invalid state for _FrozenDictStrStr"
|
|
41
|
+
raise TypeError(msg)
|
|
42
|
+
object.__setattr__(self, "_data", MappingProxyType(state))
|
|
43
|
+
|
|
29
44
|
|
|
30
45
|
@dataclasses.dataclass(frozen=True)
|
|
31
46
|
class _HeaderData:
|
|
@@ -170,7 +185,7 @@ class PageData:
|
|
|
170
185
|
|
|
171
186
|
@serializer(to=dict)
|
|
172
187
|
def _serialize_page_data(obj: PageData) -> dict:
|
|
173
|
-
return dataclasses.
|
|
188
|
+
return {key.name: getattr(obj, key.name) for key in dataclasses.fields(obj)}
|
|
174
189
|
|
|
175
190
|
|
|
176
191
|
@dataclasses.dataclass(frozen=True)
|
|
@@ -200,7 +215,7 @@ class SessionData:
|
|
|
200
215
|
|
|
201
216
|
@serializer(to=dict)
|
|
202
217
|
def _serialize_session_data(obj: SessionData) -> dict:
|
|
203
|
-
return dataclasses.
|
|
218
|
+
return {key.name: getattr(obj, key.name) for key in dataclasses.fields(obj)}
|
|
204
219
|
|
|
205
220
|
|
|
206
221
|
@dataclasses.dataclass(frozen=True)
|