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.

Files changed (253) hide show
  1. reflex/.templates/jinja/custom_components/pyproject.toml.jinja2 +2 -2
  2. reflex/.templates/jinja/web/pages/_app.js.jinja2 +1 -1
  3. reflex/.templates/jinja/web/pages/utils.js.jinja2 +2 -2
  4. reflex/.templates/web/components/reflex/chakra_color_mode_provider.js +36 -0
  5. reflex/.templates/web/utils/state.js +1 -3
  6. reflex/__init__.py +2 -8
  7. reflex/__init__.pyi +1 -2
  8. reflex/app.py +2 -4
  9. reflex/app_module_for_backend.py +1 -1
  10. reflex/base.py +1 -1
  11. reflex/compiler/compiler.py +2 -2
  12. reflex/compiler/utils.py +3 -3
  13. reflex/components/base/app_wrap.py +2 -2
  14. reflex/components/base/app_wrap.pyi +27 -17
  15. reflex/components/base/bare.py +5 -4
  16. reflex/components/base/body.pyi +27 -17
  17. reflex/components/base/document.pyi +131 -81
  18. reflex/components/base/error_boundary.py +7 -6
  19. reflex/components/base/error_boundary.pyi +33 -20
  20. reflex/components/base/fragment.pyi +27 -17
  21. reflex/components/base/head.pyi +53 -33
  22. reflex/components/base/link.py +1 -1
  23. reflex/components/base/link.pyi +54 -33
  24. reflex/components/base/meta.pyi +105 -65
  25. reflex/components/base/script.py +2 -1
  26. reflex/components/base/script.pyi +38 -21
  27. reflex/components/component.py +47 -53
  28. reflex/components/core/banner.py +27 -23
  29. reflex/components/core/banner.pyi +171 -134
  30. reflex/components/core/client_side_routing.py +3 -2
  31. reflex/components/core/client_side_routing.pyi +54 -33
  32. reflex/components/core/clipboard.py +1 -2
  33. reflex/components/core/clipboard.pyi +33 -20
  34. reflex/components/core/cond.py +5 -5
  35. reflex/components/core/debounce.py +5 -5
  36. reflex/components/core/debounce.pyi +33 -20
  37. reflex/components/core/foreach.py +4 -3
  38. reflex/components/core/html.py +1 -1
  39. reflex/components/core/html.pyi +46 -35
  40. reflex/components/core/match.py +17 -17
  41. reflex/components/core/upload.py +23 -17
  42. reflex/components/core/upload.pyi +124 -78
  43. reflex/components/datadisplay/code.py +10 -9
  44. reflex/components/datadisplay/code.pyi +409 -299
  45. reflex/components/datadisplay/dataeditor.py +10 -8
  46. reflex/components/datadisplay/dataeditor.pyi +53 -40
  47. reflex/components/el/element.pyi +27 -17
  48. reflex/components/el/elements/base.py +1 -1
  49. reflex/components/el/elements/base.pyi +45 -34
  50. reflex/components/el/elements/forms.py +16 -16
  51. reflex/components/el/elements/forms.pyi +707 -554
  52. reflex/components/el/elements/inline.py +1 -1
  53. reflex/components/el/elements/inline.pyi +1218 -937
  54. reflex/components/el/elements/media.py +1 -1
  55. reflex/components/el/elements/media.pyi +997 -786
  56. reflex/components/el/elements/metadata.py +6 -3
  57. reflex/components/el/elements/metadata.pyi +242 -181
  58. reflex/components/el/elements/other.py +1 -1
  59. reflex/components/el/elements/other.pyi +306 -235
  60. reflex/components/el/elements/scripts.py +1 -1
  61. reflex/components/el/elements/scripts.pyi +140 -109
  62. reflex/components/el/elements/sectioning.py +2 -0
  63. reflex/components/el/elements/sectioning.pyi +647 -496
  64. reflex/components/el/elements/tables.py +1 -1
  65. reflex/components/el/elements/tables.pyi +452 -351
  66. reflex/components/el/elements/typography.py +1 -1
  67. reflex/components/el/elements/typography.pyi +657 -506
  68. reflex/components/gridjs/datatable.py +9 -6
  69. reflex/components/gridjs/datatable.pyi +56 -35
  70. reflex/components/lucide/icon.py +1 -1
  71. reflex/components/lucide/icon.pyi +54 -33
  72. reflex/components/markdown/markdown.py +31 -26
  73. reflex/components/markdown/markdown.pyi +37 -27
  74. reflex/components/moment/moment.py +12 -13
  75. reflex/components/moment/moment.pyi +35 -23
  76. reflex/components/next/base.pyi +27 -17
  77. reflex/components/next/image.py +1 -1
  78. reflex/components/next/image.pyi +37 -22
  79. reflex/components/next/link.py +1 -1
  80. reflex/components/next/link.pyi +28 -17
  81. reflex/components/next/video.py +1 -1
  82. reflex/components/next/video.pyi +28 -17
  83. reflex/components/plotly/plotly.py +13 -12
  84. reflex/components/plotly/plotly.pyi +54 -39
  85. reflex/components/props.py +1 -1
  86. reflex/components/radix/__init__.pyi +0 -1
  87. reflex/components/radix/primitives/__init__.pyi +0 -1
  88. reflex/components/radix/primitives/accordion.py +4 -4
  89. reflex/components/radix/primitives/accordion.pyi +495 -424
  90. reflex/components/radix/primitives/base.py +1 -1
  91. reflex/components/radix/primitives/base.pyi +54 -33
  92. reflex/components/radix/primitives/drawer.py +1 -1
  93. reflex/components/radix/primitives/drawer.pyi +273 -172
  94. reflex/components/radix/primitives/form.py +1 -1
  95. reflex/components/radix/primitives/form.pyi +364 -257
  96. reflex/components/radix/primitives/progress.py +1 -1
  97. reflex/components/radix/primitives/progress.pyi +282 -231
  98. reflex/components/radix/primitives/slider.py +1 -1
  99. reflex/components/radix/primitives/slider.pyi +138 -87
  100. reflex/components/radix/themes/base.py +24 -3
  101. reflex/components/radix/themes/base.pyi +250 -178
  102. reflex/components/radix/themes/color_mode.py +5 -5
  103. reflex/components/radix/themes/color_mode.pyi +220 -187
  104. reflex/components/radix/themes/components/alert_dialog.py +1 -1
  105. reflex/components/radix/themes/components/alert_dialog.pyi +207 -136
  106. reflex/components/radix/themes/components/aspect_ratio.py +1 -1
  107. reflex/components/radix/themes/components/aspect_ratio.pyi +28 -17
  108. reflex/components/radix/themes/components/avatar.py +1 -1
  109. reflex/components/radix/themes/components/avatar.pyi +81 -70
  110. reflex/components/radix/themes/components/badge.py +1 -1
  111. reflex/components/radix/themes/components/badge.pyi +99 -88
  112. reflex/components/radix/themes/components/button.py +1 -1
  113. reflex/components/radix/themes/components/button.pyi +109 -98
  114. reflex/components/radix/themes/components/callout.py +1 -1
  115. reflex/components/radix/themes/components/callout.pyi +373 -322
  116. reflex/components/radix/themes/components/card.py +1 -1
  117. reflex/components/radix/themes/components/card.pyi +49 -38
  118. reflex/components/radix/themes/components/checkbox.py +2 -1
  119. reflex/components/radix/themes/components/checkbox.pyi +245 -208
  120. reflex/components/radix/themes/components/checkbox_cards.py +1 -1
  121. reflex/components/radix/themes/components/checkbox_cards.pyi +115 -94
  122. reflex/components/radix/themes/components/checkbox_group.py +1 -1
  123. reflex/components/radix/themes/components/checkbox_group.pyi +107 -86
  124. reflex/components/radix/themes/components/context_menu.py +1 -1
  125. reflex/components/radix/themes/components/context_menu.pyi +319 -238
  126. reflex/components/radix/themes/components/data_list.py +1 -1
  127. reflex/components/radix/themes/components/data_list.pyi +171 -130
  128. reflex/components/radix/themes/components/dialog.py +1 -1
  129. reflex/components/radix/themes/components/dialog.pyi +210 -139
  130. reflex/components/radix/themes/components/dropdown_menu.py +1 -1
  131. reflex/components/radix/themes/components/dropdown_menu.pyi +332 -249
  132. reflex/components/radix/themes/components/hover_card.py +1 -1
  133. reflex/components/radix/themes/components/hover_card.pyi +131 -90
  134. reflex/components/radix/themes/components/icon_button.py +3 -2
  135. reflex/components/radix/themes/components/icon_button.pyi +109 -98
  136. reflex/components/radix/themes/components/inset.py +1 -1
  137. reflex/components/radix/themes/components/inset.pyi +58 -47
  138. reflex/components/radix/themes/components/popover.py +1 -1
  139. reflex/components/radix/themes/components/popover.pyi +136 -95
  140. reflex/components/radix/themes/components/progress.py +1 -1
  141. reflex/components/radix/themes/components/progress.pyi +82 -71
  142. reflex/components/radix/themes/components/radio.py +1 -1
  143. reflex/components/radix/themes/components/radio.pyi +80 -69
  144. reflex/components/radix/themes/components/radio_cards.py +1 -1
  145. reflex/components/radix/themes/components/radio_cards.pyi +119 -98
  146. reflex/components/radix/themes/components/radio_group.py +11 -8
  147. reflex/components/radix/themes/components/radio_group.pyi +271 -228
  148. reflex/components/radix/themes/components/scroll_area.py +1 -1
  149. reflex/components/radix/themes/components/scroll_area.pyi +32 -21
  150. reflex/components/radix/themes/components/segmented_control.py +1 -1
  151. reflex/components/radix/themes/components/segmented_control.pyi +113 -90
  152. reflex/components/radix/themes/components/select.py +3 -2
  153. reflex/components/radix/themes/components/select.pyi +471 -374
  154. reflex/components/radix/themes/components/separator.py +2 -1
  155. reflex/components/radix/themes/components/separator.pyi +80 -69
  156. reflex/components/radix/themes/components/skeleton.py +1 -1
  157. reflex/components/radix/themes/components/skeleton.pyi +34 -23
  158. reflex/components/radix/themes/components/slider.py +3 -2
  159. reflex/components/radix/themes/components/slider.pyi +88 -75
  160. reflex/components/radix/themes/components/spinner.py +1 -1
  161. reflex/components/radix/themes/components/spinner.pyi +30 -19
  162. reflex/components/radix/themes/components/switch.py +1 -1
  163. reflex/components/radix/themes/components/switch.pyi +84 -71
  164. reflex/components/radix/themes/components/table.py +1 -1
  165. reflex/components/radix/themes/components/table.pyi +332 -261
  166. reflex/components/radix/themes/components/tabs.py +1 -1
  167. reflex/components/radix/themes/components/tabs.pyi +194 -139
  168. reflex/components/radix/themes/components/text_area.py +1 -1
  169. reflex/components/radix/themes/components/text_area.pyi +111 -96
  170. reflex/components/radix/themes/components/text_field.py +1 -1
  171. reflex/components/radix/themes/components/text_field.pyi +286 -247
  172. reflex/components/radix/themes/components/tooltip.py +1 -1
  173. reflex/components/radix/themes/components/tooltip.pyi +37 -26
  174. reflex/components/radix/themes/layout/__init__.pyi +0 -1
  175. reflex/components/radix/themes/layout/base.py +1 -1
  176. reflex/components/radix/themes/layout/base.pyi +67 -56
  177. reflex/components/radix/themes/layout/box.pyi +45 -34
  178. reflex/components/radix/themes/layout/center.pyi +67 -56
  179. reflex/components/radix/themes/layout/container.py +2 -1
  180. reflex/components/radix/themes/layout/container.pyi +47 -36
  181. reflex/components/radix/themes/layout/flex.py +1 -1
  182. reflex/components/radix/themes/layout/flex.pyi +67 -56
  183. reflex/components/radix/themes/layout/grid.py +1 -1
  184. reflex/components/radix/themes/layout/grid.pyi +75 -64
  185. reflex/components/radix/themes/layout/list.py +6 -5
  186. reflex/components/radix/themes/layout/list.pyi +244 -193
  187. reflex/components/radix/themes/layout/section.py +2 -1
  188. reflex/components/radix/themes/layout/section.pyi +47 -36
  189. reflex/components/radix/themes/layout/spacer.pyi +67 -56
  190. reflex/components/radix/themes/layout/stack.py +1 -1
  191. reflex/components/radix/themes/layout/stack.pyi +159 -128
  192. reflex/components/radix/themes/typography/blockquote.py +1 -1
  193. reflex/components/radix/themes/typography/blockquote.pyi +100 -89
  194. reflex/components/radix/themes/typography/code.py +1 -1
  195. reflex/components/radix/themes/typography/code.pyi +101 -90
  196. reflex/components/radix/themes/typography/heading.py +1 -1
  197. reflex/components/radix/themes/typography/heading.pyi +107 -96
  198. reflex/components/radix/themes/typography/link.py +1 -1
  199. reflex/components/radix/themes/typography/link.pyi +113 -102
  200. reflex/components/radix/themes/typography/text.py +1 -1
  201. reflex/components/radix/themes/typography/text.pyi +572 -501
  202. reflex/components/react_player/audio.pyi +60 -33
  203. reflex/components/react_player/react_player.py +1 -1
  204. reflex/components/react_player/react_player.pyi +60 -33
  205. reflex/components/react_player/video.pyi +60 -33
  206. reflex/components/recharts/cartesian.py +3 -2
  207. reflex/components/recharts/cartesian.pyi +861 -678
  208. reflex/components/recharts/charts.py +5 -4
  209. reflex/components/recharts/charts.pyi +357 -252
  210. reflex/components/recharts/general.py +2 -1
  211. reflex/components/recharts/general.pyi +231 -180
  212. reflex/components/recharts/polar.py +5 -4
  213. reflex/components/recharts/polar.pyi +181 -144
  214. reflex/components/recharts/recharts.pyi +53 -33
  215. reflex/components/sonner/toast.py +17 -16
  216. reflex/components/sonner/toast.pyi +47 -36
  217. reflex/components/suneditor/editor.py +3 -2
  218. reflex/components/suneditor/editor.pyi +78 -55
  219. reflex/components/tags/cond_tag.py +4 -6
  220. reflex/components/tags/iter_tag.py +16 -28
  221. reflex/components/tags/match_tag.py +4 -6
  222. reflex/components/tags/tag.py +23 -40
  223. reflex/custom_components/custom_components.py +1 -3
  224. reflex/event.py +65 -113
  225. reflex/experimental/client_state.py +24 -25
  226. reflex/experimental/hooks.py +16 -16
  227. reflex/experimental/layout.py +5 -5
  228. reflex/experimental/layout.pyi +187 -136
  229. reflex/{vars → ivars}/__init__.py +2 -6
  230. reflex/{vars → ivars}/base.py +216 -599
  231. reflex/{vars → ivars}/function.py +19 -15
  232. reflex/{vars → ivars}/number.py +20 -41
  233. reflex/{vars → ivars}/object.py +30 -28
  234. reflex/{vars → ivars}/sequence.py +50 -53
  235. reflex/middleware/hydrate_middleware.py +0 -2
  236. reflex/middleware/middleware.py +3 -3
  237. reflex/state.py +82 -148
  238. reflex/style.py +22 -21
  239. reflex/utils/exceptions.py +0 -20
  240. reflex/utils/format.py +34 -54
  241. reflex/utils/imports.py +73 -16
  242. reflex/utils/prerequisites.py +15 -35
  243. reflex/utils/pyi_generator.py +8 -13
  244. reflex/utils/serializers.py +22 -12
  245. reflex/utils/telemetry.py +2 -3
  246. reflex/utils/types.py +5 -10
  247. reflex/vars.py +501 -0
  248. {reflex-0.6.0.dist-info → reflex-0.6.0a1.dist-info}/METADATA +5 -4
  249. reflex-0.6.0a1.dist-info/RECORD +384 -0
  250. reflex-0.6.0.dist-info/RECORD +0 -382
  251. {reflex-0.6.0.dist-info → reflex-0.6.0a1.dist-info}/LICENSE +0 -0
  252. {reflex-0.6.0.dist-info → reflex-0.6.0a1.dist-info}/WHEEL +0 -0
  253. {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(Var):
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._js_expr, str(self._var_type), self._getter_name, self._setter_name)
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 = Var(_js_expr="")
102
- elif not isinstance(default, Var):
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
- _js_expr="",
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) -> Var:
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
- Var(
145
- _js_expr=(
146
- _client_state_ref(self._getter_name)
147
- if self._global_ref
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) -> Var:
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
- 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}))"
185
- else:
186
- setter = f"(() => {setter}({value_str}))"
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) -> Var:
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.
@@ -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) -> Var:
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 Var(_js_expr=f"const [{', '.join(name)}] = {value}")
26
- return Var(_js_expr=f"const {name} = {value}")
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) -> Var:
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 Var(
40
- _js_expr=f"useCallback({func}, {deps})" if deps else f"useCallback({func})",
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) -> Var:
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 Var(
55
- _js_expr=f"useContext({context})",
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) -> Var:
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 Var(
70
- _js_expr=f"useRef({default})",
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) -> Var:
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
- Var(
88
- _js_expr=f"useState({default})",
87
+ ImmutableVar.create_safe(
88
+ f"useState({default})",
89
89
  _var_data=VarData(imports=_compose_react_imports(["useState"])),
90
90
  ),
91
91
  )
@@ -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 Var(_js_expr="open")
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[Var]:
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
- Var(_js_expr="open"),
176
- call_script(Var(_js_expr="setOpen(!open)")),
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")