reflex 0.5.10a3__py3-none-any.whl → 0.6.0__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/jinja/custom_components/pyproject.toml.jinja2 +2 -2
- reflex/.templates/jinja/web/pages/_app.js.jinja2 +1 -1
- reflex/.templates/jinja/web/pages/utils.js.jinja2 +4 -4
- reflex/.templates/jinja/web/utils/context.js.jinja2 +1 -1
- reflex/.templates/jinja/web/utils/theme.js.jinja2 +1 -1
- reflex/.templates/web/utils/state.js +3 -1
- reflex/__init__.py +10 -3
- reflex/__init__.pyi +3 -2
- reflex/app.py +47 -11
- reflex/app_module_for_backend.py +1 -1
- reflex/base.py +3 -2
- reflex/compiler/compiler.py +5 -5
- reflex/compiler/utils.py +5 -3
- reflex/components/base/app_wrap.py +2 -4
- reflex/components/base/app_wrap.pyi +16 -26
- reflex/components/base/bare.py +6 -4
- reflex/components/base/body.pyi +16 -26
- reflex/components/base/document.pyi +76 -126
- reflex/components/base/error_boundary.py +9 -8
- reflex/components/base/error_boundary.pyi +18 -30
- reflex/components/base/fragment.pyi +16 -26
- reflex/components/base/head.pyi +31 -51
- reflex/components/base/link.py +1 -1
- reflex/components/base/link.pyi +31 -51
- reflex/components/base/meta.pyi +61 -101
- reflex/components/base/script.py +2 -2
- reflex/components/base/script.pyi +20 -36
- reflex/components/component.py +107 -130
- reflex/components/core/banner.py +61 -66
- reflex/components/core/banner.pyi +129 -230
- reflex/components/core/client_side_routing.py +2 -2
- reflex/components/core/client_side_routing.pyi +31 -51
- reflex/components/core/clipboard.py +4 -3
- reflex/components/core/clipboard.pyi +19 -31
- reflex/components/core/cond.py +21 -44
- reflex/components/core/debounce.py +7 -9
- reflex/components/core/debounce.pyi +19 -31
- reflex/components/core/foreach.py +4 -14
- reflex/components/core/html.py +1 -1
- reflex/components/core/html.pyi +34 -44
- reflex/components/core/match.py +36 -43
- reflex/components/core/upload.py +27 -26
- reflex/components/core/upload.pyi +81 -116
- reflex/components/datadisplay/code.py +55 -29
- reflex/components/datadisplay/code.pyi +303 -410
- reflex/components/datadisplay/dataeditor.py +13 -9
- reflex/components/datadisplay/dataeditor.pyi +39 -51
- reflex/components/el/__init__.py +0 -1
- reflex/components/el/__init__.pyi +0 -11
- reflex/components/el/element.pyi +16 -26
- reflex/components/el/elements/__init__.py +1 -7
- reflex/components/el/elements/__init__.pyi +1 -15
- reflex/components/el/elements/base.py +1 -1
- reflex/components/el/elements/base.pyi +33 -43
- reflex/components/el/elements/forms.py +26 -33
- reflex/components/el/elements/forms.pyi +542 -694
- reflex/components/el/elements/inline.py +1 -1
- reflex/components/el/elements/inline.pyi +909 -1189
- reflex/components/el/elements/media.py +1 -22
- reflex/components/el/elements/media.pyi +765 -975
- reflex/components/el/elements/metadata.py +3 -5
- reflex/components/el/elements/metadata.pyi +175 -235
- reflex/components/el/elements/other.py +1 -1
- reflex/components/el/elements/other.pyi +228 -298
- reflex/components/el/elements/scripts.py +1 -1
- reflex/components/el/elements/scripts.pyi +106 -136
- reflex/components/el/elements/sectioning.py +0 -2
- reflex/components/el/elements/sectioning.pyi +481 -631
- reflex/components/el/elements/tables.py +1 -1
- reflex/components/el/elements/tables.pyi +341 -441
- reflex/components/el/elements/typography.py +1 -1
- reflex/components/el/elements/typography.pyi +491 -641
- reflex/components/gridjs/datatable.py +9 -13
- reflex/components/gridjs/datatable.pyi +33 -53
- reflex/components/lucide/icon.py +3 -127
- reflex/components/lucide/icon.pyi +31 -160
- reflex/components/markdown/markdown.py +32 -42
- reflex/components/markdown/markdown.pyi +28 -41
- reflex/components/moment/moment.py +13 -12
- reflex/components/moment/moment.pyi +22 -33
- reflex/components/next/base.pyi +16 -26
- reflex/components/next/image.py +1 -5
- reflex/components/next/image.pyi +21 -35
- reflex/components/next/link.py +1 -1
- reflex/components/next/link.pyi +16 -26
- reflex/components/next/video.py +1 -1
- reflex/components/next/video.pyi +16 -26
- reflex/components/plotly/plotly.py +17 -30
- reflex/components/plotly/plotly.pyi +38 -52
- reflex/components/props.py +21 -10
- reflex/components/radix/__init__.pyi +2 -1
- reflex/components/radix/primitives/accordion.py +6 -7
- reflex/components/radix/primitives/accordion.pyi +415 -485
- reflex/components/radix/primitives/base.py +1 -1
- reflex/components/radix/primitives/base.pyi +31 -51
- reflex/components/radix/primitives/drawer.py +1 -1
- reflex/components/radix/primitives/drawer.pyi +162 -262
- reflex/components/radix/primitives/form.py +1 -1
- reflex/components/radix/primitives/form.pyi +247 -353
- reflex/components/radix/primitives/progress.py +1 -1
- reflex/components/radix/primitives/progress.pyi +226 -276
- reflex/components/radix/primitives/slider.py +1 -1
- reflex/components/radix/primitives/slider.pyi +82 -132
- reflex/components/radix/themes/base.py +8 -25
- reflex/components/radix/themes/base.pyi +171 -242
- reflex/components/radix/themes/color_mode.py +11 -20
- reflex/components/radix/themes/color_mode.pyi +198 -231
- reflex/components/radix/themes/components/__init__.pyi +1 -0
- reflex/components/radix/themes/components/alert_dialog.py +1 -1
- reflex/components/radix/themes/components/alert_dialog.pyi +129 -199
- reflex/components/radix/themes/components/aspect_ratio.py +1 -1
- reflex/components/radix/themes/components/aspect_ratio.pyi +16 -26
- reflex/components/radix/themes/components/avatar.py +1 -1
- reflex/components/radix/themes/components/avatar.pyi +69 -79
- reflex/components/radix/themes/components/badge.py +1 -1
- reflex/components/radix/themes/components/badge.pyi +87 -97
- reflex/components/radix/themes/components/button.py +1 -1
- reflex/components/radix/themes/components/button.pyi +97 -107
- reflex/components/radix/themes/components/callout.py +1 -1
- reflex/components/radix/themes/components/callout.pyi +317 -367
- reflex/components/radix/themes/components/card.py +1 -1
- reflex/components/radix/themes/components/card.pyi +37 -47
- reflex/components/radix/themes/components/checkbox.py +2 -4
- reflex/components/radix/themes/components/checkbox.pyi +205 -241
- reflex/components/radix/themes/components/checkbox_cards.py +1 -1
- reflex/components/radix/themes/components/checkbox_cards.pyi +92 -112
- reflex/components/radix/themes/components/checkbox_group.py +1 -1
- reflex/components/radix/themes/components/checkbox_group.pyi +84 -104
- reflex/components/radix/themes/components/context_menu.py +1 -1
- reflex/components/radix/themes/components/context_menu.pyi +230 -310
- reflex/components/radix/themes/components/data_list.py +6 -1
- reflex/components/radix/themes/components/data_list.pyi +131 -166
- reflex/components/radix/themes/components/dialog.py +1 -1
- reflex/components/radix/themes/components/dialog.pyi +132 -202
- reflex/components/radix/themes/components/dropdown_menu.py +1 -1
- reflex/components/radix/themes/components/dropdown_menu.pyi +241 -323
- reflex/components/radix/themes/components/hover_card.py +1 -1
- reflex/components/radix/themes/components/hover_card.pyi +86 -126
- reflex/components/radix/themes/components/icon_button.py +1 -1
- reflex/components/radix/themes/components/icon_button.pyi +97 -107
- reflex/components/radix/themes/components/inset.py +1 -1
- reflex/components/radix/themes/components/inset.pyi +46 -56
- reflex/components/radix/themes/components/popover.py +1 -1
- reflex/components/radix/themes/components/popover.pyi +91 -131
- reflex/components/radix/themes/components/progress.py +1 -1
- reflex/components/radix/themes/components/progress.pyi +70 -80
- reflex/components/radix/themes/components/radio.py +1 -1
- reflex/components/radix/themes/components/radio.pyi +68 -78
- reflex/components/radix/themes/components/radio_cards.py +1 -1
- reflex/components/radix/themes/components/radio_cards.pyi +96 -116
- reflex/components/radix/themes/components/radio_group.py +32 -31
- reflex/components/radix/themes/components/radio_group.pyi +230 -266
- reflex/components/radix/themes/components/scroll_area.py +1 -1
- reflex/components/radix/themes/components/scroll_area.pyi +20 -30
- reflex/components/radix/themes/components/segmented_control.py +1 -1
- reflex/components/radix/themes/components/segmented_control.pyi +88 -110
- reflex/components/radix/themes/components/select.py +1 -1
- reflex/components/radix/themes/components/select.pyi +365 -461
- reflex/components/radix/themes/components/separator.py +2 -4
- reflex/components/radix/themes/components/separator.pyi +68 -78
- reflex/components/radix/themes/components/skeleton.py +1 -1
- reflex/components/radix/themes/components/skeleton.pyi +22 -32
- reflex/components/radix/themes/components/slider.py +1 -1
- reflex/components/radix/themes/components/slider.pyi +74 -86
- reflex/components/radix/themes/components/spinner.py +1 -1
- reflex/components/radix/themes/components/spinner.pyi +18 -28
- reflex/components/radix/themes/components/switch.py +1 -1
- reflex/components/radix/themes/components/switch.pyi +70 -82
- reflex/components/radix/themes/components/table.py +1 -1
- reflex/components/radix/themes/components/table.pyi +254 -324
- reflex/components/radix/themes/components/tabs.py +1 -1
- reflex/components/radix/themes/components/tabs.pyi +134 -188
- reflex/components/radix/themes/components/text_area.py +1 -1
- reflex/components/radix/themes/components/text_area.pyi +95 -109
- reflex/components/radix/themes/components/text_field.py +1 -80
- reflex/components/radix/themes/components/text_field.pyi +245 -290
- reflex/components/radix/themes/components/tooltip.py +1 -1
- reflex/components/radix/themes/components/tooltip.pyi +25 -35
- reflex/components/radix/themes/layout/__init__.pyi +1 -0
- reflex/components/radix/themes/layout/base.py +1 -1
- reflex/components/radix/themes/layout/base.pyi +55 -65
- reflex/components/radix/themes/layout/box.pyi +33 -43
- reflex/components/radix/themes/layout/center.pyi +55 -65
- reflex/components/radix/themes/layout/container.py +2 -4
- reflex/components/radix/themes/layout/container.pyi +35 -45
- reflex/components/radix/themes/layout/flex.py +1 -1
- reflex/components/radix/themes/layout/flex.pyi +55 -65
- reflex/components/radix/themes/layout/grid.py +1 -1
- reflex/components/radix/themes/layout/grid.pyi +63 -73
- reflex/components/radix/themes/layout/list.py +1 -1
- reflex/components/radix/themes/layout/list.pyi +188 -238
- reflex/components/radix/themes/layout/section.py +2 -4
- reflex/components/radix/themes/layout/section.pyi +35 -45
- reflex/components/radix/themes/layout/spacer.pyi +55 -65
- reflex/components/radix/themes/layout/stack.py +1 -1
- reflex/components/radix/themes/layout/stack.pyi +125 -155
- reflex/components/radix/themes/typography/blockquote.py +1 -1
- reflex/components/radix/themes/typography/blockquote.pyi +88 -98
- reflex/components/radix/themes/typography/code.py +1 -1
- reflex/components/radix/themes/typography/code.pyi +89 -99
- reflex/components/radix/themes/typography/heading.py +1 -1
- reflex/components/radix/themes/typography/heading.pyi +95 -105
- reflex/components/radix/themes/typography/link.py +1 -1
- reflex/components/radix/themes/typography/link.pyi +101 -111
- reflex/components/radix/themes/typography/text.py +1 -1
- reflex/components/radix/themes/typography/text.pyi +494 -564
- reflex/components/react_player/audio.pyi +32 -58
- reflex/components/react_player/react_player.py +1 -1
- reflex/components/react_player/react_player.pyi +32 -58
- reflex/components/react_player/video.pyi +32 -58
- reflex/components/recharts/cartesian.py +22 -19
- reflex/components/recharts/cartesian.pyi +658 -840
- reflex/components/recharts/charts.py +3 -3
- reflex/components/recharts/charts.pyi +238 -342
- reflex/components/recharts/general.py +8 -8
- reflex/components/recharts/general.pyi +175 -225
- reflex/components/recharts/polar.py +11 -11
- reflex/components/recharts/polar.pyi +135 -171
- reflex/components/recharts/recharts.pyi +31 -51
- reflex/components/sonner/toast.py +27 -31
- reflex/components/sonner/toast.pyi +36 -45
- reflex/components/suneditor/editor.py +1 -1
- reflex/components/suneditor/editor.pyi +54 -76
- reflex/components/tags/cond_tag.py +6 -4
- reflex/components/tags/iter_tag.py +37 -25
- reflex/components/tags/match_tag.py +6 -4
- reflex/components/tags/tag.py +43 -28
- reflex/constants/base.py +3 -1
- reflex/constants/event.py +1 -0
- reflex/custom_components/custom_components.py +3 -1
- reflex/event.py +166 -108
- reflex/experimental/__init__.py +25 -6
- reflex/experimental/client_state.py +34 -57
- reflex/experimental/hooks.py +12 -17
- reflex/experimental/layout.py +4 -4
- reflex/experimental/layout.pyi +130 -180
- reflex/middleware/hydrate_middleware.py +2 -0
- reflex/middleware/middleware.py +3 -3
- reflex/model.py +22 -0
- reflex/reflex.py +4 -0
- reflex/state.py +491 -110
- reflex/style.py +56 -39
- reflex/testing.py +8 -3
- reflex/utils/exceptions.py +32 -0
- reflex/utils/exec.py +0 -14
- reflex/utils/format.py +80 -209
- reflex/utils/imports.py +16 -73
- reflex/utils/net.py +43 -0
- reflex/utils/path_ops.py +13 -1
- reflex/utils/prerequisites.py +81 -41
- reflex/utils/pyi_generator.py +12 -6
- reflex/utils/serializers.py +13 -41
- reflex/utils/telemetry.py +3 -2
- reflex/utils/types.py +47 -7
- reflex/{experimental/vars → vars}/__init__.py +6 -3
- reflex/vars/base.py +2563 -0
- reflex/vars/function.py +196 -0
- reflex/vars/number.py +1158 -0
- reflex/vars/object.py +562 -0
- reflex/vars/sequence.py +1604 -0
- {reflex-0.5.10a3.dist-info → reflex-0.6.0.dist-info}/METADATA +6 -9
- reflex-0.6.0.dist-info/RECORD +382 -0
- reflex/.templates/apps/demo/.gitignore +0 -4
- reflex/.templates/apps/demo/assets/favicon.ico +0 -0
- reflex/.templates/apps/demo/assets/github.svg +0 -10
- reflex/.templates/apps/demo/assets/icon.svg +0 -37
- reflex/.templates/apps/demo/assets/logo.svg +0 -68
- reflex/.templates/apps/demo/assets/paneleft.svg +0 -13
- reflex/.templates/apps/demo/code/__init__.py +0 -1
- reflex/.templates/apps/demo/code/demo.py +0 -127
- reflex/.templates/apps/demo/code/pages/__init__.py +0 -7
- reflex/.templates/apps/demo/code/pages/chatapp.py +0 -31
- reflex/.templates/apps/demo/code/pages/datatable.py +0 -360
- reflex/.templates/apps/demo/code/pages/forms.py +0 -257
- reflex/.templates/apps/demo/code/pages/graphing.py +0 -253
- reflex/.templates/apps/demo/code/pages/home.py +0 -56
- reflex/.templates/apps/demo/code/sidebar.py +0 -178
- reflex/.templates/apps/demo/code/state.py +0 -22
- reflex/.templates/apps/demo/code/states/form_state.py +0 -40
- reflex/.templates/apps/demo/code/states/pie_state.py +0 -47
- reflex/.templates/apps/demo/code/styles.py +0 -68
- reflex/.templates/apps/demo/code/webui/__init__.py +0 -0
- reflex/.templates/apps/demo/code/webui/components/__init__.py +0 -4
- reflex/.templates/apps/demo/code/webui/components/chat.py +0 -118
- reflex/.templates/apps/demo/code/webui/components/loading_icon.py +0 -19
- reflex/.templates/apps/demo/code/webui/components/modal.py +0 -56
- reflex/.templates/apps/demo/code/webui/components/navbar.py +0 -70
- reflex/.templates/apps/demo/code/webui/components/sidebar.py +0 -66
- reflex/.templates/apps/demo/code/webui/state.py +0 -146
- reflex/.templates/apps/demo/code/webui/styles.py +0 -88
- reflex/.templates/web/components/reflex/chakra_color_mode_provider.js +0 -36
- reflex/experimental/vars/base.py +0 -583
- reflex/experimental/vars/function.py +0 -290
- reflex/experimental/vars/number.py +0 -1458
- reflex/experimental/vars/object.py +0 -804
- reflex/experimental/vars/sequence.py +0 -1764
- reflex/utils/watch.py +0 -96
- reflex/vars.py +0 -2604
- reflex/vars.pyi +0 -218
- reflex-0.5.10a3.dist-info/RECORD +0 -413
- {reflex-0.5.10a3.dist-info → reflex-0.6.0.dist-info}/LICENSE +0 -0
- {reflex-0.5.10a3.dist-info → reflex-0.6.0.dist-info}/WHEEL +0 -0
- {reflex-0.5.10a3.dist-info → reflex-0.6.0.dist-info}/entry_points.txt +0 -0
|
@@ -1,19 +1,21 @@
|
|
|
1
1
|
"""Tag to conditionally render components."""
|
|
2
2
|
|
|
3
|
+
import dataclasses
|
|
3
4
|
from typing import Any, Dict, Optional
|
|
4
5
|
|
|
5
6
|
from reflex.components.tags.tag import Tag
|
|
6
|
-
from reflex.vars import Var
|
|
7
|
+
from reflex.vars.base import Var
|
|
7
8
|
|
|
8
9
|
|
|
10
|
+
@dataclasses.dataclass()
|
|
9
11
|
class CondTag(Tag):
|
|
10
12
|
"""A conditional tag."""
|
|
11
13
|
|
|
12
14
|
# The condition to determine which component to render.
|
|
13
|
-
cond: Var[Any]
|
|
15
|
+
cond: Var[Any] = dataclasses.field(default_factory=lambda: Var.create(True))
|
|
14
16
|
|
|
15
17
|
# The code to render if the condition is true.
|
|
16
|
-
true_value: Dict
|
|
18
|
+
true_value: Dict = dataclasses.field(default_factory=dict)
|
|
17
19
|
|
|
18
20
|
# The code to render if the condition is false.
|
|
19
|
-
false_value: Optional[Dict]
|
|
21
|
+
false_value: Optional[Dict] = None
|
|
@@ -2,30 +2,43 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
+
import dataclasses
|
|
5
6
|
import inspect
|
|
6
|
-
from typing import
|
|
7
|
+
from typing import (
|
|
8
|
+
TYPE_CHECKING,
|
|
9
|
+
Any,
|
|
10
|
+
Callable,
|
|
11
|
+
Iterable,
|
|
12
|
+
Tuple,
|
|
13
|
+
Type,
|
|
14
|
+
Union,
|
|
15
|
+
get_args,
|
|
16
|
+
)
|
|
7
17
|
|
|
8
18
|
from reflex.components.tags.tag import Tag
|
|
9
|
-
from reflex.vars import
|
|
19
|
+
from reflex.vars import LiteralArrayVar, Var, get_unique_variable_name
|
|
10
20
|
|
|
11
21
|
if TYPE_CHECKING:
|
|
12
22
|
from reflex.components.component import Component
|
|
13
23
|
|
|
14
24
|
|
|
25
|
+
@dataclasses.dataclass()
|
|
15
26
|
class IterTag(Tag):
|
|
16
27
|
"""An iterator tag."""
|
|
17
28
|
|
|
18
29
|
# The var to iterate over.
|
|
19
|
-
iterable: Var[
|
|
30
|
+
iterable: Var[Iterable] = dataclasses.field(
|
|
31
|
+
default_factory=lambda: LiteralArrayVar.create([])
|
|
32
|
+
)
|
|
20
33
|
|
|
21
34
|
# The component render function for each item in the iterable.
|
|
22
|
-
render_fn: Callable
|
|
35
|
+
render_fn: Callable = dataclasses.field(default_factory=lambda: lambda x: x)
|
|
23
36
|
|
|
24
37
|
# The name of the arg var.
|
|
25
|
-
arg_var_name: str
|
|
38
|
+
arg_var_name: str = dataclasses.field(default_factory=get_unique_variable_name)
|
|
26
39
|
|
|
27
40
|
# The name of the index var.
|
|
28
|
-
index_var_name: str
|
|
41
|
+
index_var_name: str = dataclasses.field(default_factory=get_unique_variable_name)
|
|
29
42
|
|
|
30
43
|
def get_iterable_var_type(self) -> Type:
|
|
31
44
|
"""Get the type of the iterable var.
|
|
@@ -33,15 +46,16 @@ class IterTag(Tag):
|
|
|
33
46
|
Returns:
|
|
34
47
|
The type of the iterable var.
|
|
35
48
|
"""
|
|
49
|
+
iterable = self.iterable
|
|
36
50
|
try:
|
|
37
|
-
if
|
|
51
|
+
if iterable._var_type.mro()[0] == dict:
|
|
38
52
|
# Arg is a tuple of (key, value).
|
|
39
|
-
return Tuple[get_args(
|
|
40
|
-
elif
|
|
53
|
+
return Tuple[get_args(iterable._var_type)] # type: ignore
|
|
54
|
+
elif iterable._var_type.mro()[0] == tuple:
|
|
41
55
|
# Arg is a union of any possible values in the tuple.
|
|
42
|
-
return Union[get_args(
|
|
56
|
+
return Union[get_args(iterable._var_type)] # type: ignore
|
|
43
57
|
else:
|
|
44
|
-
return get_args(
|
|
58
|
+
return get_args(iterable._var_type)[0]
|
|
45
59
|
except Exception:
|
|
46
60
|
return Any
|
|
47
61
|
|
|
@@ -53,10 +67,10 @@ class IterTag(Tag):
|
|
|
53
67
|
Returns:
|
|
54
68
|
The index var.
|
|
55
69
|
"""
|
|
56
|
-
return
|
|
57
|
-
|
|
70
|
+
return Var(
|
|
71
|
+
_js_expr=self.index_var_name,
|
|
58
72
|
_var_type=int,
|
|
59
|
-
)
|
|
73
|
+
).guess_type()
|
|
60
74
|
|
|
61
75
|
def get_arg_var(self) -> Var:
|
|
62
76
|
"""Get the arg var for the tag (with curly braces).
|
|
@@ -66,10 +80,10 @@ class IterTag(Tag):
|
|
|
66
80
|
Returns:
|
|
67
81
|
The arg var.
|
|
68
82
|
"""
|
|
69
|
-
return
|
|
70
|
-
|
|
83
|
+
return Var(
|
|
84
|
+
_js_expr=self.arg_var_name,
|
|
71
85
|
_var_type=self.get_iterable_var_type(),
|
|
72
|
-
)
|
|
86
|
+
).guess_type()
|
|
73
87
|
|
|
74
88
|
def get_index_var_arg(self) -> Var:
|
|
75
89
|
"""Get the index var for the tag (without curly braces).
|
|
@@ -79,11 +93,10 @@ class IterTag(Tag):
|
|
|
79
93
|
Returns:
|
|
80
94
|
The index var.
|
|
81
95
|
"""
|
|
82
|
-
return
|
|
83
|
-
|
|
96
|
+
return Var(
|
|
97
|
+
_js_expr=self.index_var_name,
|
|
84
98
|
_var_type=int,
|
|
85
|
-
|
|
86
|
-
)
|
|
99
|
+
).guess_type()
|
|
87
100
|
|
|
88
101
|
def get_arg_var_arg(self) -> Var:
|
|
89
102
|
"""Get the arg var for the tag (without curly braces).
|
|
@@ -93,11 +106,10 @@ class IterTag(Tag):
|
|
|
93
106
|
Returns:
|
|
94
107
|
The arg var.
|
|
95
108
|
"""
|
|
96
|
-
return
|
|
97
|
-
|
|
109
|
+
return Var(
|
|
110
|
+
_js_expr=self.arg_var_name,
|
|
98
111
|
_var_type=self.get_iterable_var_type(),
|
|
99
|
-
|
|
100
|
-
)
|
|
112
|
+
).guess_type()
|
|
101
113
|
|
|
102
114
|
def render_component(self) -> Component:
|
|
103
115
|
"""Render the component.
|
|
@@ -1,19 +1,21 @@
|
|
|
1
1
|
"""Tag to conditionally match cases."""
|
|
2
2
|
|
|
3
|
+
import dataclasses
|
|
3
4
|
from typing import Any, List
|
|
4
5
|
|
|
5
6
|
from reflex.components.tags.tag import Tag
|
|
6
|
-
from reflex.vars import Var
|
|
7
|
+
from reflex.vars.base import Var
|
|
7
8
|
|
|
8
9
|
|
|
10
|
+
@dataclasses.dataclass()
|
|
9
11
|
class MatchTag(Tag):
|
|
10
12
|
"""A match tag."""
|
|
11
13
|
|
|
12
14
|
# The condition to determine which case to match.
|
|
13
|
-
cond: Var[Any]
|
|
15
|
+
cond: Var[Any] = dataclasses.field(default_factory=lambda: Var.create(True))
|
|
14
16
|
|
|
15
17
|
# The list of match cases to be matched.
|
|
16
|
-
match_cases: List[Any]
|
|
18
|
+
match_cases: List[Any] = dataclasses.field(default_factory=list)
|
|
17
19
|
|
|
18
20
|
# The catchall case to match.
|
|
19
|
-
default: Any
|
|
21
|
+
default: Any = dataclasses.field(default=Var.create(None))
|
reflex/components/tags/tag.py
CHANGED
|
@@ -2,22 +2,23 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
import dataclasses
|
|
6
|
+
from typing import Any, Dict, List, Optional, Tuple, Union
|
|
6
7
|
|
|
7
|
-
from reflex.base import Base
|
|
8
8
|
from reflex.event import EventChain
|
|
9
9
|
from reflex.utils import format, types
|
|
10
|
-
from reflex.vars import Var
|
|
10
|
+
from reflex.vars.base import LiteralVar, Var
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
@dataclasses.dataclass()
|
|
14
|
+
class Tag:
|
|
14
15
|
"""A React tag."""
|
|
15
16
|
|
|
16
17
|
# The name of the tag.
|
|
17
18
|
name: str = ""
|
|
18
19
|
|
|
19
20
|
# The props of the tag.
|
|
20
|
-
props: Dict[str, Any] =
|
|
21
|
+
props: Dict[str, Any] = dataclasses.field(default_factory=dict)
|
|
21
22
|
|
|
22
23
|
# The inner contents of the tag.
|
|
23
24
|
contents: str = ""
|
|
@@ -26,25 +27,18 @@ class Tag(Base):
|
|
|
26
27
|
args: Optional[Tuple[str, ...]] = None
|
|
27
28
|
|
|
28
29
|
# Special props that aren't key value pairs.
|
|
29
|
-
special_props:
|
|
30
|
+
special_props: List[Var] = dataclasses.field(default_factory=list)
|
|
30
31
|
|
|
31
32
|
# The children components.
|
|
32
|
-
children: List[Any] =
|
|
33
|
-
|
|
34
|
-
def
|
|
35
|
-
"""
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
# Convert any props to vars.
|
|
42
|
-
if "props" in kwargs:
|
|
43
|
-
kwargs["props"] = {
|
|
44
|
-
name: Var.create(value, _var_is_string=False)
|
|
45
|
-
for name, value in kwargs["props"].items()
|
|
46
|
-
}
|
|
47
|
-
super().__init__(*args, **kwargs)
|
|
33
|
+
children: List[Any] = dataclasses.field(default_factory=list)
|
|
34
|
+
|
|
35
|
+
def __post_init__(self):
|
|
36
|
+
"""Post initialize the tag."""
|
|
37
|
+
object.__setattr__(
|
|
38
|
+
self,
|
|
39
|
+
"props",
|
|
40
|
+
{name: LiteralVar.create(value) for name, value in self.props.items()},
|
|
41
|
+
)
|
|
48
42
|
|
|
49
43
|
def format_props(self) -> List:
|
|
50
44
|
"""Format the tag's props.
|
|
@@ -54,6 +48,29 @@ class Tag(Base):
|
|
|
54
48
|
"""
|
|
55
49
|
return format.format_props(*self.special_props, **self.props)
|
|
56
50
|
|
|
51
|
+
def set(self, **kwargs: Any):
|
|
52
|
+
"""Set the tag's fields.
|
|
53
|
+
|
|
54
|
+
Args:
|
|
55
|
+
kwargs: The fields to set.
|
|
56
|
+
|
|
57
|
+
Returns:
|
|
58
|
+
The tag with the fields
|
|
59
|
+
"""
|
|
60
|
+
for name, value in kwargs.items():
|
|
61
|
+
setattr(self, name, value)
|
|
62
|
+
|
|
63
|
+
return self
|
|
64
|
+
|
|
65
|
+
def __iter__(self):
|
|
66
|
+
"""Iterate over the tag's fields.
|
|
67
|
+
|
|
68
|
+
Yields:
|
|
69
|
+
Tuple[str, Any]: The field name and value.
|
|
70
|
+
"""
|
|
71
|
+
for field in dataclasses.fields(self):
|
|
72
|
+
yield field.name, getattr(self, field.name)
|
|
73
|
+
|
|
57
74
|
def add_props(self, **kwargs: Optional[Any]) -> Tag:
|
|
58
75
|
"""Add props to the tag.
|
|
59
76
|
|
|
@@ -63,14 +80,12 @@ class Tag(Base):
|
|
|
63
80
|
Returns:
|
|
64
81
|
The tag with the props added.
|
|
65
82
|
"""
|
|
66
|
-
from reflex.components.core.colors import Color
|
|
67
|
-
|
|
68
83
|
self.props.update(
|
|
69
84
|
{
|
|
70
|
-
format.to_camel_case(name, allow_hyphens=True):
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
85
|
+
format.to_camel_case(name, allow_hyphens=True): (
|
|
86
|
+
prop
|
|
87
|
+
if types._isinstance(prop, Union[EventChain, dict])
|
|
88
|
+
else LiteralVar.create(prop)
|
|
74
89
|
) # rx.color is always a string
|
|
75
90
|
for name, prop in kwargs.items()
|
|
76
91
|
if self.is_valid_prop(prop)
|
reflex/constants/base.py
CHANGED
|
@@ -45,6 +45,8 @@ class Dirs(SimpleNamespace):
|
|
|
45
45
|
REFLEX_JSON = "reflex.json"
|
|
46
46
|
# The name of the postcss config file.
|
|
47
47
|
POSTCSS_JS = "postcss.config.js"
|
|
48
|
+
# The name of the states directory.
|
|
49
|
+
STATES = "states"
|
|
48
50
|
|
|
49
51
|
|
|
50
52
|
class Reflex(SimpleNamespace):
|
|
@@ -103,7 +105,7 @@ class Templates(SimpleNamespace):
|
|
|
103
105
|
|
|
104
106
|
# The reflex.build backend host
|
|
105
107
|
REFLEX_BUILD_BACKEND = os.environ.get(
|
|
106
|
-
"REFLEX_BUILD_BACKEND", "https://
|
|
108
|
+
"REFLEX_BUILD_BACKEND", "https://flexgen-prod-flexgen.fly.dev"
|
|
107
109
|
)
|
|
108
110
|
|
|
109
111
|
# The URL to redirect to reflex.build
|
reflex/constants/event.py
CHANGED
|
@@ -65,7 +65,9 @@ def _create_package_config(module_name: str, package_name: str):
|
|
|
65
65
|
with open(CustomComponents.PYPROJECT_TOML, "w") as f:
|
|
66
66
|
f.write(
|
|
67
67
|
templates.CUSTOM_COMPONENTS_PYPROJECT_TOML.render(
|
|
68
|
-
module_name=module_name,
|
|
68
|
+
module_name=module_name,
|
|
69
|
+
package_name=package_name,
|
|
70
|
+
reflex_version=constants.Reflex.VERSION,
|
|
69
71
|
)
|
|
70
72
|
)
|
|
71
73
|
|