reflex 0.6.0a1__py3-none-any.whl → 0.6.0a3__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 (252) 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/__init__.py +8 -2
  5. reflex/__init__.pyi +2 -1
  6. reflex/app.py +10 -4
  7. reflex/base.py +1 -1
  8. reflex/compiler/compiler.py +2 -2
  9. reflex/compiler/utils.py +3 -3
  10. reflex/components/base/app_wrap.py +2 -2
  11. reflex/components/base/app_wrap.pyi +17 -27
  12. reflex/components/base/bare.py +4 -5
  13. reflex/components/base/body.pyi +17 -27
  14. reflex/components/base/document.pyi +81 -131
  15. reflex/components/base/error_boundary.py +6 -7
  16. reflex/components/base/error_boundary.pyi +20 -33
  17. reflex/components/base/fragment.pyi +17 -27
  18. reflex/components/base/head.pyi +33 -53
  19. reflex/components/base/link.py +1 -1
  20. reflex/components/base/link.pyi +33 -54
  21. reflex/components/base/meta.pyi +65 -105
  22. reflex/components/base/script.py +1 -2
  23. reflex/components/base/script.pyi +21 -38
  24. reflex/components/component.py +45 -47
  25. reflex/components/core/banner.py +23 -27
  26. reflex/components/core/banner.pyi +134 -171
  27. reflex/components/core/breakpoints.py +3 -1
  28. reflex/components/core/client_side_routing.py +2 -3
  29. reflex/components/core/client_side_routing.pyi +33 -54
  30. reflex/components/core/clipboard.py +2 -1
  31. reflex/components/core/clipboard.pyi +20 -33
  32. reflex/components/core/cond.py +5 -5
  33. reflex/components/core/debounce.py +5 -5
  34. reflex/components/core/debounce.pyi +20 -33
  35. reflex/components/core/foreach.py +3 -4
  36. reflex/components/core/html.py +1 -1
  37. reflex/components/core/html.pyi +35 -46
  38. reflex/components/core/match.py +17 -17
  39. reflex/components/core/upload.py +17 -23
  40. reflex/components/core/upload.pyi +78 -124
  41. reflex/components/datadisplay/code.py +9 -10
  42. reflex/components/datadisplay/code.pyi +302 -412
  43. reflex/components/datadisplay/dataeditor.py +8 -10
  44. reflex/components/datadisplay/dataeditor.pyi +40 -53
  45. reflex/components/el/element.pyi +17 -27
  46. reflex/components/el/elements/base.py +1 -1
  47. reflex/components/el/elements/base.pyi +34 -45
  48. reflex/components/el/elements/forms.py +16 -16
  49. reflex/components/el/elements/forms.pyi +554 -707
  50. reflex/components/el/elements/inline.py +1 -1
  51. reflex/components/el/elements/inline.pyi +937 -1218
  52. reflex/components/el/elements/media.py +1 -1
  53. reflex/components/el/elements/media.pyi +786 -997
  54. reflex/components/el/elements/metadata.py +3 -6
  55. reflex/components/el/elements/metadata.pyi +181 -242
  56. reflex/components/el/elements/other.py +1 -1
  57. reflex/components/el/elements/other.pyi +235 -306
  58. reflex/components/el/elements/scripts.py +1 -1
  59. reflex/components/el/elements/scripts.pyi +109 -140
  60. reflex/components/el/elements/sectioning.py +0 -2
  61. reflex/components/el/elements/sectioning.pyi +496 -647
  62. reflex/components/el/elements/tables.py +1 -1
  63. reflex/components/el/elements/tables.pyi +351 -452
  64. reflex/components/el/elements/typography.py +1 -1
  65. reflex/components/el/elements/typography.pyi +506 -657
  66. reflex/components/gridjs/datatable.py +6 -9
  67. reflex/components/gridjs/datatable.pyi +35 -56
  68. reflex/components/lucide/icon.py +1 -1
  69. reflex/components/lucide/icon.pyi +33 -54
  70. reflex/components/markdown/markdown.py +26 -31
  71. reflex/components/markdown/markdown.pyi +27 -37
  72. reflex/components/moment/moment.py +13 -12
  73. reflex/components/moment/moment.pyi +23 -35
  74. reflex/components/next/base.pyi +17 -27
  75. reflex/components/next/image.py +1 -1
  76. reflex/components/next/image.pyi +22 -37
  77. reflex/components/next/link.py +1 -1
  78. reflex/components/next/link.pyi +17 -28
  79. reflex/components/next/video.py +1 -1
  80. reflex/components/next/video.pyi +17 -28
  81. reflex/components/plotly/plotly.py +12 -13
  82. reflex/components/plotly/plotly.pyi +39 -54
  83. reflex/components/props.py +1 -1
  84. reflex/components/radix/__init__.pyi +1 -0
  85. reflex/components/radix/primitives/__init__.pyi +1 -0
  86. reflex/components/radix/primitives/accordion.py +4 -4
  87. reflex/components/radix/primitives/accordion.pyi +424 -495
  88. reflex/components/radix/primitives/base.py +1 -1
  89. reflex/components/radix/primitives/base.pyi +33 -54
  90. reflex/components/radix/primitives/drawer.py +1 -1
  91. reflex/components/radix/primitives/drawer.pyi +172 -273
  92. reflex/components/radix/primitives/form.py +1 -1
  93. reflex/components/radix/primitives/form.pyi +257 -364
  94. reflex/components/radix/primitives/progress.py +1 -1
  95. reflex/components/radix/primitives/progress.pyi +231 -282
  96. reflex/components/radix/primitives/slider.py +1 -1
  97. reflex/components/radix/primitives/slider.pyi +87 -138
  98. reflex/components/radix/themes/base.py +3 -24
  99. reflex/components/radix/themes/base.pyi +178 -250
  100. reflex/components/radix/themes/color_mode.py +5 -5
  101. reflex/components/radix/themes/color_mode.pyi +187 -220
  102. reflex/components/radix/themes/components/alert_dialog.py +1 -1
  103. reflex/components/radix/themes/components/alert_dialog.pyi +136 -207
  104. reflex/components/radix/themes/components/aspect_ratio.py +1 -1
  105. reflex/components/radix/themes/components/aspect_ratio.pyi +17 -28
  106. reflex/components/radix/themes/components/avatar.py +1 -1
  107. reflex/components/radix/themes/components/avatar.pyi +70 -81
  108. reflex/components/radix/themes/components/badge.py +1 -1
  109. reflex/components/radix/themes/components/badge.pyi +88 -99
  110. reflex/components/radix/themes/components/button.py +1 -1
  111. reflex/components/radix/themes/components/button.pyi +98 -109
  112. reflex/components/radix/themes/components/callout.py +1 -1
  113. reflex/components/radix/themes/components/callout.pyi +322 -373
  114. reflex/components/radix/themes/components/card.py +1 -1
  115. reflex/components/radix/themes/components/card.pyi +38 -49
  116. reflex/components/radix/themes/components/checkbox.py +1 -2
  117. reflex/components/radix/themes/components/checkbox.pyi +208 -245
  118. reflex/components/radix/themes/components/checkbox_cards.py +1 -1
  119. reflex/components/radix/themes/components/checkbox_cards.pyi +94 -115
  120. reflex/components/radix/themes/components/checkbox_group.py +1 -1
  121. reflex/components/radix/themes/components/checkbox_group.pyi +86 -107
  122. reflex/components/radix/themes/components/context_menu.py +1 -1
  123. reflex/components/radix/themes/components/context_menu.pyi +238 -319
  124. reflex/components/radix/themes/components/data_list.py +1 -1
  125. reflex/components/radix/themes/components/data_list.pyi +130 -171
  126. reflex/components/radix/themes/components/dialog.py +1 -1
  127. reflex/components/radix/themes/components/dialog.pyi +139 -210
  128. reflex/components/radix/themes/components/dropdown_menu.py +1 -1
  129. reflex/components/radix/themes/components/dropdown_menu.pyi +249 -332
  130. reflex/components/radix/themes/components/hover_card.py +1 -1
  131. reflex/components/radix/themes/components/hover_card.pyi +90 -131
  132. reflex/components/radix/themes/components/icon_button.py +2 -3
  133. reflex/components/radix/themes/components/icon_button.pyi +98 -109
  134. reflex/components/radix/themes/components/inset.py +1 -1
  135. reflex/components/radix/themes/components/inset.pyi +47 -58
  136. reflex/components/radix/themes/components/popover.py +1 -1
  137. reflex/components/radix/themes/components/popover.pyi +95 -136
  138. reflex/components/radix/themes/components/progress.py +1 -1
  139. reflex/components/radix/themes/components/progress.pyi +71 -82
  140. reflex/components/radix/themes/components/radio.py +1 -1
  141. reflex/components/radix/themes/components/radio.pyi +69 -80
  142. reflex/components/radix/themes/components/radio_cards.py +1 -1
  143. reflex/components/radix/themes/components/radio_cards.pyi +98 -119
  144. reflex/components/radix/themes/components/radio_group.py +8 -11
  145. reflex/components/radix/themes/components/radio_group.pyi +228 -271
  146. reflex/components/radix/themes/components/scroll_area.py +1 -1
  147. reflex/components/radix/themes/components/scroll_area.pyi +21 -32
  148. reflex/components/radix/themes/components/segmented_control.py +1 -1
  149. reflex/components/radix/themes/components/segmented_control.pyi +90 -113
  150. reflex/components/radix/themes/components/select.py +2 -3
  151. reflex/components/radix/themes/components/select.pyi +374 -471
  152. reflex/components/radix/themes/components/separator.py +1 -2
  153. reflex/components/radix/themes/components/separator.pyi +69 -80
  154. reflex/components/radix/themes/components/skeleton.py +1 -1
  155. reflex/components/radix/themes/components/skeleton.pyi +23 -34
  156. reflex/components/radix/themes/components/slider.py +2 -3
  157. reflex/components/radix/themes/components/slider.pyi +75 -88
  158. reflex/components/radix/themes/components/spinner.py +1 -1
  159. reflex/components/radix/themes/components/spinner.pyi +19 -30
  160. reflex/components/radix/themes/components/switch.py +1 -1
  161. reflex/components/radix/themes/components/switch.pyi +71 -84
  162. reflex/components/radix/themes/components/table.py +1 -1
  163. reflex/components/radix/themes/components/table.pyi +261 -332
  164. reflex/components/radix/themes/components/tabs.py +1 -1
  165. reflex/components/radix/themes/components/tabs.pyi +139 -194
  166. reflex/components/radix/themes/components/text_area.py +1 -1
  167. reflex/components/radix/themes/components/text_area.pyi +96 -111
  168. reflex/components/radix/themes/components/text_field.py +1 -1
  169. reflex/components/radix/themes/components/text_field.pyi +247 -286
  170. reflex/components/radix/themes/components/tooltip.py +1 -1
  171. reflex/components/radix/themes/components/tooltip.pyi +26 -37
  172. reflex/components/radix/themes/layout/__init__.pyi +1 -0
  173. reflex/components/radix/themes/layout/base.py +1 -1
  174. reflex/components/radix/themes/layout/base.pyi +56 -67
  175. reflex/components/radix/themes/layout/box.pyi +34 -45
  176. reflex/components/radix/themes/layout/center.pyi +56 -67
  177. reflex/components/radix/themes/layout/container.py +1 -2
  178. reflex/components/radix/themes/layout/container.pyi +36 -47
  179. reflex/components/radix/themes/layout/flex.py +1 -1
  180. reflex/components/radix/themes/layout/flex.pyi +56 -67
  181. reflex/components/radix/themes/layout/grid.py +1 -1
  182. reflex/components/radix/themes/layout/grid.pyi +64 -75
  183. reflex/components/radix/themes/layout/list.py +5 -6
  184. reflex/components/radix/themes/layout/list.pyi +193 -244
  185. reflex/components/radix/themes/layout/section.py +1 -2
  186. reflex/components/radix/themes/layout/section.pyi +36 -47
  187. reflex/components/radix/themes/layout/spacer.pyi +56 -67
  188. reflex/components/radix/themes/layout/stack.py +1 -1
  189. reflex/components/radix/themes/layout/stack.pyi +128 -159
  190. reflex/components/radix/themes/typography/blockquote.py +1 -1
  191. reflex/components/radix/themes/typography/blockquote.pyi +89 -100
  192. reflex/components/radix/themes/typography/code.py +1 -1
  193. reflex/components/radix/themes/typography/code.pyi +90 -101
  194. reflex/components/radix/themes/typography/heading.py +1 -1
  195. reflex/components/radix/themes/typography/heading.pyi +96 -107
  196. reflex/components/radix/themes/typography/link.py +1 -1
  197. reflex/components/radix/themes/typography/link.pyi +102 -113
  198. reflex/components/radix/themes/typography/text.py +1 -1
  199. reflex/components/radix/themes/typography/text.pyi +501 -572
  200. reflex/components/react_player/audio.pyi +33 -60
  201. reflex/components/react_player/react_player.py +1 -1
  202. reflex/components/react_player/react_player.pyi +33 -60
  203. reflex/components/react_player/video.pyi +33 -60
  204. reflex/components/recharts/cartesian.py +2 -3
  205. reflex/components/recharts/cartesian.pyi +678 -861
  206. reflex/components/recharts/charts.py +4 -5
  207. reflex/components/recharts/charts.pyi +252 -357
  208. reflex/components/recharts/general.py +1 -2
  209. reflex/components/recharts/general.pyi +180 -231
  210. reflex/components/recharts/polar.py +4 -5
  211. reflex/components/recharts/polar.pyi +144 -181
  212. reflex/components/recharts/recharts.pyi +33 -53
  213. reflex/components/sonner/toast.py +16 -17
  214. reflex/components/sonner/toast.pyi +36 -47
  215. reflex/components/suneditor/editor.py +2 -3
  216. reflex/components/suneditor/editor.pyi +55 -78
  217. reflex/components/tags/cond_tag.py +6 -4
  218. reflex/components/tags/iter_tag.py +28 -16
  219. reflex/components/tags/match_tag.py +6 -4
  220. reflex/components/tags/tag.py +40 -23
  221. reflex/custom_components/custom_components.py +3 -1
  222. reflex/event.py +115 -67
  223. reflex/experimental/client_state.py +18 -18
  224. reflex/experimental/hooks.py +16 -16
  225. reflex/experimental/layout.py +5 -5
  226. reflex/experimental/layout.pyi +136 -187
  227. reflex/middleware/hydrate_middleware.py +2 -0
  228. reflex/middleware/middleware.py +3 -3
  229. reflex/state.py +149 -82
  230. reflex/style.py +21 -22
  231. reflex/utils/exceptions.py +20 -0
  232. reflex/utils/format.py +54 -34
  233. reflex/utils/imports.py +16 -73
  234. reflex/utils/prerequisites.py +15 -8
  235. reflex/utils/pyi_generator.py +13 -8
  236. reflex/utils/serializers.py +12 -22
  237. reflex/utils/telemetry.py +3 -2
  238. reflex/utils/types.py +11 -6
  239. reflex/{ivars → vars}/__init__.py +6 -2
  240. reflex/{ivars → vars}/base.py +599 -216
  241. reflex/{ivars → vars}/function.py +15 -19
  242. reflex/{ivars → vars}/number.py +41 -20
  243. reflex/{ivars → vars}/object.py +28 -30
  244. reflex/{ivars → vars}/sequence.py +53 -42
  245. {reflex-0.6.0a1.dist-info → reflex-0.6.0a3.dist-info}/METADATA +4 -6
  246. reflex-0.6.0a3.dist-info/RECORD +382 -0
  247. reflex/.templates/web/components/reflex/chakra_color_mode_provider.js +0 -36
  248. reflex/vars.py +0 -501
  249. reflex-0.6.0a1.dist-info/RECORD +0 -384
  250. {reflex-0.6.0a1.dist-info → reflex-0.6.0a3.dist-info}/LICENSE +0 -0
  251. {reflex-0.6.0a1.dist-info → reflex-0.6.0a3.dist-info}/WHEEL +0 -0
  252. {reflex-0.6.0a1.dist-info → reflex-0.6.0a3.dist-info}/entry_points.txt +0 -0
