reflex 0.5.10a3__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 (237) hide show
  1. reflex/.templates/jinja/web/pages/utils.js.jinja2 +4 -4
  2. reflex/.templates/jinja/web/utils/context.js.jinja2 +1 -1
  3. reflex/.templates/jinja/web/utils/theme.js.jinja2 +1 -1
  4. reflex/__init__.py +3 -2
  5. reflex/__init__.pyi +2 -2
  6. reflex/app.py +43 -9
  7. reflex/base.py +3 -2
  8. reflex/compiler/compiler.py +6 -6
  9. reflex/compiler/utils.py +5 -3
  10. reflex/components/base/app_wrap.py +2 -4
  11. reflex/components/base/app_wrap.pyi +17 -17
  12. reflex/components/base/bare.py +7 -4
  13. reflex/components/base/body.pyi +17 -17
  14. reflex/components/base/document.pyi +81 -81
  15. reflex/components/base/error_boundary.py +10 -8
  16. reflex/components/base/error_boundary.pyi +20 -19
  17. reflex/components/base/fragment.pyi +17 -17
  18. reflex/components/base/head.pyi +33 -33
  19. reflex/components/base/link.pyi +34 -33
  20. reflex/components/base/meta.pyi +65 -65
  21. reflex/components/base/script.py +2 -1
  22. reflex/components/base/script.pyi +21 -20
  23. reflex/components/component.py +116 -145
  24. reflex/components/core/banner.py +59 -60
  25. reflex/components/core/banner.pyi +86 -150
  26. reflex/components/core/client_side_routing.py +2 -1
  27. reflex/components/core/client_side_routing.pyi +34 -33
  28. reflex/components/core/clipboard.py +2 -2
  29. reflex/components/core/clipboard.pyi +19 -18
  30. reflex/components/core/cond.py +21 -44
  31. reflex/components/core/debounce.py +6 -8
  32. reflex/components/core/debounce.pyi +19 -18
  33. reflex/components/core/foreach.py +5 -14
  34. reflex/components/core/html.pyi +18 -17
  35. reflex/components/core/match.py +36 -43
  36. reflex/components/core/upload.py +32 -25
  37. reflex/components/core/upload.pyi +84 -73
  38. reflex/components/datadisplay/code.py +55 -28
  39. reflex/components/datadisplay/code.pyi +20 -17
  40. reflex/components/datadisplay/dataeditor.py +17 -11
  41. reflex/components/datadisplay/dataeditor.pyi +34 -33
  42. reflex/components/el/__init__.py +0 -1
  43. reflex/components/el/__init__.pyi +0 -11
  44. reflex/components/el/element.pyi +17 -17
  45. reflex/components/el/elements/__init__.py +1 -7
  46. reflex/components/el/elements/__init__.pyi +1 -15
  47. reflex/components/el/elements/base.pyi +18 -17
  48. reflex/components/el/elements/forms.py +24 -31
  49. reflex/components/el/elements/forms.pyi +237 -236
  50. reflex/components/el/elements/inline.pyi +450 -449
  51. reflex/components/el/elements/media.py +0 -21
  52. reflex/components/el/elements/media.pyi +338 -337
  53. reflex/components/el/elements/metadata.py +3 -2
  54. reflex/components/el/elements/metadata.pyi +98 -97
  55. reflex/components/el/elements/other.pyi +114 -113
  56. reflex/components/el/elements/scripts.pyi +50 -49
  57. reflex/components/el/elements/sectioning.pyi +242 -241
  58. reflex/components/el/elements/tables.pyi +162 -161
  59. reflex/components/el/elements/typography.pyi +242 -241
  60. reflex/components/gridjs/datatable.py +13 -14
  61. reflex/components/gridjs/datatable.pyi +34 -33
  62. reflex/components/lucide/icon.py +2 -126
  63. reflex/components/lucide/icon.pyi +34 -142
  64. reflex/components/markdown/markdown.py +30 -35
  65. reflex/components/markdown/markdown.pyi +29 -32
  66. reflex/components/moment/moment.pyi +19 -18
  67. reflex/components/next/base.pyi +17 -17
  68. reflex/components/next/image.py +0 -4
  69. reflex/components/next/image.pyi +20 -19
  70. reflex/components/next/link.pyi +18 -17
  71. reflex/components/next/video.pyi +18 -17
  72. reflex/components/plotly/plotly.py +16 -28
  73. reflex/components/plotly/plotly.pyi +36 -35
  74. reflex/components/props.py +21 -10
  75. reflex/components/radix/__init__.pyi +1 -1
  76. reflex/components/radix/primitives/__init__.pyi +0 -1
  77. reflex/components/radix/primitives/accordion.py +7 -8
  78. reflex/components/radix/primitives/accordion.pyi +117 -116
  79. reflex/components/radix/primitives/base.pyi +34 -33
  80. reflex/components/radix/primitives/drawer.pyi +169 -168
  81. reflex/components/radix/primitives/form.pyi +168 -167
  82. reflex/components/radix/primitives/progress.pyi +82 -81
  83. reflex/components/radix/primitives/slider.pyi +84 -83
  84. reflex/components/radix/themes/base.py +8 -4
  85. reflex/components/radix/themes/base.pyi +114 -113
  86. reflex/components/radix/themes/color_mode.py +12 -21
  87. reflex/components/radix/themes/color_mode.pyi +67 -67
  88. reflex/components/radix/themes/components/__init__.pyi +1 -0
  89. reflex/components/radix/themes/components/alert_dialog.pyi +118 -117
  90. reflex/components/radix/themes/components/aspect_ratio.pyi +18 -17
  91. reflex/components/radix/themes/components/avatar.pyi +18 -17
  92. reflex/components/radix/themes/components/badge.pyi +18 -17
  93. reflex/components/radix/themes/components/button.pyi +18 -17
  94. reflex/components/radix/themes/components/callout.pyi +82 -81
  95. reflex/components/radix/themes/components/card.pyi +18 -17
  96. reflex/components/radix/themes/components/checkbox.py +2 -3
  97. reflex/components/radix/themes/components/checkbox.pyi +53 -52
  98. reflex/components/radix/themes/components/checkbox_cards.pyi +34 -33
  99. reflex/components/radix/themes/components/checkbox_group.pyi +34 -33
  100. reflex/components/radix/themes/components/context_menu.pyi +140 -139
  101. reflex/components/radix/themes/components/data_list.py +5 -0
  102. reflex/components/radix/themes/components/data_list.pyi +71 -65
  103. reflex/components/radix/themes/components/dialog.pyi +121 -120
  104. reflex/components/radix/themes/components/dropdown_menu.pyi +142 -141
  105. reflex/components/radix/themes/components/hover_card.pyi +68 -67
  106. reflex/components/radix/themes/components/icon_button.py +2 -1
  107. reflex/components/radix/themes/components/icon_button.pyi +18 -17
  108. reflex/components/radix/themes/components/inset.pyi +18 -17
  109. reflex/components/radix/themes/components/popover.pyi +73 -72
  110. reflex/components/radix/themes/components/progress.pyi +18 -17
  111. reflex/components/radix/themes/components/radio.pyi +18 -17
  112. reflex/components/radix/themes/components/radio_cards.pyi +35 -34
  113. reflex/components/radix/themes/components/radio_group.py +35 -31
  114. reflex/components/radix/themes/components/radio_group.pyi +73 -66
  115. reflex/components/radix/themes/components/scroll_area.pyi +18 -17
  116. reflex/components/radix/themes/components/segmented_control.pyi +35 -34
  117. reflex/components/radix/themes/components/select.py +2 -1
  118. reflex/components/radix/themes/components/select.pyi +155 -154
  119. reflex/components/radix/themes/components/separator.py +2 -3
  120. reflex/components/radix/themes/components/separator.pyi +18 -17
  121. reflex/components/radix/themes/components/skeleton.pyi +18 -17
  122. reflex/components/radix/themes/components/slider.py +2 -1
  123. reflex/components/radix/themes/components/slider.pyi +20 -19
  124. reflex/components/radix/themes/components/spinner.pyi +18 -17
  125. reflex/components/radix/themes/components/switch.pyi +19 -18
  126. reflex/components/radix/themes/components/table.pyi +114 -113
  127. reflex/components/radix/themes/components/tabs.pyi +84 -83
  128. reflex/components/radix/themes/components/text_area.pyi +21 -20
  129. reflex/components/radix/themes/components/text_field.py +0 -79
  130. reflex/components/radix/themes/components/text_field.pyi +57 -63
  131. reflex/components/radix/themes/components/tooltip.pyi +21 -20
  132. reflex/components/radix/themes/layout/base.pyi +18 -17
  133. reflex/components/radix/themes/layout/box.pyi +18 -17
  134. reflex/components/radix/themes/layout/center.pyi +18 -17
  135. reflex/components/radix/themes/layout/container.py +2 -3
  136. reflex/components/radix/themes/layout/container.pyi +18 -17
  137. reflex/components/radix/themes/layout/flex.pyi +18 -17
  138. reflex/components/radix/themes/layout/grid.pyi +18 -17
  139. reflex/components/radix/themes/layout/list.py +5 -4
  140. reflex/components/radix/themes/layout/list.pyi +86 -85
  141. reflex/components/radix/themes/layout/section.py +2 -3
  142. reflex/components/radix/themes/layout/section.pyi +18 -17
  143. reflex/components/radix/themes/layout/spacer.pyi +18 -17
  144. reflex/components/radix/themes/layout/stack.pyi +50 -49
  145. reflex/components/radix/themes/typography/blockquote.pyi +18 -17
  146. reflex/components/radix/themes/typography/code.pyi +18 -17
  147. reflex/components/radix/themes/typography/heading.pyi +18 -17
  148. reflex/components/radix/themes/typography/link.pyi +18 -17
  149. reflex/components/radix/themes/typography/text.pyi +114 -113
  150. reflex/components/react_player/audio.pyi +34 -33
  151. reflex/components/react_player/react_player.pyi +34 -33
  152. reflex/components/react_player/video.pyi +34 -33
  153. reflex/components/recharts/cartesian.py +23 -19
  154. reflex/components/recharts/cartesian.pyi +297 -296
  155. reflex/components/recharts/charts.py +6 -5
  156. reflex/components/recharts/charts.pyi +179 -178
  157. reflex/components/recharts/general.py +8 -7
  158. reflex/components/recharts/general.pyi +82 -81
  159. reflex/components/recharts/polar.py +14 -13
  160. reflex/components/recharts/polar.pyi +76 -75
  161. reflex/components/recharts/recharts.pyi +33 -33
  162. reflex/components/sonner/toast.py +30 -33
  163. reflex/components/sonner/toast.pyi +27 -25
  164. reflex/components/suneditor/editor.py +2 -1
  165. reflex/components/suneditor/editor.pyi +27 -26
  166. reflex/components/tags/iter_tag.py +16 -16
  167. reflex/components/tags/tag.py +8 -10
  168. reflex/constants/base.py +3 -1
  169. reflex/constants/event.py +1 -0
  170. reflex/event.py +89 -79
  171. reflex/experimental/__init__.py +25 -6
  172. reflex/experimental/client_state.py +34 -58
  173. reflex/experimental/hooks.py +13 -18
  174. reflex/experimental/layout.py +5 -5
  175. reflex/experimental/layout.pyi +84 -83
  176. reflex/{experimental/vars → ivars}/__init__.py +0 -1
  177. reflex/ivars/base.py +2180 -0
  178. reflex/ivars/function.py +200 -0
  179. reflex/ivars/number.py +1137 -0
  180. reflex/ivars/object.py +564 -0
  181. reflex/ivars/sequence.py +1601 -0
  182. reflex/model.py +22 -0
  183. reflex/reflex.py +4 -0
  184. reflex/state.py +388 -73
  185. reflex/style.py +52 -34
  186. reflex/testing.py +8 -3
  187. reflex/utils/exceptions.py +12 -0
  188. reflex/utils/exec.py +0 -14
  189. reflex/utils/format.py +74 -223
  190. reflex/utils/net.py +43 -0
  191. reflex/utils/path_ops.py +13 -1
  192. reflex/utils/prerequisites.py +46 -26
  193. reflex/utils/pyi_generator.py +5 -4
  194. reflex/utils/serializers.py +13 -31
  195. reflex/utils/types.py +44 -9
  196. reflex/vars.py +127 -2230
  197. {reflex-0.5.10a3.dist-info → reflex-0.6.0a1.dist-info}/METADATA +4 -6
  198. reflex-0.6.0a1.dist-info/RECORD +384 -0
  199. reflex/.templates/apps/demo/.gitignore +0 -4
  200. reflex/.templates/apps/demo/assets/favicon.ico +0 -0
  201. reflex/.templates/apps/demo/assets/github.svg +0 -10
  202. reflex/.templates/apps/demo/assets/icon.svg +0 -37
  203. reflex/.templates/apps/demo/assets/logo.svg +0 -68
  204. reflex/.templates/apps/demo/assets/paneleft.svg +0 -13
  205. reflex/.templates/apps/demo/code/__init__.py +0 -1
  206. reflex/.templates/apps/demo/code/demo.py +0 -127
  207. reflex/.templates/apps/demo/code/pages/__init__.py +0 -7
  208. reflex/.templates/apps/demo/code/pages/chatapp.py +0 -31
  209. reflex/.templates/apps/demo/code/pages/datatable.py +0 -360
  210. reflex/.templates/apps/demo/code/pages/forms.py +0 -257
  211. reflex/.templates/apps/demo/code/pages/graphing.py +0 -253
  212. reflex/.templates/apps/demo/code/pages/home.py +0 -56
  213. reflex/.templates/apps/demo/code/sidebar.py +0 -178
  214. reflex/.templates/apps/demo/code/state.py +0 -22
  215. reflex/.templates/apps/demo/code/states/form_state.py +0 -40
  216. reflex/.templates/apps/demo/code/states/pie_state.py +0 -47
  217. reflex/.templates/apps/demo/code/styles.py +0 -68
  218. reflex/.templates/apps/demo/code/webui/__init__.py +0 -0
  219. reflex/.templates/apps/demo/code/webui/components/__init__.py +0 -4
  220. reflex/.templates/apps/demo/code/webui/components/chat.py +0 -118
  221. reflex/.templates/apps/demo/code/webui/components/loading_icon.py +0 -19
  222. reflex/.templates/apps/demo/code/webui/components/modal.py +0 -56
  223. reflex/.templates/apps/demo/code/webui/components/navbar.py +0 -70
  224. reflex/.templates/apps/demo/code/webui/components/sidebar.py +0 -66
  225. reflex/.templates/apps/demo/code/webui/state.py +0 -146
  226. reflex/.templates/apps/demo/code/webui/styles.py +0 -88
  227. reflex/experimental/vars/base.py +0 -583
  228. reflex/experimental/vars/function.py +0 -290
  229. reflex/experimental/vars/number.py +0 -1458
  230. reflex/experimental/vars/object.py +0 -804
  231. reflex/experimental/vars/sequence.py +0 -1764
  232. reflex/utils/watch.py +0 -96
  233. reflex/vars.pyi +0 -218
  234. reflex-0.5.10a3.dist-info/RECORD +0 -413
  235. {reflex-0.5.10a3.dist-info → reflex-0.6.0a1.dist-info}/LICENSE +0 -0
  236. {reflex-0.5.10a3.dist-info → reflex-0.6.0a1.dist-info}/WHEEL +0 -0
  237. {reflex-0.5.10a3.dist-info → reflex-0.6.0a1.dist-info}/entry_points.txt +0 -0
