reflex 0.8.16a1__tar.gz → 0.8.17__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.16a1 → reflex-0.8.17}/PKG-INFO +40 -11
- {reflex-0.8.16a1 → reflex-0.8.17}/README.md +37 -8
- {reflex-0.8.16a1 → reflex-0.8.17}/pyproject.toml +4 -4
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/.templates/web/utils/state.js +3 -1
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/app.py +11 -3
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/compiler/templates.py +12 -2
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/base/error_boundary.py +60 -43
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/window_events.py +30 -9
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/window_events.pyi +6 -5
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/lucide/icon.py +2 -1
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/lucide/icon.pyi +2 -1
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/plotly/plotly.py +9 -9
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/recharts/recharts.py +2 -2
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/constants/installer.py +2 -2
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/environment.py +31 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/istate/manager/__init__.py +24 -2
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/istate/manager/disk.py +15 -5
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/istate/manager/memory.py +13 -4
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/istate/manager/redis.py +27 -6
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/istate/proxy.py +14 -12
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/plugins/tailwind_v4.py +2 -2
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/state.py +49 -11
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/frontend_skeleton.py +2 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/.gitignore +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/LICENSE +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/.templates/apps/blank/assets/favicon.ico +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/.templates/apps/blank/code/__init__.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/.templates/apps/blank/code/blank.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/.templates/web/.gitignore +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/.templates/web/app/entry.client.js +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/.templates/web/app/routes.js +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/.templates/web/components/reflex/radix_themes_color_mode_provider.js +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/.templates/web/components/shiki/code.js +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/.templates/web/jsconfig.json +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/.templates/web/postcss.config.js +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/.templates/web/react-router.config.js +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/.templates/web/styles/__reflex_style_reset.css +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/.templates/web/utils/helpers/dataeditor.js +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/.templates/web/utils/helpers/debounce.js +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/.templates/web/utils/helpers/paste.js +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/.templates/web/utils/helpers/range.js +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/.templates/web/utils/helpers/throttle.js +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/.templates/web/utils/helpers/upload.js +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/.templates/web/utils/react-theme.js +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/.templates/web/vite-plugin-safari-cachebust.js +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/__init__.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/__init__.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/__main__.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/admin.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/app_mixins/__init__.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/app_mixins/lifespan.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/app_mixins/middleware.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/app_mixins/mixin.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/assets.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/base.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/compiler/__init__.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/compiler/compiler.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/compiler/utils.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/__init__.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/__init__.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/base/__init__.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/base/__init__.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/base/app_wrap.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/base/app_wrap.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/base/bare.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/base/body.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/base/body.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/base/document.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/base/document.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/base/error_boundary.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/base/fragment.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/base/fragment.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/base/link.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/base/link.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/base/meta.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/base/meta.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/base/script.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/base/script.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/base/strict_mode.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/base/strict_mode.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/component.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/__init__.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/__init__.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/auto_scroll.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/auto_scroll.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/banner.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/banner.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/breakpoints.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/clipboard.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/clipboard.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/colors.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/cond.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/debounce.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/debounce.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/foreach.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/helmet.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/helmet.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/html.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/html.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/layout/__init__.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/match.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/responsive.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/sticky.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/sticky.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/upload.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/upload.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/datadisplay/__init__.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/datadisplay/__init__.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/datadisplay/code.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/datadisplay/code.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/datadisplay/dataeditor.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/datadisplay/dataeditor.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/datadisplay/logo.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/datadisplay/shiki_code_block.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/datadisplay/shiki_code_block.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/dynamic.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/__init__.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/__init__.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/element.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/element.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/elements/__init__.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/elements/__init__.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/elements/base.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/elements/base.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/elements/forms.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/elements/forms.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/elements/inline.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/elements/inline.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/elements/media.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/elements/media.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/elements/metadata.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/elements/metadata.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/elements/other.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/elements/other.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/elements/scripts.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/elements/scripts.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/elements/sectioning.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/elements/sectioning.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/elements/tables.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/elements/tables.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/elements/typography.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/elements/typography.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/field.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/gridjs/__init__.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/gridjs/datatable.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/gridjs/datatable.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/literals.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/lucide/__init__.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/markdown/__init__.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/markdown/markdown.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/markdown/markdown.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/moment/__init__.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/moment/moment.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/moment/moment.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/plotly/__init__.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/plotly/plotly.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/props.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/__init__.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/__init__.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/primitives/__init__.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/primitives/__init__.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/primitives/accordion.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/primitives/accordion.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/primitives/base.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/primitives/base.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/primitives/dialog.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/primitives/dialog.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/primitives/drawer.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/primitives/drawer.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/primitives/form.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/primitives/form.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/primitives/progress.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/primitives/progress.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/primitives/slider.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/primitives/slider.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/__init__.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/__init__.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/base.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/base.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/color_mode.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/color_mode.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/__init__.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/__init__.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/alert_dialog.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/alert_dialog.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/aspect_ratio.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/aspect_ratio.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/avatar.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/avatar.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/badge.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/badge.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/button.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/button.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/callout.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/callout.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/card.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/card.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/checkbox.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/checkbox.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/checkbox_cards.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/checkbox_cards.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/checkbox_group.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/checkbox_group.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/context_menu.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/context_menu.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/data_list.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/data_list.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/dialog.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/dialog.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/dropdown_menu.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/dropdown_menu.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/hover_card.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/hover_card.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/icon_button.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/icon_button.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/inset.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/inset.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/popover.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/popover.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/progress.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/progress.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/radio.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/radio.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/radio_cards.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/radio_cards.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/radio_group.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/radio_group.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/scroll_area.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/scroll_area.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/segmented_control.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/segmented_control.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/select.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/select.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/separator.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/separator.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/skeleton.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/skeleton.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/slider.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/slider.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/spinner.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/spinner.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/switch.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/switch.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/table.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/table.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/tabs.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/tabs.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/text_area.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/text_area.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/text_field.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/text_field.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/tooltip.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/tooltip.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/layout/__init__.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/layout/__init__.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/layout/base.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/layout/base.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/layout/box.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/layout/box.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/layout/center.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/layout/center.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/layout/container.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/layout/container.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/layout/flex.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/layout/flex.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/layout/grid.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/layout/grid.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/layout/list.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/layout/list.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/layout/section.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/layout/section.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/layout/spacer.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/layout/spacer.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/layout/stack.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/layout/stack.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/typography/__init__.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/typography/__init__.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/typography/base.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/typography/blockquote.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/typography/blockquote.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/typography/code.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/typography/code.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/typography/heading.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/typography/heading.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/typography/link.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/typography/link.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/typography/text.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/typography/text.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/react_player/__init__.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/react_player/audio.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/react_player/audio.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/react_player/react_player.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/react_player/react_player.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/react_player/video.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/react_player/video.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/react_router/__init__.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/react_router/dom.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/react_router/dom.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/recharts/__init__.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/recharts/__init__.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/recharts/cartesian.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/recharts/cartesian.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/recharts/charts.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/recharts/charts.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/recharts/general.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/recharts/general.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/recharts/polar.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/recharts/polar.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/recharts/recharts.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/sonner/__init__.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/sonner/toast.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/sonner/toast.pyi +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/tags/__init__.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/tags/cond_tag.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/tags/iter_tag.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/tags/match_tag.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/tags/tag.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/tags/tagless.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/config.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/constants/__init__.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/constants/base.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/constants/colors.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/constants/compiler.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/constants/config.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/constants/custom_components.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/constants/event.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/constants/route.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/constants/state.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/constants/utils.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/custom_components/__init__.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/custom_components/custom_components.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/event.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/experimental/__init__.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/experimental/client_state.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/experimental/hooks.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/istate/__init__.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/istate/data.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/istate/dynamic.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/istate/storage.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/istate/wrappers.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/middleware/__init__.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/middleware/hydrate_middleware.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/middleware/middleware.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/model.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/page.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/plugins/__init__.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/plugins/_screenshot.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/plugins/base.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/plugins/shared_tailwind.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/plugins/sitemap.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/plugins/tailwind_v3.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/py.typed +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/reflex.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/route.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/style.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/testing.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/__init__.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/build.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/codespaces.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/compat.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/console.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/decorator.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/exceptions.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/exec.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/export.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/format.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/imports.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/js_runtimes.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/lazy_loader.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/misc.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/monitoring.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/net.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/path_ops.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/prerequisites.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/processes.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/pyi_generator.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/redir.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/registry.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/rename.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/serializers.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/telemetry.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/templates.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/token_manager.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/types.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/vars/__init__.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/vars/base.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/vars/color.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/vars/datetime.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/vars/dep_tracking.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/vars/function.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/vars/number.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/vars/object.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/reflex/vars/sequence.py +0 -0
- {reflex-0.8.16a1 → reflex-0.8.17}/scripts/hatch_build.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: reflex
|
|
3
|
-
Version: 0.8.
|
|
3
|
+
Version: 0.8.17
|
|
4
4
|
Summary: Web apps in pure Python.
|
|
5
5
|
Project-URL: homepage, https://reflex.dev
|
|
6
6
|
Project-URL: repository, https://github.com/reflex-dev/reflex
|
|
@@ -31,12 +31,12 @@ Requires-Dist: pydantic<3.0,>=1.10.21
|
|
|
31
31
|
Requires-Dist: python-multipart<1.0,>=0.0.20
|
|
32
32
|
Requires-Dist: python-socketio<6.0,>=5.12.0
|
|
33
33
|
Requires-Dist: redis<7.0,>=5.2.1
|
|
34
|
-
Requires-Dist: reflex-hosting-cli>=0.1.
|
|
34
|
+
Requires-Dist: reflex-hosting-cli>=0.1.57
|
|
35
35
|
Requires-Dist: rich<15,>=13
|
|
36
36
|
Requires-Dist: sqlmodel<0.1,>=0.0.27
|
|
37
37
|
Requires-Dist: starlette>=0.47.0
|
|
38
38
|
Requires-Dist: typing-extensions>=4.13.0
|
|
39
|
-
Requires-Dist: wrapt<
|
|
39
|
+
Requires-Dist: wrapt<3.0,>=1.17.0
|
|
40
40
|
Provides-Extra: db
|
|
41
41
|
Requires-Dist: alembic<2.0,>=1.15.2; extra == 'db'
|
|
42
42
|
Requires-Dist: pydantic<3.0,>=1.10.21; extra == 'db'
|
|
@@ -86,25 +86,50 @@ See our [architecture page](https://reflex.dev/blog/2024-03-21-reflex-architectu
|
|
|
86
86
|
|
|
87
87
|
## ⚙️ Installation
|
|
88
88
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
```bash
|
|
92
|
-
pip install reflex
|
|
93
|
-
```
|
|
89
|
+
**Important:** We strongly recommend using a virtual environment to ensure the `reflex` command is available in your PATH.
|
|
94
90
|
|
|
95
91
|
## 🥳 Create your first app
|
|
96
92
|
|
|
97
|
-
|
|
93
|
+
### 1. Create the project directory
|
|
98
94
|
|
|
99
|
-
|
|
95
|
+
Replace `my_app_name` with your project name:
|
|
100
96
|
|
|
101
97
|
```bash
|
|
102
98
|
mkdir my_app_name
|
|
103
99
|
cd my_app_name
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### 2. Set up a virtual environment
|
|
103
|
+
|
|
104
|
+
Create and activate virtual environment
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
# On Windows:
|
|
108
|
+
python -m venv .venv
|
|
109
|
+
.venv\Scripts\activate
|
|
110
|
+
|
|
111
|
+
# On macOS/Linux:
|
|
112
|
+
python3 -m venv .venv
|
|
113
|
+
source .venv/bin/activate
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### 3. Install Reflex
|
|
117
|
+
|
|
118
|
+
Reflex is available as a pip package (Requires Python 3.10+):
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
pip install reflex
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### 4. Initialize the project
|
|
125
|
+
|
|
126
|
+
This command initializes a template app in your new directory:
|
|
127
|
+
|
|
128
|
+
```bash
|
|
104
129
|
reflex init
|
|
105
130
|
```
|
|
106
131
|
|
|
107
|
-
|
|
132
|
+
### 5. Run the app
|
|
108
133
|
|
|
109
134
|
You can run this app in development mode:
|
|
110
135
|
|
|
@@ -116,6 +141,10 @@ You should see your app running at http://localhost:3000.
|
|
|
116
141
|
|
|
117
142
|
Now you can modify the source code in `my_app_name/my_app_name.py`. Reflex has fast refreshes so you can see your changes instantly when you save your code.
|
|
118
143
|
|
|
144
|
+
### Troubleshooting
|
|
145
|
+
|
|
146
|
+
If you installed Reflex without a virtual environment and the `reflex` command is not found, you can run commands using: `python3 -m reflex init` and `python3 -m reflex run`
|
|
147
|
+
|
|
119
148
|
## 🫧 Example App
|
|
120
149
|
|
|
121
150
|
Let's go over an example: creating an image generation UI around [DALL·E](https://platform.openai.com/docs/guides/images/image-generation?context=node). For simplicity, we just call the [OpenAI API](https://platform.openai.com/docs/api-reference/authentication), but you could replace this with an ML model run locally.
|
|
@@ -39,25 +39,50 @@ See our [architecture page](https://reflex.dev/blog/2024-03-21-reflex-architectu
|
|
|
39
39
|
|
|
40
40
|
## ⚙️ Installation
|
|
41
41
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
```bash
|
|
45
|
-
pip install reflex
|
|
46
|
-
```
|
|
42
|
+
**Important:** We strongly recommend using a virtual environment to ensure the `reflex` command is available in your PATH.
|
|
47
43
|
|
|
48
44
|
## 🥳 Create your first app
|
|
49
45
|
|
|
50
|
-
|
|
46
|
+
### 1. Create the project directory
|
|
51
47
|
|
|
52
|
-
|
|
48
|
+
Replace `my_app_name` with your project name:
|
|
53
49
|
|
|
54
50
|
```bash
|
|
55
51
|
mkdir my_app_name
|
|
56
52
|
cd my_app_name
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### 2. Set up a virtual environment
|
|
56
|
+
|
|
57
|
+
Create and activate virtual environment
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
# On Windows:
|
|
61
|
+
python -m venv .venv
|
|
62
|
+
.venv\Scripts\activate
|
|
63
|
+
|
|
64
|
+
# On macOS/Linux:
|
|
65
|
+
python3 -m venv .venv
|
|
66
|
+
source .venv/bin/activate
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### 3. Install Reflex
|
|
70
|
+
|
|
71
|
+
Reflex is available as a pip package (Requires Python 3.10+):
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
pip install reflex
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### 4. Initialize the project
|
|
78
|
+
|
|
79
|
+
This command initializes a template app in your new directory:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
57
82
|
reflex init
|
|
58
83
|
```
|
|
59
84
|
|
|
60
|
-
|
|
85
|
+
### 5. Run the app
|
|
61
86
|
|
|
62
87
|
You can run this app in development mode:
|
|
63
88
|
|
|
@@ -69,6 +94,10 @@ You should see your app running at http://localhost:3000.
|
|
|
69
94
|
|
|
70
95
|
Now you can modify the source code in `my_app_name/my_app_name.py`. Reflex has fast refreshes so you can see your changes instantly when you save your code.
|
|
71
96
|
|
|
97
|
+
### Troubleshooting
|
|
98
|
+
|
|
99
|
+
If you installed Reflex without a virtual environment and the `reflex` command is not found, you can run commands using: `python3 -m reflex init` and `python3 -m reflex run`
|
|
100
|
+
|
|
72
101
|
## 🫧 Example App
|
|
73
102
|
|
|
74
103
|
Let's go over an example: creating an image generation UI around [DALL·E](https://platform.openai.com/docs/guides/images/image-generation?context=node). For simplicity, we just call the [OpenAI API](https://platform.openai.com/docs/api-reference/authentication), but you could replace this with an ML model run locally.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "reflex"
|
|
3
|
-
version = "0.8.
|
|
3
|
+
version = "0.8.17"
|
|
4
4
|
description = "Web apps in pure Python."
|
|
5
5
|
license.text = "Apache-2.0"
|
|
6
6
|
authors = [
|
|
@@ -31,12 +31,12 @@ dependencies = [
|
|
|
31
31
|
"python-multipart >=0.0.20,<1.0",
|
|
32
32
|
"python-socketio >=5.12.0,<6.0",
|
|
33
33
|
"redis >=5.2.1,<7.0",
|
|
34
|
-
"reflex-hosting-cli >=0.1.
|
|
34
|
+
"reflex-hosting-cli >=0.1.57",
|
|
35
35
|
"rich >=13,<15",
|
|
36
36
|
"sqlmodel >=0.0.27,<0.1",
|
|
37
37
|
"starlette >=0.47.0",
|
|
38
38
|
"typing_extensions >=4.13.0",
|
|
39
|
-
"wrapt >=1.17.0,<
|
|
39
|
+
"wrapt >=1.17.0,<3.0",
|
|
40
40
|
]
|
|
41
41
|
|
|
42
42
|
classifiers = [
|
|
@@ -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.1"
|
|
247
247
|
hooks = [
|
|
248
248
|
{ id = "ruff-format", args = [
|
|
249
249
|
"reflex",
|
|
@@ -665,7 +665,9 @@ export const connect = async (
|
|
|
665
665
|
}
|
|
666
666
|
}
|
|
667
667
|
applyClientStorageDelta(client_storage, update.delta);
|
|
668
|
-
|
|
668
|
+
if (update.final !== null) {
|
|
669
|
+
event_processing = !update.final;
|
|
670
|
+
}
|
|
669
671
|
if (update.events) {
|
|
670
672
|
queueEvents(update.events, socket, false, navigate, params);
|
|
671
673
|
}
|
|
@@ -1556,11 +1556,14 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
1556
1556
|
)
|
|
1557
1557
|
|
|
1558
1558
|
@contextlib.asynccontextmanager
|
|
1559
|
-
async def modify_state(
|
|
1559
|
+
async def modify_state(
|
|
1560
|
+
self, token: str, background: bool = False
|
|
1561
|
+
) -> AsyncIterator[BaseState]:
|
|
1560
1562
|
"""Modify the state out of band.
|
|
1561
1563
|
|
|
1562
1564
|
Args:
|
|
1563
1565
|
token: The token to modify the state for.
|
|
1566
|
+
background: Whether the modification is happening in a background task.
|
|
1564
1567
|
|
|
1565
1568
|
Yields:
|
|
1566
1569
|
The state to modify.
|
|
@@ -1581,7 +1584,10 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
1581
1584
|
# When the state is modified reset dirty status and emit the delta to the frontend.
|
|
1582
1585
|
state._clean()
|
|
1583
1586
|
await self.event_namespace.emit_update(
|
|
1584
|
-
update=StateUpdate(
|
|
1587
|
+
update=StateUpdate(
|
|
1588
|
+
delta=delta,
|
|
1589
|
+
final=True if not background else None,
|
|
1590
|
+
),
|
|
1585
1591
|
token=token,
|
|
1586
1592
|
)
|
|
1587
1593
|
|
|
@@ -1758,7 +1764,9 @@ async def process(
|
|
|
1758
1764
|
constants.RouteVar.CLIENT_IP: client_ip,
|
|
1759
1765
|
})
|
|
1760
1766
|
# Get the state for the session exclusively.
|
|
1761
|
-
async with app.state_manager.modify_state(
|
|
1767
|
+
async with app.state_manager.modify_state(
|
|
1768
|
+
event.substate_token, event=event
|
|
1769
|
+
) as state:
|
|
1762
1770
|
# When this is a brand new instance of the state, signal the
|
|
1763
1771
|
# frontend to reload before processing it.
|
|
1764
1772
|
if (
|
|
@@ -4,7 +4,7 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
import json
|
|
6
6
|
from collections.abc import Iterable, Mapping
|
|
7
|
-
from typing import TYPE_CHECKING, Any
|
|
7
|
+
from typing import TYPE_CHECKING, Any, Literal
|
|
8
8
|
|
|
9
9
|
from reflex import constants
|
|
10
10
|
from reflex.constants import Hooks
|
|
@@ -492,13 +492,21 @@ def package_json_template(
|
|
|
492
492
|
})
|
|
493
493
|
|
|
494
494
|
|
|
495
|
-
def vite_config_template(
|
|
495
|
+
def vite_config_template(
|
|
496
|
+
base: str,
|
|
497
|
+
hmr: bool,
|
|
498
|
+
force_full_reload: bool,
|
|
499
|
+
experimental_hmr: bool,
|
|
500
|
+
sourcemap: bool | Literal["inline", "hidden"],
|
|
501
|
+
):
|
|
496
502
|
"""Template for vite.config.js.
|
|
497
503
|
|
|
498
504
|
Args:
|
|
499
505
|
base: The base path for the Vite config.
|
|
500
506
|
hmr: Whether to enable hot module replacement.
|
|
501
507
|
force_full_reload: Whether to force a full reload on changes.
|
|
508
|
+
experimental_hmr: Whether to enable experimental HMR features.
|
|
509
|
+
sourcemap: The sourcemap configuration.
|
|
502
510
|
|
|
503
511
|
Returns:
|
|
504
512
|
Rendered vite.config.js content as string.
|
|
@@ -550,6 +558,7 @@ export default defineConfig((config) => ({{
|
|
|
550
558
|
].concat({"[fullReload()]" if force_full_reload else "[]"}),
|
|
551
559
|
build: {{
|
|
552
560
|
assetsDir: "{base}assets".slice(1),
|
|
561
|
+
sourcemap: {"true" if sourcemap is True else "false" if sourcemap is False else repr(sourcemap)},
|
|
553
562
|
rollupOptions: {{
|
|
554
563
|
onwarn(warning, warn) {{
|
|
555
564
|
if (warning.code === "EVAL" && warning.id && warning.id.endsWith("state.js")) return;
|
|
@@ -570,6 +579,7 @@ export default defineConfig((config) => ({{
|
|
|
570
579
|
}},
|
|
571
580
|
experimental: {{
|
|
572
581
|
enableNativePlugin: false,
|
|
582
|
+
hmr: {"true" if experimental_hmr else "false"},
|
|
573
583
|
}},
|
|
574
584
|
server: {{
|
|
575
585
|
port: process.env.PORT,
|
|
@@ -4,7 +4,7 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
from reflex.components.component import Component
|
|
6
6
|
from reflex.components.datadisplay.logo import svg_logo
|
|
7
|
-
from reflex.components.el import a, button,
|
|
7
|
+
from reflex.components.el import a, button, div, h2, hr, p, pre, svg
|
|
8
8
|
from reflex.event import EventHandler, set_clipboard
|
|
9
9
|
from reflex.state import FrontendEventExceptionState
|
|
10
10
|
from reflex.vars.base import Var
|
|
@@ -65,53 +65,67 @@ class ErrorBoundary(Component):
|
|
|
65
65
|
div(
|
|
66
66
|
div(
|
|
67
67
|
div(
|
|
68
|
+
svg(
|
|
69
|
+
svg.circle(cx="12", cy="12", r="10"),
|
|
70
|
+
svg.path(d="M16 16s-1.5-2-4-2-4 2-4 2"),
|
|
71
|
+
svg.line(x1="9", x2="9.01", y1="9", y2="9"),
|
|
72
|
+
svg.line(x1="15", x2="15.01", y1="9", y2="9"),
|
|
73
|
+
xmlns="http://www.w3.org/2000/svg",
|
|
74
|
+
width="25vmin",
|
|
75
|
+
view_box="0 0 24 24",
|
|
76
|
+
class_name="lucide lucide-frown-icon lucide-frown",
|
|
77
|
+
custom_attrs={
|
|
78
|
+
"fill": "none",
|
|
79
|
+
"stroke": "currentColor",
|
|
80
|
+
"stroke-width": "2",
|
|
81
|
+
"stroke-linecap": "round",
|
|
82
|
+
"stroke-linejoin": "round",
|
|
83
|
+
},
|
|
84
|
+
),
|
|
68
85
|
h2(
|
|
69
86
|
"An error occurred while rendering this page.",
|
|
70
|
-
font_size="
|
|
87
|
+
font_size="5vmin",
|
|
71
88
|
font_weight="bold",
|
|
72
89
|
),
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
),
|
|
87
|
-
width="100%",
|
|
88
|
-
max_height="50vh",
|
|
89
|
-
overflow="auto",
|
|
90
|
-
background="#000",
|
|
91
|
-
color="#fff",
|
|
92
|
-
border_radius="0.25rem",
|
|
93
|
-
),
|
|
94
|
-
button(
|
|
95
|
-
"Copy",
|
|
96
|
-
on_click=set_clipboard(
|
|
97
|
-
Var(_js_expr=_ERROR_DISPLAY)
|
|
98
|
-
),
|
|
99
|
-
padding="0.35rem 0.75rem",
|
|
100
|
-
margin="0.5rem",
|
|
101
|
-
background="#fff",
|
|
102
|
-
color="#000",
|
|
103
|
-
border="1px solid #000",
|
|
104
|
-
border_radius="0.25rem",
|
|
105
|
-
font_weight="bold",
|
|
90
|
+
opacity="0.5",
|
|
91
|
+
display="flex",
|
|
92
|
+
gap="4vmin",
|
|
93
|
+
align_items="center",
|
|
94
|
+
),
|
|
95
|
+
p(
|
|
96
|
+
"This is an error with the application itself. Refreshing the page might help.",
|
|
97
|
+
opacity="0.75",
|
|
98
|
+
margin_block="1rem",
|
|
99
|
+
),
|
|
100
|
+
div(
|
|
101
|
+
div(
|
|
102
|
+
pre(
|
|
103
|
+
Var(_js_expr=_ERROR_DISPLAY),
|
|
106
104
|
),
|
|
105
|
+
padding="0.5rem",
|
|
106
|
+
width="fit-content",
|
|
107
107
|
),
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
108
|
+
width="100%",
|
|
109
|
+
background="color-mix(in srgb, currentColor 5%, transparent)",
|
|
110
|
+
max_height="15rem",
|
|
111
|
+
overflow="auto",
|
|
112
|
+
border_radius="0.4rem",
|
|
113
|
+
),
|
|
114
|
+
button(
|
|
115
|
+
"Copy",
|
|
116
|
+
on_click=set_clipboard(Var(_js_expr=_ERROR_DISPLAY)),
|
|
117
|
+
padding="0.35rem 1.35rem",
|
|
118
|
+
margin_block="0.5rem",
|
|
119
|
+
margin_inline_start="auto",
|
|
120
|
+
background="color-mix(in srgb, currentColor 15%, transparent)",
|
|
121
|
+
border_radius="0.4rem",
|
|
122
|
+
width="fit-content",
|
|
123
|
+
_hover={
|
|
124
|
+
"background": "color-mix(in srgb, currentColor 25%, transparent)"
|
|
125
|
+
},
|
|
126
|
+
_active={
|
|
127
|
+
"background": "color-mix(in srgb, currentColor 35%, transparent)"
|
|
128
|
+
},
|
|
115
129
|
),
|
|
116
130
|
hr(
|
|
117
131
|
border_color="currentColor",
|
|
@@ -131,7 +145,10 @@ class ErrorBoundary(Component):
|
|
|
131
145
|
),
|
|
132
146
|
display="flex",
|
|
133
147
|
flex_direction="column",
|
|
134
|
-
gap="
|
|
148
|
+
gap="0.5rem",
|
|
149
|
+
max_width="min(80ch, 90vw)",
|
|
150
|
+
border_radius="0.25rem",
|
|
151
|
+
padding="1rem",
|
|
135
152
|
),
|
|
136
153
|
height="100%",
|
|
137
154
|
width="100%",
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
"""Window event listener component for Reflex."""
|
|
2
2
|
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Any, cast
|
|
6
|
+
|
|
3
7
|
import reflex as rx
|
|
4
8
|
from reflex.components.base.fragment import Fragment
|
|
9
|
+
from reflex.components.component import StatefulComponent, field
|
|
5
10
|
from reflex.constants.compiler import Hooks
|
|
6
11
|
from reflex.event import key_event, no_args_event_spec
|
|
7
12
|
from reflex.vars.base import Var, VarData
|
|
@@ -61,6 +66,23 @@ class WindowEventListener(Fragment):
|
|
|
61
66
|
on_popstate: rx.EventHandler[no_args_event_spec]
|
|
62
67
|
on_storage: rx.EventHandler[_on_storage_spec]
|
|
63
68
|
|
|
69
|
+
hooks: list[str] = field(default_factory=list, is_javascript_property=False)
|
|
70
|
+
|
|
71
|
+
@classmethod
|
|
72
|
+
def create(cls, **props) -> WindowEventListener:
|
|
73
|
+
"""Create a WindowEventListener component.
|
|
74
|
+
|
|
75
|
+
Args:
|
|
76
|
+
**props: The props to set on the component.
|
|
77
|
+
|
|
78
|
+
Returns:
|
|
79
|
+
The created component.
|
|
80
|
+
"""
|
|
81
|
+
real_component = cast("WindowEventListener", super().create(**props))
|
|
82
|
+
hooks = StatefulComponent._fix_event_triggers(real_component)
|
|
83
|
+
real_component.hooks = hooks
|
|
84
|
+
return real_component
|
|
85
|
+
|
|
64
86
|
def _exclude_props(self) -> list[str]:
|
|
65
87
|
"""Exclude event handler props from being passed to Fragment.
|
|
66
88
|
|
|
@@ -69,31 +91,30 @@ class WindowEventListener(Fragment):
|
|
|
69
91
|
"""
|
|
70
92
|
return [*super()._exclude_props(), *self.event_triggers.keys()]
|
|
71
93
|
|
|
72
|
-
def add_hooks(self) -> list[str | Var[
|
|
94
|
+
def add_hooks(self) -> list[str | Var[Any]]:
|
|
73
95
|
"""Add hooks to register window event listeners.
|
|
74
96
|
|
|
75
97
|
Returns:
|
|
76
98
|
The hooks to add to the component.
|
|
77
99
|
"""
|
|
78
|
-
hooks = []
|
|
100
|
+
hooks: list[str | Var[Any]] = [*self.hooks]
|
|
79
101
|
|
|
80
102
|
for prop_name, event_trigger in self.event_triggers.items():
|
|
81
103
|
# Get JS event name: remove on_ prefix and underscores
|
|
82
104
|
event_name = prop_name.removeprefix("on_").replace("_", "")
|
|
83
105
|
|
|
84
106
|
hook_expr = f"""
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
107
|
+
useEffect(() => {{
|
|
108
|
+
if (typeof window === 'undefined') return;
|
|
109
|
+
const fn = {Var.create(event_trigger)};
|
|
110
|
+
window.addEventListener('{event_name}', fn);
|
|
111
|
+
return () => window.removeEventListener('{event_name}', fn);
|
|
112
|
+
}}, []);
|
|
91
113
|
"""
|
|
92
114
|
|
|
93
115
|
hooks.append(
|
|
94
116
|
Var(
|
|
95
117
|
hook_expr,
|
|
96
|
-
_var_type="str",
|
|
97
118
|
_var_data=VarData(position=Hooks.HookPosition.POST_TRIGGER),
|
|
98
119
|
)
|
|
99
120
|
)
|
|
@@ -12,11 +12,11 @@ from reflex.event import EventType, KeyInputInfo, PointerEventInfo
|
|
|
12
12
|
from reflex.vars.base import Var
|
|
13
13
|
|
|
14
14
|
class WindowEventListener(Fragment):
|
|
15
|
-
def add_hooks(self) -> list[str | Var[str]]: ...
|
|
16
15
|
@classmethod
|
|
17
16
|
def create(
|
|
18
17
|
cls,
|
|
19
18
|
*children,
|
|
19
|
+
hooks: list[str] | None = None,
|
|
20
20
|
style: Sequence[Mapping[str, Any]]
|
|
21
21
|
| Mapping[str, Any]
|
|
22
22
|
| Var[Mapping[str, Any]]
|
|
@@ -62,10 +62,9 @@ class WindowEventListener(Fragment):
|
|
|
62
62
|
on_visibility_change: EventType[()] | EventType[bool] | None = None,
|
|
63
63
|
**props,
|
|
64
64
|
) -> WindowEventListener:
|
|
65
|
-
"""Create
|
|
65
|
+
"""Create a WindowEventListener component.
|
|
66
66
|
|
|
67
67
|
Args:
|
|
68
|
-
*children: The children of the component.
|
|
69
68
|
on_resize: Event handlers
|
|
70
69
|
style: The style of the component.
|
|
71
70
|
key: A unique key for the component.
|
|
@@ -73,10 +72,12 @@ class WindowEventListener(Fragment):
|
|
|
73
72
|
ref: The Var to pass as the ref to the component.
|
|
74
73
|
class_name: The class name for the component.
|
|
75
74
|
custom_attrs: custom attribute
|
|
76
|
-
**props: The props
|
|
75
|
+
**props: The props to set on the component.
|
|
77
76
|
|
|
78
77
|
Returns:
|
|
79
|
-
The component.
|
|
78
|
+
The created component.
|
|
80
79
|
"""
|
|
81
80
|
|
|
81
|
+
def add_hooks(self) -> list[str | Var[Any]]: ...
|
|
82
|
+
|
|
82
83
|
window_event_listener = WindowEventListener.create
|
|
@@ -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.546.0"
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
class LucideIconComponent(Component):
|
|
@@ -1115,6 +1115,7 @@ LUCIDE_ICON_LIST = [
|
|
|
1115
1115
|
"minimize",
|
|
1116
1116
|
"minus",
|
|
1117
1117
|
"monitor_check",
|
|
1118
|
+
"monitor_cloud",
|
|
1118
1119
|
"monitor_cog",
|
|
1119
1120
|
"monitor_dot",
|
|
1120
1121
|
"monitor_down",
|
|
@@ -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.546.0"
|
|
15
15
|
|
|
16
16
|
class LucideIconComponent(Component):
|
|
17
17
|
@classmethod
|
|
@@ -1176,6 +1176,7 @@ LUCIDE_ICON_LIST = [
|
|
|
1176
1176
|
"minimize",
|
|
1177
1177
|
"minus",
|
|
1178
1178
|
"monitor_check",
|
|
1179
|
+
"monitor_cloud",
|
|
1179
1180
|
"monitor_cog",
|
|
1180
1181
|
"monitor_dot",
|
|
1181
1182
|
"monitor_down",
|
|
@@ -72,7 +72,7 @@ class Plotly(NoSSRComponent):
|
|
|
72
72
|
|
|
73
73
|
library = "react-plotly.js@2.6.0"
|
|
74
74
|
|
|
75
|
-
lib_dependencies: list[str] = ["plotly.js@3.1.
|
|
75
|
+
lib_dependencies: list[str] = ["plotly.js@3.1.2"]
|
|
76
76
|
|
|
77
77
|
tag = "Plot"
|
|
78
78
|
|
|
@@ -303,7 +303,7 @@ class PlotlyBasic(Plotly):
|
|
|
303
303
|
|
|
304
304
|
library = "react-plotly.js@2.6.0"
|
|
305
305
|
|
|
306
|
-
lib_dependencies: list[str] = ["plotly.js-basic-dist-min@3.1.
|
|
306
|
+
lib_dependencies: list[str] = ["plotly.js-basic-dist-min@3.1.2"]
|
|
307
307
|
|
|
308
308
|
def add_imports(self) -> ImportDict | list[ImportDict]:
|
|
309
309
|
"""Add imports for the plotly basic component.
|
|
@@ -329,7 +329,7 @@ class PlotlyCartesian(Plotly):
|
|
|
329
329
|
|
|
330
330
|
library = "react-plotly.js@2.6.0"
|
|
331
331
|
|
|
332
|
-
lib_dependencies: list[str] = ["plotly.js-cartesian-dist-min@3.1.
|
|
332
|
+
lib_dependencies: list[str] = ["plotly.js-cartesian-dist-min@3.1.2"]
|
|
333
333
|
|
|
334
334
|
def add_imports(self) -> ImportDict | list[ImportDict]:
|
|
335
335
|
"""Add imports for the plotly cartesian component.
|
|
@@ -355,7 +355,7 @@ class PlotlyGeo(Plotly):
|
|
|
355
355
|
|
|
356
356
|
library = "react-plotly.js@2.6.0"
|
|
357
357
|
|
|
358
|
-
lib_dependencies: list[str] = ["plotly.js-geo-dist-min@3.1.
|
|
358
|
+
lib_dependencies: list[str] = ["plotly.js-geo-dist-min@3.1.2"]
|
|
359
359
|
|
|
360
360
|
def add_imports(self) -> ImportDict | list[ImportDict]:
|
|
361
361
|
"""Add imports for the plotly geo component.
|
|
@@ -381,7 +381,7 @@ class PlotlyGl3d(Plotly):
|
|
|
381
381
|
|
|
382
382
|
library = "react-plotly.js@2.6.0"
|
|
383
383
|
|
|
384
|
-
lib_dependencies: list[str] = ["plotly.js-gl3d-dist-min@3.1.
|
|
384
|
+
lib_dependencies: list[str] = ["plotly.js-gl3d-dist-min@3.1.2"]
|
|
385
385
|
|
|
386
386
|
def add_imports(self) -> ImportDict | list[ImportDict]:
|
|
387
387
|
"""Add imports for the plotly 3d component.
|
|
@@ -407,7 +407,7 @@ class PlotlyGl2d(Plotly):
|
|
|
407
407
|
|
|
408
408
|
library = "react-plotly.js@2.6.0"
|
|
409
409
|
|
|
410
|
-
lib_dependencies: list[str] = ["plotly.js-gl2d-dist-min@3.1.
|
|
410
|
+
lib_dependencies: list[str] = ["plotly.js-gl2d-dist-min@3.1.2"]
|
|
411
411
|
|
|
412
412
|
def add_imports(self) -> ImportDict | list[ImportDict]:
|
|
413
413
|
"""Add imports for the plotly 2d component.
|
|
@@ -433,7 +433,7 @@ class PlotlyMapbox(Plotly):
|
|
|
433
433
|
|
|
434
434
|
library = "react-plotly.js@2.6.0"
|
|
435
435
|
|
|
436
|
-
lib_dependencies: list[str] = ["plotly.js-mapbox-dist-min@3.1.
|
|
436
|
+
lib_dependencies: list[str] = ["plotly.js-mapbox-dist-min@3.1.2"]
|
|
437
437
|
|
|
438
438
|
def add_imports(self) -> ImportDict | list[ImportDict]:
|
|
439
439
|
"""Add imports for the plotly mapbox component.
|
|
@@ -459,7 +459,7 @@ class PlotlyFinance(Plotly):
|
|
|
459
459
|
|
|
460
460
|
library = "react-plotly.js@2.6.0"
|
|
461
461
|
|
|
462
|
-
lib_dependencies: list[str] = ["plotly.js-finance-dist-min@3.1.
|
|
462
|
+
lib_dependencies: list[str] = ["plotly.js-finance-dist-min@3.1.2"]
|
|
463
463
|
|
|
464
464
|
def add_imports(self) -> ImportDict | list[ImportDict]:
|
|
465
465
|
"""Add imports for the plotly finance component.
|
|
@@ -485,7 +485,7 @@ class PlotlyStrict(Plotly):
|
|
|
485
485
|
|
|
486
486
|
library = "react-plotly.js@2.6.0"
|
|
487
487
|
|
|
488
|
-
lib_dependencies: list[str] = ["plotly.js-strict-dist-min@3.1.
|
|
488
|
+
lib_dependencies: list[str] = ["plotly.js-strict-dist-min@3.1.2"]
|
|
489
489
|
|
|
490
490
|
def add_imports(self) -> ImportDict | list[ImportDict]:
|
|
491
491
|
"""Add imports for the plotly strict component.
|
|
@@ -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.3.0"
|
|
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.3.0"
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
LiteralAnimationEasing = Literal["ease", "ease-in", "ease-out", "ease-in-out", "linear"]
|