@@ -9,7 +9,8 @@ from reflex.components.tags.tag import Tag
9
9
  from reflex.event import EventChain, EventHandler
10
10
  from reflex.utils.format import format_prop, wrap
11
11
  from reflex.utils.imports import ImportVar
12
- from reflex.vars import Var, get_unique_variable_name
12
+ from reflex.vars import get_unique_variable_name
13
+ from reflex.vars.base import Var
13
14
 
14
15
 
15
16
  class Clipboard(Fragment):
@@ -7,10 +7,9 @@ from typing import Any, Callable, Dict, List, Optional, Union, overload
7
7
 
8
8
  from reflex.components.base.fragment import Fragment
9
9
  from reflex.event import EventHandler, EventSpec
10
- from reflex.ivars.base import ImmutableVar
11
10
  from reflex.style import Style
12
11
  from reflex.utils.imports import ImportVar
13
- from reflex.vars import Var
12
+ from reflex.vars.base import Var
14
13
 
15
14
  class Clipboard(Fragment):
16
15
  @overload
@@ -18,63 +17,51 @@ class Clipboard(Fragment):
18
17
  def create( # type: ignore
19
18
  cls,
20
19
  *children,
21
- targets: Optional[Union[Var[List[str]], List[str]]] = None,
20
+ targets: Optional[Union[List[str], Var[List[str]]]] = None,
22
21
  on_paste_event_actions: Optional[
23
- Union[Var[Dict[str, Union[bool, int]]], Dict[str, Union[bool, int]]]
22
+ Union[Dict[str, Union[bool, int]], Var[Dict[str, Union[bool, int]]]]
24
23
  ] = None,
25
24
  style: Optional[Style] = None,
26
25
  key: Optional[Any] = None,
27
26
  id: Optional[Any] = None,
28
27
  class_name: Optional[Any] = None,
29
28
  autofocus: Optional[bool] = None,
30
- custom_attrs: Optional[Dict[str, Union[ImmutableVar, str]]] = None,
31
- on_blur: Optional[
32
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
33
- ] = None,
34
- on_click: Optional[
35
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
36
- ] = None,
29
+ custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
30
+ on_blur: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
31
+ on_click: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
37
32
  on_context_menu: Optional[
38
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
33
+ Union[EventHandler, EventSpec, list, Callable, Var]
39
34
  ] = None,
40
35
  on_double_click: Optional[
41
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
42
- ] = None,
43
- on_focus: Optional[
44
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
45
- ] = None,
46
- on_mount: Optional[
47
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
36
+ Union[EventHandler, EventSpec, list, Callable, Var]
48
37
  ] = None,
38
+ on_focus: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
39
+ on_mount: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
49
40
  on_mouse_down: Optional[
50
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
41
+ Union[EventHandler, EventSpec, list, Callable, Var]
51
42
  ] = None,
52
43
  on_mouse_enter: Optional[
53
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
44
+ Union[EventHandler, EventSpec, list, Callable, Var]
54
45
  ] = None,
55
46
  on_mouse_leave: Optional[
56
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
47
+ Union[EventHandler, EventSpec, list, Callable, Var]
57
48
  ] = None,
58
49
  on_mouse_move: Optional[
59
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
50
+ Union[EventHandler, EventSpec, list, Callable, Var]
60
51
  ] = None,
61
52
  on_mouse_out: Optional[
62
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
53
+ Union[EventHandler, EventSpec, list, Callable, Var]
63
54
  ] = None,
64
55
  on_mouse_over: Optional[
65
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
56
+ Union[EventHandler, EventSpec, list, Callable, Var]
66
57
  ] = None,
67
58
  on_mouse_up: Optional[
68
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
69
- ] = None,
70
- on_paste: Optional[
71
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
72
- ] = None,
73
- on_scroll: Optional[
74
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
59
+ Union[EventHandler, EventSpec, list, Callable, Var]
75
60
  ] = None,
61
+ on_paste: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
62
+ on_scroll: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
76
63
  on_unmount: Optional[
77
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
64
+ Union[EventHandler, EventSpec, list, Callable, Var]
78
65
  ] = None,
79
66
  **props,
80
67
  ) -> "Clipboard":
