reflex 0.6.0__py3-none-any.whl → 0.6.0a1__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 +2 -2
- reflex/.templates/web/components/reflex/chakra_color_mode_provider.js +36 -0
- reflex/.templates/web/utils/state.js +1 -3
- reflex/__init__.py +2 -8
- reflex/__init__.pyi +1 -2
- reflex/app.py +2 -4
- reflex/app_module_for_backend.py +1 -1
- reflex/base.py +1 -1
- reflex/compiler/compiler.py +2 -2
- reflex/compiler/utils.py +3 -3
- reflex/components/base/app_wrap.py +2 -2
- reflex/components/base/app_wrap.pyi +27 -17
- reflex/components/base/bare.py +5 -4
- reflex/components/base/body.pyi +27 -17
- reflex/components/base/document.pyi +131 -81
- reflex/components/base/error_boundary.py +7 -6
- reflex/components/base/error_boundary.pyi +33 -20
- reflex/components/base/fragment.pyi +27 -17
- reflex/components/base/head.pyi +53 -33
- reflex/components/base/link.py +1 -1
- reflex/components/base/link.pyi +54 -33
- reflex/components/base/meta.pyi +105 -65
- reflex/components/base/script.py +2 -1
- reflex/components/base/script.pyi +38 -21
- reflex/components/component.py +47 -53
- reflex/components/core/banner.py +27 -23
- reflex/components/core/banner.pyi +171 -134
- reflex/components/core/client_side_routing.py +3 -2
- reflex/components/core/client_side_routing.pyi +54 -33
- reflex/components/core/clipboard.py +1 -2
- reflex/components/core/clipboard.pyi +33 -20
- reflex/components/core/cond.py +5 -5
- reflex/components/core/debounce.py +5 -5
- reflex/components/core/debounce.pyi +33 -20
- reflex/components/core/foreach.py +4 -3
- reflex/components/core/html.py +1 -1
- reflex/components/core/html.pyi +46 -35
- reflex/components/core/match.py +17 -17
- reflex/components/core/upload.py +23 -17
- reflex/components/core/upload.pyi +124 -78
- reflex/components/datadisplay/code.py +10 -9
- reflex/components/datadisplay/code.pyi +409 -299
- reflex/components/datadisplay/dataeditor.py +10 -8
- reflex/components/datadisplay/dataeditor.pyi +53 -40
- reflex/components/el/element.pyi +27 -17
- reflex/components/el/elements/base.py +1 -1
- reflex/components/el/elements/base.pyi +45 -34
- reflex/components/el/elements/forms.py +16 -16
- reflex/components/el/elements/forms.pyi +707 -554
- reflex/components/el/elements/inline.py +1 -1
- reflex/components/el/elements/inline.pyi +1218 -937
- reflex/components/el/elements/media.py +1 -1
- reflex/components/el/elements/media.pyi +997 -786
- reflex/components/el/elements/metadata.py +6 -3
- reflex/components/el/elements/metadata.pyi +242 -181
- reflex/components/el/elements/other.py +1 -1
- reflex/components/el/elements/other.pyi +306 -235
- reflex/components/el/elements/scripts.py +1 -1
- reflex/components/el/elements/scripts.pyi +140 -109
- reflex/components/el/elements/sectioning.py +2 -0
- reflex/components/el/elements/sectioning.pyi +647 -496
- reflex/components/el/elements/tables.py +1 -1
- reflex/components/el/elements/tables.pyi +452 -351
- reflex/components/el/elements/typography.py +1 -1
- reflex/components/el/elements/typography.pyi +657 -506
- reflex/components/gridjs/datatable.py +9 -6
- reflex/components/gridjs/datatable.pyi +56 -35
- reflex/components/lucide/icon.py +1 -1
- reflex/components/lucide/icon.pyi +54 -33
- reflex/components/markdown/markdown.py +31 -26
- reflex/components/markdown/markdown.pyi +37 -27
- reflex/components/moment/moment.py +12 -13
- reflex/components/moment/moment.pyi +35 -23
- reflex/components/next/base.pyi +27 -17
- reflex/components/next/image.py +1 -1
- reflex/components/next/image.pyi +37 -22
- reflex/components/next/link.py +1 -1
- reflex/components/next/link.pyi +28 -17
- reflex/components/next/video.py +1 -1
- reflex/components/next/video.pyi +28 -17
- reflex/components/plotly/plotly.py +13 -12
- reflex/components/plotly/plotly.pyi +54 -39
- reflex/components/props.py +1 -1
- reflex/components/radix/__init__.pyi +0 -1
- reflex/components/radix/primitives/__init__.pyi +0 -1
- reflex/components/radix/primitives/accordion.py +4 -4
- reflex/components/radix/primitives/accordion.pyi +495 -424
- reflex/components/radix/primitives/base.py +1 -1
- reflex/components/radix/primitives/base.pyi +54 -33
- reflex/components/radix/primitives/drawer.py +1 -1
- reflex/components/radix/primitives/drawer.pyi +273 -172
- reflex/components/radix/primitives/form.py +1 -1
- reflex/components/radix/primitives/form.pyi +364 -257
- reflex/components/radix/primitives/progress.py +1 -1
- reflex/components/radix/primitives/progress.pyi +282 -231
- reflex/components/radix/primitives/slider.py +1 -1
- reflex/components/radix/primitives/slider.pyi +138 -87
- reflex/components/radix/themes/base.py +24 -3
- reflex/components/radix/themes/base.pyi +250 -178
- reflex/components/radix/themes/color_mode.py +5 -5
- reflex/components/radix/themes/color_mode.pyi +220 -187
- reflex/components/radix/themes/components/alert_dialog.py +1 -1
- reflex/components/radix/themes/components/alert_dialog.pyi +207 -136
- reflex/components/radix/themes/components/aspect_ratio.py +1 -1
- reflex/components/radix/themes/components/aspect_ratio.pyi +28 -17
- reflex/components/radix/themes/components/avatar.py +1 -1
- reflex/components/radix/themes/components/avatar.pyi +81 -70
- reflex/components/radix/themes/components/badge.py +1 -1
- reflex/components/radix/themes/components/badge.pyi +99 -88
- reflex/components/radix/themes/components/button.py +1 -1
- reflex/components/radix/themes/components/button.pyi +109 -98
- reflex/components/radix/themes/components/callout.py +1 -1
- reflex/components/radix/themes/components/callout.pyi +373 -322
- reflex/components/radix/themes/components/card.py +1 -1
- reflex/components/radix/themes/components/card.pyi +49 -38
- reflex/components/radix/themes/components/checkbox.py +2 -1
- reflex/components/radix/themes/components/checkbox.pyi +245 -208
- reflex/components/radix/themes/components/checkbox_cards.py +1 -1
- reflex/components/radix/themes/components/checkbox_cards.pyi +115 -94
- reflex/components/radix/themes/components/checkbox_group.py +1 -1
- reflex/components/radix/themes/components/checkbox_group.pyi +107 -86
- reflex/components/radix/themes/components/context_menu.py +1 -1
- reflex/components/radix/themes/components/context_menu.pyi +319 -238
- reflex/components/radix/themes/components/data_list.py +1 -1
- reflex/components/radix/themes/components/data_list.pyi +171 -130
- reflex/components/radix/themes/components/dialog.py +1 -1
- reflex/components/radix/themes/components/dialog.pyi +210 -139
- reflex/components/radix/themes/components/dropdown_menu.py +1 -1
- reflex/components/radix/themes/components/dropdown_menu.pyi +332 -249
- reflex/components/radix/themes/components/hover_card.py +1 -1
- reflex/components/radix/themes/components/hover_card.pyi +131 -90
- reflex/components/radix/themes/components/icon_button.py +3 -2
- reflex/components/radix/themes/components/icon_button.pyi +109 -98
- reflex/components/radix/themes/components/inset.py +1 -1
- reflex/components/radix/themes/components/inset.pyi +58 -47
- reflex/components/radix/themes/components/popover.py +1 -1
- reflex/components/radix/themes/components/popover.pyi +136 -95
- reflex/components/radix/themes/components/progress.py +1 -1
- reflex/components/radix/themes/components/progress.pyi +82 -71
- reflex/components/radix/themes/components/radio.py +1 -1
- reflex/components/radix/themes/components/radio.pyi +80 -69
- reflex/components/radix/themes/components/radio_cards.py +1 -1
- reflex/components/radix/themes/components/radio_cards.pyi +119 -98
- reflex/components/radix/themes/components/radio_group.py +11 -8
- reflex/components/radix/themes/components/radio_group.pyi +271 -228
- reflex/components/radix/themes/components/scroll_area.py +1 -1
- reflex/components/radix/themes/components/scroll_area.pyi +32 -21
- reflex/components/radix/themes/components/segmented_control.py +1 -1
- reflex/components/radix/themes/components/segmented_control.pyi +113 -90
- reflex/components/radix/themes/components/select.py +3 -2
- reflex/components/radix/themes/components/select.pyi +471 -374
- reflex/components/radix/themes/components/separator.py +2 -1
- reflex/components/radix/themes/components/separator.pyi +80 -69
- reflex/components/radix/themes/components/skeleton.py +1 -1
- reflex/components/radix/themes/components/skeleton.pyi +34 -23
- reflex/components/radix/themes/components/slider.py +3 -2
- reflex/components/radix/themes/components/slider.pyi +88 -75
- reflex/components/radix/themes/components/spinner.py +1 -1
- reflex/components/radix/themes/components/spinner.pyi +30 -19
- reflex/components/radix/themes/components/switch.py +1 -1
- reflex/components/radix/themes/components/switch.pyi +84 -71
- reflex/components/radix/themes/components/table.py +1 -1
- reflex/components/radix/themes/components/table.pyi +332 -261
- reflex/components/radix/themes/components/tabs.py +1 -1
- reflex/components/radix/themes/components/tabs.pyi +194 -139
- reflex/components/radix/themes/components/text_area.py +1 -1
- reflex/components/radix/themes/components/text_area.pyi +111 -96
- reflex/components/radix/themes/components/text_field.py +1 -1
- reflex/components/radix/themes/components/text_field.pyi +286 -247
- reflex/components/radix/themes/components/tooltip.py +1 -1
- reflex/components/radix/themes/components/tooltip.pyi +37 -26
- reflex/components/radix/themes/layout/__init__.pyi +0 -1
- reflex/components/radix/themes/layout/base.py +1 -1
- reflex/components/radix/themes/layout/base.pyi +67 -56
- reflex/components/radix/themes/layout/box.pyi +45 -34
- reflex/components/radix/themes/layout/center.pyi +67 -56
- reflex/components/radix/themes/layout/container.py +2 -1
- reflex/components/radix/themes/layout/container.pyi +47 -36
- reflex/components/radix/themes/layout/flex.py +1 -1
- reflex/components/radix/themes/layout/flex.pyi +67 -56
- reflex/components/radix/themes/layout/grid.py +1 -1
- reflex/components/radix/themes/layout/grid.pyi +75 -64
- reflex/components/radix/themes/layout/list.py +6 -5
- reflex/components/radix/themes/layout/list.pyi +244 -193
- reflex/components/radix/themes/layout/section.py +2 -1
- reflex/components/radix/themes/layout/section.pyi +47 -36
- reflex/components/radix/themes/layout/spacer.pyi +67 -56
- reflex/components/radix/themes/layout/stack.py +1 -1
- reflex/components/radix/themes/layout/stack.pyi +159 -128
- reflex/components/radix/themes/typography/blockquote.py +1 -1
- reflex/components/radix/themes/typography/blockquote.pyi +100 -89
- reflex/components/radix/themes/typography/code.py +1 -1
- reflex/components/radix/themes/typography/code.pyi +101 -90
- reflex/components/radix/themes/typography/heading.py +1 -1
- reflex/components/radix/themes/typography/heading.pyi +107 -96
- reflex/components/radix/themes/typography/link.py +1 -1
- reflex/components/radix/themes/typography/link.pyi +113 -102
- reflex/components/radix/themes/typography/text.py +1 -1
- reflex/components/radix/themes/typography/text.pyi +572 -501
- reflex/components/react_player/audio.pyi +60 -33
- reflex/components/react_player/react_player.py +1 -1
- reflex/components/react_player/react_player.pyi +60 -33
- reflex/components/react_player/video.pyi +60 -33
- reflex/components/recharts/cartesian.py +3 -2
- reflex/components/recharts/cartesian.pyi +861 -678
- reflex/components/recharts/charts.py +5 -4
- reflex/components/recharts/charts.pyi +357 -252
- reflex/components/recharts/general.py +2 -1
- reflex/components/recharts/general.pyi +231 -180
- reflex/components/recharts/polar.py +5 -4
- reflex/components/recharts/polar.pyi +181 -144
- reflex/components/recharts/recharts.pyi +53 -33
- reflex/components/sonner/toast.py +17 -16
- reflex/components/sonner/toast.pyi +47 -36
- reflex/components/suneditor/editor.py +3 -2
- reflex/components/suneditor/editor.pyi +78 -55
- reflex/components/tags/cond_tag.py +4 -6
- reflex/components/tags/iter_tag.py +16 -28
- reflex/components/tags/match_tag.py +4 -6
- reflex/components/tags/tag.py +23 -40
- reflex/custom_components/custom_components.py +1 -3
- reflex/event.py +65 -113
- reflex/experimental/client_state.py +24 -25
- reflex/experimental/hooks.py +16 -16
- reflex/experimental/layout.py +5 -5
- reflex/experimental/layout.pyi +187 -136
- reflex/{vars → ivars}/__init__.py +2 -6
- reflex/{vars → ivars}/base.py +216 -599
- reflex/{vars → ivars}/function.py +19 -15
- reflex/{vars → ivars}/number.py +20 -41
- reflex/{vars → ivars}/object.py +30 -28
- reflex/{vars → ivars}/sequence.py +50 -53
- reflex/middleware/hydrate_middleware.py +0 -2
- reflex/middleware/middleware.py +3 -3
- reflex/state.py +82 -148
- reflex/style.py +22 -21
- reflex/utils/exceptions.py +0 -20
- reflex/utils/format.py +34 -54
- reflex/utils/imports.py +73 -16
- reflex/utils/prerequisites.py +15 -35
- reflex/utils/pyi_generator.py +8 -13
- reflex/utils/serializers.py +22 -12
- reflex/utils/telemetry.py +2 -3
- reflex/utils/types.py +5 -10
- reflex/vars.py +501 -0
- {reflex-0.6.0.dist-info → reflex-0.6.0a1.dist-info}/METADATA +5 -4
- reflex-0.6.0a1.dist-info/RECORD +384 -0
- reflex-0.6.0.dist-info/RECORD +0 -382
- {reflex-0.6.0.dist-info → reflex-0.6.0a1.dist-info}/LICENSE +0 -0
- {reflex-0.6.0.dist-info → reflex-0.6.0a1.dist-info}/WHEEL +0 -0
- {reflex-0.6.0.dist-info → reflex-0.6.0a1.dist-info}/entry_points.txt +0 -0
|
@@ -3,19 +3,18 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
import dataclasses
|
|
6
|
-
import re
|
|
7
6
|
import sys
|
|
8
7
|
from typing import Any, Callable, Union
|
|
9
8
|
|
|
10
9
|
from reflex import constants
|
|
11
10
|
from reflex.event import EventChain, EventHandler, EventSpec, call_script
|
|
11
|
+
from reflex.ivars.base import ImmutableVar, LiteralVar
|
|
12
|
+
from reflex.ivars.function import FunctionVar
|
|
12
13
|
from reflex.utils.imports import ImportVar
|
|
13
14
|
from reflex.vars import (
|
|
14
15
|
VarData,
|
|
15
16
|
get_unique_variable_name,
|
|
16
17
|
)
|
|
17
|
-
from reflex.vars.base import LiteralVar, Var
|
|
18
|
-
from reflex.vars.function import FunctionVar
|
|
19
18
|
|
|
20
19
|
NoValue = object()
|
|
21
20
|
|
|
@@ -42,7 +41,7 @@ def _client_state_ref(var_name: str) -> str:
|
|
|
42
41
|
frozen=True,
|
|
43
42
|
**{"slots": True} if sys.version_info >= (3, 10) else {},
|
|
44
43
|
)
|
|
45
|
-
class ClientStateVar(
|
|
44
|
+
class ClientStateVar(ImmutableVar):
|
|
46
45
|
"""A Var that exists on the client via useState."""
|
|
47
46
|
|
|
48
47
|
# Track the names of the getters and setters
|
|
@@ -59,7 +58,7 @@ class ClientStateVar(Var):
|
|
|
59
58
|
The hash of the var.
|
|
60
59
|
"""
|
|
61
60
|
return hash(
|
|
62
|
-
(self.
|
|
61
|
+
(self._var_name, str(self._var_type), self._getter_name, self._setter_name)
|
|
63
62
|
)
|
|
64
63
|
|
|
65
64
|
@classmethod
|
|
@@ -98,8 +97,10 @@ class ClientStateVar(Var):
|
|
|
98
97
|
var_name = get_unique_variable_name()
|
|
99
98
|
assert isinstance(var_name, str), "var_name must be a string."
|
|
100
99
|
if default is NoValue:
|
|
101
|
-
default_var =
|
|
102
|
-
|
|
100
|
+
default_var = ImmutableVar.create_safe(
|
|
101
|
+
"", _var_is_local=False, _var_is_string=False
|
|
102
|
+
)
|
|
103
|
+
elif not isinstance(default, ImmutableVar):
|
|
103
104
|
default_var = LiteralVar.create(default)
|
|
104
105
|
else:
|
|
105
106
|
default_var = default
|
|
@@ -115,7 +116,7 @@ class ClientStateVar(Var):
|
|
|
115
116
|
hooks[f"{_client_state_ref(setter_name)} = {setter_name}"] = None
|
|
116
117
|
imports.update(_refs_import)
|
|
117
118
|
return cls(
|
|
118
|
-
|
|
119
|
+
_var_name="",
|
|
119
120
|
_setter_name=setter_name,
|
|
120
121
|
_getter_name=var_name,
|
|
121
122
|
_global_ref=global_ref,
|
|
@@ -130,7 +131,7 @@ class ClientStateVar(Var):
|
|
|
130
131
|
)
|
|
131
132
|
|
|
132
133
|
@property
|
|
133
|
-
def value(self) ->
|
|
134
|
+
def value(self) -> ImmutableVar:
|
|
134
135
|
"""Get a placeholder for the Var.
|
|
135
136
|
|
|
136
137
|
This property can only be rendered on the frontend.
|
|
@@ -141,12 +142,10 @@ class ClientStateVar(Var):
|
|
|
141
142
|
an accessor for the client state variable.
|
|
142
143
|
"""
|
|
143
144
|
return (
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
else self._getter_name
|
|
149
|
-
)
|
|
145
|
+
ImmutableVar.create_safe(
|
|
146
|
+
_client_state_ref(self._getter_name)
|
|
147
|
+
if self._global_ref
|
|
148
|
+
else self._getter_name
|
|
150
149
|
)
|
|
151
150
|
.to(self._var_type)
|
|
152
151
|
._replace(
|
|
@@ -156,7 +155,7 @@ class ClientStateVar(Var):
|
|
|
156
155
|
)
|
|
157
156
|
)
|
|
158
157
|
|
|
159
|
-
def set_value(self, value: Any = NoValue) ->
|
|
158
|
+
def set_value(self, value: Any = NoValue) -> ImmutableVar:
|
|
160
159
|
"""Set the value of the client state variable.
|
|
161
160
|
|
|
162
161
|
This property can only be attached to a frontend event trigger.
|
|
@@ -175,22 +174,22 @@ class ClientStateVar(Var):
|
|
|
175
174
|
else self._setter_name
|
|
176
175
|
)
|
|
177
176
|
if value is not NoValue:
|
|
177
|
+
import re
|
|
178
|
+
|
|
178
179
|
# This is a hack to make it work like an EventSpec taking an arg
|
|
179
180
|
value_str = str(LiteralVar.create(value))
|
|
180
181
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
return Var(
|
|
188
|
-
_js_expr=setter,
|
|
182
|
+
# remove patterns of ["*"] from the value_str using regex
|
|
183
|
+
arg = re.sub(r"\[\".*\"\]", "", value_str)
|
|
184
|
+
|
|
185
|
+
setter = f"({arg}) => {setter}({str(value)})"
|
|
186
|
+
return ImmutableVar(
|
|
187
|
+
_var_name=setter,
|
|
189
188
|
_var_data=VarData(imports=_refs_import if self._global_ref else {}),
|
|
190
189
|
).to(FunctionVar, EventChain)
|
|
191
190
|
|
|
192
191
|
@property
|
|
193
|
-
def set(self) ->
|
|
192
|
+
def set(self) -> ImmutableVar:
|
|
194
193
|
"""Set the value of the client state variable.
|
|
195
194
|
|
|
196
195
|
This property can only be attached to a frontend event trigger.
|
reflex/experimental/hooks.py
CHANGED
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
+
from reflex.ivars.base import ImmutableVar
|
|
5
6
|
from reflex.utils.imports import ImportVar
|
|
6
7
|
from reflex.vars import VarData
|
|
7
|
-
from reflex.vars.base import Var
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
def _compose_react_imports(tags: list[str]) -> dict[str, list[ImportVar]]:
|
|
11
11
|
return {"react": [ImportVar(tag=tag) for tag in tags]}
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
def const(name, value) ->
|
|
14
|
+
def const(name, value) -> ImmutableVar:
|
|
15
15
|
"""Create a constant Var.
|
|
16
16
|
|
|
17
17
|
Args:
|
|
@@ -22,11 +22,11 @@ def const(name, value) -> Var:
|
|
|
22
22
|
The constant Var.
|
|
23
23
|
"""
|
|
24
24
|
if isinstance(name, list):
|
|
25
|
-
return
|
|
26
|
-
return
|
|
25
|
+
return ImmutableVar.create_safe(f"const [{', '.join(name)}] = {value}")
|
|
26
|
+
return ImmutableVar.create_safe(f"const {name} = {value}")
|
|
27
27
|
|
|
28
28
|
|
|
29
|
-
def useCallback(func, deps) ->
|
|
29
|
+
def useCallback(func, deps) -> ImmutableVar:
|
|
30
30
|
"""Create a useCallback hook with a function and dependencies.
|
|
31
31
|
|
|
32
32
|
Args:
|
|
@@ -36,13 +36,13 @@ def useCallback(func, deps) -> Var:
|
|
|
36
36
|
Returns:
|
|
37
37
|
The useCallback hook.
|
|
38
38
|
"""
|
|
39
|
-
return
|
|
40
|
-
|
|
39
|
+
return ImmutableVar.create_safe(
|
|
40
|
+
f"useCallback({func}, {deps})" if deps else f"useCallback({func})",
|
|
41
41
|
_var_data=VarData(imports=_compose_react_imports(["useCallback"])),
|
|
42
42
|
)
|
|
43
43
|
|
|
44
44
|
|
|
45
|
-
def useContext(context) ->
|
|
45
|
+
def useContext(context) -> ImmutableVar:
|
|
46
46
|
"""Create a useContext hook with a context.
|
|
47
47
|
|
|
48
48
|
Args:
|
|
@@ -51,13 +51,13 @@ def useContext(context) -> Var:
|
|
|
51
51
|
Returns:
|
|
52
52
|
The useContext hook.
|
|
53
53
|
"""
|
|
54
|
-
return
|
|
55
|
-
|
|
54
|
+
return ImmutableVar.create_safe(
|
|
55
|
+
f"useContext({context})",
|
|
56
56
|
_var_data=VarData(imports=_compose_react_imports(["useContext"])),
|
|
57
57
|
)
|
|
58
58
|
|
|
59
59
|
|
|
60
|
-
def useRef(default) ->
|
|
60
|
+
def useRef(default) -> ImmutableVar:
|
|
61
61
|
"""Create a useRef hook with a default value.
|
|
62
62
|
|
|
63
63
|
Args:
|
|
@@ -66,13 +66,13 @@ def useRef(default) -> Var:
|
|
|
66
66
|
Returns:
|
|
67
67
|
The useRef hook.
|
|
68
68
|
"""
|
|
69
|
-
return
|
|
70
|
-
|
|
69
|
+
return ImmutableVar.create_safe(
|
|
70
|
+
f"useRef({default})",
|
|
71
71
|
_var_data=VarData(imports=_compose_react_imports(["useRef"])),
|
|
72
72
|
)
|
|
73
73
|
|
|
74
74
|
|
|
75
|
-
def useState(var_name, default=None) ->
|
|
75
|
+
def useState(var_name, default=None) -> ImmutableVar:
|
|
76
76
|
"""Create a useState hook with a variable name and setter name.
|
|
77
77
|
|
|
78
78
|
Args:
|
|
@@ -84,8 +84,8 @@ def useState(var_name, default=None) -> Var:
|
|
|
84
84
|
"""
|
|
85
85
|
return const(
|
|
86
86
|
[var_name, f"set{var_name.capitalize()}"],
|
|
87
|
-
|
|
88
|
-
|
|
87
|
+
ImmutableVar.create_safe(
|
|
88
|
+
f"useState({default})",
|
|
89
89
|
_var_data=VarData(imports=_compose_react_imports(["useState"])),
|
|
90
90
|
),
|
|
91
91
|
)
|
reflex/experimental/layout.py
CHANGED
|
@@ -14,9 +14,9 @@ from reflex.components.radix.themes.layout.container import Container
|
|
|
14
14
|
from reflex.components.radix.themes.layout.stack import HStack
|
|
15
15
|
from reflex.event import call_script
|
|
16
16
|
from reflex.experimental import hooks
|
|
17
|
+
from reflex.ivars.base import ImmutableVar
|
|
17
18
|
from reflex.state import ComponentState
|
|
18
19
|
from reflex.style import Style
|
|
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
|
|
58
|
+
else ImmutableVar.create_safe("open")
|
|
59
59
|
)
|
|
60
60
|
sidebar.style["display"] = spacer.style["display"] = cond(open, "block", "none")
|
|
61
61
|
|
|
@@ -69,7 +69,7 @@ class Sidebar(Box, MemoizationLeaf):
|
|
|
69
69
|
}
|
|
70
70
|
)
|
|
71
71
|
|
|
72
|
-
def add_hooks(self) -> List[
|
|
72
|
+
def add_hooks(self) -> List[ImmutableVar]:
|
|
73
73
|
"""Get the hooks to render.
|
|
74
74
|
|
|
75
75
|
Returns:
|
|
@@ -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
|
-
|
|
176
|
-
call_script(
|
|
175
|
+
ImmutableVar.create_safe("open"),
|
|
176
|
+
call_script(ImmutableVar.create_safe("setOpen(!open)")),
|
|
177
177
|
)
|
|
178
178
|
|
|
179
179
|
trigger_props["left"] = cond(open, f"calc({sidebar_width} - 32px)", "0")
|