reflex 0.4.4a2__tar.gz → 0.4.5__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.4.4a2 → reflex-0.4.5}/PKG-INFO +1 -1
- {reflex-0.4.4a2 → reflex-0.4.5}/pyproject.toml +1 -1
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/jinja/web/pages/stateful_component.js.jinja2 +5 -1
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/web/utils/state.js +2 -1
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/app.py +163 -102
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/app_module_for_backend.py +4 -2
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/compiler/compiler.py +103 -11
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/compiler/utils.py +16 -6
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/component.py +72 -14
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/core/upload.py +2 -2
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/core/upload.pyi +1 -1
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/el/elements/forms.py +1 -1
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/markdown/markdown.py +4 -2
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/radio_group.py +2 -1
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/select.py +7 -2
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/select.pyi +14 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/layout/list.py +31 -4
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/layout/list.pyi +53 -9
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/constants/installer.py +1 -1
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/constants/route.py +2 -2
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/event.py +4 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/model.py +88 -4
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/state.py +20 -5
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/testing.py +21 -1
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/utils/exec.py +9 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/utils/format.py +46 -19
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/utils/prerequisites.py +31 -10
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/utils/processes.py +9 -2
- reflex-0.4.5/reflex/utils/telemetry.py +150 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/vars.py +5 -3
- reflex-0.4.4a2/reflex/utils/telemetry.py +0 -110
- {reflex-0.4.4a2 → reflex-0.4.5}/LICENSE +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/README.md +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/blank/assets/favicon.ico +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/blank/code/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/blank/code/blank.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/demo/.gitignore +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/demo/assets/favicon.ico +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/demo/assets/github.svg +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/demo/assets/icon.svg +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/demo/assets/logo.svg +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/demo/assets/paneleft.svg +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/demo/code/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/demo/code/demo.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/demo/code/pages/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/demo/code/pages/chatapp.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/demo/code/pages/datatable.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/demo/code/pages/forms.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/demo/code/pages/graphing.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/demo/code/pages/home.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/demo/code/sidebar.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/demo/code/state.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/demo/code/states/form_state.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/demo/code/states/pie_state.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/demo/code/styles.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/demo/code/webui/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/demo/code/webui/components/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/demo/code/webui/components/chat.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/demo/code/webui/components/loading_icon.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/demo/code/webui/components/modal.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/demo/code/webui/components/navbar.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/demo/code/webui/components/sidebar.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/demo/code/webui/state.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/demo/code/webui/styles.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/sidebar/README.md +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/sidebar/assets/favicon.ico +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/sidebar/assets/github.svg +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/sidebar/assets/logo.svg +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/sidebar/assets/paneleft.svg +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/sidebar/assets/reflex_black.svg +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/sidebar/assets/reflex_white.svg +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/sidebar/code/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/sidebar/code/components/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/sidebar/code/components/sidebar.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/sidebar/code/pages/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/sidebar/code/pages/dashboard.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/sidebar/code/pages/index.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/sidebar/code/pages/settings.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/sidebar/code/sidebar.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/sidebar/code/styles.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/sidebar/code/templates/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/apps/sidebar/code/templates/template.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/jinja/app/rxconfig.py.jinja2 +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/jinja/custom_components/README.md.jinja2 +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/jinja/custom_components/__init__.py.jinja2 +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/jinja/custom_components/demo_app.py.jinja2 +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/jinja/custom_components/pyproject.toml.jinja2 +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/jinja/custom_components/src.py.jinja2 +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/jinja/web/package.json.jinja2 +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/jinja/web/pages/_app.js.jinja2 +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/jinja/web/pages/_document.js.jinja2 +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/jinja/web/pages/base_page.js.jinja2 +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/jinja/web/pages/component.js.jinja2 +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/jinja/web/pages/custom_component.js.jinja2 +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/jinja/web/pages/index.js.jinja2 +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/jinja/web/pages/stateful_components.js.jinja2 +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/jinja/web/pages/utils.js.jinja2 +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/jinja/web/styles/styles.css.jinja2 +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/jinja/web/tailwind.config.js.jinja2 +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/jinja/web/utils/context.js.jinja2 +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/jinja/web/utils/theme.js.jinja2 +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/web/.gitignore +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/web/components/reflex/chakra_color_mode_provider.js +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/web/components/reflex/radix_themes_color_mode_provider.js +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/web/jsconfig.json +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/web/next.config.js +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/web/postcss.config.js +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/web/styles/tailwind.css +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/web/utils/client_side_routing.js +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/web/utils/helpers/dataeditor.js +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/web/utils/helpers/range.js +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/__init__.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/__main__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/admin.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/app.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/base.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/compiler/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/compiler/templates.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/base/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/base/app_wrap.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/base/app_wrap.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/base/bare.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/base/body.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/base/body.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/base/document.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/base/document.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/base/fragment.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/base/fragment.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/base/head.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/base/head.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/base/link.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/base/link.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/base/meta.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/base/meta.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/base/script.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/base/script.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/base.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/base.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/datadisplay/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/datadisplay/badge.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/datadisplay/badge.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/datadisplay/code.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/datadisplay/code.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/datadisplay/divider.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/datadisplay/divider.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/datadisplay/keyboard_key.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/datadisplay/keyboard_key.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/datadisplay/list.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/datadisplay/list.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/datadisplay/stat.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/datadisplay/stat.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/datadisplay/table.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/datadisplay/table.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/datadisplay/tag.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/datadisplay/tag.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/disclosure/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/disclosure/accordion.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/disclosure/accordion.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/disclosure/tabs.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/disclosure/tabs.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/disclosure/transition.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/disclosure/transition.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/disclosure/visuallyhidden.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/disclosure/visuallyhidden.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/feedback/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/feedback/alert.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/feedback/alert.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/feedback/circularprogress.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/feedback/circularprogress.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/feedback/progress.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/feedback/progress.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/feedback/skeleton.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/feedback/skeleton.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/feedback/spinner.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/feedback/spinner.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/forms/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/forms/button.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/forms/button.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/forms/checkbox.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/forms/checkbox.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/forms/colormodeswitch.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/forms/colormodeswitch.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/forms/date_picker.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/forms/date_picker.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/forms/date_time_picker.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/forms/date_time_picker.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/forms/editable.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/forms/editable.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/forms/email.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/forms/email.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/forms/form.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/forms/form.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/forms/iconbutton.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/forms/iconbutton.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/forms/input.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/forms/input.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/forms/multiselect.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/forms/numberinput.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/forms/numberinput.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/forms/password.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/forms/password.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/forms/pininput.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/forms/pininput.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/forms/radio.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/forms/radio.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/forms/rangeslider.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/forms/rangeslider.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/forms/select.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/forms/select.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/forms/slider.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/forms/slider.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/forms/switch.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/forms/switch.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/forms/textarea.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/forms/textarea.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/forms/time_picker.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/forms/time_picker.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/layout/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/layout/aspect_ratio.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/layout/aspect_ratio.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/layout/box.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/layout/box.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/layout/card.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/layout/card.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/layout/center.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/layout/center.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/layout/container.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/layout/container.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/layout/flex.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/layout/flex.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/layout/grid.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/layout/grid.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/layout/spacer.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/layout/spacer.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/layout/stack.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/layout/stack.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/layout/wrap.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/layout/wrap.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/media/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/media/avatar.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/media/avatar.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/media/icon.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/media/icon.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/media/image.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/media/image.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/navigation/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/navigation/breadcrumb.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/navigation/breadcrumb.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/navigation/link.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/navigation/link.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/navigation/linkoverlay.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/navigation/linkoverlay.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/navigation/stepper.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/navigation/stepper.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/overlay/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/overlay/alertdialog.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/overlay/alertdialog.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/overlay/drawer.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/overlay/drawer.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/overlay/menu.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/overlay/menu.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/overlay/modal.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/overlay/modal.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/overlay/popover.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/overlay/popover.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/overlay/tooltip.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/overlay/tooltip.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/typography/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/typography/heading.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/typography/heading.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/typography/highlight.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/typography/highlight.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/typography/span.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/typography/span.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/typography/text.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/chakra/typography/text.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/core/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/core/banner.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/core/banner.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/core/client_side_routing.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/core/client_side_routing.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/core/colors.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/core/cond.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/core/debounce.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/core/debounce.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/core/foreach.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/core/html.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/core/html.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/core/layout/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/core/match.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/core/responsive.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/datadisplay/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/datadisplay/code.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/datadisplay/code.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/datadisplay/dataeditor.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/datadisplay/dataeditor.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/el/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/el/constants/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/el/constants/html.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/el/constants/react.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/el/constants/reflex.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/el/element.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/el/element.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/el/elements/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/el/elements/base.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/el/elements/base.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/el/elements/forms.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/el/elements/inline.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/el/elements/inline.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/el/elements/media.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/el/elements/media.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/el/elements/metadata.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/el/elements/metadata.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/el/elements/other.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/el/elements/other.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/el/elements/scripts.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/el/elements/scripts.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/el/elements/sectioning.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/el/elements/sectioning.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/el/elements/tables.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/el/elements/tables.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/el/elements/typography.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/el/elements/typography.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/gridjs/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/gridjs/datatable.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/gridjs/datatable.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/literals.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/lucide/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/lucide/icon.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/lucide/icon.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/markdown/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/markdown/markdown.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/media/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/media/icon.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/moment/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/moment/moment.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/moment/moment.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/next/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/next/base.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/next/base.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/next/image.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/next/image.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/next/link.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/next/link.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/next/video.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/next/video.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/plotly/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/plotly/plotly.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/plotly/plotly.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/primitives/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/primitives/accordion.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/primitives/accordion.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/primitives/base.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/primitives/base.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/primitives/drawer.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/primitives/drawer.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/primitives/form.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/primitives/form.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/primitives/progress.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/primitives/progress.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/primitives/slider.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/primitives/slider.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/base.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/base.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/color_mode.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/color_mode.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/alert_dialog.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/alert_dialog.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/alertdialog.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/aspect_ratio.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/aspect_ratio.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/aspectratio.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/avatar.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/avatar.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/badge.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/badge.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/button.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/button.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/callout.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/callout.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/card.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/card.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/checkbox.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/checkbox.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/context_menu.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/context_menu.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/contextmenu.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/dialog.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/dialog.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/dropdown_menu.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/dropdown_menu.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/dropdownmenu.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/hover_card.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/hover_card.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/hovercard.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/icon_button.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/icon_button.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/iconbutton.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/inset.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/inset.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/popover.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/popover.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/radio_group.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/radiogroup.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/scroll_area.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/scroll_area.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/scrollarea.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/separator.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/separator.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/slider.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/slider.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/switch.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/switch.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/table.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/table.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/tabs.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/tabs.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/text_area.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/text_area.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/text_field.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/text_field.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/textfield.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/tooltip.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/components/tooltip.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/layout/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/layout/base.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/layout/base.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/layout/box.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/layout/box.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/layout/center.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/layout/center.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/layout/container.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/layout/container.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/layout/flex.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/layout/flex.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/layout/grid.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/layout/grid.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/layout/section.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/layout/section.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/layout/spacer.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/layout/spacer.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/layout/stack.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/layout/stack.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/typography/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/typography/base.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/typography/blockquote.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/typography/blockquote.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/typography/code.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/typography/code.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/typography/em.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/typography/heading.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/typography/heading.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/typography/kbd.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/typography/link.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/typography/link.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/typography/quote.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/typography/strong.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/typography/text.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/radix/themes/typography/text.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/react_player/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/react_player/audio.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/react_player/audio.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/react_player/react_player.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/react_player/react_player.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/react_player/video.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/react_player/video.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/recharts/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/recharts/cartesian.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/recharts/cartesian.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/recharts/charts.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/recharts/charts.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/recharts/general.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/recharts/general.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/recharts/polar.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/recharts/polar.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/recharts/recharts.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/recharts/recharts.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/suneditor/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/suneditor/editor.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/suneditor/editor.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/tags/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/tags/cond_tag.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/tags/iter_tag.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/tags/match_tag.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/tags/tag.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/components/tags/tagless.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/config.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/config.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/constants/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/constants/base.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/constants/colors.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/constants/compiler.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/constants/config.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/constants/custom_components.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/constants/event.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/constants/style.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/custom_components/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/custom_components/custom_components.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/middleware/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/middleware/hydrate_middleware.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/middleware/middleware.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/page.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/page.pyi +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/reflex.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/route.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/style.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/utils/__init__.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/utils/build.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/utils/console.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/utils/exceptions.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/utils/export.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/utils/imports.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/utils/path_ops.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/utils/serializers.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/utils/types.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/utils/watch.py +0 -0
- {reflex-0.4.4a2 → reflex-0.4.5}/reflex/vars.pyi +0 -0
{reflex-0.4.4a2 → reflex-0.4.5}/reflex/.templates/jinja/web/pages/stateful_component.js.jinja2
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{% import 'web/pages/utils.js.jinja2' as utils %}
|
|
2
2
|
|
|
3
3
|
export function {{tag_name}} () {
|
|
4
|
-
{% for hook in component.
|
|
4
|
+
{% for hook in component.get_hooks_internal() %}
|
|
5
5
|
{{ hook }}
|
|
6
6
|
{% endfor %}
|
|
7
7
|
|
|
@@ -9,6 +9,10 @@ export function {{tag_name}} () {
|
|
|
9
9
|
{{ hook }}
|
|
10
10
|
{% endfor %}
|
|
11
11
|
|
|
12
|
+
{% for hook in component.get_hooks() %}
|
|
13
|
+
{{ hook }}
|
|
14
|
+
{% endfor %}
|
|
15
|
+
|
|
12
16
|
return (
|
|
13
17
|
{{utils.render(component.render(), indent_width=0)}}
|
|
14
18
|
)
|
|
@@ -161,7 +161,8 @@ export const applyEvent = async (event, socket) => {
|
|
|
161
161
|
if (event.name == "_download") {
|
|
162
162
|
const a = document.createElement("a");
|
|
163
163
|
a.hidden = true;
|
|
164
|
-
|
|
164
|
+
// Special case when linking to uploaded files
|
|
165
|
+
a.href = event.payload.url.replace("${getBackendURL(env.UPLOAD)}", getBackendURL(env.UPLOAD))
|
|
165
166
|
a.download = event.payload.filename;
|
|
166
167
|
a.click();
|
|
167
168
|
a.remove();
|
|
@@ -7,7 +7,9 @@ import concurrent.futures
|
|
|
7
7
|
import contextlib
|
|
8
8
|
import copy
|
|
9
9
|
import functools
|
|
10
|
+
import multiprocessing
|
|
10
11
|
import os
|
|
12
|
+
import platform
|
|
11
13
|
from typing import (
|
|
12
14
|
Any,
|
|
13
15
|
AsyncIterator,
|
|
@@ -37,6 +39,7 @@ from reflex.admin import AdminDash
|
|
|
37
39
|
from reflex.base import Base
|
|
38
40
|
from reflex.compiler import compiler
|
|
39
41
|
from reflex.compiler import utils as compiler_utils
|
|
42
|
+
from reflex.compiler.compiler import ExecutorSafeFunctions
|
|
40
43
|
from reflex.components import connection_modal, connection_pulser
|
|
41
44
|
from reflex.components.base.app_wrap import AppWrap
|
|
42
45
|
from reflex.components.base.fragment import Fragment
|
|
@@ -74,7 +77,7 @@ from reflex.state import (
|
|
|
74
77
|
code_uses_state_contexts,
|
|
75
78
|
)
|
|
76
79
|
from reflex.utils import console, exceptions, format, prerequisites, types
|
|
77
|
-
from reflex.utils.exec import is_testing_env
|
|
80
|
+
from reflex.utils.exec import is_testing_env, should_skip_compile
|
|
78
81
|
from reflex.utils.imports import ImportVar
|
|
79
82
|
|
|
80
83
|
# Define custom types.
|
|
@@ -408,8 +411,8 @@ class App(Base):
|
|
|
408
411
|
self,
|
|
409
412
|
component: Component | ComponentCallable,
|
|
410
413
|
route: str | None = None,
|
|
411
|
-
title: str =
|
|
412
|
-
description: str =
|
|
414
|
+
title: str | None = None,
|
|
415
|
+
description: str | None = None,
|
|
413
416
|
image: str = constants.DefaultPage.IMAGE,
|
|
414
417
|
on_load: (
|
|
415
418
|
EventHandler | EventSpec | list[EventHandler | EventSpec] | None
|
|
@@ -468,13 +471,23 @@ class App(Base):
|
|
|
468
471
|
|
|
469
472
|
component = OverlayFragment.create(component)
|
|
470
473
|
|
|
474
|
+
meta_args = {
|
|
475
|
+
"title": (
|
|
476
|
+
title
|
|
477
|
+
if title is not None
|
|
478
|
+
else format.make_default_page_title(get_config().app_name, route)
|
|
479
|
+
),
|
|
480
|
+
"image": image,
|
|
481
|
+
"meta": meta,
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
if description is not None:
|
|
485
|
+
meta_args["description"] = description
|
|
486
|
+
|
|
471
487
|
# Add meta information to the component.
|
|
472
488
|
compiler_utils.add_meta(
|
|
473
489
|
component,
|
|
474
|
-
|
|
475
|
-
image=image,
|
|
476
|
-
description=description,
|
|
477
|
-
meta=meta,
|
|
490
|
+
**meta_args,
|
|
478
491
|
)
|
|
479
492
|
|
|
480
493
|
# Add script tags if given
|
|
@@ -659,7 +672,7 @@ class App(Base):
|
|
|
659
672
|
Whether the app should be compiled.
|
|
660
673
|
"""
|
|
661
674
|
# Check the environment variable.
|
|
662
|
-
if
|
|
675
|
+
if should_skip_compile():
|
|
663
676
|
return False
|
|
664
677
|
|
|
665
678
|
# Check the nocompile file.
|
|
@@ -706,16 +719,25 @@ class App(Base):
|
|
|
706
719
|
)
|
|
707
720
|
return
|
|
708
721
|
|
|
722
|
+
def _apply_decorated_pages(self):
|
|
723
|
+
"""Add @rx.page decorated pages to the app.
|
|
724
|
+
|
|
725
|
+
This has to be done in the MainThread for py38 and py39 compatibility, so the
|
|
726
|
+
decorated pages are added to the app before the app is compiled (in a thread)
|
|
727
|
+
to workaround REF-2172.
|
|
728
|
+
|
|
729
|
+
This can move back into `compile_` when py39 support is dropped.
|
|
730
|
+
"""
|
|
731
|
+
# Add the @rx.page decorated pages to collect on_load events.
|
|
732
|
+
for render, kwargs in DECORATED_PAGES:
|
|
733
|
+
self.add_page(render, **kwargs)
|
|
734
|
+
|
|
709
735
|
def compile_(self):
|
|
710
736
|
"""Compile the app and output it to the pages folder.
|
|
711
737
|
|
|
712
738
|
Raises:
|
|
713
739
|
RuntimeError: When any page uses state, but no rx.State subclass is defined.
|
|
714
740
|
"""
|
|
715
|
-
# add the pages before the compile check so App know onload methods
|
|
716
|
-
for render, kwargs in DECORATED_PAGES:
|
|
717
|
-
self.add_page(render, **kwargs)
|
|
718
|
-
|
|
719
741
|
# Render a default 404 page if the user didn't supply one
|
|
720
742
|
if constants.Page404.SLUG not in self.pages:
|
|
721
743
|
self.add_custom_404_page()
|
|
@@ -735,6 +757,17 @@ class App(Base):
|
|
|
735
757
|
TimeElapsedColumn(),
|
|
736
758
|
)
|
|
737
759
|
|
|
760
|
+
# try to be somewhat accurate - but still not 100%
|
|
761
|
+
adhoc_steps_without_executor = 6
|
|
762
|
+
fixed_pages_within_executor = 5
|
|
763
|
+
progress.start()
|
|
764
|
+
task = progress.add_task(
|
|
765
|
+
"Compiling:",
|
|
766
|
+
total=len(self.pages)
|
|
767
|
+
+ fixed_pages_within_executor
|
|
768
|
+
+ adhoc_steps_without_executor,
|
|
769
|
+
)
|
|
770
|
+
|
|
738
771
|
# Get the env mode.
|
|
739
772
|
config = get_config()
|
|
740
773
|
|
|
@@ -750,6 +783,8 @@ class App(Base):
|
|
|
750
783
|
# If a theme component was provided, wrap the app with it
|
|
751
784
|
app_wrappers[(20, "Theme")] = self.theme
|
|
752
785
|
|
|
786
|
+
progress.advance(task)
|
|
787
|
+
|
|
753
788
|
# Fix up the style.
|
|
754
789
|
self.style = evaluate_style_namespaces(self.style)
|
|
755
790
|
|
|
@@ -757,133 +792,156 @@ class App(Base):
|
|
|
757
792
|
all_imports = {}
|
|
758
793
|
custom_components = set()
|
|
759
794
|
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
task = progress.add_task("Compiling:", total=len(self.pages) + fixed_pages)
|
|
795
|
+
for _route, component in self.pages.items():
|
|
796
|
+
# Merge the component style with the app style.
|
|
797
|
+
component.add_style(self.style)
|
|
764
798
|
|
|
765
|
-
|
|
766
|
-
progress.advance(task)
|
|
799
|
+
component.apply_theme(self.theme)
|
|
767
800
|
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
component.add_style(self.style)
|
|
801
|
+
# Add component.get_imports() to all_imports.
|
|
802
|
+
all_imports.update(component.get_imports())
|
|
771
803
|
|
|
772
|
-
|
|
804
|
+
# Add the app wrappers from this component.
|
|
805
|
+
app_wrappers.update(component.get_app_wrap_components())
|
|
773
806
|
|
|
774
|
-
|
|
775
|
-
|
|
807
|
+
# Add the custom components from the page to the set.
|
|
808
|
+
custom_components |= component.get_custom_components()
|
|
776
809
|
|
|
777
|
-
|
|
778
|
-
app_wrappers.update(component.get_app_wrap_components())
|
|
810
|
+
progress.advance(task)
|
|
779
811
|
|
|
780
|
-
|
|
781
|
-
|
|
812
|
+
# Perform auto-memoization of stateful components.
|
|
813
|
+
(
|
|
814
|
+
stateful_components_path,
|
|
815
|
+
stateful_components_code,
|
|
816
|
+
page_components,
|
|
817
|
+
) = compiler.compile_stateful_components(self.pages.values())
|
|
782
818
|
|
|
783
|
-
|
|
784
|
-
(
|
|
785
|
-
stateful_components_path,
|
|
786
|
-
stateful_components_code,
|
|
787
|
-
page_components,
|
|
788
|
-
) = compiler.compile_stateful_components(self.pages.values())
|
|
819
|
+
progress.advance(task)
|
|
789
820
|
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
"subclass of rx.State must be defined in the app."
|
|
798
|
-
)
|
|
799
|
-
compile_results.append((stateful_components_path, stateful_components_code))
|
|
821
|
+
# Catch "static" apps (that do not define a rx.State subclass) which are trying to access rx.State.
|
|
822
|
+
if code_uses_state_contexts(stateful_components_code) and self.state is None:
|
|
823
|
+
raise RuntimeError(
|
|
824
|
+
"To access rx.State in frontend components, at least one "
|
|
825
|
+
"subclass of rx.State must be defined in the app."
|
|
826
|
+
)
|
|
827
|
+
compile_results.append((stateful_components_path, stateful_components_code))
|
|
800
828
|
|
|
801
|
-
|
|
829
|
+
# Compile the root document before fork.
|
|
830
|
+
compile_results.append(
|
|
831
|
+
compiler.compile_document_root(
|
|
832
|
+
self.head_components,
|
|
833
|
+
html_lang=self.html_lang,
|
|
834
|
+
html_custom_attrs=self.html_custom_attrs, # type: ignore
|
|
835
|
+
)
|
|
836
|
+
)
|
|
837
|
+
|
|
838
|
+
# Compile the contexts before fork.
|
|
839
|
+
compile_results.append(
|
|
840
|
+
compiler.compile_contexts(self.state, self.theme),
|
|
841
|
+
)
|
|
842
|
+
|
|
843
|
+
app_root = self._app_root(app_wrappers=app_wrappers)
|
|
844
|
+
|
|
845
|
+
progress.advance(task)
|
|
846
|
+
|
|
847
|
+
# Prepopulate the global ExecutorSafeFunctions class with input data required by the compile functions.
|
|
848
|
+
# This is required for multiprocessing to work, in presence of non-picklable inputs.
|
|
849
|
+
for route, component in zip(self.pages, page_components):
|
|
850
|
+
ExecutorSafeFunctions.COMPILE_PAGE_ARGS_BY_ROUTE[route] = (
|
|
851
|
+
route,
|
|
852
|
+
component,
|
|
853
|
+
self.state,
|
|
854
|
+
)
|
|
802
855
|
|
|
803
|
-
|
|
804
|
-
|
|
856
|
+
ExecutorSafeFunctions.COMPILE_APP_APP_ROOT = app_root
|
|
857
|
+
ExecutorSafeFunctions.CUSTOM_COMPONENTS = custom_components
|
|
858
|
+
ExecutorSafeFunctions.STYLE = self.style
|
|
859
|
+
|
|
860
|
+
# Use a forking process pool, if possible. Much faster, especially for large sites.
|
|
861
|
+
# Fallback to ThreadPoolExecutor as something that will always work.
|
|
862
|
+
executor = None
|
|
863
|
+
if (
|
|
864
|
+
platform.system() in ("Linux", "Darwin")
|
|
865
|
+
and os.environ.get("REFLEX_COMPILE_PROCESSES") is not None
|
|
866
|
+
):
|
|
867
|
+
executor = concurrent.futures.ProcessPoolExecutor(
|
|
868
|
+
max_workers=int(os.environ.get("REFLEX_COMPILE_PROCESSES", 0)) or None,
|
|
869
|
+
mp_context=multiprocessing.get_context("fork"),
|
|
870
|
+
)
|
|
871
|
+
else:
|
|
872
|
+
executor = concurrent.futures.ThreadPoolExecutor(
|
|
873
|
+
max_workers=int(os.environ.get("REFLEX_COMPILE_THREADS", 0)) or None,
|
|
874
|
+
)
|
|
805
875
|
|
|
806
|
-
|
|
876
|
+
with executor:
|
|
877
|
+
result_futures = []
|
|
878
|
+
custom_components_future = None
|
|
807
879
|
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
f
|
|
814
|
-
f.add_done_callback(mark_complete)
|
|
880
|
+
def _mark_complete(_=None):
|
|
881
|
+
progress.advance(task)
|
|
882
|
+
|
|
883
|
+
def _submit_work(fn, *args, **kwargs):
|
|
884
|
+
f = executor.submit(fn, *args, **kwargs)
|
|
885
|
+
f.add_done_callback(_mark_complete)
|
|
815
886
|
result_futures.append(f)
|
|
816
887
|
|
|
817
888
|
# Compile all page components.
|
|
818
|
-
for route
|
|
819
|
-
|
|
820
|
-
compiler.compile_page,
|
|
821
|
-
route,
|
|
822
|
-
component,
|
|
823
|
-
self.state,
|
|
824
|
-
)
|
|
889
|
+
for route in self.pages:
|
|
890
|
+
_submit_work(ExecutorSafeFunctions.compile_page, route)
|
|
825
891
|
|
|
826
892
|
# Compile the app wrapper.
|
|
827
|
-
|
|
828
|
-
submit_work(compiler.compile_app, app_root)
|
|
893
|
+
_submit_work(ExecutorSafeFunctions.compile_app)
|
|
829
894
|
|
|
830
895
|
# Compile the custom components.
|
|
831
|
-
|
|
896
|
+
custom_components_future = executor.submit(
|
|
897
|
+
ExecutorSafeFunctions.compile_custom_components,
|
|
898
|
+
)
|
|
899
|
+
custom_components_future.add_done_callback(_mark_complete)
|
|
832
900
|
|
|
833
901
|
# Compile the root stylesheet with base styles.
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
# Compile the root document.
|
|
837
|
-
submit_work(
|
|
838
|
-
compiler.compile_document_root,
|
|
839
|
-
self.head_components,
|
|
840
|
-
html_lang=self.html_lang,
|
|
841
|
-
html_custom_attrs=self.html_custom_attrs,
|
|
842
|
-
)
|
|
902
|
+
_submit_work(compiler.compile_root_stylesheet, self.stylesheets)
|
|
843
903
|
|
|
844
904
|
# Compile the theme.
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
# Compile the contexts.
|
|
848
|
-
submit_work(compiler.compile_contexts, self.state, self.theme)
|
|
905
|
+
_submit_work(ExecutorSafeFunctions.compile_theme)
|
|
849
906
|
|
|
850
907
|
# Compile the Tailwind config.
|
|
851
908
|
if config.tailwind is not None:
|
|
852
909
|
config.tailwind["content"] = config.tailwind.get(
|
|
853
910
|
"content", constants.Tailwind.CONTENT
|
|
854
911
|
)
|
|
855
|
-
|
|
912
|
+
_submit_work(compiler.compile_tailwind, config.tailwind)
|
|
856
913
|
else:
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
# Get imports from AppWrap components.
|
|
860
|
-
all_imports.update(app_root.get_imports())
|
|
861
|
-
|
|
862
|
-
# Iterate through all the custom components and add their imports to the all_imports.
|
|
863
|
-
for component in custom_components:
|
|
864
|
-
all_imports.update(component.get_imports())
|
|
914
|
+
_submit_work(compiler.remove_tailwind_from_postcss)
|
|
865
915
|
|
|
866
916
|
# Wait for all compilation tasks to complete.
|
|
867
917
|
for future in concurrent.futures.as_completed(result_futures):
|
|
868
918
|
compile_results.append(future.result())
|
|
869
919
|
|
|
870
|
-
#
|
|
871
|
-
|
|
920
|
+
# Special case for custom_components, since we need the compiled imports
|
|
921
|
+
# to install proper frontend packages.
|
|
922
|
+
(
|
|
923
|
+
*custom_components_result,
|
|
924
|
+
custom_components_imports,
|
|
925
|
+
) = custom_components_future.result()
|
|
926
|
+
compile_results.append(custom_components_result)
|
|
927
|
+
all_imports.update(custom_components_imports)
|
|
928
|
+
|
|
929
|
+
# Get imports from AppWrap components.
|
|
930
|
+
all_imports.update(app_root.get_imports())
|
|
872
931
|
|
|
873
|
-
|
|
874
|
-
progress.stop()
|
|
932
|
+
progress.advance(task)
|
|
875
933
|
|
|
876
|
-
|
|
877
|
-
|
|
934
|
+
# Empty the .web pages directory.
|
|
935
|
+
compiler.purge_web_pages_dir()
|
|
878
936
|
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
937
|
+
progress.advance(task)
|
|
938
|
+
progress.stop()
|
|
939
|
+
|
|
940
|
+
# Install frontend packages.
|
|
941
|
+
self.get_frontend_packages(all_imports)
|
|
942
|
+
|
|
943
|
+
for output_path, code in compile_results:
|
|
944
|
+
compiler_utils.write_page(output_path, code)
|
|
887
945
|
|
|
888
946
|
@contextlib.asynccontextmanager
|
|
889
947
|
async def modify_state(self, token: str) -> AsyncIterator[BaseState]:
|
|
@@ -1192,7 +1250,10 @@ class EventNamespace(AsyncNamespace):
|
|
|
1192
1250
|
}
|
|
1193
1251
|
|
|
1194
1252
|
# Get the client IP
|
|
1195
|
-
|
|
1253
|
+
try:
|
|
1254
|
+
client_ip = environ["asgi.scope"]["client"][0]
|
|
1255
|
+
except (KeyError, IndexError):
|
|
1256
|
+
client_ip = environ.get("REMOTE_ADDR", "0.0.0.0")
|
|
1196
1257
|
|
|
1197
1258
|
# Process the events.
|
|
1198
1259
|
async for update in process(self.app, event, sid, headers, client_ip):
|
|
@@ -5,13 +5,16 @@ from concurrent.futures import ThreadPoolExecutor
|
|
|
5
5
|
|
|
6
6
|
from reflex import constants
|
|
7
7
|
from reflex.utils.exec import is_prod_mode
|
|
8
|
-
from reflex.utils.prerequisites import get_app
|
|
8
|
+
from reflex.utils.prerequisites import get_app
|
|
9
9
|
|
|
10
10
|
if "app" != constants.CompileVars.APP:
|
|
11
11
|
raise AssertionError("unexpected variable name for 'app'")
|
|
12
12
|
|
|
13
13
|
app_module = get_app(reload=False)
|
|
14
14
|
app = getattr(app_module, constants.CompileVars.APP)
|
|
15
|
+
# For py3.8 and py3.9 compatibility when redis is used, we MUST add any decorator pages
|
|
16
|
+
# before compiling the app in a thread to avoid event loop error (REF-2172).
|
|
17
|
+
app._apply_decorated_pages()
|
|
15
18
|
compile_future = ThreadPoolExecutor(max_workers=1).submit(app.compile_)
|
|
16
19
|
compile_future.add_done_callback(
|
|
17
20
|
# Force background compile errors to print eagerly
|
|
@@ -25,7 +28,6 @@ if is_prod_mode():
|
|
|
25
28
|
del app_module
|
|
26
29
|
del compile_future
|
|
27
30
|
del get_app
|
|
28
|
-
del get_compiled_app
|
|
29
31
|
del is_prod_mode
|
|
30
32
|
del constants
|
|
31
33
|
del ThreadPoolExecutor
|
|
@@ -50,7 +50,7 @@ def _compile_app(app_root: Component) -> str:
|
|
|
50
50
|
return templates.APP_ROOT.render(
|
|
51
51
|
imports=utils.compile_imports(app_root.get_imports()),
|
|
52
52
|
custom_codes=app_root.get_custom_code(),
|
|
53
|
-
hooks=app_root.get_hooks(),
|
|
53
|
+
hooks=app_root.get_hooks_internal() | app_root.get_hooks(),
|
|
54
54
|
render=app_root.render(),
|
|
55
55
|
)
|
|
56
56
|
|
|
@@ -67,7 +67,7 @@ def _compile_theme(theme: dict) -> str:
|
|
|
67
67
|
return templates.THEME.render(theme=theme)
|
|
68
68
|
|
|
69
69
|
|
|
70
|
-
def _compile_contexts(state: Optional[Type[BaseState]], theme: Component) -> str:
|
|
70
|
+
def _compile_contexts(state: Optional[Type[BaseState]], theme: Component | None) -> str:
|
|
71
71
|
"""Compile the initial state and contexts.
|
|
72
72
|
|
|
73
73
|
Args:
|
|
@@ -119,7 +119,7 @@ def _compile_page(
|
|
|
119
119
|
imports=imports,
|
|
120
120
|
dynamic_imports=component.get_dynamic_imports(),
|
|
121
121
|
custom_codes=component.get_custom_code(),
|
|
122
|
-
hooks=component.get_hooks(),
|
|
122
|
+
hooks=component.get_hooks_internal() | component.get_hooks(),
|
|
123
123
|
render=component.render(),
|
|
124
124
|
**kwargs,
|
|
125
125
|
)
|
|
@@ -186,7 +186,9 @@ def _compile_component(component: Component) -> str:
|
|
|
186
186
|
return templates.COMPONENT.render(component=component)
|
|
187
187
|
|
|
188
188
|
|
|
189
|
-
def _compile_components(
|
|
189
|
+
def _compile_components(
|
|
190
|
+
components: set[CustomComponent],
|
|
191
|
+
) -> tuple[str, Dict[str, list[ImportVar]]]:
|
|
190
192
|
"""Compile the components.
|
|
191
193
|
|
|
192
194
|
Args:
|
|
@@ -208,9 +210,12 @@ def _compile_components(components: set[CustomComponent]) -> str:
|
|
|
208
210
|
imports = utils.merge_imports(imports, component_imports)
|
|
209
211
|
|
|
210
212
|
# Compile the components page.
|
|
211
|
-
return
|
|
212
|
-
|
|
213
|
-
|
|
213
|
+
return (
|
|
214
|
+
templates.COMPONENTS.render(
|
|
215
|
+
imports=utils.compile_imports(imports),
|
|
216
|
+
components=component_renders,
|
|
217
|
+
),
|
|
218
|
+
imports,
|
|
214
219
|
)
|
|
215
220
|
|
|
216
221
|
|
|
@@ -363,7 +368,7 @@ def compile_theme(style: ComponentStyle) -> tuple[str, str]:
|
|
|
363
368
|
|
|
364
369
|
def compile_contexts(
|
|
365
370
|
state: Optional[Type[BaseState]],
|
|
366
|
-
theme: Component,
|
|
371
|
+
theme: Component | None,
|
|
367
372
|
) -> tuple[str, str]:
|
|
368
373
|
"""Compile the initial state / context.
|
|
369
374
|
|
|
@@ -401,7 +406,9 @@ def compile_page(
|
|
|
401
406
|
return output_path, code
|
|
402
407
|
|
|
403
408
|
|
|
404
|
-
def compile_components(
|
|
409
|
+
def compile_components(
|
|
410
|
+
components: set[CustomComponent],
|
|
411
|
+
) -> tuple[str, str, Dict[str, list[ImportVar]]]:
|
|
405
412
|
"""Compile the custom components.
|
|
406
413
|
|
|
407
414
|
Args:
|
|
@@ -414,8 +421,8 @@ def compile_components(components: set[CustomComponent]):
|
|
|
414
421
|
output_path = utils.get_components_path()
|
|
415
422
|
|
|
416
423
|
# Compile the components.
|
|
417
|
-
code = _compile_components(components)
|
|
418
|
-
return output_path, code
|
|
424
|
+
code, imports = _compile_components(components)
|
|
425
|
+
return output_path, code, imports
|
|
419
426
|
|
|
420
427
|
|
|
421
428
|
def compile_stateful_components(
|
|
@@ -487,3 +494,88 @@ def purge_web_pages_dir():
|
|
|
487
494
|
|
|
488
495
|
# Empty out the web pages directory.
|
|
489
496
|
utils.empty_dir(constants.Dirs.WEB_PAGES, keep_files=["_app.js"])
|
|
497
|
+
|
|
498
|
+
|
|
499
|
+
class ExecutorSafeFunctions:
|
|
500
|
+
"""Helper class to allow parallelisation of parts of the compilation process.
|
|
501
|
+
|
|
502
|
+
This class (and its class attributes) are available at global scope.
|
|
503
|
+
|
|
504
|
+
In a multiprocessing context (like when using a ProcessPoolExecutor), the content of this
|
|
505
|
+
global class is logically replicated to any FORKED process.
|
|
506
|
+
|
|
507
|
+
How it works:
|
|
508
|
+
* Before the child process is forked, ensure that we stash any input data required by any future
|
|
509
|
+
function call in the child process.
|
|
510
|
+
* After the child process is forked, the child process will have a copy of the global class, which
|
|
511
|
+
includes the previously stashed input data.
|
|
512
|
+
* Any task submitted to the child process simply needs a way to communicate which input data the
|
|
513
|
+
requested function call requires.
|
|
514
|
+
|
|
515
|
+
Why do we need this? Passing input data directly to child process often not possible because the input data is not picklable.
|
|
516
|
+
The mechanic described here removes the need to pickle the input data at all.
|
|
517
|
+
|
|
518
|
+
Limitations:
|
|
519
|
+
* This can never support returning unpicklable OUTPUT data.
|
|
520
|
+
* Any object mutations done by the child process will not propagate back to the parent process (fork goes one way!).
|
|
521
|
+
|
|
522
|
+
"""
|
|
523
|
+
|
|
524
|
+
COMPILE_PAGE_ARGS_BY_ROUTE = {}
|
|
525
|
+
COMPILE_APP_APP_ROOT: Component | None = None
|
|
526
|
+
CUSTOM_COMPONENTS: set[CustomComponent] | None = None
|
|
527
|
+
STYLE: ComponentStyle | None = None
|
|
528
|
+
|
|
529
|
+
@classmethod
|
|
530
|
+
def compile_page(cls, route: str):
|
|
531
|
+
"""Compile a page.
|
|
532
|
+
|
|
533
|
+
Args:
|
|
534
|
+
route: The route of the page to compile.
|
|
535
|
+
|
|
536
|
+
Returns:
|
|
537
|
+
The path and code of the compiled page.
|
|
538
|
+
"""
|
|
539
|
+
return compile_page(*cls.COMPILE_PAGE_ARGS_BY_ROUTE[route])
|
|
540
|
+
|
|
541
|
+
@classmethod
|
|
542
|
+
def compile_app(cls):
|
|
543
|
+
"""Compile the app.
|
|
544
|
+
|
|
545
|
+
Returns:
|
|
546
|
+
The path and code of the compiled app.
|
|
547
|
+
|
|
548
|
+
Raises:
|
|
549
|
+
ValueError: If the app root is not set.
|
|
550
|
+
"""
|
|
551
|
+
if cls.COMPILE_APP_APP_ROOT is None:
|
|
552
|
+
raise ValueError("COMPILE_APP_APP_ROOT should be set")
|
|
553
|
+
return compile_app(cls.COMPILE_APP_APP_ROOT)
|
|
554
|
+
|
|
555
|
+
@classmethod
|
|
556
|
+
def compile_custom_components(cls):
|
|
557
|
+
"""Compile the custom components.
|
|
558
|
+
|
|
559
|
+
Returns:
|
|
560
|
+
The path and code of the compiled custom components.
|
|
561
|
+
|
|
562
|
+
Raises:
|
|
563
|
+
ValueError: If the custom components are not set.
|
|
564
|
+
"""
|
|
565
|
+
if cls.CUSTOM_COMPONENTS is None:
|
|
566
|
+
raise ValueError("CUSTOM_COMPONENTS should be set")
|
|
567
|
+
return compile_components(cls.CUSTOM_COMPONENTS)
|
|
568
|
+
|
|
569
|
+
@classmethod
|
|
570
|
+
def compile_theme(cls):
|
|
571
|
+
"""Compile the theme.
|
|
572
|
+
|
|
573
|
+
Returns:
|
|
574
|
+
The path and code of the compiled theme.
|
|
575
|
+
|
|
576
|
+
Raises:
|
|
577
|
+
ValueError: If the style is not set.
|
|
578
|
+
"""
|
|
579
|
+
if cls.STYLE is None:
|
|
580
|
+
raise ValueError("STYLE should be set")
|
|
581
|
+
return compile_theme(cls.STYLE)
|