@@ -8,11 +8,11 @@ from reflex.components.base.fragment import Fragment
8
8
  from reflex.components.component import BaseComponent, Component, MemoizationLeaf
9
9
  from reflex.components.tags import CondTag, Tag
10
10
  from reflex.constants import Dirs
11
- from reflex.ivars.base import ImmutableVar, LiteralVar
12
- from reflex.ivars.number import ternary_operation
13
11
  from reflex.style import LIGHT_COLOR_MODE, resolved_color_mode
14
12
  from reflex.utils.imports import ImportDict, ImportVar
15
- from reflex.vars import Var, VarData
13
+ from reflex.vars import VarData
14
+ from reflex.vars.base import LiteralVar, Var
15
+ from reflex.vars.number import ternary_operation
16
16
 
17
17
  _IS_TRUE_IMPORT: ImportDict = {
18
18
  f"/{Dirs.STATE_PATH}": [ImportVar(tag="isTrue")],
@@ -119,10 +119,10 @@ def cond(condition: Any, c1: Component) -> Component: ...
119
119
 
120
120
 
121
121
  @overload
122
- def cond(condition: Any, c1: Any, c2: Any) -> ImmutableVar: ...
122
+ def cond(condition: Any, c1: Any, c2: Any) -> Var: ...
123
123
 
124
124
 
125
- def cond(condition: Any, c1: Any, c2: Any = None) -> Component | ImmutableVar:
125
+ def cond(condition: Any, c1: Any, c2: Any = None) -> Component | Var:
126
126
  """Create a conditional component or Prop.
127
127
 
128
128
  Args:
@@ -7,8 +7,8 @@ from typing import Any, Type, Union
7
7
  from reflex.components.component import Component
8
8
  from reflex.constants import EventTriggers
9
9
  from reflex.event import EventHandler
10
- from reflex.ivars.base import ImmutableVar
11
- from reflex.vars import Var, VarData
10
+ from reflex.vars import VarData
11
+ from reflex.vars.base import Var
12
12
 
13
13
  DEFAULT_DEBOUNCE_TIMEOUT = 300
14
14
 
@@ -107,14 +107,14 @@ class DebounceInput(Component):
107
107
  props[field] = getattr(child, field)
108
108
  child_ref = child.get_ref()
109
109
  if props.get("input_ref") is None and child_ref:
110
- props["input_ref"] = ImmutableVar.create_safe(child_ref)
110
+ props["input_ref"] = Var(_js_expr=child_ref, _var_type=str)
111
111
  props["id"] = child.id
112
112
 
113
113
  # Set the child element to wrap, including any imports/hooks from the child.
114
114
  props.setdefault(
115
115
  "element",
116
- ImmutableVar(
117
- _var_name=str(child.alias or child.tag),
116
+ Var(
117
+ _js_expr=str(child.alias or child.tag),
118
118
  _var_type=Type[Component],
119
119
  _var_data=VarData(
120
120
  imports=child._get_imports(),
@@ -7,9 +7,8 @@ from typing import Any, Callable, Dict, Optional, Type, Union, overload
7
7
 
8
8
  from reflex.components.component import Component
9
9
  from reflex.event import EventHandler, EventSpec
10
- from reflex.ivars.base import ImmutableVar
11
10
  from reflex.style import Style
12
- from reflex.vars import Var
11
+ from reflex.vars.base import Var
13
12
 
14
13
  DEFAULT_DEBOUNCE_TIMEOUT = 300
15
14
 
@@ -23,62 +22,50 @@ class DebounceInput(Component):
23
22
  debounce_timeout: Optional[Union[Var[int], int]] = None,
24
23
  force_notify_by_enter: Optional[Union[Var[bool], bool]] = None,
25
24
  force_notify_on_blur: Optional[Union[Var[bool], bool]] = None,
26
- value: Optional[Union[Var[Union[float, int, str]], str, int, float]] = None,
25
+ value: Optional[Union[Var[Union[float, int, str]], float, int, str]] = None,
27
26
  input_ref: Optional[Union[Var[str], str]] = None,
28
- element: Optional[Union[Var[Type[Component]], Type[Component]]] = None,
27
+ element: Optional[Union[Type[Component], Var[Type[Component]]]] = None,
29
28
  style: Optional[Style] = None,
30
29
  key: Optional[Any] = None,
31
30
  id: Optional[Any] = None,
32
31
  class_name: Optional[Any] = None,
33
32
  autofocus: Optional[bool] = None,
34
- custom_attrs: Optional[Dict[str, Union[ImmutableVar, str]]] = None,
35
- on_blur: Optional[
36
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
37
- ] = None,
38
- on_change: Optional[
39
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
40
- ] = None,
41
- on_click: Optional[
42
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
43
- ] = None,
33
+ custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
34
+ on_blur: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
35
+ on_change: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
36
+ on_click: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
44
37
  on_context_menu: Optional[
45
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
38
+ Union[EventHandler, EventSpec, list, Callable, Var]
46
39
  ] = None,
47
40
  on_double_click: Optional[
48
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
49
- ] = None,
50
- on_focus: Optional[
51
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
52
- ] = None,
53
- on_mount: Optional[
54
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
41
+ Union[EventHandler, EventSpec, list, Callable, Var]
55
42
  ] = None,
43
+ on_focus: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
44
+ on_mount: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
56
45
  on_mouse_down: Optional[
57
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
46
+ Union[EventHandler, EventSpec, list, Callable, Var]
58
47
  ] = None,
59
48
  on_mouse_enter: Optional[
60
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
49
+ Union[EventHandler, EventSpec, list, Callable, Var]
61
50
  ] = None,
62
51
  on_mouse_leave: Optional[
63
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
52
+ Union[EventHandler, EventSpec, list, Callable, Var]
64
53
  ] = None,
65
54
  on_mouse_move: Optional[
66
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
55
+ Union[EventHandler, EventSpec, list, Callable, Var]
67
56
  ] = None,
68
57
  on_mouse_out: Optional[
69
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
58
+ Union[EventHandler, EventSpec, list, Callable, Var]
70
59
  ] = None,
71
60
  on_mouse_over: Optional[
72
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
61
+ Union[EventHandler, EventSpec, list, Callable, Var]
73
62
  ] = None,
74
63
  on_mouse_up: Optional[
75
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
76
- ] = None,
77
- on_scroll: Optional[
78
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
64
+ Union[EventHandler, EventSpec, list, Callable, Var]
79
65
  ] = None,
66
+ on_scroll: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
80
67
  on_unmount: Optional[
81
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
68
+ Union[EventHandler, EventSpec, list, Callable, Var]
82
69
  ] = None,
83
70
  **props,
84
71
  ) -> "DebounceInput":
@@ -9,9 +9,8 @@ from reflex.components.base.fragment import Fragment
9
9
  from reflex.components.component import Component
10
10
  from reflex.components.tags import IterTag
11
11
  from reflex.constants import MemoizationMode
12
- from reflex.ivars.base import ImmutableVar
13
12
  from reflex.state import ComponentState
14
- from reflex.vars import Var
13
+ from reflex.vars.base import LiteralVar, Var
15
14
 
16
15
 
17
16
  class ForeachVarError(TypeError):
@@ -52,7 +51,7 @@ class Foreach(Component):
52
51
  ForeachVarError: If the iterable is of type Any.
53
52
  TypeError: If the render function is a ComponentState.
54
53
  """
55
- iterable = ImmutableVar.create_safe(iterable)
54
+ iterable = LiteralVar.create(iterable)
56
55
  if iterable._var_type == Any:
57
56
  raise ForeachVarError(
58
57
  f"Could not foreach over var `{str(iterable)}` of type Any. "
@@ -130,7 +129,7 @@ class Foreach(Component):
130
129
  iterable_state=str(tag.iterable),
131
130
  arg_name=tag.arg_var_name,
132
131
  arg_index=tag.get_index_var_arg(),
133
- iterable_type=tag.iterable.upcast()._var_type.mro()[0].__name__,
132
+ iterable_type=tag.iterable._var_type.mro()[0].__name__,
134
133
  )
135
134
 
136
135
 
@@ -3,7 +3,7 @@
3
3
  from typing import Dict
4
4
 
5
5
  from reflex.components.el.elements.typography import Div
6
- from reflex.vars import Var
6
+ from reflex.vars.base import Var
7
7
 
8
8
 
9
9
  class Html(Div):
@@ -7,9 +7,8 @@ from typing import Any, Callable, Dict, Optional, Union, overload
7
7
 
8
8
  from reflex.components.el.elements.typography import Div
9
9
  from reflex.event import EventHandler, EventSpec
10
- from reflex.ivars.base import ImmutableVar
11
10
  from reflex.style import Style
12
- from reflex.vars import Var
11
+ from reflex.vars.base import Var
13
12
 
14
13
  class Html(Div):
15
14
  @overload
@@ -18,82 +17,72 @@ class Html(Div):
18
17
  cls,
19
18
  *children,
20
19
  dangerouslySetInnerHTML: Optional[
21
- Union[Var[Dict[str, str]], Dict[str, str]]
20
+ Union[Dict[str, str], Var[Dict[str, str]]]
22
21
  ] = None,
23
- access_key: Optional[Union[Var[Union[bool, int, str]], str, int, bool]] = None,
22
+ access_key: Optional[Union[Var[Union[bool, int, str]], bool, int, str]] = None,
24
23
  auto_capitalize: Optional[
25
- Union[Var[Union[bool, int, str]], str, int, bool]
24
+ Union[Var[Union[bool, int, str]], bool, int, str]
26
25
  ] = None,
27
26
  content_editable: Optional[
28
- Union[Var[Union[bool, int, str]], str, int, bool]
27
+ Union[Var[Union[bool, int, str]], bool, int, str]
29
28
  ] = None,
30
29
  context_menu: Optional[
31
- Union[Var[Union[bool, int, str]], str, int, bool]
30
+ Union[Var[Union[bool, int, str]], bool, int, str]
32
31
  ] = None,
33
- dir: Optional[Union[Var[Union[bool, int, str]], str, int, bool]] = None,
34
- draggable: Optional[Union[Var[Union[bool, int, str]], str, int, bool]] = None,
32
+ dir: Optional[Union[Var[Union[bool, int, str]], bool, int, str]] = None,
33
+ draggable: Optional[Union[Var[Union[bool, int, str]], bool, int, str]] = None,
35
34
  enter_key_hint: Optional[
36
- Union[Var[Union[bool, int, str]], str, int, bool]
37
- ] = None,
38
- hidden: Optional[Union[Var[Union[bool, int, str]], str, int, bool]] = None,
39
- input_mode: Optional[Union[Var[Union[bool, int, str]], str, int, bool]] = None,
40
- item_prop: Optional[Union[Var[Union[bool, int, str]], str, int, bool]] = None,
41
- lang: Optional[Union[Var[Union[bool, int, str]], str, int, bool]] = None,
42
- role: Optional[Union[Var[Union[bool, int, str]], str, int, bool]] = None,
43
- slot: Optional[Union[Var[Union[bool, int, str]], str, int, bool]] = None,
44
- spell_check: Optional[Union[Var[Union[bool, int, str]], str, int, bool]] = None,
45
- tab_index: Optional[Union[Var[Union[bool, int, str]], str, int, bool]] = None,
46
- title: Optional[Union[Var[Union[bool, int, str]], str, int, bool]] = None,
35
+ Union[Var[Union[bool, int, str]], bool, int, str]
36
+ ] = None,
37
+ hidden: Optional[Union[Var[Union[bool, int, str]], bool, int, str]] = None,
38
+ input_mode: Optional[Union[Var[Union[bool, int, str]], bool, int, str]] = None,
39
+ item_prop: Optional[Union[Var[Union[bool, int, str]], bool, int, str]] = None,
40
+ lang: Optional[Union[Var[Union[bool, int, str]], bool, int, str]] = None,
41
+ role: Optional[Union[Var[Union[bool, int, str]], bool, int, str]] = None,
42
+ slot: Optional[Union[Var[Union[bool, int, str]], bool, int, str]] = None,
43
+ spell_check: Optional[Union[Var[Union[bool, int, str]], bool, int, str]] = None,
44
+ tab_index: Optional[Union[Var[Union[bool, int, str]], bool, int, str]] = None,
45
+ title: Optional[Union[Var[Union[bool, int, str]], bool, int, str]] = None,
47
46
  style: Optional[Style] = None,
