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.

Files changed (303) 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 +4 -4
  4. reflex/.templates/jinja/web/utils/context.js.jinja2 +1 -1
  5. reflex/.templates/jinja/web/utils/theme.js.jinja2 +1 -1
  6. reflex/.templates/web/utils/state.js +3 -1
  7. reflex/__init__.py +10 -3
  8. reflex/__init__.pyi +3 -2
  9. reflex/app.py +47 -11
  10. reflex/app_module_for_backend.py +1 -1
  11. reflex/base.py +3 -2
  12. reflex/compiler/compiler.py +5 -5
  13. reflex/compiler/utils.py +5 -3
  14. reflex/components/base/app_wrap.py +2 -4
  15. reflex/components/base/app_wrap.pyi +16 -26
  16. reflex/components/base/bare.py +6 -4
  17. reflex/components/base/body.pyi +16 -26
  18. reflex/components/base/document.pyi +76 -126
  19. reflex/components/base/error_boundary.py +9 -8
  20. reflex/components/base/error_boundary.pyi +18 -30
  21. reflex/components/base/fragment.pyi +16 -26
  22. reflex/components/base/head.pyi +31 -51
  23. reflex/components/base/link.py +1 -1
  24. reflex/components/base/link.pyi +31 -51
  25. reflex/components/base/meta.pyi +61 -101
  26. reflex/components/base/script.py +2 -2
  27. reflex/components/base/script.pyi +20 -36
  28. reflex/components/component.py +107 -130
  29. reflex/components/core/banner.py +61 -66
  30. reflex/components/core/banner.pyi +129 -230
  31. reflex/components/core/client_side_routing.py +2 -2
  32. reflex/components/core/client_side_routing.pyi +31 -51
  33. reflex/components/core/clipboard.py +4 -3
  34. reflex/components/core/clipboard.pyi +19 -31
  35. reflex/components/core/cond.py +21 -44
  36. reflex/components/core/debounce.py +7 -9
  37. reflex/components/core/debounce.pyi +19 -31
  38. reflex/components/core/foreach.py +4 -14
  39. reflex/components/core/html.py +1 -1
  40. reflex/components/core/html.pyi +34 -44
  41. reflex/components/core/match.py +36 -43
  42. reflex/components/core/upload.py +27 -26
  43. reflex/components/core/upload.pyi +81 -116
  44. reflex/components/datadisplay/code.py +55 -29
  45. reflex/components/datadisplay/code.pyi +303 -410
  46. reflex/components/datadisplay/dataeditor.py +13 -9
  47. reflex/components/datadisplay/dataeditor.pyi +39 -51
  48. reflex/components/el/__init__.py +0 -1
  49. reflex/components/el/__init__.pyi +0 -11
  50. reflex/components/el/element.pyi +16 -26
  51. reflex/components/el/elements/__init__.py +1 -7
  52. reflex/components/el/elements/__init__.pyi +1 -15
  53. reflex/components/el/elements/base.py +1 -1
  54. reflex/components/el/elements/base.pyi +33 -43
  55. reflex/components/el/elements/forms.py +26 -33
  56. reflex/components/el/elements/forms.pyi +542 -694
  57. reflex/components/el/elements/inline.py +1 -1
  58. reflex/components/el/elements/inline.pyi +909 -1189
  59. reflex/components/el/elements/media.py +1 -22
  60. reflex/components/el/elements/media.pyi +765 -975
  61. reflex/components/el/elements/metadata.py +3 -5
  62. reflex/components/el/elements/metadata.pyi +175 -235
  63. reflex/components/el/elements/other.py +1 -1
  64. reflex/components/el/elements/other.pyi +228 -298
  65. reflex/components/el/elements/scripts.py +1 -1
  66. reflex/components/el/elements/scripts.pyi +106 -136
  67. reflex/components/el/elements/sectioning.py +0 -2
  68. reflex/components/el/elements/sectioning.pyi +481 -631
  69. reflex/components/el/elements/tables.py +1 -1
  70. reflex/components/el/elements/tables.pyi +341 -441
  71. reflex/components/el/elements/typography.py +1 -1
  72. reflex/components/el/elements/typography.pyi +491 -641
  73. reflex/components/gridjs/datatable.py +9 -13
  74. reflex/components/gridjs/datatable.pyi +33 -53
  75. reflex/components/lucide/icon.py +3 -127
  76. reflex/components/lucide/icon.pyi +31 -160
  77. reflex/components/markdown/markdown.py +32 -42
  78. reflex/components/markdown/markdown.pyi +28 -41
  79. reflex/components/moment/moment.py +13 -12
  80. reflex/components/moment/moment.pyi +22 -33
  81. reflex/components/next/base.pyi +16 -26
  82. reflex/components/next/image.py +1 -5
  83. reflex/components/next/image.pyi +21 -35
  84. reflex/components/next/link.py +1 -1
  85. reflex/components/next/link.pyi +16 -26
  86. reflex/components/next/video.py +1 -1
  87. reflex/components/next/video.pyi +16 -26
  88. reflex/components/plotly/plotly.py +17 -30
  89. reflex/components/plotly/plotly.pyi +38 -52
  90. reflex/components/props.py +21 -10
  91. reflex/components/radix/__init__.pyi +2 -1
  92. reflex/components/radix/primitives/accordion.py +6 -7
  93. reflex/components/radix/primitives/accordion.pyi +415 -485
  94. reflex/components/radix/primitives/base.py +1 -1
  95. reflex/components/radix/primitives/base.pyi +31 -51
  96. reflex/components/radix/primitives/drawer.py +1 -1
  97. reflex/components/radix/primitives/drawer.pyi +162 -262
  98. reflex/components/radix/primitives/form.py +1 -1
  99. reflex/components/radix/primitives/form.pyi +247 -353
  100. reflex/components/radix/primitives/progress.py +1 -1
  101. reflex/components/radix/primitives/progress.pyi +226 -276
  102. reflex/components/radix/primitives/slider.py +1 -1
  103. reflex/components/radix/primitives/slider.pyi +82 -132
  104. reflex/components/radix/themes/base.py +8 -25
  105. reflex/components/radix/themes/base.pyi +171 -242
  106. reflex/components/radix/themes/color_mode.py +11 -20
  107. reflex/components/radix/themes/color_mode.pyi +198 -231
  108. reflex/components/radix/themes/components/__init__.pyi +1 -0
  109. reflex/components/radix/themes/components/alert_dialog.py +1 -1
  110. reflex/components/radix/themes/components/alert_dialog.pyi +129 -199
  111. reflex/components/radix/themes/components/aspect_ratio.py +1 -1
  112. reflex/components/radix/themes/components/aspect_ratio.pyi +16 -26
  113. reflex/components/radix/themes/components/avatar.py +1 -1
  114. reflex/components/radix/themes/components/avatar.pyi +69 -79
  115. reflex/components/radix/themes/components/badge.py +1 -1
  116. reflex/components/radix/themes/components/badge.pyi +87 -97
  117. reflex/components/radix/themes/components/button.py +1 -1
  118. reflex/components/radix/themes/components/button.pyi +97 -107
  119. reflex/components/radix/themes/components/callout.py +1 -1
  120. reflex/components/radix/themes/components/callout.pyi +317 -367
  121. reflex/components/radix/themes/components/card.py +1 -1
  122. reflex/components/radix/themes/components/card.pyi +37 -47
  123. reflex/components/radix/themes/components/checkbox.py +2 -4
  124. reflex/components/radix/themes/components/checkbox.pyi +205 -241
  125. reflex/components/radix/themes/components/checkbox_cards.py +1 -1
  126. reflex/components/radix/themes/components/checkbox_cards.pyi +92 -112
  127. reflex/components/radix/themes/components/checkbox_group.py +1 -1
  128. reflex/components/radix/themes/components/checkbox_group.pyi +84 -104
  129. reflex/components/radix/themes/components/context_menu.py +1 -1
  130. reflex/components/radix/themes/components/context_menu.pyi +230 -310
  131. reflex/components/radix/themes/components/data_list.py +6 -1
  132. reflex/components/radix/themes/components/data_list.pyi +131 -166
  133. reflex/components/radix/themes/components/dialog.py +1 -1
  134. reflex/components/radix/themes/components/dialog.pyi +132 -202
  135. reflex/components/radix/themes/components/dropdown_menu.py +1 -1
  136. reflex/components/radix/themes/components/dropdown_menu.pyi +241 -323
  137. reflex/components/radix/themes/components/hover_card.py +1 -1
  138. reflex/components/radix/themes/components/hover_card.pyi +86 -126
  139. reflex/components/radix/themes/components/icon_button.py +1 -1
  140. reflex/components/radix/themes/components/icon_button.pyi +97 -107
  141. reflex/components/radix/themes/components/inset.py +1 -1
  142. reflex/components/radix/themes/components/inset.pyi +46 -56
  143. reflex/components/radix/themes/components/popover.py +1 -1
  144. reflex/components/radix/themes/components/popover.pyi +91 -131
  145. reflex/components/radix/themes/components/progress.py +1 -1
  146. reflex/components/radix/themes/components/progress.pyi +70 -80
  147. reflex/components/radix/themes/components/radio.py +1 -1
  148. reflex/components/radix/themes/components/radio.pyi +68 -78
  149. reflex/components/radix/themes/components/radio_cards.py +1 -1
  150. reflex/components/radix/themes/components/radio_cards.pyi +96 -116
  151. reflex/components/radix/themes/components/radio_group.py +32 -31
  152. reflex/components/radix/themes/components/radio_group.pyi +230 -266
  153. reflex/components/radix/themes/components/scroll_area.py +1 -1
  154. reflex/components/radix/themes/components/scroll_area.pyi +20 -30
  155. reflex/components/radix/themes/components/segmented_control.py +1 -1
  156. reflex/components/radix/themes/components/segmented_control.pyi +88 -110
  157. reflex/components/radix/themes/components/select.py +1 -1
  158. reflex/components/radix/themes/components/select.pyi +365 -461
  159. reflex/components/radix/themes/components/separator.py +2 -4
  160. reflex/components/radix/themes/components/separator.pyi +68 -78
  161. reflex/components/radix/themes/components/skeleton.py +1 -1
  162. reflex/components/radix/themes/components/skeleton.pyi +22 -32
  163. reflex/components/radix/themes/components/slider.py +1 -1
  164. reflex/components/radix/themes/components/slider.pyi +74 -86
  165. reflex/components/radix/themes/components/spinner.py +1 -1
  166. reflex/components/radix/themes/components/spinner.pyi +18 -28
  167. reflex/components/radix/themes/components/switch.py +1 -1
  168. reflex/components/radix/themes/components/switch.pyi +70 -82
  169. reflex/components/radix/themes/components/table.py +1 -1
  170. reflex/components/radix/themes/components/table.pyi +254 -324
  171. reflex/components/radix/themes/components/tabs.py +1 -1
  172. reflex/components/radix/themes/components/tabs.pyi +134 -188
  173. reflex/components/radix/themes/components/text_area.py +1 -1
  174. reflex/components/radix/themes/components/text_area.pyi +95 -109
  175. reflex/components/radix/themes/components/text_field.py +1 -80
  176. reflex/components/radix/themes/components/text_field.pyi +245 -290
  177. reflex/components/radix/themes/components/tooltip.py +1 -1
  178. reflex/components/radix/themes/components/tooltip.pyi +25 -35
  179. reflex/components/radix/themes/layout/__init__.pyi +1 -0
  180. reflex/components/radix/themes/layout/base.py +1 -1
  181. reflex/components/radix/themes/layout/base.pyi +55 -65
  182. reflex/components/radix/themes/layout/box.pyi +33 -43
  183. reflex/components/radix/themes/layout/center.pyi +55 -65
  184. reflex/components/radix/themes/layout/container.py +2 -4
  185. reflex/components/radix/themes/layout/container.pyi +35 -45
  186. reflex/components/radix/themes/layout/flex.py +1 -1
  187. reflex/components/radix/themes/layout/flex.pyi +55 -65
  188. reflex/components/radix/themes/layout/grid.py +1 -1
  189. reflex/components/radix/themes/layout/grid.pyi +63 -73
  190. reflex/components/radix/themes/layout/list.py +1 -1
  191. reflex/components/radix/themes/layout/list.pyi +188 -238
  192. reflex/components/radix/themes/layout/section.py +2 -4
  193. reflex/components/radix/themes/layout/section.pyi +35 -45
  194. reflex/components/radix/themes/layout/spacer.pyi +55 -65
  195. reflex/components/radix/themes/layout/stack.py +1 -1
  196. reflex/components/radix/themes/layout/stack.pyi +125 -155
  197. reflex/components/radix/themes/typography/blockquote.py +1 -1
  198. reflex/components/radix/themes/typography/blockquote.pyi +88 -98
  199. reflex/components/radix/themes/typography/code.py +1 -1
  200. reflex/components/radix/themes/typography/code.pyi +89 -99
  201. reflex/components/radix/themes/typography/heading.py +1 -1
  202. reflex/components/radix/themes/typography/heading.pyi +95 -105
  203. reflex/components/radix/themes/typography/link.py +1 -1
  204. reflex/components/radix/themes/typography/link.pyi +101 -111
  205. reflex/components/radix/themes/typography/text.py +1 -1
  206. reflex/components/radix/themes/typography/text.pyi +494 -564
  207. reflex/components/react_player/audio.pyi +32 -58
  208. reflex/components/react_player/react_player.py +1 -1
  209. reflex/components/react_player/react_player.pyi +32 -58
  210. reflex/components/react_player/video.pyi +32 -58
  211. reflex/components/recharts/cartesian.py +22 -19
  212. reflex/components/recharts/cartesian.pyi +658 -840
  213. reflex/components/recharts/charts.py +3 -3
  214. reflex/components/recharts/charts.pyi +238 -342
  215. reflex/components/recharts/general.py +8 -8
  216. reflex/components/recharts/general.pyi +175 -225
  217. reflex/components/recharts/polar.py +11 -11
  218. reflex/components/recharts/polar.pyi +135 -171
  219. reflex/components/recharts/recharts.pyi +31 -51
  220. reflex/components/sonner/toast.py +27 -31
  221. reflex/components/sonner/toast.pyi +36 -45
  222. reflex/components/suneditor/editor.py +1 -1
  223. reflex/components/suneditor/editor.pyi +54 -76
  224. reflex/components/tags/cond_tag.py +6 -4
  225. reflex/components/tags/iter_tag.py +37 -25
  226. reflex/components/tags/match_tag.py +6 -4
  227. reflex/components/tags/tag.py +43 -28
  228. reflex/constants/base.py +3 -1
  229. reflex/constants/event.py +1 -0
  230. reflex/custom_components/custom_components.py +3 -1
  231. reflex/event.py +166 -108
  232. reflex/experimental/__init__.py +25 -6
  233. reflex/experimental/client_state.py +34 -57
  234. reflex/experimental/hooks.py +12 -17
  235. reflex/experimental/layout.py +4 -4
  236. reflex/experimental/layout.pyi +130 -180
  237. reflex/middleware/hydrate_middleware.py +2 -0
  238. reflex/middleware/middleware.py +3 -3
  239. reflex/model.py +22 -0
  240. reflex/reflex.py +4 -0
  241. reflex/state.py +491 -110
  242. reflex/style.py +56 -39
  243. reflex/testing.py +8 -3
  244. reflex/utils/exceptions.py +32 -0
  245. reflex/utils/exec.py +0 -14
  246. reflex/utils/format.py +80 -209
  247. reflex/utils/imports.py +16 -73
  248. reflex/utils/net.py +43 -0
  249. reflex/utils/path_ops.py +13 -1
  250. reflex/utils/prerequisites.py +81 -41
  251. reflex/utils/pyi_generator.py +12 -6
  252. reflex/utils/serializers.py +13 -41
  253. reflex/utils/telemetry.py +3 -2
  254. reflex/utils/types.py +47 -7
  255. reflex/{experimental/vars → vars}/__init__.py +6 -3
  256. reflex/vars/base.py +2563 -0
  257. reflex/vars/function.py +196 -0
  258. reflex/vars/number.py +1158 -0
  259. reflex/vars/object.py +562 -0
  260. reflex/vars/sequence.py +1604 -0
  261. {reflex-0.5.10a3.dist-info → reflex-0.6.0.dist-info}/METADATA +6 -9
  262. reflex-0.6.0.dist-info/RECORD +382 -0
  263. reflex/.templates/apps/demo/.gitignore +0 -4
  264. reflex/.templates/apps/demo/assets/favicon.ico +0 -0
  265. reflex/.templates/apps/demo/assets/github.svg +0 -10
  266. reflex/.templates/apps/demo/assets/icon.svg +0 -37
  267. reflex/.templates/apps/demo/assets/logo.svg +0 -68
  268. reflex/.templates/apps/demo/assets/paneleft.svg +0 -13
  269. reflex/.templates/apps/demo/code/__init__.py +0 -1
  270. reflex/.templates/apps/demo/code/demo.py +0 -127
  271. reflex/.templates/apps/demo/code/pages/__init__.py +0 -7
  272. reflex/.templates/apps/demo/code/pages/chatapp.py +0 -31
  273. reflex/.templates/apps/demo/code/pages/datatable.py +0 -360
  274. reflex/.templates/apps/demo/code/pages/forms.py +0 -257
  275. reflex/.templates/apps/demo/code/pages/graphing.py +0 -253
  276. reflex/.templates/apps/demo/code/pages/home.py +0 -56
  277. reflex/.templates/apps/demo/code/sidebar.py +0 -178
  278. reflex/.templates/apps/demo/code/state.py +0 -22
  279. reflex/.templates/apps/demo/code/states/form_state.py +0 -40
  280. reflex/.templates/apps/demo/code/states/pie_state.py +0 -47
  281. reflex/.templates/apps/demo/code/styles.py +0 -68
  282. reflex/.templates/apps/demo/code/webui/__init__.py +0 -0
  283. reflex/.templates/apps/demo/code/webui/components/__init__.py +0 -4
  284. reflex/.templates/apps/demo/code/webui/components/chat.py +0 -118
  285. reflex/.templates/apps/demo/code/webui/components/loading_icon.py +0 -19
  286. reflex/.templates/apps/demo/code/webui/components/modal.py +0 -56
  287. reflex/.templates/apps/demo/code/webui/components/navbar.py +0 -70
  288. reflex/.templates/apps/demo/code/webui/components/sidebar.py +0 -66
  289. reflex/.templates/apps/demo/code/webui/state.py +0 -146
  290. reflex/.templates/apps/demo/code/webui/styles.py +0 -88
  291. reflex/.templates/web/components/reflex/chakra_color_mode_provider.js +0 -36
  292. reflex/experimental/vars/base.py +0 -583
  293. reflex/experimental/vars/function.py +0 -290
  294. reflex/experimental/vars/number.py +0 -1458
  295. reflex/experimental/vars/object.py +0 -804
  296. reflex/experimental/vars/sequence.py +0 -1764
  297. reflex/utils/watch.py +0 -96
  298. reflex/vars.py +0 -2604
  299. reflex/vars.pyi +0 -218
  300. reflex-0.5.10a3.dist-info/RECORD +0 -413
  301. {reflex-0.5.10a3.dist-info → reflex-0.6.0.dist-info}/LICENSE +0 -0
  302. {reflex-0.5.10a3.dist-info → reflex-0.6.0.dist-info}/WHEEL +0 -0
  303. {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, Optional, Type, Union
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 Var, VarData, get_unique_variable_name
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._var_name, str(self._var_type), self._getter_name, self._setter_name)
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.create_safe("", _var_is_local=False, _var_is_string=False)
101
+ default_var = Var(_js_expr="")
113
102
  elif not isinstance(default, Var):
114
- default_var = Var.create_safe(
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._var_name_unwrapped})": None,
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
- _var_name="",
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( # type: ignore
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.create_safe(
161
- _client_state_ref(self._getter_name)
162
- if self._global_ref
163
- else self._getter_name,
164
- _var_is_local=False,
165
- _var_is_string=False,
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
- value = Var.create_safe(value, _var_is_string=isinstance(value, str))
196
- if not value._var_is_string and value._var_full_name.startswith("_"):
197
- arg = value._var_name_unwrapped.partition(".")[0]
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
- arg = ""
200
- setter = f"({arg}) => {setter}({value._var_name_unwrapped})"
201
- return (
202
- Var.create_safe(
203
- setter,
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:
@@ -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 Var, VarData
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.create_safe(
25
- f"const [{', '.join(name)}] = {value}", _var_is_string=False
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.create_safe(
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.create_safe(
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.create_safe(
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.create_safe(
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
  )
@@ -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.create_safe("open", _var_is_string=False)
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.create_safe("open", _var_is_string=False),
176
- call_script(Var.create_safe("setOpen(!open)", _var_is_string=False)),
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")