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