48
47
  key: Optional[Any] = None,
49
48
  id: Optional[Any] = None,
50
49
  class_name: Optional[Any] = None,
51
50
  autofocus: Optional[bool] = None,
52
- custom_attrs: Optional[Dict[str, Union[ImmutableVar, str]]] = None,
53
- on_blur: Optional[
54
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
55
- ] = None,
56
- on_click: Optional[
57
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
58
- ] = None,
51
+ custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
52
+ on_blur: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
53
+ on_click: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
59
54
  on_context_menu: Optional[
60
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
55
+ Union[EventHandler, EventSpec, list, Callable, Var]
61
56
  ] = None,
62
57
  on_double_click: Optional[
63
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
64
- ] = None,
65
- on_focus: Optional[
66
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
67
- ] = None,
68
- on_mount: Optional[
69
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
58
+ Union[EventHandler, EventSpec, list, Callable, Var]
70
59
  ] = None,
60
+ on_focus: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
61
+ on_mount: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
71
62
  on_mouse_down: Optional[
72
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
63
+ Union[EventHandler, EventSpec, list, Callable, Var]
73
64
  ] = None,
74
65
  on_mouse_enter: Optional[
75
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
66
+ Union[EventHandler, EventSpec, list, Callable, Var]
76
67
  ] = None,