@@ -19,8 +19,8 @@ from types import ModuleType, SimpleNamespace
19
19
  from typing import Any, Callable, Iterable, Type, get_args
20
20
 
21
21
  from reflex.components.component import Component
22
+ from reflex.ivars.base import ImmutableVar
22
23
  from reflex.utils import types as rx_types
23
- from reflex.vars import Var
24
24
 
25
25
  logger = logging.getLogger("pyi_generator")
26
26
 
@@ -69,10 +69,11 @@ DEFAULT_TYPING_IMPORTS = {
69
69
  # TODO: fix import ordering and unused imports with ruff later
70
70
  DEFAULT_IMPORTS = {
71
71
  "typing": sorted(DEFAULT_TYPING_IMPORTS),
72
- "reflex.vars": ["Var", "BaseVar", "ComputedVar"],
72
+ "reflex.vars": ["Var"],
73
73
  "reflex.components.core.breakpoints": ["Breakpoints"],
74
74
  "reflex.event": ["EventChain", "EventHandler", "EventSpec"],
75
75
  "reflex.style": ["Style"],
76
+ "reflex.ivars.base": ["ImmutableVar"],
76
77
  }
77
78
 
78
79
 
@@ -355,7 +356,7 @@ def _extract_class_props_as_ast_nodes(
355
356
  with contextlib.suppress(AttributeError, KeyError):
356
357
  # Try to get default from pydantic field definition.
357
358
  default = target_class.__fields__[name].default
358
- if isinstance(default, Var):
359
+ if isinstance(default, ImmutableVar):
359
360
  default = default._decode() # type: ignore
360
361
 
361
362
  kwargs.append(
@@ -433,7 +434,7 @@ def _generate_component_create_functiondef(
433
434
  ast.arg(
434
435
  arg=trigger,
435
436
  annotation=ast.Name(
436
- id="Optional[Union[EventHandler, EventSpec, list, Callable, BaseVar]]"
437
+ id="Optional[Union[EventHandler, EventSpec, list, Callable, ImmutableVar]]"
437
438
  ),
438
439
  ),
439
440
  ast.Constant(value=None),
@@ -4,7 +4,6 @@ from __future__ import annotations
4
4
 
5
5
  import functools
6
6
  import json
7
- import types as builtin_types
8
7
  import warnings
9
8
  from datetime import date, datetime, time, timedelta
10
9
  from enum import Enum
@@ -26,7 +25,7 @@ from typing import (
26
25
 
27
26
  from reflex.base import Base
28
27
  from reflex.constants.colors import Color, format_color
29
- from reflex.utils import exceptions, types
28
+ from reflex.utils import types
30
29
 
31
30
  # Mapping from type to a serializer.
32
31
  # The serializer should convert the type to a JSON object.
@@ -250,7 +249,14 @@ def serialize_base(value: Base) -> str:
250
249
  Returns:
251
250
  The serialized Base.
252
251
  """
253
- return value.json()
252
+ from reflex.ivars import LiteralObjectVar
253
+
254
+ return str(
255
+ LiteralObjectVar.create(
256
+ {k: (None if callable(v) else v) for k, v in value.dict().items()},
257
+ _var_type=type(value),
258
+ )
259
+ )
254
260
 
255
261
 
256
262
  @serializer
@@ -263,13 +269,9 @@ def serialize_list(value: Union[List, Tuple, Set]) -> str:
263
269
  Returns:
264
270
  The serialized list.
265
271
  """
266
- from reflex.utils import format
272
+ from reflex.ivars import LiteralArrayVar
267
273
 
268
- # Dump the list to a string.
269
- fprop = format.json_dumps(list(value))
270
-
271
- # Unwrap var values.
272
- return format.unwrap_vars(fprop)
274
+ return str(LiteralArrayVar.create(value))
273
275
 
274
276
 
275
277
  @serializer
@@ -281,30 +283,10 @@ def serialize_dict(prop: Dict[str, Any]) -> str:
281
283
 
282
284
  Returns:
283
285
  The serialized dictionary.
284
-
285
- Raises:
286
- InvalidStylePropError: If the style prop is invalid.
287
286
  """
288
- # Import here to avoid circular imports.
289
- from reflex.event import EventHandler
290
- from reflex.utils import format
291
-
292
- prop_dict = {}
293
-
294
- for key, value in prop.items():
295
- if types._issubclass(type(value), Callable):
296
- raise exceptions.InvalidStylePropError(
297
- f"The style prop `{format.to_snake_case(key)}` cannot have " # type: ignore
298
- f"`{value.fn.__qualname__ if isinstance(value, EventHandler) else value.__qualname__ if isinstance(value, builtin_types.FunctionType) else value}`, "
299
- f"an event handler or callable as its value"
300
- )
301
- prop_dict[key] = value
302
-
303
- # Dump the dict to a string.
304
- fprop = format.json_dumps(prop_dict)
287
+ from reflex.ivars import LiteralObjectVar
305
288
 
306
- # Unwrap var values.
307
- return format.unwrap_vars(fprop)
289
+ return str(LiteralObjectVar.create(prop))
308
290
 
309
291
 
310
292
  @serializer(to=str)
reflex/utils/types.py CHANGED
@@ -6,7 +6,7 @@ import contextlib
6
6
  import inspect
7
7
  import sys
8
8
  import types
9
- from functools import cached_property, wraps
9
+ from functools import cached_property, lru_cache, wraps
10
10
  from typing import (
11
11
  Any,
12
12
  Callable,
@@ -21,9 +21,11 @@ from typing import (
21
21
  Union,
22
22
  _GenericAlias, # type: ignore
23
23
  get_args,
24
- get_origin,
25
24
  get_type_hints,
26
25
  )
26
+ from typing import (
27
+ get_origin as get_origin_og,
28
+ )
27
29
 
28
30
  import sqlalchemy
29
31
 
@@ -93,7 +95,7 @@ PrimitiveType = Union[int, float, bool, str, list, dict, set, tuple]
93
95
  StateVar = Union[PrimitiveType, Base, None]
94
96
  StateIterVar = Union[list, set, tuple]
95
97
 
96
- # ArgsSpec = Callable[[Var], list[Var]]
98
+ # ArgsSpec = Callable[[ImmutableVar], list[ImmutableVar]]
97
99
  ArgsSpec = Callable
98
100
 
99
101
 
@@ -109,6 +111,11 @@ RESERVED_BACKEND_VAR_NAMES = {
109
111
  "_was_touched",
110
112
  }
111
113
 
114
+ if sys.version_info >= (3, 11):
115
+ from typing import Self as Self
116
+ else:
117
+ from typing_extensions import Self as Self
118
+
112
119
 
113
120
  class Unset:
114
121
  """A class to represent an unset value.
@@ -133,6 +140,20 @@ class Unset:
133
140
  return False
134
141
 
135
142
 
143
+ @lru_cache()
144
+ def get_origin(tp):
145
+ """Get the origin of a class.
146
+
147
+ Args:
148
+ tp: The class to get the origin of.
149
+
150
+ Returns:
151
+ The origin of the class.
152
+ """
153
+ return get_origin_og(tp)
154
+
155
+
156
+ @lru_cache()
136
157
  def is_generic_alias(cls: GenericType) -> bool:
137
158
  """Check whether the class is a generic alias.
138
159
 
@@ -157,6 +178,7 @@ def is_none(cls: GenericType) -> bool:
157
178
  return cls is type(None) or cls is None
158
179
 
159
180
 
181
+ @lru_cache()
160
182
  def is_union(cls: GenericType) -> bool:
161
183
  """Check if a class is a Union.
162
184
 
@@ -169,6 +191,7 @@ def is_union(cls: GenericType) -> bool:
169
191
  return get_origin(cls) in UnionTypes
170
192
 
171
193
 
194
+ @lru_cache()
172
195
  def is_literal(cls: GenericType) -> bool:
173
196
  """Check if a class is a Literal.
174
197
 
@@ -222,9 +245,14 @@ def get_attribute_access_type(cls: GenericType, name: str) -> GenericType | None
222
245
  """
223
246
  from reflex.model import Model
224
247
 
225
- attr = getattr(cls, name, None)
248
+ try:
249
+ attr = getattr(cls, name, None)
250
+ except NotImplementedError:
251
+ attr = None
252
+
226
253
  if hint := get_property_hint(attr):
227
254
  return hint
255
+
228
256
  if (
229
257
  hasattr(cls, "__fields__")
230
258
  and name in cls.__fields__
@@ -314,6 +342,7 @@ def get_attribute_access_type(cls: GenericType, name: str) -> GenericType | None
314
342
  return None # Attribute is not accessible.
315
343
 
316
344
 
345
+ @lru_cache()
317
346
  def get_base_class(cls: GenericType) -> Type:
318
347
  """Get the base class of a class.
319
348
 
@@ -485,17 +514,23 @@ def is_backend_base_variable(name: str, cls: Type) -> bool:
485
514
  if name in cls.inherited_backend_vars:
486
515
  return False
487
516
 
517
+ from reflex.ivars.base import is_computed_var
518
+
488
519
  if name in cls.__dict__:
489
520
  value = cls.__dict__[name]
490
521
  if type(value) == classmethod:
491
522
  return False
492
523
  if callable(value):
493
524
  return False
494
- from reflex.vars import ComputedVar
495
525
 
496
526
  if isinstance(
497
- value, (types.FunctionType, property, cached_property, ComputedVar)
498
- ):
527
+ value,
528
+ (
529
+ types.FunctionType,
530
+ property,
531
+ cached_property,
532
+ ),
533
+ ) or is_computed_var(value):
499
534
  return False
500
535
 
501
536
  return True
@@ -555,11 +590,11 @@ def validate_literal(key: str, value: Any, expected_type: Type, comp_name: str):
555
590
  Raises:
556
591
  ValueError: When the value is not a valid literal.
557
592
  """
558
- from reflex.vars import Var
593
+ from reflex.ivars import ImmutableVar
559
594
 
560
595
  if (
561
596
  is_literal(expected_type)
562
- and not isinstance(value, Var) # validating vars is not supported yet.
597
+ and not isinstance(value, ImmutableVar) # validating vars is not supported yet.
563
598
  and not is_encoded_fstring(value) # f-strings are not supported.
564
599
  and value not in expected_type.__args__
565
600
  ):