reflex 0.5.6a1__tar.gz → 0.5.7__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.5.6a1 → reflex-0.5.7}/PKG-INFO +1 -1
- {reflex-0.5.6a1 → reflex-0.5.7}/pyproject.toml +1 -1
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/jinja/web/utils/context.js.jinja2 +2 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/web/utils/state.js +31 -2
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/__init__.py +7 -1
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/__init__.pyi +3 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/app.py +190 -4
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/compiler/templates.py +1 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/base/__init__.py +4 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/base/__init__.pyi +2 -0
- reflex-0.5.7/reflex/components/base/error_boundary.py +78 -0
- reflex-0.5.7/reflex/components/base/error_boundary.pyi +98 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/core/foreach.py +3 -2
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/core/upload.py +1 -1
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/primitives/form.py +3 -2
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/recharts/cartesian.py +31 -16
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/recharts/cartesian.pyi +46 -22
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/recharts/charts.py +6 -6
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/recharts/charts.pyi +10 -10
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/recharts/general.py +7 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/recharts/general.pyi +5 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/recharts/recharts.py +16 -1
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/recharts/recharts.pyi +1 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/config.py +2 -1
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/constants/compiler.py +20 -2
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/constants/config.py +1 -1
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/event.py +9 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/experimental/__init__.py +2 -0
- reflex-0.5.7/reflex/experimental/vars/__init__.py +3 -0
- reflex-0.5.7/reflex/experimental/vars/base.py +210 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/state.py +105 -21
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/testing.py +28 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/utils/compat.py +7 -5
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/utils/console.py +10 -1
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/utils/prerequisites.py +11 -5
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/utils/processes.py +7 -2
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/utils/pyi_generator.py +4 -1
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/utils/types.py +35 -30
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/vars.py +58 -23
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/vars.pyi +4 -1
- {reflex-0.5.6a1 → reflex-0.5.7}/LICENSE +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/README.md +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/apps/blank/assets/favicon.ico +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/apps/blank/code/__init__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/apps/blank/code/blank.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/apps/demo/.gitignore +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/apps/demo/assets/favicon.ico +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/apps/demo/assets/github.svg +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/apps/demo/assets/icon.svg +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/apps/demo/assets/logo.svg +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/apps/demo/assets/paneleft.svg +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/apps/demo/code/__init__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/apps/demo/code/demo.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/apps/demo/code/pages/__init__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/apps/demo/code/pages/chatapp.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/apps/demo/code/pages/datatable.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/apps/demo/code/pages/forms.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/apps/demo/code/pages/graphing.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/apps/demo/code/pages/home.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/apps/demo/code/sidebar.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/apps/demo/code/state.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/apps/demo/code/states/form_state.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/apps/demo/code/states/pie_state.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/apps/demo/code/styles.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/apps/demo/code/webui/__init__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/apps/demo/code/webui/components/__init__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/apps/demo/code/webui/components/chat.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/apps/demo/code/webui/components/loading_icon.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/apps/demo/code/webui/components/modal.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/apps/demo/code/webui/components/navbar.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/apps/demo/code/webui/components/sidebar.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/apps/demo/code/webui/state.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/apps/demo/code/webui/styles.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/jinja/app/rxconfig.py.jinja2 +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/jinja/custom_components/README.md.jinja2 +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/jinja/custom_components/__init__.py.jinja2 +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/jinja/custom_components/demo_app.py.jinja2 +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/jinja/custom_components/pyproject.toml.jinja2 +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/jinja/custom_components/src.py.jinja2 +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/jinja/web/package.json.jinja2 +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/jinja/web/pages/_app.js.jinja2 +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/jinja/web/pages/_document.js.jinja2 +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/jinja/web/pages/base_page.js.jinja2 +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/jinja/web/pages/component.js.jinja2 +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/jinja/web/pages/custom_component.js.jinja2 +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/jinja/web/pages/index.js.jinja2 +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/jinja/web/pages/stateful_component.js.jinja2 +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/jinja/web/pages/stateful_components.js.jinja2 +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/jinja/web/pages/utils.js.jinja2 +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/jinja/web/styles/styles.css.jinja2 +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/jinja/web/tailwind.config.js.jinja2 +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/jinja/web/utils/theme.js.jinja2 +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/web/.gitignore +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/web/components/reflex/chakra_color_mode_provider.js +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/web/components/reflex/radix_themes_color_mode_provider.js +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/web/jsconfig.json +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/web/next.config.js +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/web/postcss.config.js +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/web/styles/tailwind.css +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/web/utils/client_side_routing.js +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/web/utils/helpers/dataeditor.js +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/web/utils/helpers/debounce.js +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/web/utils/helpers/paste.js +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/web/utils/helpers/range.js +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/.templates/web/utils/helpers/throttle.js +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/__main__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/admin.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/app_mixins/__init__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/app_mixins/lifespan.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/app_mixins/middleware.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/app_mixins/mixin.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/app_module_for_backend.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/base.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/compiler/__init__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/compiler/compiler.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/compiler/utils.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/__init__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/__init__.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/base/app_wrap.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/base/app_wrap.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/base/bare.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/base/body.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/base/body.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/base/document.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/base/document.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/base/fragment.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/base/fragment.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/base/head.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/base/head.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/base/link.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/base/link.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/base/meta.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/base/meta.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/base/script.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/base/script.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/__init__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/base.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/base.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/datadisplay/__init__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/datadisplay/badge.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/datadisplay/badge.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/datadisplay/code.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/datadisplay/code.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/datadisplay/divider.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/datadisplay/divider.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/datadisplay/keyboard_key.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/datadisplay/keyboard_key.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/datadisplay/list.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/datadisplay/list.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/datadisplay/stat.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/datadisplay/stat.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/datadisplay/table.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/datadisplay/table.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/datadisplay/tag.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/datadisplay/tag.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/disclosure/__init__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/disclosure/accordion.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/disclosure/accordion.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/disclosure/tabs.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/disclosure/tabs.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/disclosure/transition.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/disclosure/transition.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/disclosure/visuallyhidden.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/disclosure/visuallyhidden.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/feedback/__init__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/feedback/alert.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/feedback/alert.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/feedback/circularprogress.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/feedback/circularprogress.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/feedback/progress.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/feedback/progress.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/feedback/skeleton.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/feedback/skeleton.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/feedback/spinner.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/feedback/spinner.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/forms/__init__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/forms/button.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/forms/button.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/forms/checkbox.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/forms/checkbox.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/forms/colormodeswitch.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/forms/colormodeswitch.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/forms/date_picker.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/forms/date_picker.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/forms/date_time_picker.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/forms/date_time_picker.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/forms/editable.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/forms/editable.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/forms/email.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/forms/email.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/forms/form.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/forms/form.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/forms/iconbutton.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/forms/iconbutton.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/forms/input.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/forms/input.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/forms/multiselect.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/forms/numberinput.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/forms/numberinput.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/forms/password.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/forms/password.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/forms/pininput.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/forms/pininput.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/forms/radio.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/forms/radio.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/forms/rangeslider.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/forms/rangeslider.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/forms/select.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/forms/select.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/forms/slider.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/forms/slider.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/forms/switch.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/forms/switch.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/forms/textarea.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/forms/textarea.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/forms/time_picker.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/forms/time_picker.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/layout/__init__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/layout/aspect_ratio.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/layout/aspect_ratio.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/layout/box.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/layout/box.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/layout/card.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/layout/card.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/layout/center.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/layout/center.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/layout/container.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/layout/container.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/layout/flex.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/layout/flex.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/layout/grid.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/layout/grid.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/layout/spacer.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/layout/spacer.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/layout/stack.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/layout/stack.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/layout/wrap.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/layout/wrap.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/media/__init__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/media/avatar.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/media/avatar.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/media/icon.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/media/icon.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/media/image.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/media/image.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/navigation/__init__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/navigation/breadcrumb.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/navigation/breadcrumb.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/navigation/link.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/navigation/link.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/navigation/linkoverlay.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/navigation/linkoverlay.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/navigation/stepper.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/navigation/stepper.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/overlay/__init__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/overlay/alertdialog.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/overlay/alertdialog.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/overlay/drawer.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/overlay/drawer.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/overlay/menu.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/overlay/menu.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/overlay/modal.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/overlay/modal.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/overlay/popover.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/overlay/popover.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/overlay/tooltip.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/overlay/tooltip.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/typography/__init__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/typography/heading.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/typography/heading.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/typography/highlight.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/typography/highlight.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/typography/span.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/typography/span.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/typography/text.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/chakra/typography/text.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/component.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/core/__init__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/core/__init__.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/core/banner.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/core/banner.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/core/breakpoints.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/core/client_side_routing.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/core/client_side_routing.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/core/clipboard.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/core/clipboard.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/core/colors.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/core/cond.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/core/debounce.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/core/debounce.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/core/html.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/core/html.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/core/layout/__init__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/core/match.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/core/responsive.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/core/upload.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/datadisplay/__init__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/datadisplay/__init__.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/datadisplay/code.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/datadisplay/code.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/datadisplay/dataeditor.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/datadisplay/dataeditor.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/datadisplay/logo.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/el/__init__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/el/__init__.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/el/constants/__init__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/el/constants/html.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/el/constants/react.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/el/constants/reflex.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/el/element.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/el/element.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/el/elements/__init__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/el/elements/__init__.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/el/elements/base.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/el/elements/base.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/el/elements/forms.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/el/elements/forms.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/el/elements/inline.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/el/elements/inline.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/el/elements/media.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/el/elements/media.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/el/elements/metadata.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/el/elements/metadata.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/el/elements/other.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/el/elements/other.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/el/elements/scripts.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/el/elements/scripts.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/el/elements/sectioning.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/el/elements/sectioning.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/el/elements/tables.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/el/elements/tables.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/el/elements/typography.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/el/elements/typography.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/gridjs/__init__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/gridjs/datatable.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/gridjs/datatable.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/literals.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/lucide/__init__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/lucide/icon.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/lucide/icon.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/markdown/__init__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/markdown/markdown.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/markdown/markdown.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/media/__init__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/media/icon.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/moment/__init__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/moment/moment.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/moment/moment.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/next/__init__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/next/base.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/next/base.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/next/image.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/next/image.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/next/link.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/next/link.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/next/video.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/next/video.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/plotly/__init__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/plotly/plotly.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/plotly/plotly.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/props.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/__init__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/__init__.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/primitives/__init__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/primitives/__init__.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/primitives/accordion.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/primitives/accordion.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/primitives/base.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/primitives/base.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/primitives/drawer.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/primitives/drawer.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/primitives/form.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/primitives/progress.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/primitives/progress.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/primitives/slider.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/primitives/slider.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/__init__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/__init__.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/base.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/base.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/color_mode.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/color_mode.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/__init__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/__init__.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/alert_dialog.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/alert_dialog.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/aspect_ratio.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/aspect_ratio.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/avatar.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/avatar.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/badge.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/badge.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/button.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/button.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/callout.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/callout.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/card.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/card.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/checkbox.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/checkbox.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/checkbox_cards.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/checkbox_cards.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/checkbox_group.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/checkbox_group.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/context_menu.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/context_menu.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/data_list.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/data_list.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/dialog.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/dialog.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/dropdown_menu.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/dropdown_menu.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/hover_card.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/hover_card.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/icon_button.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/icon_button.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/inset.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/inset.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/popover.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/popover.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/progress.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/progress.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/radio.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/radio.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/radio_cards.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/radio_cards.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/radio_group.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/radio_group.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/scroll_area.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/scroll_area.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/segmented_control.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/segmented_control.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/select.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/select.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/separator.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/separator.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/skeleton.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/skeleton.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/slider.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/slider.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/spinner.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/spinner.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/switch.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/switch.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/table.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/table.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/tabs.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/tabs.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/text_area.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/text_area.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/text_field.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/text_field.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/tooltip.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/components/tooltip.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/layout/__init__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/layout/__init__.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/layout/base.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/layout/base.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/layout/box.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/layout/box.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/layout/center.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/layout/center.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/layout/container.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/layout/container.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/layout/flex.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/layout/flex.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/layout/grid.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/layout/grid.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/layout/list.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/layout/list.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/layout/section.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/layout/section.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/layout/spacer.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/layout/spacer.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/layout/stack.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/layout/stack.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/typography/__init__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/typography/__init__.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/typography/base.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/typography/blockquote.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/typography/blockquote.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/typography/code.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/typography/code.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/typography/heading.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/typography/heading.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/typography/link.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/typography/link.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/typography/text.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/radix/themes/typography/text.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/react_player/__init__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/react_player/audio.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/react_player/audio.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/react_player/react_player.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/react_player/react_player.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/react_player/video.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/react_player/video.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/recharts/__init__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/recharts/__init__.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/recharts/polar.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/recharts/polar.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/sonner/__init__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/sonner/toast.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/sonner/toast.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/suneditor/__init__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/suneditor/editor.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/suneditor/editor.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/tags/__init__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/tags/cond_tag.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/tags/iter_tag.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/tags/match_tag.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/tags/tag.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/components/tags/tagless.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/constants/__init__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/constants/base.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/constants/colors.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/constants/custom_components.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/constants/event.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/constants/installer.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/constants/route.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/constants/style.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/custom_components/__init__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/custom_components/custom_components.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/experimental/assets.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/experimental/client_state.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/experimental/hooks.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/experimental/layout.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/experimental/layout.pyi +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/experimental/misc.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/middleware/__init__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/middleware/hydrate_middleware.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/middleware/middleware.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/model.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/page.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/reflex.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/route.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/style.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/utils/__init__.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/utils/build.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/utils/codespaces.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/utils/exceptions.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/utils/exec.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/utils/export.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/utils/format.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/utils/imports.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/utils/lazy_loader.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/utils/path_ops.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/utils/serializers.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/utils/telemetry.py +0 -0
- {reflex-0.5.6a1 → reflex-0.5.7}/reflex/utils/watch.py +0 -0
|
@@ -26,6 +26,8 @@ export const clientStorage = {}
|
|
|
26
26
|
{% if state_name %}
|
|
27
27
|
export const state_name = "{{state_name}}"
|
|
28
28
|
|
|
29
|
+
export const exception_state_name = "{{const.frontend_exception_state}}"
|
|
30
|
+
|
|
29
31
|
// Theses events are triggered on initial load and each page navigation.
|
|
30
32
|
export const onLoadInternalEvent = () => {
|
|
31
33
|
const internal_events = [];
|
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
initialState,
|
|
12
12
|
onLoadInternalEvent,
|
|
13
13
|
state_name,
|
|
14
|
+
exception_state_name,
|
|
14
15
|
} from "utils/context.js";
|
|
15
16
|
import debounce from "/utils/helpers/debounce";
|
|
16
17
|
import throttle from "/utils/helpers/throttle";
|
|
@@ -116,7 +117,7 @@ export const isStateful = () => {
|
|
|
116
117
|
if (event_queue.length === 0) {
|
|
117
118
|
return false;
|
|
118
119
|
}
|
|
119
|
-
return event_queue.some(event => event.name.startsWith("
|
|
120
|
+
return event_queue.some(event => event.name.startsWith("reflex___state"));
|
|
120
121
|
}
|
|
121
122
|
|
|
122
123
|
/**
|
|
@@ -247,6 +248,9 @@ export const applyEvent = async (event, socket) => {
|
|
|
247
248
|
}
|
|
248
249
|
} catch (e) {
|
|
249
250
|
console.log("_call_script", e);
|
|
251
|
+
if (window && window?.onerror) {
|
|
252
|
+
window.onerror(e.message, null, null, null, e)
|
|
253
|
+
}
|
|
250
254
|
}
|
|
251
255
|
return false;
|
|
252
256
|
}
|
|
@@ -687,6 +691,31 @@ export const useEventLoop = (
|
|
|
687
691
|
}
|
|
688
692
|
}, [router.isReady]);
|
|
689
693
|
|
|
694
|
+
// Handle frontend errors and send them to the backend via websocket.
|
|
695
|
+
useEffect(() => {
|
|
696
|
+
|
|
697
|
+
if (typeof window === 'undefined') {
|
|
698
|
+
return;
|
|
699
|
+
}
|
|
700
|
+
|
|
701
|
+
window.onerror = function (msg, url, lineNo, columnNo, error) {
|
|
702
|
+
addEvents([Event(`${exception_state_name}.handle_frontend_exception`, {
|
|
703
|
+
stack: error.stack,
|
|
704
|
+
})])
|
|
705
|
+
return false;
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
//NOTE: Only works in Chrome v49+
|
|
709
|
+
//https://github.com/mknichel/javascript-errors?tab=readme-ov-file#promise-rejection-events
|
|
710
|
+
window.onunhandledrejection = function (event) {
|
|
711
|
+
addEvents([Event(`${exception_state_name}.handle_frontend_exception`, {
|
|
712
|
+
stack: event.reason.stack,
|
|
713
|
+
})])
|
|
714
|
+
return false;
|
|
715
|
+
}
|
|
716
|
+
|
|
717
|
+
},[])
|
|
718
|
+
|
|
690
719
|
// Main event loop.
|
|
691
720
|
useEffect(() => {
|
|
692
721
|
// Skip if the router is not ready.
|
|
@@ -734,7 +763,7 @@ export const useEventLoop = (
|
|
|
734
763
|
const vars = {};
|
|
735
764
|
vars[storage_to_state_map[e.key]] = e.newValue;
|
|
736
765
|
const event = Event(
|
|
737
|
-
`${state_name}.
|
|
766
|
+
`${state_name}.reflex___state____update_vars_internal_state.update_vars_internal`,
|
|
738
767
|
{ vars: vars }
|
|
739
768
|
);
|
|
740
769
|
addEvents([event], e);
|
|
@@ -84,12 +84,18 @@ In the example above, you will be able to do `rx.list`
|
|
|
84
84
|
|
|
85
85
|
from __future__ import annotations
|
|
86
86
|
|
|
87
|
-
from reflex.utils import
|
|
87
|
+
from reflex.utils import (
|
|
88
|
+
compat, # for side-effects
|
|
89
|
+
lazy_loader,
|
|
90
|
+
)
|
|
88
91
|
|
|
89
92
|
# import this here explicitly to avoid returning the page module since page attr has the
|
|
90
93
|
# same name as page module(page.py)
|
|
91
94
|
from .page import page as page
|
|
92
95
|
|
|
96
|
+
# Remove the `compat` name from the namespace, it was imported for side-effects only.
|
|
97
|
+
del compat
|
|
98
|
+
|
|
93
99
|
RADIX_THEMES_MAPPING: dict = {
|
|
94
100
|
"components.radix.themes.base": ["color_mode", "theme", "theme_panel"],
|
|
95
101
|
"components.radix.themes.color_mode": ["color_mode"],
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
# This file was generated by `reflex/utils/pyi_generator.py`!
|
|
4
4
|
# ------------------------------------------------------
|
|
5
5
|
|
|
6
|
+
from reflex.utils import compat
|
|
7
|
+
|
|
6
8
|
from . import admin as admin
|
|
7
9
|
from . import app as app
|
|
8
10
|
from . import base as base
|
|
@@ -190,6 +192,7 @@ from .utils.serializers import serializer as serializer
|
|
|
190
192
|
from .vars import Var as Var
|
|
191
193
|
from .vars import cached_var as cached_var
|
|
192
194
|
|
|
195
|
+
del compat
|
|
193
196
|
RADIX_THEMES_MAPPING: dict
|
|
194
197
|
RADIX_THEMES_COMPONENTS_MAPPING: dict
|
|
195
198
|
RADIX_THEMES_LAYOUT_MAPPING: dict
|
|
@@ -7,12 +7,15 @@ import concurrent.futures
|
|
|
7
7
|
import contextlib
|
|
8
8
|
import copy
|
|
9
9
|
import functools
|
|
10
|
+
import inspect
|
|
10
11
|
import io
|
|
11
12
|
import multiprocessing
|
|
12
13
|
import os
|
|
13
14
|
import platform
|
|
14
15
|
import sys
|
|
16
|
+
import traceback
|
|
15
17
|
from datetime import datetime
|
|
18
|
+
from pathlib import Path
|
|
16
19
|
from typing import (
|
|
17
20
|
Any,
|
|
18
21
|
AsyncIterator,
|
|
@@ -45,6 +48,7 @@ from reflex.compiler import compiler
|
|
|
45
48
|
from reflex.compiler import utils as compiler_utils
|
|
46
49
|
from reflex.compiler.compiler import ExecutorSafeFunctions
|
|
47
50
|
from reflex.components.base.app_wrap import AppWrap
|
|
51
|
+
from reflex.components.base.error_boundary import ErrorBoundary
|
|
48
52
|
from reflex.components.base.fragment import Fragment
|
|
49
53
|
from reflex.components.component import (
|
|
50
54
|
Component,
|
|
@@ -60,7 +64,7 @@ from reflex.components.core.client_side_routing import (
|
|
|
60
64
|
from reflex.components.core.upload import Upload, get_upload_dir
|
|
61
65
|
from reflex.components.radix import themes
|
|
62
66
|
from reflex.config import get_config
|
|
63
|
-
from reflex.event import Event, EventHandler, EventSpec
|
|
67
|
+
from reflex.event import Event, EventHandler, EventSpec, window_alert
|
|
64
68
|
from reflex.model import Model
|
|
65
69
|
from reflex.page import (
|
|
66
70
|
DECORATED_PAGES,
|
|
@@ -88,6 +92,33 @@ ComponentCallable = Callable[[], Component]
|
|
|
88
92
|
Reducer = Callable[[Event], Coroutine[Any, Any, StateUpdate]]
|
|
89
93
|
|
|
90
94
|
|
|
95
|
+
def default_frontend_exception_handler(exception: Exception) -> None:
|
|
96
|
+
"""Default frontend exception handler function.
|
|
97
|
+
|
|
98
|
+
Args:
|
|
99
|
+
exception: The exception.
|
|
100
|
+
|
|
101
|
+
"""
|
|
102
|
+
console.error(f"[Reflex Frontend Exception]\n {exception}\n")
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
def default_backend_exception_handler(exception: Exception) -> EventSpec:
|
|
106
|
+
"""Default backend exception handler function.
|
|
107
|
+
|
|
108
|
+
Args:
|
|
109
|
+
exception: The exception.
|
|
110
|
+
|
|
111
|
+
Returns:
|
|
112
|
+
EventSpec: The window alert event.
|
|
113
|
+
|
|
114
|
+
"""
|
|
115
|
+
error = traceback.format_exc()
|
|
116
|
+
|
|
117
|
+
console.error(f"[Reflex Backend Exception]\n {error}\n")
|
|
118
|
+
|
|
119
|
+
return window_alert("An error occurred. See logs for details.")
|
|
120
|
+
|
|
121
|
+
|
|
91
122
|
def default_overlay_component() -> Component:
|
|
92
123
|
"""Default overlay_component attribute for App.
|
|
93
124
|
|
|
@@ -101,6 +132,19 @@ def default_overlay_component() -> Component:
|
|
|
101
132
|
)
|
|
102
133
|
|
|
103
134
|
|
|
135
|
+
def default_error_boundary(*children: Component) -> Component:
|
|
136
|
+
"""Default error_boundary attribute for App.
|
|
137
|
+
|
|
138
|
+
Args:
|
|
139
|
+
*children: The children to render in the error boundary.
|
|
140
|
+
|
|
141
|
+
Returns:
|
|
142
|
+
The default error_boundary, which is an ErrorBoundary.
|
|
143
|
+
|
|
144
|
+
"""
|
|
145
|
+
return ErrorBoundary.create(*children)
|
|
146
|
+
|
|
147
|
+
|
|
104
148
|
class OverlayFragment(Fragment):
|
|
105
149
|
"""Alias for Fragment, used to wrap the overlay_component."""
|
|
106
150
|
|
|
@@ -142,6 +186,9 @@ class App(MiddlewareMixin, LifespanMixin, Base):
|
|
|
142
186
|
default_overlay_component
|
|
143
187
|
)
|
|
144
188
|
|
|
189
|
+
# Error boundary component to wrap the app with.
|
|
190
|
+
error_boundary: Optional[ComponentCallable] = default_error_boundary
|
|
191
|
+
|
|
145
192
|
# Components to add to the head of every page.
|
|
146
193
|
head_components: List[Component] = []
|
|
147
194
|
|
|
@@ -178,6 +225,16 @@ class App(MiddlewareMixin, LifespanMixin, Base):
|
|
|
178
225
|
# Background tasks that are currently running. PRIVATE.
|
|
179
226
|
background_tasks: Set[asyncio.Task] = set()
|
|
180
227
|
|
|
228
|
+
# Frontend Error Handler Function
|
|
229
|
+
frontend_exception_handler: Callable[[Exception], None] = (
|
|
230
|
+
default_frontend_exception_handler
|
|
231
|
+
)
|
|
232
|
+
|
|
233
|
+
# Backend Error Handler Function
|
|
234
|
+
backend_exception_handler: Callable[
|
|
235
|
+
[Exception], Union[EventSpec, List[EventSpec], None]
|
|
236
|
+
] = default_backend_exception_handler
|
|
237
|
+
|
|
181
238
|
def __init__(self, **kwargs):
|
|
182
239
|
"""Initialize the app.
|
|
183
240
|
|
|
@@ -279,6 +336,9 @@ class App(MiddlewareMixin, LifespanMixin, Base):
|
|
|
279
336
|
# Mount the socket app with the API.
|
|
280
337
|
self.api.mount(str(constants.Endpoint.EVENT), socket_app)
|
|
281
338
|
|
|
339
|
+
# Check the exception handlers
|
|
340
|
+
self._validate_exception_handlers()
|
|
341
|
+
|
|
282
342
|
def __repr__(self) -> str:
|
|
283
343
|
"""Get the string representation of the app.
|
|
284
344
|
|
|
@@ -688,6 +748,25 @@ class App(MiddlewareMixin, LifespanMixin, Base):
|
|
|
688
748
|
for k, component in self.pages.items():
|
|
689
749
|
self.pages[k] = self._add_overlay_to_component(component)
|
|
690
750
|
|
|
751
|
+
def _add_error_boundary_to_component(self, component: Component) -> Component:
|
|
752
|
+
if self.error_boundary is None:
|
|
753
|
+
return component
|
|
754
|
+
|
|
755
|
+
component = self.error_boundary(*component.children)
|
|
756
|
+
|
|
757
|
+
return component
|
|
758
|
+
|
|
759
|
+
def _setup_error_boundary(self):
|
|
760
|
+
"""If a State is not used and no error_boundary is specified, do not render the error boundary."""
|
|
761
|
+
if self.state is None and self.error_boundary is default_error_boundary:
|
|
762
|
+
self.error_boundary = None
|
|
763
|
+
|
|
764
|
+
for k, component in self.pages.items():
|
|
765
|
+
# Skip the 404 page
|
|
766
|
+
if k == constants.Page404.SLUG:
|
|
767
|
+
continue
|
|
768
|
+
self.pages[k] = self._add_error_boundary_to_component(component)
|
|
769
|
+
|
|
691
770
|
def _apply_decorated_pages(self):
|
|
692
771
|
"""Add @rx.page decorated pages to the app.
|
|
693
772
|
|
|
@@ -757,6 +836,7 @@ class App(MiddlewareMixin, LifespanMixin, Base):
|
|
|
757
836
|
|
|
758
837
|
self._validate_var_dependencies()
|
|
759
838
|
self._setup_overlay_component()
|
|
839
|
+
self._setup_error_boundary()
|
|
760
840
|
|
|
761
841
|
# Create a progress bar.
|
|
762
842
|
progress = Progress(
|
|
@@ -940,9 +1020,6 @@ class App(MiddlewareMixin, LifespanMixin, Base):
|
|
|
940
1020
|
|
|
941
1021
|
progress.advance(task)
|
|
942
1022
|
|
|
943
|
-
# Empty the .web pages directory.
|
|
944
|
-
compiler.purge_web_pages_dir()
|
|
945
|
-
|
|
946
1023
|
progress.advance(task)
|
|
947
1024
|
progress.stop()
|
|
948
1025
|
|
|
@@ -960,6 +1037,19 @@ class App(MiddlewareMixin, LifespanMixin, Base):
|
|
|
960
1037
|
transpile_packages=transpile_packages,
|
|
961
1038
|
)
|
|
962
1039
|
|
|
1040
|
+
if is_prod_mode():
|
|
1041
|
+
# Empty the .web pages directory.
|
|
1042
|
+
compiler.purge_web_pages_dir()
|
|
1043
|
+
else:
|
|
1044
|
+
# In dev mode, delete removed pages and update existing pages.
|
|
1045
|
+
keep_files = [Path(output_path) for output_path, _ in compile_results]
|
|
1046
|
+
for p in Path(prerequisites.get_web_dir() / constants.Dirs.PAGES).rglob(
|
|
1047
|
+
"*"
|
|
1048
|
+
):
|
|
1049
|
+
if p.is_file() and p not in keep_files:
|
|
1050
|
+
# Remove pages that are no longer in the app.
|
|
1051
|
+
p.unlink()
|
|
1052
|
+
|
|
963
1053
|
for output_path, code in compile_results:
|
|
964
1054
|
compiler_utils.write_page(output_path, code)
|
|
965
1055
|
|
|
@@ -1036,6 +1126,100 @@ class App(MiddlewareMixin, LifespanMixin, Base):
|
|
|
1036
1126
|
task.add_done_callback(self.background_tasks.discard)
|
|
1037
1127
|
return task
|
|
1038
1128
|
|
|
1129
|
+
def _validate_exception_handlers(self):
|
|
1130
|
+
"""Validate the custom event exception handlers for front- and backend.
|
|
1131
|
+
|
|
1132
|
+
Raises:
|
|
1133
|
+
ValueError: If the custom exception handlers are invalid.
|
|
1134
|
+
|
|
1135
|
+
"""
|
|
1136
|
+
FRONTEND_ARG_SPEC = {
|
|
1137
|
+
"exception": Exception,
|
|
1138
|
+
}
|
|
1139
|
+
|
|
1140
|
+
BACKEND_ARG_SPEC = {
|
|
1141
|
+
"exception": Exception,
|
|
1142
|
+
}
|
|
1143
|
+
|
|
1144
|
+
for handler_domain, handler_fn, handler_spec in zip(
|
|
1145
|
+
["frontend", "backend"],
|
|
1146
|
+
[self.frontend_exception_handler, self.backend_exception_handler],
|
|
1147
|
+
[
|
|
1148
|
+
FRONTEND_ARG_SPEC,
|
|
1149
|
+
BACKEND_ARG_SPEC,
|
|
1150
|
+
],
|
|
1151
|
+
):
|
|
1152
|
+
if hasattr(handler_fn, "__name__"):
|
|
1153
|
+
_fn_name = handler_fn.__name__
|
|
1154
|
+
else:
|
|
1155
|
+
_fn_name = handler_fn.__class__.__name__
|
|
1156
|
+
|
|
1157
|
+
if isinstance(handler_fn, functools.partial):
|
|
1158
|
+
raise ValueError(
|
|
1159
|
+
f"Provided custom {handler_domain} exception handler `{_fn_name}` is a partial function. Please provide a named function instead."
|
|
1160
|
+
)
|
|
1161
|
+
|
|
1162
|
+
if not callable(handler_fn):
|
|
1163
|
+
raise ValueError(
|
|
1164
|
+
f"Provided custom {handler_domain} exception handler `{_fn_name}` is not a function."
|
|
1165
|
+
)
|
|
1166
|
+
|
|
1167
|
+
# Allow named functions only as lambda functions cannot be introspected
|
|
1168
|
+
if _fn_name == "<lambda>":
|
|
1169
|
+
raise ValueError(
|
|
1170
|
+
f"Provided custom {handler_domain} exception handler `{_fn_name}` is a lambda function. Please use a named function instead."
|
|
1171
|
+
)
|
|
1172
|
+
|
|
1173
|
+
# Check if the function has the necessary annotations and types in the right order
|
|
1174
|
+
argspec = inspect.getfullargspec(handler_fn)
|
|
1175
|
+
arg_annotations = {
|
|
1176
|
+
k: eval(v) if isinstance(v, str) else v
|
|
1177
|
+
for k, v in argspec.annotations.items()
|
|
1178
|
+
if k not in ["args", "kwargs", "return"]
|
|
1179
|
+
}
|
|
1180
|
+
|
|
1181
|
+
for required_arg_index, required_arg in enumerate(handler_spec):
|
|
1182
|
+
if required_arg not in arg_annotations:
|
|
1183
|
+
raise ValueError(
|
|
1184
|
+
f"Provided custom {handler_domain} exception handler `{_fn_name}` does not take the required argument `{required_arg}`"
|
|
1185
|
+
)
|
|
1186
|
+
elif (
|
|
1187
|
+
not list(arg_annotations.keys())[required_arg_index] == required_arg
|
|
1188
|
+
):
|
|
1189
|
+
raise ValueError(
|
|
1190
|
+
f"Provided custom {handler_domain} exception handler `{_fn_name}` has the wrong argument order."
|
|
1191
|
+
f"Expected `{required_arg}` as the {required_arg_index+1} argument but got `{list(arg_annotations.keys())[required_arg_index]}`"
|
|
1192
|
+
)
|
|
1193
|
+
|
|
1194
|
+
if not issubclass(arg_annotations[required_arg], Exception):
|
|
1195
|
+
raise ValueError(
|
|
1196
|
+
f"Provided custom {handler_domain} exception handler `{_fn_name}` has the wrong type for {required_arg} argument."
|
|
1197
|
+
f"Expected to be `Exception` but got `{arg_annotations[required_arg]}`"
|
|
1198
|
+
)
|
|
1199
|
+
|
|
1200
|
+
# Check if the return type is valid for backend exception handler
|
|
1201
|
+
if handler_domain == "backend":
|
|
1202
|
+
sig = inspect.signature(self.backend_exception_handler)
|
|
1203
|
+
return_type = (
|
|
1204
|
+
eval(sig.return_annotation)
|
|
1205
|
+
if isinstance(sig.return_annotation, str)
|
|
1206
|
+
else sig.return_annotation
|
|
1207
|
+
)
|
|
1208
|
+
|
|
1209
|
+
valid = bool(
|
|
1210
|
+
return_type == EventSpec
|
|
1211
|
+
or return_type == Optional[EventSpec]
|
|
1212
|
+
or return_type == List[EventSpec]
|
|
1213
|
+
or return_type == inspect.Signature.empty
|
|
1214
|
+
or return_type is None
|
|
1215
|
+
)
|
|
1216
|
+
|
|
1217
|
+
if not valid:
|
|
1218
|
+
raise ValueError(
|
|
1219
|
+
f"Provided custom {handler_domain} exception handler `{_fn_name}` has the wrong return type."
|
|
1220
|
+
f"Expected `Union[EventSpec, List[EventSpec], None]` but got `{return_type}`"
|
|
1221
|
+
)
|
|
1222
|
+
|
|
1039
1223
|
|
|
1040
1224
|
async def process(
|
|
1041
1225
|
app: App, event: Event, sid: str, headers: Dict, client_ip: str
|
|
@@ -1101,6 +1285,8 @@ async def process(
|
|
|
1101
1285
|
yield update
|
|
1102
1286
|
except Exception as ex:
|
|
1103
1287
|
telemetry.send_error(ex, context="backend")
|
|
1288
|
+
|
|
1289
|
+
app.backend_exception_handler(ex)
|
|
1104
1290
|
raise
|
|
1105
1291
|
|
|
1106
1292
|
|
|
@@ -44,6 +44,7 @@ class ReflexJinjaEnvironment(Environment):
|
|
|
44
44
|
"hydrate": constants.CompileVars.HYDRATE,
|
|
45
45
|
"on_load_internal": constants.CompileVars.ON_LOAD_INTERNAL,
|
|
46
46
|
"update_vars_internal": constants.CompileVars.UPDATE_VARS_INTERNAL,
|
|
47
|
+
"frontend_exception_state": constants.CompileVars.FRONTEND_EXCEPTION_STATE_FULL,
|
|
47
48
|
}
|
|
48
49
|
|
|
49
50
|
|
|
@@ -10,6 +10,8 @@ from .document import DocumentHead as DocumentHead
|
|
|
10
10
|
from .document import Html as Html
|
|
11
11
|
from .document import Main as Main
|
|
12
12
|
from .document import NextScript as NextScript
|
|
13
|
+
from .error_boundary import ErrorBoundary as ErrorBoundary
|
|
14
|
+
from .error_boundary import error_boundary as error_boundary
|
|
13
15
|
from .fragment import Fragment as Fragment
|
|
14
16
|
from .fragment import fragment as fragment
|
|
15
17
|
from .head import Head as Head
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"""A React Error Boundary component that catches unhandled frontend exceptions."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import List
|
|
6
|
+
|
|
7
|
+
from reflex.compiler.compiler import _compile_component
|
|
8
|
+
from reflex.components.component import Component
|
|
9
|
+
from reflex.components.el import div, p
|
|
10
|
+
from reflex.constants import Hooks, Imports
|
|
11
|
+
from reflex.event import EventChain, EventHandler
|
|
12
|
+
from reflex.utils.imports import ImportVar
|
|
13
|
+
from reflex.vars import Var
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class ErrorBoundary(Component):
|
|
17
|
+
"""A React Error Boundary component that catches unhandled frontend exceptions."""
|
|
18
|
+
|
|
19
|
+
library = "react-error-boundary"
|
|
20
|
+
tag = "ErrorBoundary"
|
|
21
|
+
|
|
22
|
+
# Fired when the boundary catches an error.
|
|
23
|
+
on_error: EventHandler[lambda error, info: [error, info]] = Var.create_safe( # type: ignore
|
|
24
|
+
"logFrontendError", _var_is_string=False, _var_is_local=False
|
|
25
|
+
).to(EventChain)
|
|
26
|
+
|
|
27
|
+
# Rendered instead of the children when an error is caught.
|
|
28
|
+
Fallback_component: Var[Component] = Var.create_safe(
|
|
29
|
+
"Fallback", _var_is_string=False, _var_is_local=False
|
|
30
|
+
).to(Component)
|
|
31
|
+
|
|
32
|
+
def add_imports(self) -> dict[str, list[ImportVar]]:
|
|
33
|
+
"""Add imports for the component.
|
|
34
|
+
|
|
35
|
+
Returns:
|
|
36
|
+
The imports to add.
|
|
37
|
+
"""
|
|
38
|
+
return Imports.EVENTS
|
|
39
|
+
|
|
40
|
+
def add_hooks(self) -> List[str | Var]:
|
|
41
|
+
"""Add hooks for the component.
|
|
42
|
+
|
|
43
|
+
Returns:
|
|
44
|
+
The hooks to add.
|
|
45
|
+
"""
|
|
46
|
+
return [Hooks.EVENTS, Hooks.FRONTEND_ERRORS]
|
|
47
|
+
|
|
48
|
+
def add_custom_code(self) -> List[str]:
|
|
49
|
+
"""Add custom Javascript code into the page that contains this component.
|
|
50
|
+
|
|
51
|
+
Custom code is inserted at module level, after any imports.
|
|
52
|
+
|
|
53
|
+
Returns:
|
|
54
|
+
The custom code to add.
|
|
55
|
+
"""
|
|
56
|
+
fallback_container = div(
|
|
57
|
+
p("Ooops...Unknown Reflex error has occured:"),
|
|
58
|
+
p(
|
|
59
|
+
Var.create("error.message", _var_is_local=False, _var_is_string=False),
|
|
60
|
+
color="red",
|
|
61
|
+
),
|
|
62
|
+
p("Please contact the support."),
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
compiled_fallback = _compile_component(fallback_container)
|
|
66
|
+
|
|
67
|
+
return [
|
|
68
|
+
f"""
|
|
69
|
+
function Fallback({{ error, resetErrorBoundary }}) {{
|
|
70
|
+
return (
|
|
71
|
+
{compiled_fallback}
|
|
72
|
+
);
|
|
73
|
+
}}
|
|
74
|
+
"""
|
|
75
|
+
]
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
error_boundary = ErrorBoundary.create
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"""Stub file for reflex/components/base/error_boundary.py"""
|
|
2
|
+
|
|
3
|
+
# ------------------- DO NOT EDIT ----------------------
|
|
4
|
+
# This file was generated by `reflex/utils/pyi_generator.py`!
|
|
5
|
+
# ------------------------------------------------------
|
|
6
|
+
from typing import Any, Callable, Dict, List, Optional, Union, overload
|
|
7
|
+
|
|
8
|
+
from reflex.components.component import Component
|
|
9
|
+
from reflex.event import EventHandler, EventSpec
|
|
10
|
+
from reflex.style import Style
|
|
11
|
+
from reflex.utils.imports import ImportVar
|
|
12
|
+
from reflex.vars import BaseVar, Var
|
|
13
|
+
|
|
14
|
+
class ErrorBoundary(Component):
|
|
15
|
+
def add_imports(self) -> dict[str, list[ImportVar]]: ...
|
|
16
|
+
def add_hooks(self) -> List[str | Var]: ...
|
|
17
|
+
def add_custom_code(self) -> List[str]: ...
|
|
18
|
+
@overload
|
|
19
|
+
@classmethod
|
|
20
|
+
def create( # type: ignore
|
|
21
|
+
cls,
|
|
22
|
+
*children,
|
|
23
|
+
Fallback_component: Optional[Union[Var[Component], Component]] = None,
|
|
24
|
+
style: Optional[Style] = None,
|
|
25
|
+
key: Optional[Any] = None,
|
|
26
|
+
id: Optional[Any] = None,
|
|
27
|
+
class_name: Optional[Any] = None,
|
|
28
|
+
autofocus: Optional[bool] = None,
|
|
29
|
+
custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
|
|
30
|
+
on_blur: Optional[
|
|
31
|
+
Union[EventHandler, EventSpec, list, Callable, BaseVar]
|
|
32
|
+
] = None,
|
|
33
|
+
on_click: Optional[
|
|
34
|
+
Union[EventHandler, EventSpec, list, Callable, BaseVar]
|
|
35
|
+
] = None,
|
|
36
|
+
on_context_menu: Optional[
|
|
37
|
+
Union[EventHandler, EventSpec, list, Callable, BaseVar]
|
|
38
|
+
] = None,
|
|
39
|
+
on_double_click: Optional[
|
|
40
|
+
Union[EventHandler, EventSpec, list, Callable, BaseVar]
|
|
41
|
+
] = None,
|
|
42
|
+
on_error: Optional[
|
|
43
|
+
Union[EventHandler, EventSpec, list, Callable, BaseVar]
|
|
44
|
+
] = None,
|
|
45
|
+
on_focus: Optional[
|
|
46
|
+
Union[EventHandler, EventSpec, list, Callable, BaseVar]
|
|
47
|
+
] = None,
|
|
48
|
+
on_mount: Optional[
|
|
49
|
+
Union[EventHandler, EventSpec, list, Callable, BaseVar]
|
|
50
|
+
] = None,
|
|
51
|
+
on_mouse_down: Optional[
|
|
52
|
+
Union[EventHandler, EventSpec, list, Callable, BaseVar]
|
|
53
|
+
] = None,
|
|
54
|
+
on_mouse_enter: Optional[
|
|
55
|
+
Union[EventHandler, EventSpec, list, Callable, BaseVar]
|
|
56
|
+
] = None,
|
|
57
|
+
on_mouse_leave: Optional[
|
|
58
|
+
Union[EventHandler, EventSpec, list, Callable, BaseVar]
|
|
59
|
+
] = None,
|
|
60
|
+
on_mouse_move: Optional[
|
|
61
|
+
Union[EventHandler, EventSpec, list, Callable, BaseVar]
|
|
62
|
+
] = None,
|
|
63
|
+
on_mouse_out: Optional[
|
|
64
|
+
Union[EventHandler, EventSpec, list, Callable, BaseVar]
|
|
65
|
+
] = None,
|
|
66
|
+
on_mouse_over: Optional[
|
|
67
|
+
Union[EventHandler, EventSpec, list, Callable, BaseVar]
|
|
68
|
+
] = None,
|
|
69
|
+
on_mouse_up: Optional[
|
|
70
|
+
Union[EventHandler, EventSpec, list, Callable, BaseVar]
|
|
71
|
+
] = None,
|
|
72
|
+
on_scroll: Optional[
|
|
73
|
+
Union[EventHandler, EventSpec, list, Callable, BaseVar]
|
|
74
|
+
] = None,
|
|
75
|
+
on_unmount: Optional[
|
|
76
|
+
Union[EventHandler, EventSpec, list, Callable, BaseVar]
|
|
77
|
+
] = None,
|
|
78
|
+
**props,
|
|
79
|
+
) -> "ErrorBoundary":
|
|
80
|
+
"""Create the component.
|
|
81
|
+
|
|
82
|
+
Args:
|
|
83
|
+
*children: The children of the component.
|
|
84
|
+
Fallback_component: Rendered instead of the children when an error is caught.
|
|
85
|
+
style: The style of the component.
|
|
86
|
+
key: A unique key for the component.
|
|
87
|
+
id: The id for the component.
|
|
88
|
+
class_name: The class name for the component.
|
|
89
|
+
autofocus: Whether the component should take the focus once the page is loaded
|
|
90
|
+
custom_attrs: custom attribute
|
|
91
|
+
**props: The props of the component.
|
|
92
|
+
|
|
93
|
+
Returns:
|
|
94
|
+
The component.
|
|
95
|
+
"""
|
|
96
|
+
...
|
|
97
|
+
|
|
98
|
+
error_boundary = ErrorBoundary.create
|
|
@@ -66,7 +66,7 @@ class Foreach(Component):
|
|
|
66
66
|
raise ForeachVarError(
|
|
67
67
|
f"Could not foreach over var `{iterable._var_full_name}` of type Any. "
|
|
68
68
|
"(If you are trying to foreach over a state var, add a type annotation to the var). "
|
|
69
|
-
"See https://reflex.dev/docs/library/
|
|
69
|
+
"See https://reflex.dev/docs/library/dynamic-rendering/foreach/"
|
|
70
70
|
)
|
|
71
71
|
|
|
72
72
|
if (
|
|
@@ -95,7 +95,8 @@ class Foreach(Component):
|
|
|
95
95
|
if len(params) == 0 or len(params) > 2:
|
|
96
96
|
raise ForeachRenderError(
|
|
97
97
|
"Expected 1 or 2 parameters in foreach render function, got "
|
|
98
|
-
f"{[p.name for p in params]}. See
|
|
98
|
+
f"{[p.name for p in params]}. See "
|
|
99
|
+
"https://reflex.dev/docs/library/dynamic-rendering/foreach/"
|
|
99
100
|
)
|
|
100
101
|
|
|
101
102
|
if len(params) >= 1:
|
|
@@ -107,7 +107,7 @@ def cancel_upload(upload_id: str) -> EventSpec:
|
|
|
107
107
|
An event spec that cancels the upload when triggered.
|
|
108
108
|
"""
|
|
109
109
|
return call_script(
|
|
110
|
-
f"upload_controllers[{Var.create_safe(upload_id, _var_is_string=True)._var_name_unwrapped
|
|
110
|
+
f"upload_controllers[{Var.create_safe(upload_id, _var_is_string=True)._var_name_unwrapped}]?.abort()"
|
|
111
111
|
)
|
|
112
112
|
|
|
113
113
|
|
|
@@ -5,6 +5,7 @@ from __future__ import annotations
|
|
|
5
5
|
from typing import Any, Literal
|
|
6
6
|
|
|
7
7
|
from reflex.components.component import ComponentNamespace
|
|
8
|
+
from reflex.components.core.debounce import DebounceInput
|
|
8
9
|
from reflex.components.el.elements.forms import Form as HTMLForm
|
|
9
10
|
from reflex.components.radix.themes.components.text_field import TextFieldRoot
|
|
10
11
|
from reflex.event import EventHandler
|
|
@@ -103,9 +104,9 @@ class FormControl(FormComponent):
|
|
|
103
104
|
f"FormControl can only have at most one child, got {len(children)} children"
|
|
104
105
|
)
|
|
105
106
|
for child in children:
|
|
106
|
-
if not isinstance(child, TextFieldRoot):
|
|
107
|
+
if not isinstance(child, (TextFieldRoot, DebounceInput)):
|
|
107
108
|
raise TypeError(
|
|
108
|
-
"Only Radix TextFieldRoot
|
|
109
|
+
"Only Radix TextFieldRoot and DebounceInput are allowed as children of FormControl"
|
|
109
110
|
)
|
|
110
111
|
return super().create(*children, **props)
|
|
111
112
|
|