77
68
  on_mouse_leave: Optional[
78
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
69
+ Union[EventHandler, EventSpec, list, Callable, Var]
79
70
  ] = None,
80
71
  on_mouse_move: Optional[
81
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
72
+ Union[EventHandler, EventSpec, list, Callable, Var]
82
73
  ] = None,
83
74
  on_mouse_out: Optional[
84
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
75
+ Union[EventHandler, EventSpec, list, Callable, Var]
85
76
  ] = None,
86
77
  on_mouse_over: Optional[
87
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
78
+ Union[EventHandler, EventSpec, list, Callable, Var]
88
79
  ] = None,
89
80
  on_mouse_up: Optional[
90
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
91
- ] = None,
92
- on_scroll: Optional[
93
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
81
+ Union[EventHandler, EventSpec, list, Callable, Var]
94
82
  ] = None,
83
+ on_scroll: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
95
84
  on_unmount: Optional[
96
- Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
85
+ Union[EventHandler, EventSpec, list, Callable, Var]
97
86
  ] = None,
98
87
  **props,
99
88
  ) -> "Html":
@@ -6,12 +6,12 @@ from typing import Any, Dict, List, Optional, Tuple, Union
6
6
  from reflex.components.base import Fragment
7
7
  from reflex.components.component import BaseComponent, Component, MemoizationLeaf
