reflex 0.7.12__tar.gz → 0.7.13a1__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.7.12 → reflex-0.7.13a1}/.gitignore +2 -1
- {reflex-0.7.12 → reflex-0.7.13a1}/PKG-INFO +2 -2
- {reflex-0.7.12 → reflex-0.7.13a1}/pyproject.toml +56 -5
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/.templates/jinja/app/rxconfig.py.jinja2 +1 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/.templates/web/postcss.config.js +0 -1
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/.templates/web/utils/state.js +1 -1
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/__init__.py +1 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/__init__.pyi +1 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/app.py +87 -27
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/compiler/compiler.py +11 -62
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/compiler/templates.py +12 -3
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/compiler/utils.py +20 -4
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/component.py +366 -88
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/datadisplay/code.py +1 -1
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/datadisplay/shiki_code_block.py +97 -86
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/datadisplay/shiki_code_block.pyi +4 -2
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/el/elements/forms.py +1 -1
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/lucide/icon.py +2 -1
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/lucide/icon.pyi +1 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/plotly/plotly.py +2 -2
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/plotly/plotly.pyi +2 -3
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/base.py +4 -11
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/icon_button.py +2 -2
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/text_field.py +3 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/text_field.pyi +2 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/layout/list.py +1 -1
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/tags/iter_tag.py +3 -5
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/config.py +54 -7
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/constants/__init__.py +0 -2
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/event.py +154 -93
- reflex-0.7.13a1/reflex/plugins/__init__.py +7 -0
- reflex-0.7.13a1/reflex/plugins/base.py +101 -0
- reflex-0.7.13a1/reflex/plugins/tailwind_v3.py +255 -0
- reflex-0.7.13a1/reflex/plugins/tailwind_v4.py +257 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/state.py +24 -3
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/utils/build.py +1 -1
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/utils/console.py +1 -1
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/utils/exec.py +18 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/utils/path_ops.py +26 -6
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/utils/prerequisites.py +21 -90
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/utils/pyi_generator.py +12 -2
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/utils/types.py +15 -1
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/vars/base.py +59 -4
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/vars/object.py +8 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/scripts/hatch_build.py +17 -0
- reflex-0.7.12/reflex/.templates/jinja/web/tailwind.config.js.jinja2 +0 -66
- reflex-0.7.12/reflex/.templates/web/styles/tailwind.css +0 -6
- reflex-0.7.12/reflex/constants/style.py +0 -16
- {reflex-0.7.12 → reflex-0.7.13a1}/LICENSE +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/README.md +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/.templates/apps/blank/assets/favicon.ico +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/.templates/apps/blank/code/__init__.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/.templates/apps/blank/code/blank.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/.templates/jinja/custom_components/README.md.jinja2 +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/.templates/jinja/custom_components/__init__.py.jinja2 +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/.templates/jinja/custom_components/demo_app.py.jinja2 +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/.templates/jinja/custom_components/pyproject.toml.jinja2 +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/.templates/jinja/custom_components/src.py.jinja2 +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/.templates/jinja/web/package.json.jinja2 +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/.templates/jinja/web/pages/_app.js.jinja2 +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/.templates/jinja/web/pages/_document.js.jinja2 +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/.templates/jinja/web/pages/base_page.js.jinja2 +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/.templates/jinja/web/pages/component.js.jinja2 +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/.templates/jinja/web/pages/custom_component.js.jinja2 +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/.templates/jinja/web/pages/index.js.jinja2 +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/.templates/jinja/web/pages/macros.js.jinja2 +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/.templates/jinja/web/pages/stateful_component.js.jinja2 +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/.templates/jinja/web/pages/stateful_components.js.jinja2 +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/.templates/jinja/web/pages/utils.js.jinja2 +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/.templates/jinja/web/styles/styles.css.jinja2 +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/.templates/jinja/web/utils/context.js.jinja2 +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/.templates/jinja/web/utils/theme.js.jinja2 +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/.templates/web/.gitignore +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/.templates/web/components/reflex/radix_themes_color_mode_provider.js +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/.templates/web/components/shiki/code.js +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/.templates/web/jsconfig.json +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/.templates/web/next.config.js +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/.templates/web/utils/client_side_routing.js +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/.templates/web/utils/helpers/dataeditor.js +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/.templates/web/utils/helpers/debounce.js +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/.templates/web/utils/helpers/paste.js +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/.templates/web/utils/helpers/range.js +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/.templates/web/utils/helpers/throttle.js +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/__main__.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/admin.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/app_mixins/__init__.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/app_mixins/lifespan.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/app_mixins/middleware.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/app_mixins/mixin.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/assets.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/base.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/compiler/__init__.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/__init__.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/__init__.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/base/__init__.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/base/__init__.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/base/app_wrap.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/base/app_wrap.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/base/bare.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/base/body.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/base/body.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/base/document.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/base/document.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/base/error_boundary.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/base/error_boundary.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/base/fragment.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/base/fragment.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/base/head.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/base/head.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/base/link.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/base/link.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/base/meta.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/base/meta.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/base/script.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/base/script.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/base/strict_mode.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/base/strict_mode.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/core/__init__.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/core/__init__.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/core/auto_scroll.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/core/auto_scroll.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/core/banner.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/core/banner.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/core/breakpoints.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/core/client_side_routing.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/core/client_side_routing.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/core/clipboard.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/core/clipboard.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/core/colors.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/core/cond.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/core/debounce.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/core/debounce.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/core/foreach.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/core/html.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/core/html.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/core/layout/__init__.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/core/match.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/core/responsive.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/core/sticky.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/core/sticky.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/core/upload.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/core/upload.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/datadisplay/__init__.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/datadisplay/__init__.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/datadisplay/code.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/datadisplay/dataeditor.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/datadisplay/dataeditor.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/datadisplay/logo.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/dynamic.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/el/__init__.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/el/__init__.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/el/constants/__init__.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/el/constants/html.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/el/constants/react.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/el/constants/reflex.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/el/element.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/el/element.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/el/elements/__init__.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/el/elements/__init__.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/el/elements/base.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/el/elements/base.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/el/elements/forms.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/el/elements/inline.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/el/elements/inline.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/el/elements/media.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/el/elements/media.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/el/elements/metadata.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/el/elements/metadata.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/el/elements/other.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/el/elements/other.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/el/elements/scripts.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/el/elements/scripts.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/el/elements/sectioning.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/el/elements/sectioning.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/el/elements/tables.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/el/elements/tables.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/el/elements/typography.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/el/elements/typography.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/gridjs/__init__.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/gridjs/datatable.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/gridjs/datatable.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/literals.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/lucide/__init__.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/markdown/__init__.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/markdown/markdown.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/markdown/markdown.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/moment/__init__.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/moment/moment.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/moment/moment.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/next/__init__.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/next/base.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/next/base.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/next/image.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/next/image.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/next/link.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/next/link.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/next/video.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/next/video.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/plotly/__init__.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/props.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/__init__.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/__init__.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/primitives/__init__.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/primitives/__init__.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/primitives/accordion.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/primitives/accordion.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/primitives/base.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/primitives/base.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/primitives/drawer.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/primitives/drawer.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/primitives/form.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/primitives/form.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/primitives/progress.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/primitives/progress.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/primitives/slider.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/primitives/slider.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/__init__.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/__init__.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/base.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/color_mode.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/color_mode.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/__init__.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/__init__.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/alert_dialog.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/alert_dialog.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/aspect_ratio.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/aspect_ratio.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/avatar.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/avatar.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/badge.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/badge.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/button.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/button.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/callout.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/callout.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/card.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/card.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/checkbox.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/checkbox.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/checkbox_cards.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/checkbox_cards.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/checkbox_group.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/checkbox_group.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/context_menu.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/context_menu.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/data_list.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/data_list.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/dialog.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/dialog.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/dropdown_menu.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/dropdown_menu.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/hover_card.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/hover_card.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/icon_button.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/inset.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/inset.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/popover.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/popover.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/progress.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/progress.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/radio.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/radio.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/radio_cards.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/radio_cards.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/radio_group.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/radio_group.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/scroll_area.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/scroll_area.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/segmented_control.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/segmented_control.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/select.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/select.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/separator.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/separator.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/skeleton.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/skeleton.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/slider.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/slider.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/spinner.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/spinner.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/switch.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/switch.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/table.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/table.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/tabs.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/tabs.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/text_area.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/text_area.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/tooltip.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/components/tooltip.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/layout/__init__.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/layout/__init__.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/layout/base.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/layout/base.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/layout/box.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/layout/box.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/layout/center.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/layout/center.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/layout/container.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/layout/container.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/layout/flex.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/layout/flex.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/layout/grid.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/layout/grid.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/layout/list.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/layout/section.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/layout/section.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/layout/spacer.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/layout/spacer.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/layout/stack.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/layout/stack.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/typography/__init__.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/typography/__init__.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/typography/base.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/typography/blockquote.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/typography/blockquote.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/typography/code.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/typography/code.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/typography/heading.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/typography/heading.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/typography/link.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/typography/link.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/typography/text.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/radix/themes/typography/text.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/react_player/__init__.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/react_player/audio.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/react_player/audio.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/react_player/react_player.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/react_player/react_player.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/react_player/video.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/react_player/video.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/recharts/__init__.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/recharts/__init__.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/recharts/cartesian.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/recharts/cartesian.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/recharts/charts.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/recharts/charts.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/recharts/general.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/recharts/general.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/recharts/polar.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/recharts/polar.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/recharts/recharts.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/recharts/recharts.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/sonner/__init__.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/sonner/toast.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/sonner/toast.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/suneditor/__init__.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/suneditor/editor.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/suneditor/editor.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/tags/__init__.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/tags/cond_tag.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/tags/match_tag.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/tags/tag.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/components/tags/tagless.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/constants/base.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/constants/colors.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/constants/compiler.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/constants/config.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/constants/custom_components.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/constants/event.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/constants/installer.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/constants/route.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/constants/state.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/constants/utils.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/custom_components/__init__.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/custom_components/custom_components.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/experimental/__init__.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/experimental/client_state.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/experimental/hooks.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/experimental/layout.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/experimental/layout.pyi +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/istate/__init__.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/istate/data.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/istate/dynamic.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/istate/manager.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/istate/proxy.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/istate/storage.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/istate/wrappers.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/middleware/__init__.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/middleware/hydrate_middleware.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/middleware/middleware.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/model.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/page.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/py.typed +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/reflex.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/route.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/style.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/testing.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/utils/__init__.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/utils/codespaces.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/utils/compat.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/utils/decorator.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/utils/exceptions.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/utils/export.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/utils/format.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/utils/imports.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/utils/lazy_loader.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/utils/misc.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/utils/net.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/utils/processes.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/utils/redir.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/utils/registry.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/utils/serializers.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/utils/telemetry.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/vars/__init__.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/vars/datetime.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/vars/dep_tracking.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/vars/function.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/vars/number.py +0 -0
- {reflex-0.7.12 → reflex-0.7.13a1}/reflex/vars/sequence.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: reflex
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.13a1
|
|
4
4
|
Summary: Web apps in pure Python.
|
|
5
5
|
Project-URL: homepage, https://reflex.dev
|
|
6
6
|
Project-URL: repository, https://github.com/reflex-dev/reflex
|
|
@@ -30,7 +30,7 @@ Requires-Dist: psutil<8.0,>=7.0.0
|
|
|
30
30
|
Requires-Dist: pydantic<3.0,>=1.10.21
|
|
31
31
|
Requires-Dist: python-multipart<1.0,>=0.0.20
|
|
32
32
|
Requires-Dist: python-socketio<6.0,>=5.12.0
|
|
33
|
-
Requires-Dist: redis<
|
|
33
|
+
Requires-Dist: redis<7.0,>=5.2.1
|
|
34
34
|
Requires-Dist: reflex-hosting-cli>=0.1.47
|
|
35
35
|
Requires-Dist: rich<15,>=13
|
|
36
36
|
Requires-Dist: sqlmodel<0.1,>=0.0.24
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "reflex"
|
|
3
|
-
version = "0.7.
|
|
3
|
+
version = "0.7.13a1"
|
|
4
4
|
description = "Web apps in pure Python."
|
|
5
|
-
license
|
|
5
|
+
license.text = "Apache-2.0"
|
|
6
6
|
authors = [
|
|
7
7
|
{ name = "Nikhil Rao", email = "nikhil@reflex.dev" },
|
|
8
8
|
{ name = "Alek Petuskey", email = "alek@reflex.dev" },
|
|
@@ -31,7 +31,7 @@ dependencies = [
|
|
|
31
31
|
"pydantic >=1.10.21,<3.0",
|
|
32
32
|
"python-socketio >=5.12.0,<6.0",
|
|
33
33
|
"python-multipart >=0.0.20,<1.0",
|
|
34
|
-
"redis >=5.2.1,<
|
|
34
|
+
"redis >=5.2.1,<7.0",
|
|
35
35
|
"reflex-hosting-cli >=0.1.47",
|
|
36
36
|
"rich >=13,<15",
|
|
37
37
|
"sqlmodel >=0.0.24,<0.1",
|
|
@@ -73,7 +73,7 @@ artifacts = ["*.pyi"]
|
|
|
73
73
|
|
|
74
74
|
[tool.hatch.build.hooks.custom]
|
|
75
75
|
path = "scripts/hatch_build.py"
|
|
76
|
-
dependencies = ["plotly", "ruff"]
|
|
76
|
+
dependencies = ["plotly", "ruff", "pre_commit", "toml"]
|
|
77
77
|
require-runtime-dependencies = true
|
|
78
78
|
|
|
79
79
|
[tool.pyright]
|
|
@@ -149,7 +149,7 @@ dev = [
|
|
|
149
149
|
"pillow >=11",
|
|
150
150
|
"playwright >=1.51",
|
|
151
151
|
"plotly >=6.0",
|
|
152
|
-
"pre-commit
|
|
152
|
+
"pre-commit ==4.2.0",
|
|
153
153
|
"psycopg[binary] >=3.2",
|
|
154
154
|
"pyright >=1.1.400",
|
|
155
155
|
"pytest >=8.3",
|
|
@@ -165,6 +165,7 @@ dev = [
|
|
|
165
165
|
"ruff >=0.11",
|
|
166
166
|
"selenium >=4.31",
|
|
167
167
|
"starlette-admin >=0.14",
|
|
168
|
+
"toml >=0.10.2",
|
|
168
169
|
"uvicorn >=0.34.0",
|
|
169
170
|
]
|
|
170
171
|
|
|
@@ -206,3 +207,53 @@ exclude_also = [
|
|
|
206
207
|
|
|
207
208
|
[tool.coverage.html]
|
|
208
209
|
directory = "coverage_html_report"
|
|
210
|
+
|
|
211
|
+
[tool.pre-commit]
|
|
212
|
+
fail_fast = true
|
|
213
|
+
|
|
214
|
+
[[tool.pre-commit.repos]]
|
|
215
|
+
repo = "https://github.com/astral-sh/ruff-pre-commit"
|
|
216
|
+
rev = "v0.11.8"
|
|
217
|
+
hooks = [
|
|
218
|
+
{ id = "ruff-format", args = [
|
|
219
|
+
"reflex",
|
|
220
|
+
"tests",
|
|
221
|
+
] },
|
|
222
|
+
{ id = "ruff", args = [
|
|
223
|
+
"--fix",
|
|
224
|
+
"--exit-non-zero-on-fix",
|
|
225
|
+
], exclude = "^integration/benchmarks/" },
|
|
226
|
+
]
|
|
227
|
+
|
|
228
|
+
[[tool.pre-commit.repos]]
|
|
229
|
+
repo = "https://github.com/codespell-project/codespell"
|
|
230
|
+
rev = "v2.4.1"
|
|
231
|
+
hooks = [
|
|
232
|
+
{ id = "codespell", args = [
|
|
233
|
+
"reflex",
|
|
234
|
+
], additional_dependencies = [
|
|
235
|
+
"tomli",
|
|
236
|
+
] },
|
|
237
|
+
]
|
|
238
|
+
|
|
239
|
+
# Run pyi check before pyright because pyright can fail if pyi files are wrong.
|
|
240
|
+
[[tool.pre-commit.repos]]
|
|
241
|
+
repo = "local"
|
|
242
|
+
hooks = [
|
|
243
|
+
{ id = "update-pyi-files", name = "update-pyi-files", always_run = true, language = "system", require_serial = true, description = "Update pyi files as needed", entry = "python3 scripts/make_pyi.py" },
|
|
244
|
+
]
|
|
245
|
+
|
|
246
|
+
[[tool.pre-commit.repos]]
|
|
247
|
+
repo = "https://github.com/RobertCraigie/pyright-python"
|
|
248
|
+
rev = "v1.1.400"
|
|
249
|
+
hooks = [{ id = "pyright", args = ["reflex", "tests"], language = "system" }]
|
|
250
|
+
|
|
251
|
+
[[tool.pre-commit.repos]]
|
|
252
|
+
repo = "https://github.com/terrencepreilly/darglint"
|
|
253
|
+
rev = "v1.8.1"
|
|
254
|
+
hooks = [{ id = "darglint", exclude = "^reflex/reflex.py" }]
|
|
255
|
+
|
|
256
|
+
[[tool.pre-commit.repos]]
|
|
257
|
+
repo = "https://github.com/pre-commit/mirrors-prettier"
|
|
258
|
+
rev = "f62a70a3a7114896b062de517d72829ea1c884b6"
|
|
259
|
+
hooks = [{ id = "prettier", require_serial = true }]
|
|
@@ -350,7 +350,7 @@ export const applyRestEvent = async (event, socket) => {
|
|
|
350
350
|
if (event.handler === "uploadFiles") {
|
|
351
351
|
if (event.payload.files === undefined || event.payload.files.length === 0) {
|
|
352
352
|
// Submit the event over the websocket to trigger the event handler.
|
|
353
|
-
return await applyEvent(Event(event.name), socket);
|
|
353
|
+
return await applyEvent(Event(event.name, { files: [] }), socket);
|
|
354
354
|
}
|
|
355
355
|
|
|
356
356
|
// Start upload, but do not wait for it, which would block other events.
|
|
@@ -12,6 +12,7 @@ from . import compiler as compiler
|
|
|
12
12
|
from . import components as components
|
|
13
13
|
from . import config as config
|
|
14
14
|
from . import model as model
|
|
15
|
+
from . import plugins as plugins
|
|
15
16
|
from . import style as style
|
|
16
17
|
from . import testing as testing
|
|
17
18
|
from . import utils as utils
|
|
@@ -18,7 +18,7 @@ from datetime import datetime
|
|
|
18
18
|
from pathlib import Path
|
|
19
19
|
from timeit import default_timer as timer
|
|
20
20
|
from types import SimpleNamespace
|
|
21
|
-
from typing import TYPE_CHECKING, Any, BinaryIO, get_args, get_type_hints
|
|
21
|
+
from typing import TYPE_CHECKING, Any, BinaryIO, ParamSpec, get_args, get_type_hints
|
|
22
22
|
|
|
23
23
|
from fastapi import FastAPI
|
|
24
24
|
from rich.progress import MofNCompleteColumn, Progress, TimeElapsedColumn
|
|
@@ -314,6 +314,9 @@ class UnevaluatedPage:
|
|
|
314
314
|
)
|
|
315
315
|
|
|
316
316
|
|
|
317
|
+
P = ParamSpec("P")
|
|
318
|
+
|
|
319
|
+
|
|
317
320
|
@dataclasses.dataclass()
|
|
318
321
|
class App(MiddlewareMixin, LifespanMixin):
|
|
319
322
|
"""The main Reflex app that encapsulates the backend and frontend.
|
|
@@ -620,10 +623,12 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
620
623
|
compile_future = concurrent.futures.ThreadPoolExecutor(max_workers=1).submit(
|
|
621
624
|
self._compile
|
|
622
625
|
)
|
|
623
|
-
|
|
626
|
+
|
|
627
|
+
def callback(f: concurrent.futures.Future):
|
|
624
628
|
# Force background compile errors to print eagerly
|
|
625
|
-
|
|
626
|
-
|
|
629
|
+
return f.result()
|
|
630
|
+
|
|
631
|
+
compile_future.add_done_callback(callback)
|
|
627
632
|
# Wait for the compile to finish to ensure all optional endpoints are mounted.
|
|
628
633
|
compile_future.result()
|
|
629
634
|
|
|
@@ -1029,11 +1034,6 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
1029
1034
|
frontend_packages = get_config().frontend_packages
|
|
1030
1035
|
_frontend_packages = []
|
|
1031
1036
|
for package in frontend_packages:
|
|
1032
|
-
if package in (get_config().tailwind or {}).get("plugins", []):
|
|
1033
|
-
console.warn(
|
|
1034
|
-
f"Tailwind packages are inferred from 'plugins', remove `{package}` from `frontend_packages`"
|
|
1035
|
-
)
|
|
1036
|
-
continue
|
|
1037
1037
|
if package in page_imports:
|
|
1038
1038
|
console.warn(
|
|
1039
1039
|
f"React packages and their dependencies are inferred from Component.library and Component.lib_dependencies, remove `{package}` from `frontend_packages`"
|
|
@@ -1166,6 +1166,7 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
1166
1166
|
|
|
1167
1167
|
Raises:
|
|
1168
1168
|
ReflexRuntimeError: When any page uses state, but no rx.State subclass is defined.
|
|
1169
|
+
FileNotFoundError: When a plugin requires a file that does not exist.
|
|
1169
1170
|
"""
|
|
1170
1171
|
from reflex.utils.exceptions import ReflexRuntimeError
|
|
1171
1172
|
|
|
@@ -1380,10 +1381,20 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
1380
1381
|
|
|
1381
1382
|
ExecutorSafeFunctions.STATE = self._state
|
|
1382
1383
|
|
|
1383
|
-
|
|
1384
|
-
result_futures: list[concurrent.futures.Future[tuple[str, str]]] = []
|
|
1384
|
+
modify_files_tasks: list[tuple[str, str, Callable[[str], str]]] = []
|
|
1385
1385
|
|
|
1386
|
-
|
|
1386
|
+
with console.timing("Compile to Javascript"), executor as executor:
|
|
1387
|
+
result_futures: list[
|
|
1388
|
+
concurrent.futures.Future[
|
|
1389
|
+
list[tuple[str, str]] | tuple[str, str] | None
|
|
1390
|
+
]
|
|
1391
|
+
] = []
|
|
1392
|
+
|
|
1393
|
+
def _submit_work(
|
|
1394
|
+
fn: Callable[P, list[tuple[str, str]] | tuple[str, str] | None],
|
|
1395
|
+
*args: P.args,
|
|
1396
|
+
**kwargs: P.kwargs,
|
|
1397
|
+
):
|
|
1387
1398
|
f = executor.submit(fn, *args, **kwargs)
|
|
1388
1399
|
f.add_done_callback(lambda _: progress.advance(task))
|
|
1389
1400
|
result_futures.append(f)
|
|
@@ -1401,20 +1412,26 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
1401
1412
|
# Compile the theme.
|
|
1402
1413
|
_submit_work(compile_theme, self.style)
|
|
1403
1414
|
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1415
|
+
for plugin in config.plugins:
|
|
1416
|
+
plugin.pre_compile(
|
|
1417
|
+
add_save_task=_submit_work,
|
|
1418
|
+
add_modify_task=(
|
|
1419
|
+
lambda *args, plugin=plugin: modify_files_tasks.append(
|
|
1420
|
+
(
|
|
1421
|
+
plugin.__class__.__module__ + plugin.__class__.__name__,
|
|
1422
|
+
*args,
|
|
1423
|
+
)
|
|
1424
|
+
)
|
|
1425
|
+
),
|
|
1408
1426
|
)
|
|
1409
|
-
_submit_work(compiler.compile_tailwind, config.tailwind)
|
|
1410
|
-
else:
|
|
1411
|
-
_submit_work(compiler.remove_tailwind_from_postcss)
|
|
1412
1427
|
|
|
1413
1428
|
# Wait for all compilation tasks to complete.
|
|
1414
|
-
|
|
1415
|
-
future.result()
|
|
1416
|
-
|
|
1417
|
-
|
|
1429
|
+
for future in concurrent.futures.as_completed(result_futures):
|
|
1430
|
+
if (result := future.result()) is not None:
|
|
1431
|
+
if isinstance(result, list):
|
|
1432
|
+
compile_results.extend(result)
|
|
1433
|
+
else:
|
|
1434
|
+
compile_results.append(result)
|
|
1418
1435
|
|
|
1419
1436
|
app_root = self._app_root(app_wrappers=app_wrappers)
|
|
1420
1437
|
|
|
@@ -1429,7 +1446,7 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
1429
1446
|
)
|
|
1430
1447
|
if self.theme is not None:
|
|
1431
1448
|
# Fix #2992 by removing the top-level appearance prop
|
|
1432
|
-
self.theme.appearance = None
|
|
1449
|
+
self.theme.appearance = None # pyright: ignore[reportAttributeAccessIssue]
|
|
1433
1450
|
progress.advance(task)
|
|
1434
1451
|
|
|
1435
1452
|
# Compile the app root.
|
|
@@ -1443,7 +1460,7 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
1443
1460
|
custom_components_output,
|
|
1444
1461
|
custom_components_result,
|
|
1445
1462
|
custom_components_imports,
|
|
1446
|
-
) = compiler.compile_components(
|
|
1463
|
+
) = compiler.compile_components(dict.fromkeys(CUSTOM_COMPONENTS.values()))
|
|
1447
1464
|
compile_results.append((custom_components_output, custom_components_result))
|
|
1448
1465
|
all_imports.update(custom_components_imports)
|
|
1449
1466
|
|
|
@@ -1481,9 +1498,45 @@ class App(MiddlewareMixin, LifespanMixin):
|
|
|
1481
1498
|
# Remove pages that are no longer in the app.
|
|
1482
1499
|
p.unlink()
|
|
1483
1500
|
|
|
1501
|
+
output_mapping: dict[Path, str] = {}
|
|
1502
|
+
for output_path, code in compile_results:
|
|
1503
|
+
path = compiler_utils.resolve_path_of_web_dir(output_path)
|
|
1504
|
+
if path in output_mapping:
|
|
1505
|
+
console.warn(
|
|
1506
|
+
f"Path {path} has two different outputs. The first one will be used."
|
|
1507
|
+
)
|
|
1508
|
+
else:
|
|
1509
|
+
output_mapping[path] = code
|
|
1510
|
+
|
|
1511
|
+
for plugin in config.plugins:
|
|
1512
|
+
for static_file_path, content in plugin.get_static_assets():
|
|
1513
|
+
path = compiler_utils.resolve_path_of_web_dir(static_file_path)
|
|
1514
|
+
if path in output_mapping:
|
|
1515
|
+
console.warn(
|
|
1516
|
+
f"Plugin {plugin.__class__.__name__} is trying to write to {path} but it already exists. The plugin file will be ignored."
|
|
1517
|
+
)
|
|
1518
|
+
else:
|
|
1519
|
+
output_mapping[path] = (
|
|
1520
|
+
content.decode("utf-8")
|
|
1521
|
+
if isinstance(content, bytes)
|
|
1522
|
+
else content
|
|
1523
|
+
)
|
|
1524
|
+
|
|
1525
|
+
for plugin_name, file_path, modify_fn in modify_files_tasks:
|
|
1526
|
+
path = compiler_utils.resolve_path_of_web_dir(file_path)
|
|
1527
|
+
file_content = output_mapping.get(path)
|
|
1528
|
+
if file_content is None:
|
|
1529
|
+
if path.exists():
|
|
1530
|
+
file_content = path.read_text()
|
|
1531
|
+
else:
|
|
1532
|
+
raise FileNotFoundError(
|
|
1533
|
+
f"Plugin {plugin_name} is trying to modify {path} but it does not exist."
|
|
1534
|
+
)
|
|
1535
|
+
output_mapping[path] = modify_fn(file_content)
|
|
1536
|
+
|
|
1484
1537
|
with console.timing("Write to Disk"):
|
|
1485
|
-
for output_path, code in
|
|
1486
|
-
compiler_utils.
|
|
1538
|
+
for output_path, code in output_mapping.items():
|
|
1539
|
+
compiler_utils.write_file(output_path, code)
|
|
1487
1540
|
|
|
1488
1541
|
def _write_stateful_pages_marker(self):
|
|
1489
1542
|
"""Write list of routes that create dynamic states for the backend to use later."""
|
|
@@ -1996,6 +2049,13 @@ class EventNamespace(AsyncNamespace):
|
|
|
1996
2049
|
update: The state update to send.
|
|
1997
2050
|
sid: The Socket.IO session id.
|
|
1998
2051
|
"""
|
|
2052
|
+
if not sid:
|
|
2053
|
+
# If the sid is None, we are not connected to a client. Prevent sending
|
|
2054
|
+
# updates to all clients.
|
|
2055
|
+
return
|
|
2056
|
+
if sid not in self.sid_to_token:
|
|
2057
|
+
console.warn(f"Attempting to send delta to disconnected websocket {sid}")
|
|
2058
|
+
return
|
|
1999
2059
|
# Creating a task prevents the update from being blocked behind other coroutines.
|
|
2000
2060
|
await asyncio.create_task(
|
|
2001
2061
|
self.emit(str(constants.SocketEvent.EVENT), update, to=sid)
|
|
@@ -223,6 +223,9 @@ def _validate_stylesheet(stylesheet_full_path: Path, assets_app_path: Path) -> N
|
|
|
223
223
|
)
|
|
224
224
|
|
|
225
225
|
|
|
226
|
+
RADIX_THEMES_STYLESHEET = "@radix-ui/themes/styles.css"
|
|
227
|
+
|
|
228
|
+
|
|
226
229
|
def _compile_root_stylesheet(stylesheets: list[str]) -> str:
|
|
227
230
|
"""Compile the root stylesheet.
|
|
228
231
|
|
|
@@ -235,12 +238,12 @@ def _compile_root_stylesheet(stylesheets: list[str]) -> str:
|
|
|
235
238
|
Raises:
|
|
236
239
|
FileNotFoundError: If a specified stylesheet in assets directory does not exist.
|
|
237
240
|
"""
|
|
238
|
-
# Add
|
|
239
|
-
sheets =
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
241
|
+
# Add stylesheets from plugins.
|
|
242
|
+
sheets = [RADIX_THEMES_STYLESHEET] + [
|
|
243
|
+
sheet
|
|
244
|
+
for plugin in get_config().plugins
|
|
245
|
+
for sheet in plugin.get_stylesheet_paths()
|
|
246
|
+
]
|
|
244
247
|
|
|
245
248
|
failed_to_import_sass = False
|
|
246
249
|
assets_app_path = Path.cwd() / constants.Dirs.APP_ASSETS
|
|
@@ -326,7 +329,7 @@ def _compile_component(component: Component | StatefulComponent) -> str:
|
|
|
326
329
|
|
|
327
330
|
|
|
328
331
|
def _compile_components(
|
|
329
|
-
components:
|
|
332
|
+
components: Iterable[CustomComponent],
|
|
330
333
|
) -> tuple[str, dict[str, list[ImportVar]]]:
|
|
331
334
|
"""Compile the components.
|
|
332
335
|
|
|
@@ -451,22 +454,6 @@ def _compile_stateful_components(
|
|
|
451
454
|
)
|
|
452
455
|
|
|
453
456
|
|
|
454
|
-
def _compile_tailwind(
|
|
455
|
-
config: dict,
|
|
456
|
-
) -> str:
|
|
457
|
-
"""Compile the Tailwind config.
|
|
458
|
-
|
|
459
|
-
Args:
|
|
460
|
-
config: The Tailwind config.
|
|
461
|
-
|
|
462
|
-
Returns:
|
|
463
|
-
The compiled Tailwind config.
|
|
464
|
-
"""
|
|
465
|
-
return templates.TAILWIND_CONFIG.render(
|
|
466
|
-
**config,
|
|
467
|
-
)
|
|
468
|
-
|
|
469
|
-
|
|
470
457
|
def compile_document_root(
|
|
471
458
|
head_components: list[Component],
|
|
472
459
|
html_lang: str | None = None,
|
|
@@ -572,7 +559,7 @@ def compile_page(
|
|
|
572
559
|
|
|
573
560
|
|
|
574
561
|
def compile_components(
|
|
575
|
-
components:
|
|
562
|
+
components: Iterable[CustomComponent],
|
|
576
563
|
) -> tuple[str, str, dict[str, list[ImportVar]]]:
|
|
577
564
|
"""Compile the custom components.
|
|
578
565
|
|
|
@@ -613,44 +600,6 @@ def compile_stateful_components(
|
|
|
613
600
|
return output_path, code, page_components
|
|
614
601
|
|
|
615
602
|
|
|
616
|
-
def compile_tailwind(
|
|
617
|
-
config: dict,
|
|
618
|
-
):
|
|
619
|
-
"""Compile the Tailwind config.
|
|
620
|
-
|
|
621
|
-
Args:
|
|
622
|
-
config: The Tailwind config.
|
|
623
|
-
|
|
624
|
-
Returns:
|
|
625
|
-
The compiled Tailwind config.
|
|
626
|
-
"""
|
|
627
|
-
# Get the path for the output file.
|
|
628
|
-
output_path = str((get_web_dir() / constants.Tailwind.CONFIG).absolute())
|
|
629
|
-
|
|
630
|
-
# Compile the config.
|
|
631
|
-
code = _compile_tailwind(config)
|
|
632
|
-
return output_path, code
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
def remove_tailwind_from_postcss() -> tuple[str, str]:
|
|
636
|
-
"""If tailwind is not to be used, remove it from postcss.config.js.
|
|
637
|
-
|
|
638
|
-
Returns:
|
|
639
|
-
The path and code of the compiled postcss.config.js.
|
|
640
|
-
"""
|
|
641
|
-
# Get the path for the output file.
|
|
642
|
-
output_path = str(get_web_dir() / constants.Dirs.POSTCSS_JS)
|
|
643
|
-
|
|
644
|
-
code = [
|
|
645
|
-
line
|
|
646
|
-
for line in Path(output_path).read_text().splitlines(keepends=True)
|
|
647
|
-
if "tailwindcss: " not in line
|
|
648
|
-
]
|
|
649
|
-
|
|
650
|
-
# Compile the config.
|
|
651
|
-
return output_path, "".join(code)
|
|
652
|
-
|
|
653
|
-
|
|
654
603
|
def purge_web_pages_dir():
|
|
655
604
|
"""Empty out .web/pages directory."""
|
|
656
605
|
if not is_prod_mode() and environment.REFLEX_PERSIST_WEB_DIR.get():
|
|
@@ -98,6 +98,18 @@ def get_template(name: str) -> Template:
|
|
|
98
98
|
return ReflexJinjaEnvironment().get_template(name=name)
|
|
99
99
|
|
|
100
100
|
|
|
101
|
+
def from_string(source: str) -> Template:
|
|
102
|
+
"""Get render function that work with a template.
|
|
103
|
+
|
|
104
|
+
Args:
|
|
105
|
+
source: The template source.
|
|
106
|
+
|
|
107
|
+
Returns:
|
|
108
|
+
A render function.
|
|
109
|
+
"""
|
|
110
|
+
return ReflexJinjaEnvironment().from_string(source=source)
|
|
111
|
+
|
|
112
|
+
|
|
101
113
|
# Template for the Reflex config file.
|
|
102
114
|
RXCONFIG = get_template("app/rxconfig.py.jinja2")
|
|
103
115
|
|
|
@@ -113,9 +125,6 @@ THEME = get_template("web/utils/theme.js.jinja2")
|
|
|
113
125
|
# Template for the context file.
|
|
114
126
|
CONTEXT = get_template("web/utils/context.js.jinja2")
|
|
115
127
|
|
|
116
|
-
# Template for Tailwind config.
|
|
117
|
-
TAILWIND_CONFIG = get_template("web/tailwind.config.js.jinja2")
|
|
118
|
-
|
|
119
128
|
# Template to render a component tag.
|
|
120
129
|
COMPONENT = get_template("web/pages/component.js.jinja2")
|
|
121
130
|
|
|
@@ -66,7 +66,7 @@ def compile_import_statement(fields: list[ImportVar]) -> tuple[str, list[str]]:
|
|
|
66
66
|
default = next(iter({field.name for field in defaults}), "")
|
|
67
67
|
rest = {field.name for field in fields_set - defaults}
|
|
68
68
|
|
|
69
|
-
return default,
|
|
69
|
+
return default, sorted(rest)
|
|
70
70
|
|
|
71
71
|
|
|
72
72
|
def validate_imports(import_dict: ParsedImportDict):
|
|
@@ -309,7 +309,7 @@ def compile_custom_component(
|
|
|
309
309
|
A tuple of the compiled component and the imports required by the component.
|
|
310
310
|
"""
|
|
311
311
|
# Render the component.
|
|
312
|
-
render = component.get_component(
|
|
312
|
+
render = component.get_component()
|
|
313
313
|
|
|
314
314
|
# Get the imports.
|
|
315
315
|
imports: ParsedImportDict = {
|
|
@@ -500,7 +500,23 @@ def add_meta(
|
|
|
500
500
|
return page
|
|
501
501
|
|
|
502
502
|
|
|
503
|
-
def
|
|
503
|
+
def resolve_path_of_web_dir(path: str | Path) -> Path:
|
|
504
|
+
"""Get the path under the web directory.
|
|
505
|
+
|
|
506
|
+
Args:
|
|
507
|
+
path: The path to get. It can be a relative or absolute path.
|
|
508
|
+
|
|
509
|
+
Returns:
|
|
510
|
+
The path under the web directory.
|
|
511
|
+
"""
|
|
512
|
+
path = Path(path)
|
|
513
|
+
web_dir = get_web_dir()
|
|
514
|
+
if path.is_relative_to(web_dir):
|
|
515
|
+
return path.absolute()
|
|
516
|
+
return (web_dir / path).absolute()
|
|
517
|
+
|
|
518
|
+
|
|
519
|
+
def write_file(path: str | Path, code: str):
|
|
504
520
|
"""Write the given code to the given path.
|
|
505
521
|
|
|
506
522
|
Args:
|
|
@@ -508,7 +524,7 @@ def write_page(path: str | Path, code: str):
|
|
|
508
524
|
code: The code to write.
|
|
509
525
|
"""
|
|
510
526
|
path = Path(path)
|
|
511
|
-
|
|
527
|
+
path.parent.mkdir(parents=True, exist_ok=True)
|
|
512
528
|
if path.exists() and path.read_text(encoding="utf-8") == code:
|
|
513
529
|
return
|
|
514
530
|
path.write_text(code, encoding="utf-8")
|