reflex 0.3.7__py3-none-any.whl → 0.3.8__py3-none-any.whl
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/.templates/apps/blank/code/blank.py +0 -1
- reflex/.templates/apps/demo/code/demo.py +0 -1
- reflex/.templates/apps/sidebar/code/sidebar.py +6 -2
- reflex/.templates/jinja/web/pages/_app.js.jinja2 +4 -1
- reflex/.templates/jinja/web/pages/base_page.js.jinja2 +4 -1
- reflex/.templates/jinja/web/pages/utils.js.jinja2 +24 -0
- reflex/.templates/jinja/web/tailwind.config.js.jinja2 +4 -1
- reflex/.templates/web/utils/helpers/dataeditor.js +56 -54
- reflex/__init__.py +4 -2
- reflex/__init__.pyi +6 -2
- reflex/app.py +43 -9
- reflex/app.pyi +2 -1
- reflex/app_module_for_backend.py +13 -0
- reflex/compiler/compiler.py +19 -0
- reflex/components/__init__.py +9 -232
- reflex/components/base/__init__.py +5 -1
- reflex/components/base/app_wrap.py +1 -1
- reflex/components/base/app_wrap.pyi +1 -1
- reflex/components/base/document.py +0 -8
- reflex/components/base/document.pyi +0 -80
- reflex/components/{layout → base}/fragment.pyi +1 -1
- reflex/components/chakra/__init__.py +202 -19
- reflex/components/{libs/chakra.pyi → chakra/base.pyi} +1 -1
- reflex/components/chakra/datadisplay/__init__.py +12 -0
- reflex/components/{datadisplay → chakra/datadisplay}/badge.py +1 -1
- reflex/components/{datadisplay → chakra/datadisplay}/badge.pyi +2 -2
- reflex/components/{datadisplay → chakra/datadisplay}/code.py +5 -5
- reflex/components/{datadisplay → chakra/datadisplay}/code.pyi +5 -5
- reflex/components/{datadisplay → chakra/datadisplay}/divider.py +4 -2
- reflex/components/{datadisplay → chakra/datadisplay}/divider.pyi +5 -3
- reflex/components/{datadisplay → chakra/datadisplay}/keyboard_key.py +1 -1
- reflex/components/{datadisplay → chakra/datadisplay}/keyboard_key.pyi +2 -2
- reflex/components/{datadisplay → chakra/datadisplay}/list.py +3 -3
- reflex/components/{datadisplay → chakra/datadisplay}/list.pyi +4 -4
- reflex/components/{datadisplay → chakra/datadisplay}/stat.py +1 -1
- reflex/components/{datadisplay → chakra/datadisplay}/stat.pyi +2 -2
- reflex/components/{datadisplay → chakra/datadisplay}/table.py +2 -2
- reflex/components/{datadisplay → chakra/datadisplay}/table.pyi +3 -3
- reflex/components/{datadisplay → chakra/datadisplay}/tag.py +2 -2
- reflex/components/{datadisplay → chakra/datadisplay}/tag.pyi +3 -3
- reflex/components/{disclosure → chakra/disclosure}/accordion.py +1 -1
- reflex/components/{disclosure → chakra/disclosure}/accordion.pyi +2 -2
- reflex/components/{disclosure → chakra/disclosure}/tabs.py +2 -2
- reflex/components/{disclosure → chakra/disclosure}/tabs.pyi +3 -3
- reflex/components/{disclosure → chakra/disclosure}/transition.py +1 -1
- reflex/components/{disclosure → chakra/disclosure}/transition.pyi +2 -2
- reflex/components/{disclosure → chakra/disclosure}/visuallyhidden.py +1 -1
- reflex/components/{disclosure → chakra/disclosure}/visuallyhidden.pyi +2 -2
- reflex/components/{feedback → chakra/feedback}/alert.py +2 -2
- reflex/components/{feedback → chakra/feedback}/alert.pyi +2 -6
- reflex/components/{feedback → chakra/feedback}/circularprogress.py +1 -1
- reflex/components/{feedback → chakra/feedback}/circularprogress.pyi +2 -2
- reflex/components/{feedback → chakra/feedback}/progress.py +1 -1
- reflex/components/{feedback → chakra/feedback}/progress.pyi +2 -2
- reflex/components/{feedback → chakra/feedback}/skeleton.py +1 -1
- reflex/components/{feedback → chakra/feedback}/skeleton.pyi +2 -2
- reflex/components/{feedback → chakra/feedback}/spinner.py +1 -1
- reflex/components/{feedback → chakra/feedback}/spinner.pyi +2 -2
- reflex/components/{forms → chakra/forms}/__init__.py +2 -11
- reflex/components/{forms → chakra/forms}/button.py +3 -1
- reflex/components/{forms → chakra/forms}/button.pyi +2 -2
- reflex/components/{forms → chakra/forms}/checkbox.py +1 -1
- reflex/components/{forms → chakra/forms}/checkbox.pyi +2 -6
- reflex/components/{forms → chakra/forms}/colormodeswitch.py +10 -2
- reflex/components/{forms → chakra/forms}/colormodeswitch.pyi +83 -3
- reflex/components/{forms → chakra/forms}/date_picker.py +1 -1
- reflex/components/{forms → chakra/forms}/date_picker.pyi +2 -2
- reflex/components/{forms → chakra/forms}/date_time_picker.py +1 -1
- reflex/components/{forms → chakra/forms}/date_time_picker.pyi +2 -2
- reflex/components/{forms → chakra/forms}/editable.py +1 -1
- reflex/components/{forms → chakra/forms}/editable.pyi +2 -2
- reflex/components/{forms → chakra/forms}/email.py +1 -1
- reflex/components/{forms → chakra/forms}/email.pyi +2 -2
- reflex/components/{forms → chakra/forms}/form.py +1 -1
- reflex/components/{forms → chakra/forms}/form.pyi +2 -2
- reflex/components/{forms → chakra/forms}/iconbutton.py +1 -1
- reflex/components/{forms → chakra/forms}/iconbutton.pyi +2 -2
- reflex/components/{forms → chakra/forms}/input.py +5 -4
- reflex/components/{forms → chakra/forms}/input.pyi +59 -5
- reflex/components/{forms → chakra/forms}/numberinput.py +6 -2
- reflex/components/{forms → chakra/forms}/numberinput.pyi +10 -2
- reflex/components/{forms → chakra/forms}/password.py +1 -1
- reflex/components/{forms → chakra/forms}/password.pyi +2 -2
- reflex/components/{forms → chakra/forms}/pininput.py +1 -1
- reflex/components/{forms → chakra/forms}/pininput.pyi +2 -2
- reflex/components/{forms → chakra/forms}/radio.py +3 -3
- reflex/components/{forms → chakra/forms}/radio.pyi +4 -4
- reflex/components/{forms → chakra/forms}/rangeslider.py +1 -1
- reflex/components/{forms → chakra/forms}/rangeslider.pyi +2 -2
- reflex/components/{forms → chakra/forms}/select.py +3 -3
- reflex/components/{forms → chakra/forms}/select.pyi +4 -4
- reflex/components/{forms → chakra/forms}/slider.py +4 -3
- reflex/components/{forms → chakra/forms}/slider.pyi +5 -4
- reflex/components/{forms → chakra/forms}/switch.py +1 -1
- reflex/components/{forms → chakra/forms}/switch.pyi +2 -2
- reflex/components/{forms → chakra/forms}/textarea.py +2 -2
- reflex/components/{forms → chakra/forms}/textarea.pyi +3 -3
- reflex/components/chakra/forms/time_picker.py +11 -0
- reflex/components/chakra/forms/time_picker.pyi +129 -0
- reflex/components/{layout → chakra/layout}/__init__.py +1 -20
- reflex/components/{layout → chakra/layout}/aspect_ratio.py +1 -1
- reflex/components/{layout → chakra/layout}/aspect_ratio.pyi +2 -2
- reflex/components/{layout → chakra/layout}/box.py +1 -1
- reflex/components/{layout → chakra/layout}/box.pyi +2 -2
- reflex/components/{layout → chakra/layout}/card.py +2 -2
- reflex/components/{layout → chakra/layout}/card.pyi +3 -3
- reflex/components/{layout → chakra/layout}/center.py +1 -1
- reflex/components/{layout → chakra/layout}/center.pyi +2 -2
- reflex/components/{layout → chakra/layout}/container.py +1 -1
- reflex/components/{layout → chakra/layout}/container.pyi +2 -2
- reflex/components/{layout → chakra/layout}/flex.py +1 -1
- reflex/components/{layout → chakra/layout}/flex.pyi +2 -2
- reflex/components/{layout → chakra/layout}/grid.py +1 -1
- reflex/components/{layout → chakra/layout}/grid.pyi +2 -2
- reflex/components/{layout → chakra/layout}/html.py +1 -1
- reflex/components/{layout → chakra/layout}/html.pyi +2 -2
- reflex/components/{layout → chakra/layout}/spacer.py +1 -1
- reflex/components/{layout → chakra/layout}/spacer.pyi +2 -2
- reflex/components/{layout → chakra/layout}/stack.py +1 -1
- reflex/components/{layout → chakra/layout}/stack.pyi +2 -2
- reflex/components/{layout → chakra/layout}/wrap.py +1 -1
- reflex/components/{layout → chakra/layout}/wrap.pyi +2 -2
- reflex/components/chakra/media/__init__.py +7 -0
- reflex/components/{media → chakra/media}/avatar.py +1 -1
- reflex/components/{media → chakra/media}/avatar.pyi +2 -2
- reflex/components/chakra/media/icon.py +110 -0
- reflex/components/{media → chakra/media}/icon.pyi +2 -2
- reflex/components/chakra/media/image.py +1 -1
- reflex/components/chakra/media/image.pyi +1 -1
- reflex/components/{navigation → chakra/navigation}/__init__.py +0 -1
- reflex/components/{navigation → chakra/navigation}/breadcrumb.py +3 -3
- reflex/components/{navigation → chakra/navigation}/breadcrumb.pyi +4 -4
- reflex/components/{navigation → chakra/navigation}/link.py +2 -2
- reflex/components/{navigation → chakra/navigation}/link.pyi +3 -3
- reflex/components/{navigation → chakra/navigation}/linkoverlay.py +1 -1
- reflex/components/{navigation → chakra/navigation}/linkoverlay.pyi +2 -2
- reflex/components/{navigation → chakra/navigation}/stepper.py +1 -1
- reflex/components/{navigation → chakra/navigation}/stepper.pyi +2 -2
- reflex/components/{overlay → chakra/overlay}/__init__.py +0 -1
- reflex/components/{overlay → chakra/overlay}/alertdialog.py +2 -2
- reflex/components/{overlay → chakra/overlay}/alertdialog.pyi +3 -3
- reflex/components/{overlay → chakra/overlay}/drawer.py +3 -3
- reflex/components/{overlay → chakra/overlay}/drawer.pyi +4 -4
- reflex/components/{overlay → chakra/overlay}/menu.py +4 -6
- reflex/components/{overlay → chakra/overlay}/menu.pyi +4 -4
- reflex/components/{overlay → chakra/overlay}/modal.py +2 -2
- reflex/components/{overlay → chakra/overlay}/modal.pyi +3 -3
- reflex/components/{overlay → chakra/overlay}/popover.py +2 -2
- reflex/components/{overlay → chakra/overlay}/popover.pyi +3 -3
- reflex/components/{overlay → chakra/overlay}/tooltip.py +1 -1
- reflex/components/{overlay → chakra/overlay}/tooltip.pyi +2 -2
- reflex/components/{typography → chakra/typography}/__init__.py +0 -1
- reflex/components/{typography → chakra/typography}/heading.py +1 -1
- reflex/components/{typography → chakra/typography}/heading.pyi +2 -2
- reflex/components/{typography → chakra/typography}/highlight.py +1 -1
- reflex/components/{typography → chakra/typography}/highlight.pyi +2 -2
- reflex/components/{typography → chakra/typography}/span.py +1 -1
- reflex/components/{typography → chakra/typography}/span.pyi +2 -2
- reflex/components/{typography → chakra/typography}/text.py +1 -1
- reflex/components/{typography → chakra/typography}/text.pyi +2 -2
- reflex/components/component.py +7 -8
- reflex/components/core/__init__.py +22 -0
- reflex/components/{overlay → core}/banner.py +4 -3
- reflex/components/{overlay → core}/banner.pyi +5 -4
- reflex/components/{navigation → core}/client_side_routing.py +1 -1
- reflex/components/{navigation → core}/client_side_routing.pyi +2 -2
- reflex/components/{layout → core}/cond.py +1 -1
- reflex/components/{forms → core}/debounce.py +1 -1
- reflex/components/{forms → core}/debounce.pyi +2 -2
- reflex/components/{layout → core}/foreach.py +18 -2
- reflex/components/core/match.py +257 -0
- reflex/components/{layout → core}/responsive.py +1 -1
- reflex/components/{forms → core}/upload.py +2 -2
- reflex/components/{forms → core}/upload.pyi +3 -3
- reflex/components/datadisplay/__init__.py +4 -13
- reflex/components/el/elements/inline.py +4 -0
- reflex/components/el/elements/inline.pyi +3 -0
- reflex/components/gridjs/__init__.py +5 -0
- reflex/components/{datadisplay → gridjs}/datatable.pyi +1 -1
- reflex/components/literals.py +27 -0
- reflex/components/markdown/__init__.py +5 -0
- reflex/components/{typography → markdown}/markdown.py +16 -6
- reflex/components/{typography → markdown}/markdown.pyi +10 -5
- reflex/components/media/__init__.py +1 -8
- reflex/components/media/icon.py +2 -110
- reflex/components/moment/__init__.py +5 -0
- reflex/components/{datadisplay → moment}/moment.pyi +1 -1
- reflex/components/next/__init__.py +2 -0
- reflex/components/{navigation/nextlink.pyi → next/link.pyi} +1 -1
- reflex/components/plotly/__init__.py +5 -0
- reflex/components/{graphing → plotly}/plotly.pyi +1 -1
- reflex/components/radix/primitives/__init__.py +12 -1
- reflex/components/radix/primitives/accordion.py +33 -68
- reflex/components/radix/primitives/accordion.pyi +6 -89
- reflex/components/radix/primitives/base.py +27 -0
- reflex/components/radix/primitives/base.pyi +95 -0
- reflex/components/radix/primitives/form.py +267 -0
- reflex/components/radix/primitives/form.pyi +740 -0
- reflex/components/radix/primitives/progress.py +84 -0
- reflex/components/radix/primitives/progress.pyi +268 -0
- reflex/components/radix/primitives/slider.py +179 -0
- reflex/components/radix/primitives/slider.pyi +452 -0
- reflex/components/radix/themes/base.py +43 -31
- reflex/components/radix/themes/base.pyi +223 -29
- reflex/components/radix/themes/components/__init__.py +18 -3
- reflex/components/radix/themes/components/alertdialog.py +27 -6
- reflex/components/radix/themes/components/alertdialog.pyi +713 -2
- reflex/components/radix/themes/components/aspectratio.py +1 -1
- reflex/components/radix/themes/components/aspectratio.pyi +67 -2
- reflex/components/radix/themes/components/avatar.py +0 -3
- reflex/components/radix/themes/components/avatar.pyi +13 -13
- reflex/components/radix/themes/components/badge.py +1 -4
- reflex/components/radix/themes/components/badge.pyi +11 -11
- reflex/components/radix/themes/components/button.py +1 -1
- reflex/components/radix/themes/components/button.pyi +15 -11
- reflex/components/radix/themes/components/callout.pyi +144 -12
- reflex/components/radix/themes/components/card.py +1 -1
- reflex/components/radix/themes/components/card.pyi +68 -1
- reflex/components/radix/themes/components/checkbox.pyi +14 -12
- reflex/components/radix/themes/components/contextmenu.pyi +402 -8
- reflex/components/radix/themes/components/dialog.py +6 -0
- reflex/components/radix/themes/components/dialog.pyi +518 -0
- reflex/components/radix/themes/components/dropdownmenu.pyi +337 -8
- reflex/components/radix/themes/components/hovercard.pyi +195 -0
- reflex/components/radix/themes/components/iconbutton.pyi +14 -12
- reflex/components/radix/themes/components/icons.py +2 -2
- reflex/components/radix/themes/components/inset.pyi +65 -0
- reflex/components/radix/themes/components/popover.pyi +260 -0
- reflex/components/radix/themes/components/radiogroup.py +1 -1
- reflex/components/radix/themes/components/radiogroup.pyi +78 -9
- reflex/components/radix/themes/components/scrollarea.pyi +65 -0
- reflex/components/radix/themes/components/select.pyi +342 -13
- reflex/components/radix/themes/components/separator.pyi +7 -5
- reflex/components/radix/themes/components/slider.py +4 -4
- reflex/components/radix/themes/components/slider.pyi +17 -13
- reflex/components/radix/themes/components/switch.pyi +20 -18
- reflex/components/radix/themes/components/table.py +1 -1
- reflex/components/radix/themes/components/table.pyi +458 -1
- reflex/components/radix/themes/components/tabs.py +4 -4
- reflex/components/radix/themes/components/tabs.pyi +263 -3
- reflex/components/radix/themes/components/textarea.py +1 -1
- reflex/components/radix/themes/components/textarea.pyi +1 -1
- reflex/components/radix/themes/components/textfield.py +1 -1
- reflex/components/radix/themes/components/textfield.pyi +18 -14
- reflex/components/radix/themes/components/tooltip.py +15 -0
- reflex/components/radix/themes/components/tooltip.pyi +205 -0
- reflex/components/radix/themes/layout/base.pyi +65 -0
- reflex/components/radix/themes/layout/box.pyi +65 -0
- reflex/components/radix/themes/layout/container.pyi +65 -0
- reflex/components/radix/themes/layout/flex.pyi +65 -0
- reflex/components/radix/themes/layout/grid.pyi +65 -0
- reflex/components/radix/themes/layout/section.pyi +65 -0
- reflex/components/radix/themes/typography/blockquote.pyi +16 -14
- reflex/components/radix/themes/typography/code.pyi +22 -20
- reflex/components/radix/themes/typography/em.pyi +65 -0
- reflex/components/radix/themes/typography/heading.pyi +30 -28
- reflex/components/radix/themes/typography/kbd.pyi +65 -0
- reflex/components/radix/themes/typography/link.py +2 -1
- reflex/components/radix/themes/typography/link.pyi +121 -28
- reflex/components/radix/themes/typography/quote.pyi +66 -0
- reflex/components/radix/themes/typography/strong.pyi +65 -0
- reflex/components/radix/themes/typography/text.pyi +30 -28
- reflex/components/react_player/__init__.py +7 -0
- reflex/components/react_player/audio.py +8 -0
- reflex/components/{media → react_player}/audio.pyi +3 -3
- reflex/components/{libs → react_player}/react_player.py +1 -1
- reflex/components/{libs → react_player}/react_player.pyi +3 -3
- reflex/components/react_player/video.py +8 -0
- reflex/components/{media → react_player}/video.pyi +3 -3
- reflex/components/{graphing/recharts → recharts}/cartesian.pyi +1 -1
- reflex/components/{graphing/recharts → recharts}/charts.py +1 -1
- reflex/components/{graphing/recharts → recharts}/charts.pyi +2 -2
- reflex/components/{graphing/recharts → recharts}/general.pyi +1 -1
- reflex/components/{graphing/recharts → recharts}/polar.pyi +1 -1
- reflex/components/{graphing/recharts → recharts}/recharts.pyi +1 -1
- reflex/components/suneditor/__init__.py +5 -0
- reflex/components/{forms → suneditor}/editor.pyi +1 -1
- reflex/components/tags/__init__.py +1 -0
- reflex/components/tags/iter_tag.py +3 -3
- reflex/components/tags/match_tag.py +19 -0
- reflex/constants/base.py +2 -0
- reflex/constants/installer.py +1 -0
- reflex/constants/style.py +1 -1
- reflex/event.py +1 -1
- reflex/reflex.py +14 -12
- reflex/state.py +14 -0
- reflex/style.py +1 -1
- reflex/testing.py +59 -9
- reflex/utils/build.py +7 -1
- reflex/utils/exceptions.py +6 -0
- reflex/utils/exec.py +2 -2
- reflex/utils/export.py +1 -1
- reflex/utils/format.py +41 -4
- reflex/utils/prerequisites.py +37 -6
- reflex/utils/types.py +2 -2
- reflex/vars.py +25 -1
- {reflex-0.3.7.dist-info → reflex-0.3.8.dist-info}/METADATA +7 -2
- reflex-0.3.8.dist-info/RECORD +492 -0
- reflex/components/graphing/__init__.py +0 -5
- reflex/components/libs/__init__.py +0 -31
- reflex/components/media/audio.py +0 -8
- reflex/components/media/image.pyi +0 -123
- reflex/components/media/video.py +0 -8
- reflex-0.3.7.dist-info/RECORD +0 -470
- /reflex/components/{layout → base}/fragment.py +0 -0
- /reflex/components/{libs/chakra.py → chakra/base.py} +0 -0
- /reflex/components/{disclosure → chakra/disclosure}/__init__.py +0 -0
- /reflex/components/{feedback → chakra/feedback}/__init__.py +0 -0
- /reflex/components/{forms → chakra/forms}/multiselect.py +0 -0
- /reflex/components/{datadisplay → gridjs}/datatable.py +0 -0
- /reflex/components/{datadisplay → moment}/moment.py +0 -0
- /reflex/components/{navigation/nextlink.py → next/link.py} +0 -0
- /reflex/components/{graphing → plotly}/plotly.py +0 -0
- /reflex/components/{graphing/recharts → recharts}/__init__.py +0 -0
- /reflex/components/{graphing/recharts → recharts}/cartesian.py +0 -0
- /reflex/components/{graphing/recharts → recharts}/general.py +0 -0
- /reflex/components/{graphing/recharts → recharts}/polar.py +0 -0
- /reflex/components/{graphing/recharts → recharts}/recharts.py +0 -0
- /reflex/components/{forms → suneditor}/editor.py +0 -0
- {reflex-0.3.7.dist-info → reflex-0.3.8.dist-info}/LICENSE +0 -0
- {reflex-0.3.7.dist-info → reflex-0.3.8.dist-info}/WHEEL +0 -0
- {reflex-0.3.7.dist-info → reflex-0.3.8.dist-info}/entry_points.txt +0 -0
|
@@ -7,6 +7,10 @@ from code.pages import *
|
|
|
7
7
|
|
|
8
8
|
import reflex as rx
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
|
|
11
|
+
class State(rx.State):
|
|
12
|
+
"""Define empty state to allow access to rx.State.router."""
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
# Create the app.
|
|
11
16
|
app = rx.App(style=styles.base_style)
|
|
12
|
-
app.compile()
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
{% extends "web/pages/base_page.js.jinja2" %}
|
|
2
2
|
|
|
3
|
+
{% block early_imports %}
|
|
4
|
+
import '/styles/styles.css'
|
|
5
|
+
{% endblock %}
|
|
6
|
+
|
|
3
7
|
{% block declaration %}
|
|
4
8
|
import { EventLoopProvider, StateProvider } from "/utils/context.js";
|
|
5
9
|
import { ThemeProvider } from 'next-themes'
|
|
6
|
-
import '/styles/styles.css'
|
|
7
10
|
|
|
8
11
|
|
|
9
12
|
{% for custom_code in custom_codes %}
|
|
@@ -8,6 +8,8 @@
|
|
|
8
8
|
{{- component }}
|
|
9
9
|
{%- elif "iterable" in component %}
|
|
10
10
|
{{- render_iterable_tag(component) }}
|
|
11
|
+
{%- elif component.name == "match"%}
|
|
12
|
+
{{- render_match_tag(component) }}
|
|
11
13
|
{%- elif "cond" in component %}
|
|
12
14
|
{{- render_condition_tag(component) }}
|
|
13
15
|
{%- elif component.children|length %}
|
|
@@ -77,6 +79,28 @@
|
|
|
77
79
|
{% if props|length %} {{ props|join(" ") }}{% endif %}
|
|
78
80
|
{% endmacro %}
|
|
79
81
|
|
|
82
|
+
{# Rendering Match component. #}
|
|
83
|
+
{# Args: #}
|
|
84
|
+
{# component: component dictionary #}
|
|
85
|
+
{% macro render_match_tag(component) %}
|
|
86
|
+
{
|
|
87
|
+
(() => {
|
|
88
|
+
switch (JSON.stringify({{ component.cond._var_full_name }})) {
|
|
89
|
+
{% for case in component.match_cases %}
|
|
90
|
+
{% for condition in case[:-1] %}
|
|
91
|
+
case JSON.stringify({{ condition._var_name_unwrapped }}):
|
|
92
|
+
{% endfor %}
|
|
93
|
+
return {{ case[-1] }};
|
|
94
|
+
break;
|
|
95
|
+
{% endfor %}
|
|
96
|
+
default:
|
|
97
|
+
return {{ component.default }};
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
})()
|
|
101
|
+
}
|
|
102
|
+
{%- endmacro %}
|
|
103
|
+
|
|
80
104
|
|
|
81
105
|
{# Rendering content with args. #}
|
|
82
106
|
{# Args: #}
|
|
@@ -1,67 +1,69 @@
|
|
|
1
|
-
import { GridCellKind } from "@glideapps/glide-data-grid"
|
|
1
|
+
import { GridCellKind } from "@glideapps/glide-data-grid";
|
|
2
2
|
|
|
3
3
|
export function getDEColumn(columns, col) {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
let c = columns[col];
|
|
5
|
+
c.pos = col;
|
|
6
|
+
return c;
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
export function getDERow(data, row) {
|
|
10
|
-
|
|
10
|
+
return data[row];
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
export function locateCell(row, column) {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
if (Array.isArray(row)) {
|
|
15
|
+
return row[column.pos];
|
|
16
|
+
} else {
|
|
17
|
+
return row[column.id];
|
|
18
|
+
}
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
export function formatCell(value, column) {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
};
|
|
22
|
+
const editable = column.editable ?? true;
|
|
23
|
+
switch (column.type) {
|
|
24
|
+
case "int":
|
|
25
|
+
case "float":
|
|
26
|
+
return {
|
|
27
|
+
kind: GridCellKind.Number,
|
|
28
|
+
data: value,
|
|
29
|
+
displayData: value + "",
|
|
30
|
+
readonly: !editable,
|
|
31
|
+
allowOverlay: editable,
|
|
32
|
+
};
|
|
33
|
+
case "datetime":
|
|
34
|
+
// value = moment format?
|
|
35
|
+
case "str":
|
|
36
|
+
return {
|
|
37
|
+
kind: GridCellKind.Text,
|
|
38
|
+
data: value,
|
|
39
|
+
displayData: value,
|
|
40
|
+
readonly: !editable,
|
|
41
|
+
allowOverlay: editable,
|
|
42
|
+
};
|
|
43
|
+
case "bool":
|
|
44
|
+
return {
|
|
45
|
+
kind: GridCellKind.Boolean,
|
|
46
|
+
data: value,
|
|
47
|
+
readonly: !editable,
|
|
48
|
+
};
|
|
49
|
+
default:
|
|
50
|
+
console.log(
|
|
51
|
+
"Warning: column.type is undefined for column.title=" + column.title
|
|
52
|
+
);
|
|
53
|
+
return {
|
|
54
|
+
kind: GridCellKind.Text,
|
|
55
|
+
data: value,
|
|
56
|
+
displayData: column.type,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
}
|
|
58
60
|
|
|
59
61
|
export function formatDataEditorCells(col, row, columns, data) {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
}
|
|
62
|
+
if (row < data.length && col < columns.length) {
|
|
63
|
+
const column = getDEColumn(columns, col);
|
|
64
|
+
const rowData = getDERow(data, row);
|
|
65
|
+
const cellData = locateCell(rowData, column);
|
|
66
|
+
return formatCell(cellData, column);
|
|
67
|
+
}
|
|
68
|
+
return { kind: GridCellKind.Loading };
|
|
69
|
+
}
|
reflex/__init__.py
CHANGED
|
@@ -114,6 +114,7 @@ _ALL_COMPONENTS = [
|
|
|
114
114
|
"List",
|
|
115
115
|
"ListItem",
|
|
116
116
|
"Markdown",
|
|
117
|
+
"Match",
|
|
117
118
|
"Menu",
|
|
118
119
|
"MenuButton",
|
|
119
120
|
"MenuDivider",
|
|
@@ -215,6 +216,7 @@ _ALL_COMPONENTS = [
|
|
|
215
216
|
"Tfoot",
|
|
216
217
|
"Th",
|
|
217
218
|
"Thead",
|
|
219
|
+
"TimePicker",
|
|
218
220
|
"Tooltip",
|
|
219
221
|
"Tr",
|
|
220
222
|
"UnorderedList",
|
|
@@ -251,8 +253,8 @@ _MAPPING = {
|
|
|
251
253
|
"reflex.compiler.utils": ["get_asset_path"],
|
|
252
254
|
"reflex.components": _ALL_COMPONENTS + ["chakra", "next"],
|
|
253
255
|
"reflex.components.component": ["memo"],
|
|
254
|
-
"reflex.components.
|
|
255
|
-
"reflex.components.
|
|
256
|
+
"reflex.components.recharts": ["recharts"],
|
|
257
|
+
"reflex.components.moment.moment": ["MomentDelta"],
|
|
256
258
|
"reflex.config": ["config", "Config", "DBConfig"],
|
|
257
259
|
"reflex.constants": ["constants", "Env"],
|
|
258
260
|
"reflex.components.el": ["el"],
|
reflex/__init__.pyi
CHANGED
|
@@ -107,6 +107,7 @@ from reflex.components import LinkOverlay as LinkOverlay
|
|
|
107
107
|
from reflex.components import List as List
|
|
108
108
|
from reflex.components import ListItem as ListItem
|
|
109
109
|
from reflex.components import Markdown as Markdown
|
|
110
|
+
from reflex.components import Match as Match
|
|
110
111
|
from reflex.components import Menu as Menu
|
|
111
112
|
from reflex.components import MenuButton as MenuButton
|
|
112
113
|
from reflex.components import MenuDivider as MenuDivider
|
|
@@ -208,6 +209,7 @@ from reflex.components import TextArea as TextArea
|
|
|
208
209
|
from reflex.components import Tfoot as Tfoot
|
|
209
210
|
from reflex.components import Th as Th
|
|
210
211
|
from reflex.components import Thead as Thead
|
|
212
|
+
from reflex.components import TimePicker as TimePicker
|
|
211
213
|
from reflex.components import Tooltip as Tooltip
|
|
212
214
|
from reflex.components import Tr as Tr
|
|
213
215
|
from reflex.components import UnorderedList as UnorderedList
|
|
@@ -317,6 +319,7 @@ from reflex.components import link_overlay as link_overlay
|
|
|
317
319
|
from reflex.components import list as list
|
|
318
320
|
from reflex.components import list_item as list_item
|
|
319
321
|
from reflex.components import markdown as markdown
|
|
322
|
+
from reflex.components import match as match
|
|
320
323
|
from reflex.components import menu as menu
|
|
321
324
|
from reflex.components import menu_button as menu_button
|
|
322
325
|
from reflex.components import menu_divider as menu_divider
|
|
@@ -418,6 +421,7 @@ from reflex.components import text_area as text_area
|
|
|
418
421
|
from reflex.components import tfoot as tfoot
|
|
419
422
|
from reflex.components import th as th
|
|
420
423
|
from reflex.components import thead as thead
|
|
424
|
+
from reflex.components import time_picker as time_picker
|
|
421
425
|
from reflex.components import tooltip as tooltip
|
|
422
426
|
from reflex.components import tr as tr
|
|
423
427
|
from reflex.components import unordered_list as unordered_list
|
|
@@ -443,8 +447,8 @@ from reflex.components import NoSSRComponent as NoSSRComponent
|
|
|
443
447
|
from reflex.components import chakra as chakra
|
|
444
448
|
from reflex.components import next as next
|
|
445
449
|
from reflex.components.component import memo as memo
|
|
446
|
-
from reflex.components
|
|
447
|
-
from reflex.components.
|
|
450
|
+
from reflex.components import recharts as recharts
|
|
451
|
+
from reflex.components.moment.moment import MomentDelta as MomentDelta
|
|
448
452
|
from reflex import config as config
|
|
449
453
|
from reflex.config import Config as Config
|
|
450
454
|
from reflex.config import DBConfig as DBConfig
|
reflex/app.py
CHANGED
|
@@ -37,12 +37,13 @@ from reflex.compiler import compiler
|
|
|
37
37
|
from reflex.compiler import utils as compiler_utils
|
|
38
38
|
from reflex.components import connection_modal
|
|
39
39
|
from reflex.components.base.app_wrap import AppWrap
|
|
40
|
+
from reflex.components.base.fragment import Fragment
|
|
40
41
|
from reflex.components.component import Component, ComponentStyle
|
|
41
|
-
from reflex.components.
|
|
42
|
-
from reflex.components.navigation.client_side_routing import (
|
|
42
|
+
from reflex.components.core.client_side_routing import (
|
|
43
43
|
Default404Page,
|
|
44
44
|
wait_for_client_redirect,
|
|
45
45
|
)
|
|
46
|
+
from reflex.components.radix import themes
|
|
46
47
|
from reflex.config import get_config
|
|
47
48
|
from reflex.event import Event, EventHandler, EventSpec
|
|
48
49
|
from reflex.middleware import HydrateMiddleware, Middleware
|
|
@@ -62,8 +63,9 @@ from reflex.state import (
|
|
|
62
63
|
State,
|
|
63
64
|
StateManager,
|
|
64
65
|
StateUpdate,
|
|
66
|
+
code_uses_state_contexts,
|
|
65
67
|
)
|
|
66
|
-
from reflex.utils import console, format, prerequisites, types
|
|
68
|
+
from reflex.utils import console, exceptions, format, prerequisites, types
|
|
67
69
|
from reflex.utils.imports import ImportVar
|
|
68
70
|
|
|
69
71
|
# Define custom types.
|
|
@@ -131,7 +133,7 @@ class App(Base):
|
|
|
131
133
|
background_tasks: Set[asyncio.Task] = set()
|
|
132
134
|
|
|
133
135
|
# The radix theme for the entire app
|
|
134
|
-
theme: Optional[Component] =
|
|
136
|
+
theme: Optional[Component] = themes.theme(accent_color="blue")
|
|
135
137
|
|
|
136
138
|
def __init__(self, *args, **kwargs):
|
|
137
139
|
"""Initialize the app.
|
|
@@ -168,7 +170,8 @@ class App(Base):
|
|
|
168
170
|
deprecation_version="0.3.5",
|
|
169
171
|
removal_version="0.4.0",
|
|
170
172
|
)
|
|
171
|
-
|
|
173
|
+
if len(State.class_subclasses) > 0:
|
|
174
|
+
self.state = State
|
|
172
175
|
# Get the config
|
|
173
176
|
config = get_config()
|
|
174
177
|
|
|
@@ -343,9 +346,12 @@ class App(Base):
|
|
|
343
346
|
|
|
344
347
|
Raises:
|
|
345
348
|
TypeError: When an invalid component function is passed.
|
|
349
|
+
exceptions.MatchTypeError: If the return types of match cases in rx.match are different.
|
|
346
350
|
"""
|
|
347
351
|
try:
|
|
348
352
|
return component if isinstance(component, Component) else component()
|
|
353
|
+
except exceptions.MatchTypeError:
|
|
354
|
+
raise
|
|
349
355
|
except TypeError as e:
|
|
350
356
|
message = str(e)
|
|
351
357
|
if "BaseVar" in message or "ComputedVar" in message:
|
|
@@ -619,7 +625,24 @@ class App(Base):
|
|
|
619
625
|
return True
|
|
620
626
|
|
|
621
627
|
def compile(self):
|
|
622
|
-
"""
|
|
628
|
+
"""compile_() is the new function for performing compilation.
|
|
629
|
+
Reflex framework will call it automatically as needed.
|
|
630
|
+
"""
|
|
631
|
+
console.deprecate(
|
|
632
|
+
feature_name="app.compile()",
|
|
633
|
+
reason="Explicit calls to app.compile() are not needed."
|
|
634
|
+
" Method will be removed in 0.4.0",
|
|
635
|
+
deprecation_version="0.3.8",
|
|
636
|
+
removal_version="0.4.0",
|
|
637
|
+
)
|
|
638
|
+
return
|
|
639
|
+
|
|
640
|
+
def compile_(self):
|
|
641
|
+
"""Compile the app and output it to the pages folder.
|
|
642
|
+
|
|
643
|
+
Raises:
|
|
644
|
+
RuntimeError: When any page uses state, but no rx.State subclass is defined.
|
|
645
|
+
"""
|
|
623
646
|
# add the pages before the compile check so App know onload methods
|
|
624
647
|
for render, kwargs in DECORATED_PAGES:
|
|
625
648
|
self.add_page(render, **kwargs)
|
|
@@ -667,8 +690,7 @@ class App(Base):
|
|
|
667
690
|
# Merge the component style with the app style.
|
|
668
691
|
component.add_style(self.style)
|
|
669
692
|
|
|
670
|
-
|
|
671
|
-
component.apply_theme(self.theme)
|
|
693
|
+
component.apply_theme(self.theme)
|
|
672
694
|
|
|
673
695
|
# Add component.get_imports() to all_imports.
|
|
674
696
|
all_imports.update(component.get_imports())
|
|
@@ -685,6 +707,16 @@ class App(Base):
|
|
|
685
707
|
stateful_components_code,
|
|
686
708
|
page_components,
|
|
687
709
|
) = compiler.compile_stateful_components(self.pages.values())
|
|
710
|
+
|
|
711
|
+
# Catch "static" apps (that do not define a rx.State subclass) which are trying to access rx.State.
|
|
712
|
+
if (
|
|
713
|
+
code_uses_state_contexts(stateful_components_code)
|
|
714
|
+
and self.state is None
|
|
715
|
+
):
|
|
716
|
+
raise RuntimeError(
|
|
717
|
+
"To access rx.State in frontend components, at least one "
|
|
718
|
+
"subclass of rx.State must be defined in the app."
|
|
719
|
+
)
|
|
688
720
|
compile_results.append((stateful_components_path, stateful_components_code))
|
|
689
721
|
|
|
690
722
|
result_futures = []
|
|
@@ -736,7 +768,9 @@ class App(Base):
|
|
|
736
768
|
config.tailwind["content"] = config.tailwind.get(
|
|
737
769
|
"content", constants.Tailwind.CONTENT
|
|
738
770
|
)
|
|
739
|
-
|
|
771
|
+
submit_work(compiler.compile_tailwind, config.tailwind)
|
|
772
|
+
else:
|
|
773
|
+
submit_work(compiler.remove_tailwind_from_postcss)
|
|
740
774
|
|
|
741
775
|
# Get imports from AppWrap components.
|
|
742
776
|
all_imports.update(app_root.get_imports())
|
reflex/app.pyi
CHANGED
|
@@ -12,7 +12,7 @@ from reflex.components.component import (
|
|
|
12
12
|
Component as Component,
|
|
13
13
|
ComponentStyle as ComponentStyle,
|
|
14
14
|
)
|
|
15
|
-
from reflex.components.
|
|
15
|
+
from reflex.components.base.fragment import Fragment as Fragment
|
|
16
16
|
from reflex.config import get_config as get_config
|
|
17
17
|
from reflex.event import (
|
|
18
18
|
Event as Event,
|
|
@@ -120,6 +120,7 @@ class App(Base):
|
|
|
120
120
|
def setup_admin_dash(self) -> None: ...
|
|
121
121
|
def get_frontend_packages(self, imports: Dict[str, str]): ...
|
|
122
122
|
def compile(self) -> None: ...
|
|
123
|
+
def compile_(self) -> None: ...
|
|
123
124
|
def modify_state(self, token: str) -> AsyncContextManager[State]: ...
|
|
124
125
|
def _process_background(
|
|
125
126
|
self, state: State, event: Event
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"""Shims the real reflex app module for running backend server (uvicorn or gunicorn).
|
|
2
|
+
Only the app attribute is explicitly exposed.
|
|
3
|
+
"""
|
|
4
|
+
from reflex import constants
|
|
5
|
+
from reflex.utils.prerequisites import get_compiled_app
|
|
6
|
+
|
|
7
|
+
if "app" != constants.CompileVars.APP:
|
|
8
|
+
raise AssertionError("unexpected variable name for 'app'")
|
|
9
|
+
app = getattr(get_compiled_app(), constants.CompileVars.APP)
|
|
10
|
+
|
|
11
|
+
# ensure only "app" is exposed.
|
|
12
|
+
del get_compiled_app
|
|
13
|
+
del constants
|
reflex/compiler/compiler.py
CHANGED
|
@@ -432,6 +432,25 @@ def compile_tailwind(
|
|
|
432
432
|
return output_path, code
|
|
433
433
|
|
|
434
434
|
|
|
435
|
+
def remove_tailwind_from_postcss() -> tuple[str, str]:
|
|
436
|
+
"""If tailwind is not to be used, remove it from postcss.config.js.
|
|
437
|
+
|
|
438
|
+
Returns:
|
|
439
|
+
The path and code of the compiled postcss.config.js.
|
|
440
|
+
"""
|
|
441
|
+
# Get the path for the output file.
|
|
442
|
+
output_path = constants.Dirs.POSTCSS_JS
|
|
443
|
+
|
|
444
|
+
code = [
|
|
445
|
+
line
|
|
446
|
+
for line in Path(output_path).read_text().splitlines(keepends=True)
|
|
447
|
+
if "tailwindcss: " not in line
|
|
448
|
+
]
|
|
449
|
+
|
|
450
|
+
# Compile the config.
|
|
451
|
+
return output_path, "".join(code)
|
|
452
|
+
|
|
453
|
+
|
|
435
454
|
def purge_web_pages_dir():
|
|
436
455
|
"""Empty out .web directory."""
|
|
437
456
|
utils.empty_dir(constants.Dirs.WEB_PAGES, keep_files=["_app.js"])
|