8
8
  from reflex.components.tags import MatchTag, Tag
9
- from reflex.ivars.base import ImmutableVar, LiteralVar
10
9
  from reflex.style import Style
11
10
  from reflex.utils import format, types
12
11
  from reflex.utils.exceptions import MatchTypeError
13
12
  from reflex.utils.imports import ImportDict
14
- from reflex.vars import Var, VarData
13
+ from reflex.vars import VarData
14
+ from reflex.vars.base import LiteralVar, Var
15
15
 
16
16
 
17
17
  class Match(MemoizationLeaf):
@@ -27,7 +27,7 @@ class Match(MemoizationLeaf):
27
27
  default: Any
28
28
 
29
29
  @classmethod
30
- def create(cls, cond: Any, *cases) -> Union[Component, ImmutableVar]:
30
+ def create(cls, cond: Any, *cases) -> Union[Component, Var]:
31
31
  """Create a Match Component.
32
32
 
33
33
  Args:
@@ -56,7 +56,7 @@ class Match(MemoizationLeaf):
56
56
  )
57
57
 
58
58
  @classmethod
59
- def _create_condition_var(cls, cond: Any) -> ImmutableVar:
59
+ def _create_condition_var(cls, cond: Any) -> Var:
60
60
  """Convert the condition to a Var.
