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
|
@@ -3,13 +3,19 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
import dataclasses
|
|
6
|
+
import re
|
|
6
7
|
import sys
|
|
7
|
-
from typing import Any, Callable,
|
|
8
|
+
from typing import Any, Callable, Union
|
|
8
9
|
|
|
9
10
|
from reflex import constants
|
|
10
11
|
from reflex.event import EventChain, EventHandler, EventSpec, call_script
|
|
11
12
|
from reflex.utils.imports import ImportVar
|
|
12
|
-
from reflex.vars import
|
|
13
|
+
from reflex.vars import (
|
|
14
|
+
VarData,
|
|
15
|
+
get_unique_variable_name,
|
|
16
|
+
)
|
|
17
|
+
from reflex.vars.base import LiteralVar, Var
|
|
18
|
+
from reflex.vars.function import FunctionVar
|
|
13
19
|
|
|
14
20
|
NoValue = object()
|
|
15
21
|
|
|
@@ -33,36 +39,19 @@ def _client_state_ref(var_name: str) -> str:
|
|
|
33
39
|
|
|
34
40
|
@dataclasses.dataclass(
|
|
35
41
|
eq=False,
|
|
42
|
+
frozen=True,
|
|
36
43
|
**{"slots": True} if sys.version_info >= (3, 10) else {},
|
|
37
44
|
)
|
|
38
45
|
class ClientStateVar(Var):
|
|
39
46
|
"""A Var that exists on the client via useState."""
|
|
40
47
|
|
|
41
|
-
# The name of the var.
|
|
42
|
-
_var_name: str = dataclasses.field()
|
|
43
|
-
|
|
44
48
|
# Track the names of the getters and setters
|
|
45
|
-
_setter_name: str = dataclasses.field()
|
|
46
|
-
_getter_name: str = dataclasses.field()
|
|
49
|
+
_setter_name: str = dataclasses.field(default="")
|
|
50
|
+
_getter_name: str = dataclasses.field(default="")
|
|
47
51
|
|
|
48
52
|
# Whether to add the var and setter to the global `refs` object for use in any Component.
|
|
49
53
|
_global_ref: bool = dataclasses.field(default=True)
|
|
50
54
|
|
|
51
|
-
# The type of the var.
|
|
52
|
-
_var_type: Type = dataclasses.field(default=Any)
|
|
53
|
-
|
|
54
|
-
# Whether this is a local javascript variable.
|
|
55
|
-
_var_is_local: bool = dataclasses.field(default=False)
|
|
56
|
-
|
|
57
|
-
# Whether the var is a string literal.
|
|
58
|
-
_var_is_string: bool = dataclasses.field(default=False)
|
|
59
|
-
|
|
60
|
-
# _var_full_name should be prefixed with _var_state
|
|
61
|
-
_var_full_name_needs_state_prefix: bool = dataclasses.field(default=False)
|
|
62
|
-
|
|
63
|
-
# Extra metadata associated with the Var
|
|
64
|
-
_var_data: Optional[VarData] = dataclasses.field(default=None)
|
|
65
|
-
|
|
66
55
|
def __hash__(self) -> int:
|
|
67
56
|
"""Define a hash function for a var.
|
|
68
57
|
|
|
@@ -70,7 +59,7 @@ class ClientStateVar(Var):
|
|
|
70
59
|
The hash of the var.
|
|
71
60
|
"""
|
|
72
61
|
return hash(
|
|
73
|
-
(self.
|
|
62
|
+
(self._js_expr, str(self._var_type), self._getter_name, self._setter_name)
|
|
74
63
|
)
|
|
75
64
|
|
|
76
65
|
@classmethod
|
|
@@ -109,17 +98,14 @@ class ClientStateVar(Var):
|
|
|
109
98
|
var_name = get_unique_variable_name()
|
|
110
99
|
assert isinstance(var_name, str), "var_name must be a string."
|
|
111
100
|
if default is NoValue:
|
|
112
|
-
default_var = Var
|
|
101
|
+
default_var = Var(_js_expr="")
|
|
113
102
|
elif not isinstance(default, Var):
|
|
114
|
-
default_var =
|
|
115
|
-
default,
|
|
116
|
-
_var_is_string=isinstance(default, str),
|
|
117
|
-
)
|
|
103
|
+
default_var = LiteralVar.create(default)
|
|
118
104
|
else:
|
|
119
105
|
default_var = default
|
|
120
106
|
setter_name = f"set{var_name.capitalize()}"
|
|
121
107
|
hooks = {
|
|
122
|
-
f"const [{var_name}, {setter_name}] = useState({default_var
|
|
108
|
+
f"const [{var_name}, {setter_name}] = useState({str(default_var)})": None,
|
|
123
109
|
}
|
|
124
110
|
imports = {
|
|
125
111
|
"react": [ImportVar(tag="useState")],
|
|
@@ -129,16 +115,14 @@ class ClientStateVar(Var):
|
|
|
129
115
|
hooks[f"{_client_state_ref(setter_name)} = {setter_name}"] = None
|
|
130
116
|
imports.update(_refs_import)
|
|
131
117
|
return cls(
|
|
132
|
-
|
|
118
|
+
_js_expr="",
|
|
133
119
|
_setter_name=setter_name,
|
|
134
120
|
_getter_name=var_name,
|
|
135
121
|
_global_ref=global_ref,
|
|
136
|
-
_var_is_local=False,
|
|
137
|
-
_var_is_string=False,
|
|
138
122
|
_var_type=default_var._var_type,
|
|
139
123
|
_var_data=VarData.merge(
|
|
140
124
|
default_var._var_data,
|
|
141
|
-
VarData(
|
|
125
|
+
VarData(
|
|
142
126
|
hooks=hooks,
|
|
143
127
|
imports=imports,
|
|
144
128
|
),
|
|
@@ -157,12 +141,12 @@ class ClientStateVar(Var):
|
|
|
157
141
|
an accessor for the client state variable.
|
|
158
142
|
"""
|
|
159
143
|
return (
|
|
160
|
-
Var
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
144
|
+
Var(
|
|
145
|
+
_js_expr=(
|
|
146
|
+
_client_state_ref(self._getter_name)
|
|
147
|
+
if self._global_ref
|
|
148
|
+
else self._getter_name
|
|
149
|
+
)
|
|
166
150
|
)
|
|
167
151
|
.to(self._var_type)
|
|
168
152
|
._replace(
|
|
@@ -192,25 +176,18 @@ class ClientStateVar(Var):
|
|
|
192
176
|
)
|
|
193
177
|
if value is not NoValue:
|
|
194
178
|
# This is a hack to make it work like an EventSpec taking an arg
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
179
|
+
value_str = str(LiteralVar.create(value))
|
|
180
|
+
|
|
181
|
+
if value_str.startswith("_"):
|
|
182
|
+
# remove patterns of ["*"] from the value_str using regex
|
|
183
|
+
arg = re.sub(r"\[\".*\"\]", "", value_str)
|
|
184
|
+
setter = f"(({arg}) => {setter}({value_str}))"
|
|
198
185
|
else:
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
_var_is_local=False,
|
|
205
|
-
_var_is_string=False,
|
|
206
|
-
)
|
|
207
|
-
.to(EventChain)
|
|
208
|
-
._replace(
|
|
209
|
-
merge_var_data=VarData( # type: ignore
|
|
210
|
-
imports=_refs_import if self._global_ref else {}
|
|
211
|
-
)
|
|
212
|
-
)
|
|
213
|
-
)
|
|
186
|
+
setter = f"(() => {setter}({value_str}))"
|
|
187
|
+
return Var(
|
|
188
|
+
_js_expr=setter,
|
|
189
|
+
_var_data=VarData(imports=_refs_import if self._global_ref else {}),
|
|
190
|
+
).to(FunctionVar, EventChain)
|
|
214
191
|
|
|
215
192
|
@property
|
|
216
193
|
def set(self) -> Var:
|
reflex/experimental/hooks.py
CHANGED
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
from reflex.utils.imports import ImportVar
|
|
6
|
-
from reflex.vars import
|
|
6
|
+
from reflex.vars import VarData
|
|
7
|
+
from reflex.vars.base import Var
|
|
7
8
|
|
|
8
9
|
|
|
9
10
|
def _compose_react_imports(tags: list[str]) -> dict[str, list[ImportVar]]:
|
|
@@ -21,10 +22,8 @@ def const(name, value) -> Var:
|
|
|
21
22
|
The constant Var.
|
|
22
23
|
"""
|
|
23
24
|
if isinstance(name, list):
|
|
24
|
-
return Var.
|
|
25
|
-
|
|
26
|
-
)
|
|
27
|
-
return Var.create_safe(f"const {name} = {value}", _var_is_string=False)
|
|
25
|
+
return Var(_js_expr=f"const [{', '.join(name)}] = {value}")
|
|
26
|
+
return Var(_js_expr=f"const {name} = {value}")
|
|
28
27
|
|
|
29
28
|
|
|
30
29
|
def useCallback(func, deps) -> Var:
|
|
@@ -37,9 +36,8 @@ def useCallback(func, deps) -> Var:
|
|
|
37
36
|
Returns:
|
|
38
37
|
The useCallback hook.
|
|
39
38
|
"""
|
|
40
|
-
return Var
|
|
41
|
-
f"useCallback({func}, {deps})" if deps else f"useCallback({func})",
|
|
42
|
-
_var_is_string=False,
|
|
39
|
+
return Var(
|
|
40
|
+
_js_expr=f"useCallback({func}, {deps})" if deps else f"useCallback({func})",
|
|
43
41
|
_var_data=VarData(imports=_compose_react_imports(["useCallback"])),
|
|
44
42
|
)
|
|
45
43
|
|
|
@@ -53,9 +51,8 @@ def useContext(context) -> Var:
|
|
|
53
51
|
Returns:
|
|
54
52
|
The useContext hook.
|
|
55
53
|
"""
|
|
56
|
-
return Var
|
|
57
|
-
f"useContext({context})",
|
|
58
|
-
_var_is_string=False,
|
|
54
|
+
return Var(
|
|
55
|
+
_js_expr=f"useContext({context})",
|
|
59
56
|
_var_data=VarData(imports=_compose_react_imports(["useContext"])),
|
|
60
57
|
)
|
|
61
58
|
|
|
@@ -69,9 +66,8 @@ def useRef(default) -> Var:
|
|
|
69
66
|
Returns:
|
|
70
67
|
The useRef hook.
|
|
71
68
|
"""
|
|
72
|
-
return Var
|
|
73
|
-
f"useRef({default})",
|
|
74
|
-
_var_is_string=False,
|
|
69
|
+
return Var(
|
|
70
|
+
_js_expr=f"useRef({default})",
|
|
75
71
|
_var_data=VarData(imports=_compose_react_imports(["useRef"])),
|
|
76
72
|
)
|
|
77
73
|
|
|
@@ -88,9 +84,8 @@ def useState(var_name, default=None) -> Var:
|
|
|
88
84
|
"""
|
|
89
85
|
return const(
|
|
90
86
|
[var_name, f"set{var_name.capitalize()}"],
|
|
91
|
-
Var
|
|
92
|
-
f"useState({default})",
|
|
93
|
-
_var_is_string=False,
|
|
87
|
+
Var(
|
|
88
|
+
_js_expr=f"useState({default})",
|
|
94
89
|
_var_data=VarData(imports=_compose_react_imports(["useState"])),
|
|
95
90
|
),
|
|
96
91
|
)
|
reflex/experimental/layout.py
CHANGED
|
@@ -16,7 +16,7 @@ from reflex.event import call_script
|
|
|
16
16
|
from reflex.experimental import hooks
|
|
17
17
|
from reflex.state import ComponentState
|
|
18
18
|
from reflex.style import Style
|
|
19
|
-
from reflex.vars import Var
|
|
19
|
+
from reflex.vars.base import Var
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
class Sidebar(Box, MemoizationLeaf):
|
|
@@ -55,7 +55,7 @@ class Sidebar(Box, MemoizationLeaf):
|
|
|
55
55
|
open = (
|
|
56
56
|
self.State.open # type: ignore
|
|
57
57
|
if self.State
|
|
58
|
-
else Var
|
|
58
|
+
else Var(_js_expr="open")
|
|
59
59
|
)
|
|
60
60
|
sidebar.style["display"] = spacer.style["display"] = cond(open, "block", "none")
|
|
61
61
|
|
|
@@ -172,8 +172,8 @@ class SidebarTrigger(Fragment):
|
|
|
172
172
|
open, toggle = sidebar.State.open, sidebar.State.toggle # type: ignore
|
|
173
173
|
else:
|
|
174
174
|
open, toggle = (
|
|
175
|
-
Var
|
|
176
|
-
call_script(Var
|
|
175
|
+
Var(_js_expr="open"),
|
|
176
|
+
call_script(Var(_js_expr="setOpen(!open)")),
|
|
177
177
|
)
|
|
178
178
|
|
|
179
179
|
trigger_props["left"] = cond(open, f"calc({sidebar_width} - 32px)", "0")
|