61
61
 
62
62
  Args:
@@ -77,7 +77,7 @@ class Match(MemoizationLeaf):
77
77
  @classmethod
78
78
  def _process_cases(
79
79
  cls, cases: List
80
- ) -> Tuple[List, Optional[Union[ImmutableVar, BaseComponent]]]:
80
+ ) -> Tuple[List, Optional[Union[Var, BaseComponent]]]:
81
81
  """Process the list of match cases and the catchall default case.
82
82
 
83
83
  Args:
@@ -125,7 +125,7 @@ class Match(MemoizationLeaf):
125
125
  return case_element
126
126
 
127
127
  @classmethod
128
- def _process_match_cases(cls, cases: List) -> List[List[ImmutableVar]]:
128
+ def _process_match_cases(cls, cases: List) -> List[List[Var]]:
129
129
  """Process the individual match cases.
130
130
 
131
131
  Args:
@@ -157,7 +157,7 @@ class Match(MemoizationLeaf):
157
157
  if not isinstance(element, BaseComponent)
158
158
  else element
159
159
  )
160
- if not isinstance(el, (ImmutableVar, BaseComponent)):
160
+ if not isinstance(el, (Var, BaseComponent)):
161
161
  raise ValueError("Case element must be a var or component")
162
162
  case_list.append(el)
163
163
 
@@ -166,7 +166,7 @@ class Match(MemoizationLeaf):
166
166
  return match_cases
167
167
 
168
168
  @classmethod
169
- def _validate_return_types(cls, match_cases: List[List[ImmutableVar]]) -> None:
169
+ def _validate_return_types(cls, match_cases: List[List[Var]]) -> None:
170
170
  """Validate that match cases have the same return types.
171
171
 
172
172
  Args:
@@ -180,24 +180,24 @@ class Match(MemoizationLeaf):
180
180
 
181
181
  if types._isinstance(first_case_return, BaseComponent):
182
182
  return_type = BaseComponent
183
- elif types._isinstance(first_case_return, ImmutableVar):
184
- return_type = ImmutableVar
183
+ elif types._isinstance(first_case_return, Var):
184
+ return_type = Var
185
185
 
186
186
  for index, case in enumerate(match_cases):
187
187
  if not types._issubclass(type(case[-1]), return_type):
188
188
  raise MatchTypeError(
189
189
  f"Match cases should have the same return types. Case {index} with return "
190
- f"value `{case[-1]._var_name if isinstance(case[-1], ImmutableVar) else textwrap.shorten(str(case[-1]), width=250)}`"
190
+ f"value `{case[-1]._js_expr if isinstance(case[-1], Var) else textwrap.shorten(str(case[-1]), width=250)}`"
191
191
  f" of type {type(case[-1])!r} is not {return_type}"
192
192
  )
193
193
 
194
194
  @classmethod
195
195
  def _create_match_cond_var_or_component(
196
196
  cls,
197
- match_cond_var: ImmutableVar,
198
- match_cases: List[List[ImmutableVar]],
199
- default: Optional[Union[ImmutableVar, BaseComponent]],
200
- ) -> Union[Component, ImmutableVar]:
197
+ match_cond_var: Var,
198
+ match_cases: List[List[Var]],
199
+ default: Optional[Union[Var, BaseComponent]],
200
+ ) -> Union[Component, Var]:
201
201
  """Create and return the match condition var or component.
202
202
 
203
203
  Args:
@@ -232,8 +232,8 @@ class Match(MemoizationLeaf):
232
232
  ) or not types._isinstance(default, Var):
233
233
  raise ValueError("Return types of match cases should be Vars.")
234
234
 
235
- return ImmutableVar(
236
- _var_name=format.format_match(
235
+ return Var(
236
+ _js_expr=format.format_match(
237
237
  cond=str(match_cond_var),
238
238
  match_cases=match_cases,
239
239
  default=default, # type: ignore
@@ -19,10 +19,10 @@ from reflex.event import (
19
19
  call_script,
20
20
  parse_args_spec,
21
21
  )
22
- from reflex.ivars.base import ImmutableCallableVar, ImmutableVar, LiteralVar
23
- from reflex.ivars.sequence import LiteralStringVar
24
22
  from reflex.utils.imports import ImportVar
25
- from reflex.vars import Var, VarData
23
+ from reflex.vars import VarData
24
+ from reflex.vars.base import CallableVar, LiteralVar, Var
25
+ from reflex.vars.sequence import LiteralStringVar
26
26
 
27
27
  DEFAULT_UPLOAD_ID: str = "default"
28
28
 
@@ -37,8 +37,8 @@ upload_files_context_var_data: VarData = VarData(
37
37
  )
38
38
 
39
39
 
40
- @ImmutableCallableVar
41
- def upload_file(id_: str = DEFAULT_UPLOAD_ID) -> ImmutableVar:
40
+ @CallableVar
41
+ def upload_file(id_: str = DEFAULT_UPLOAD_ID) -> Var:
42
42
  """Get the file upload drop trigger.
43
43
 
44
44
  This var is passed to the dropzone component to update the file list when a
@@ -58,8 +58,8 @@ def upload_file(id_: str = DEFAULT_UPLOAD_ID) -> ImmutableVar:
58
58
  }})
59
59
  """
60
60
 
61
- return ImmutableVar(
62
- _var_name=var_name,
61
+ return Var(
62
+ _js_expr=var_name,
63
63
  _var_type=EventChain,
64
64
  _var_data=VarData.merge(
65
65
  upload_files_context_var_data, id_var._get_all_var_data()
@@ -67,8 +67,8 @@ def upload_file(id_: str = DEFAULT_UPLOAD_ID) -> ImmutableVar:
67
67
  )
68
68
 
69
69
 
70
- @ImmutableCallableVar
71
- def selected_files(id_: str = DEFAULT_UPLOAD_ID) -> ImmutableVar:
70
+ @CallableVar
71
+ def selected_files(id_: str = DEFAULT_UPLOAD_ID) -> Var:
72
72
  """Get the list of selected files.
73
73
 
74
74
  Args:
@@ -78,8 +78,8 @@ def selected_files(id_: str = DEFAULT_UPLOAD_ID) -> ImmutableVar:
78
78
  A var referencing the list of selected file paths.
79
79
  """
80
80
  id_var = LiteralStringVar.create(id_)
81
- return ImmutableVar(
82
- _var_name=f"(filesById[{str(id_var)}] ? filesById[{str(id_var)}].map((f) => (f.path || f.name)) : [])",
81
+ return Var(
82
+ _js_expr=f"(filesById[{str(id_var)}] ? filesById[{str(id_var)}].map((f) => (f.path || f.name)) : [])",
83
83
  _var_type=List[str],
84
84
  _var_data=VarData.merge(
85
85
  upload_files_context_var_data, id_var._get_all_var_data()
@@ -132,8 +132,8 @@ def get_upload_dir() -> Path:
132
132
  return uploaded_files_dir
133
133
 
134
134
 
135
- uploaded_files_url_prefix = ImmutableVar(
136
- _var_name="getBackendURL(env.UPLOAD)",
135
+ uploaded_files_url_prefix = Var(
136
+ _js_expr="getBackendURL(env.UPLOAD)",
137
137
  _var_data=VarData(
138
138
  imports={
139
139
  f"/{Dirs.STATE_PATH}": "getBackendURL",
@@ -247,9 +247,7 @@ class Upload(MemoizationLeaf):
247
247
  }
248
248
  # The file input to use.
249
249
  upload = Input.create(type="file")
250
- upload.special_props = {
251
- ImmutableVar(_var_name="{...getInputProps()}", _var_type=None)
252
- }
250
+ upload.special_props = [Var(_js_expr="{...getInputProps()}", _var_type=None)]
253
251
 
254
252
  # The dropzone to use.
255
253
  zone = Box.create(
@@ -257,9 +255,7 @@ class Upload(MemoizationLeaf):
257
255
  *children,
258
256
  **{k: v for k, v in props.items() if k not in supported_props},
259
257
  )
260
- zone.special_props = {
261
- ImmutableVar(_var_name="{...getRootProps()}", _var_type=None)
262
- }
258
+ zone.special_props = [Var(_js_expr="{...getRootProps()}", _var_type=None)]
263
259
 
264
260
  # Create the component.
265
261
  upload_props["id"] = props.get("id", DEFAULT_UPLOAD_ID)
@@ -287,9 +283,7 @@ class Upload(MemoizationLeaf):
287
283
  )
288
284
 
289
285
  @classmethod
290
- def _update_arg_tuple_for_on_drop(
291
- cls, arg_value: tuple[ImmutableVar, ImmutableVar]
292
- ):
286
+ def _update_arg_tuple_for_on_drop(cls, arg_value: tuple[Var, Var]):
293
287
  """Helper to update caller-provided EventSpec args for direct use with on_drop.
294
288
 
295
289
  Args:
@@ -298,7 +292,7 @@ class Upload(MemoizationLeaf):
298
292
  Returns:
299
293
  The updated arg_value tuple when arg is "files", otherwise the original arg_value.
300
294
  """
301
- if arg_value[0]._var_name == "files":
295
+ if arg_value[0]._js_expr == "files":
302
296
  placeholder = parse_args_spec(_on_drop_spec)[0]
303
297
  return (arg_value[0], placeholder)
304
298
  return arg_value