reflex 0.6.0__py3-none-any.whl → 0.6.0a1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of reflex might be problematic. Click here for more details.

Files changed (253) hide show
  1. reflex/.templates/jinja/custom_components/pyproject.toml.jinja2 +2 -2
  2. reflex/.templates/jinja/web/pages/_app.js.jinja2 +1 -1
  3. reflex/.templates/jinja/web/pages/utils.js.jinja2 +2 -2
  4. reflex/.templates/web/components/reflex/chakra_color_mode_provider.js +36 -0
  5. reflex/.templates/web/utils/state.js +1 -3
  6. reflex/__init__.py +2 -8
  7. reflex/__init__.pyi +1 -2
  8. reflex/app.py +2 -4
  9. reflex/app_module_for_backend.py +1 -1
  10. reflex/base.py +1 -1
  11. reflex/compiler/compiler.py +2 -2
  12. reflex/compiler/utils.py +3 -3
  13. reflex/components/base/app_wrap.py +2 -2
  14. reflex/components/base/app_wrap.pyi +27 -17
  15. reflex/components/base/bare.py +5 -4
  16. reflex/components/base/body.pyi +27 -17
  17. reflex/components/base/document.pyi +131 -81
  18. reflex/components/base/error_boundary.py +7 -6
  19. reflex/components/base/error_boundary.pyi +33 -20
  20. reflex/components/base/fragment.pyi +27 -17
  21. reflex/components/base/head.pyi +53 -33
  22. reflex/components/base/link.py +1 -1
  23. reflex/components/base/link.pyi +54 -33
  24. reflex/components/base/meta.pyi +105 -65
  25. reflex/components/base/script.py +2 -1
  26. reflex/components/base/script.pyi +38 -21
  27. reflex/components/component.py +47 -53
  28. reflex/components/core/banner.py +27 -23
  29. reflex/components/core/banner.pyi +171 -134
  30. reflex/components/core/client_side_routing.py +3 -2
  31. reflex/components/core/client_side_routing.pyi +54 -33
  32. reflex/components/core/clipboard.py +1 -2
  33. reflex/components/core/clipboard.pyi +33 -20
  34. reflex/components/core/cond.py +5 -5
  35. reflex/components/core/debounce.py +5 -5
  36. reflex/components/core/debounce.pyi +33 -20
  37. reflex/components/core/foreach.py +4 -3
  38. reflex/components/core/html.py +1 -1
  39. reflex/components/core/html.pyi +46 -35
  40. reflex/components/core/match.py +17 -17
  41. reflex/components/core/upload.py +23 -17
  42. reflex/components/core/upload.pyi +124 -78
  43. reflex/components/datadisplay/code.py +10 -9
  44. reflex/components/datadisplay/code.pyi +409 -299
  45. reflex/components/datadisplay/dataeditor.py +10 -8
  46. reflex/components/datadisplay/dataeditor.pyi +53 -40
  47. reflex/components/el/element.pyi +27 -17
  48. reflex/components/el/elements/base.py +1 -1
  49. reflex/components/el/elements/base.pyi +45 -34
  50. reflex/components/el/elements/forms.py +16 -16
  51. reflex/components/el/elements/forms.pyi +707 -554
  52. reflex/components/el/elements/inline.py +1 -1
  53. reflex/components/el/elements/inline.pyi +1218 -937
  54. reflex/components/el/elements/media.py +1 -1
  55. reflex/components/el/elements/media.pyi +997 -786
  56. reflex/components/el/elements/metadata.py +6 -3
  57. reflex/components/el/elements/metadata.pyi +242 -181
  58. reflex/components/el/elements/other.py +1 -1
  59. reflex/components/el/elements/other.pyi +306 -235
  60. reflex/components/el/elements/scripts.py +1 -1
  61. reflex/components/el/elements/scripts.pyi +140 -109
  62. reflex/components/el/elements/sectioning.py +2 -0
  63. reflex/components/el/elements/sectioning.pyi +647 -496
  64. reflex/components/el/elements/tables.py +1 -1
  65. reflex/components/el/elements/tables.pyi +452 -351
  66. reflex/components/el/elements/typography.py +1 -1
  67. reflex/components/el/elements/typography.pyi +657 -506
  68. reflex/components/gridjs/datatable.py +9 -6
  69. reflex/components/gridjs/datatable.pyi +56 -35
  70. reflex/components/lucide/icon.py +1 -1
  71. reflex/components/lucide/icon.pyi +54 -33
  72. reflex/components/markdown/markdown.py +31 -26
  73. reflex/components/markdown/markdown.pyi +37 -27
  74. reflex/components/moment/moment.py +12 -13
  75. reflex/components/moment/moment.pyi +35 -23
  76. reflex/components/next/base.pyi +27 -17
  77. reflex/components/next/image.py +1 -1
  78. reflex/components/next/image.pyi +37 -22
  79. reflex/components/next/link.py +1 -1
  80. reflex/components/next/link.pyi +28 -17
  81. reflex/components/next/video.py +1 -1
  82. reflex/components/next/video.pyi +28 -17
  83. reflex/components/plotly/plotly.py +13 -12
  84. reflex/components/plotly/plotly.pyi +54 -39
  85. reflex/components/props.py +1 -1
  86. reflex/components/radix/__init__.pyi +0 -1
  87. reflex/components/radix/primitives/__init__.pyi +0 -1
  88. reflex/components/radix/primitives/accordion.py +4 -4
  89. reflex/components/radix/primitives/accordion.pyi +495 -424
  90. reflex/components/radix/primitives/base.py +1 -1
  91. reflex/components/radix/primitives/base.pyi +54 -33
  92. reflex/components/radix/primitives/drawer.py +1 -1
  93. reflex/components/radix/primitives/drawer.pyi +273 -172
  94. reflex/components/radix/primitives/form.py +1 -1
  95. reflex/components/radix/primitives/form.pyi +364 -257
  96. reflex/components/radix/primitives/progress.py +1 -1
  97. reflex/components/radix/primitives/progress.pyi +282 -231
  98. reflex/components/radix/primitives/slider.py +1 -1
  99. reflex/components/radix/primitives/slider.pyi +138 -87
  100. reflex/components/radix/themes/base.py +24 -3
  101. reflex/components/radix/themes/base.pyi +250 -178
  102. reflex/components/radix/themes/color_mode.py +5 -5
  103. reflex/components/radix/themes/color_mode.pyi +220 -187
  104. reflex/components/radix/themes/components/alert_dialog.py +1 -1
  105. reflex/components/radix/themes/components/alert_dialog.pyi +207 -136
  106. reflex/components/radix/themes/components/aspect_ratio.py +1 -1
  107. reflex/components/radix/themes/components/aspect_ratio.pyi +28 -17
  108. reflex/components/radix/themes/components/avatar.py +1 -1
  109. reflex/components/radix/themes/components/avatar.pyi +81 -70
  110. reflex/components/radix/themes/components/badge.py +1 -1
  111. reflex/components/radix/themes/components/badge.pyi +99 -88
  112. reflex/components/radix/themes/components/button.py +1 -1
  113. reflex/components/radix/themes/components/button.pyi +109 -98
  114. reflex/components/radix/themes/components/callout.py +1 -1
  115. reflex/components/radix/themes/components/callout.pyi +373 -322
  116. reflex/components/radix/themes/components/card.py +1 -1
  117. reflex/components/radix/themes/components/card.pyi +49 -38
  118. reflex/components/radix/themes/components/checkbox.py +2 -1
  119. reflex/components/radix/themes/components/checkbox.pyi +245 -208
  120. reflex/components/radix/themes/components/checkbox_cards.py +1 -1
  121. reflex/components/radix/themes/components/checkbox_cards.pyi +115 -94
  122. reflex/components/radix/themes/components/checkbox_group.py +1 -1
  123. reflex/components/radix/themes/components/checkbox_group.pyi +107 -86
  124. reflex/components/radix/themes/components/context_menu.py +1 -1
  125. reflex/components/radix/themes/components/context_menu.pyi +319 -238
  126. reflex/components/radix/themes/components/data_list.py +1 -1
  127. reflex/components/radix/themes/components/data_list.pyi +171 -130
  128. reflex/components/radix/themes/components/dialog.py +1 -1
  129. reflex/components/radix/themes/components/dialog.pyi +210 -139
  130. reflex/components/radix/themes/components/dropdown_menu.py +1 -1
  131. reflex/components/radix/themes/components/dropdown_menu.pyi +332 -249
  132. reflex/components/radix/themes/components/hover_card.py +1 -1
  133. reflex/components/radix/themes/components/hover_card.pyi +131 -90
  134. reflex/components/radix/themes/components/icon_button.py +3 -2
  135. reflex/components/radix/themes/components/icon_button.pyi +109 -98
  136. reflex/components/radix/themes/components/inset.py +1 -1
  137. reflex/components/radix/themes/components/inset.pyi +58 -47
  138. reflex/components/radix/themes/components/popover.py +1 -1
  139. reflex/components/radix/themes/components/popover.pyi +136 -95
  140. reflex/components/radix/themes/components/progress.py +1 -1
  141. reflex/components/radix/themes/components/progress.pyi +82 -71
  142. reflex/components/radix/themes/components/radio.py +1 -1
  143. reflex/components/radix/themes/components/radio.pyi +80 -69
  144. reflex/components/radix/themes/components/radio_cards.py +1 -1
  145. reflex/components/radix/themes/components/radio_cards.pyi +119 -98
  146. reflex/components/radix/themes/components/radio_group.py +11 -8
  147. reflex/components/radix/themes/components/radio_group.pyi +271 -228
  148. reflex/components/radix/themes/components/scroll_area.py +1 -1
  149. reflex/components/radix/themes/components/scroll_area.pyi +32 -21
  150. reflex/components/radix/themes/components/segmented_control.py +1 -1
  151. reflex/components/radix/themes/components/segmented_control.pyi +113 -90
  152. reflex/components/radix/themes/components/select.py +3 -2
  153. reflex/components/radix/themes/components/select.pyi +471 -374
  154. reflex/components/radix/themes/components/separator.py +2 -1
  155. reflex/components/radix/themes/components/separator.pyi +80 -69
  156. reflex/components/radix/themes/components/skeleton.py +1 -1
  157. reflex/components/radix/themes/components/skeleton.pyi +34 -23
  158. reflex/components/radix/themes/components/slider.py +3 -2
  159. reflex/components/radix/themes/components/slider.pyi +88 -75
  160. reflex/components/radix/themes/components/spinner.py +1 -1
  161. reflex/components/radix/themes/components/spinner.pyi +30 -19
  162. reflex/components/radix/themes/components/switch.py +1 -1
  163. reflex/components/radix/themes/components/switch.pyi +84 -71
  164. reflex/components/radix/themes/components/table.py +1 -1
  165. reflex/components/radix/themes/components/table.pyi +332 -261
  166. reflex/components/radix/themes/components/tabs.py +1 -1
  167. reflex/components/radix/themes/components/tabs.pyi +194 -139
  168. reflex/components/radix/themes/components/text_area.py +1 -1
  169. reflex/components/radix/themes/components/text_area.pyi +111 -96
  170. reflex/components/radix/themes/components/text_field.py +1 -1
  171. reflex/components/radix/themes/components/text_field.pyi +286 -247
  172. reflex/components/radix/themes/components/tooltip.py +1 -1
  173. reflex/components/radix/themes/components/tooltip.pyi +37 -26
  174. reflex/components/radix/themes/layout/__init__.pyi +0 -1
  175. reflex/components/radix/themes/layout/base.py +1 -1
  176. reflex/components/radix/themes/layout/base.pyi +67 -56
  177. reflex/components/radix/themes/layout/box.pyi +45 -34
  178. reflex/components/radix/themes/layout/center.pyi +67 -56
  179. reflex/components/radix/themes/layout/container.py +2 -1
  180. reflex/components/radix/themes/layout/container.pyi +47 -36
  181. reflex/components/radix/themes/layout/flex.py +1 -1
  182. reflex/components/radix/themes/layout/flex.pyi +67 -56
  183. reflex/components/radix/themes/layout/grid.py +1 -1
  184. reflex/components/radix/themes/layout/grid.pyi +75 -64
  185. reflex/components/radix/themes/layout/list.py +6 -5
  186. reflex/components/radix/themes/layout/list.pyi +244 -193
  187. reflex/components/radix/themes/layout/section.py +2 -1
  188. reflex/components/radix/themes/layout/section.pyi +47 -36
  189. reflex/components/radix/themes/layout/spacer.pyi +67 -56
  190. reflex/components/radix/themes/layout/stack.py +1 -1
  191. reflex/components/radix/themes/layout/stack.pyi +159 -128
  192. reflex/components/radix/themes/typography/blockquote.py +1 -1
  193. reflex/components/radix/themes/typography/blockquote.pyi +100 -89
  194. reflex/components/radix/themes/typography/code.py +1 -1
  195. reflex/components/radix/themes/typography/code.pyi +101 -90
  196. reflex/components/radix/themes/typography/heading.py +1 -1
  197. reflex/components/radix/themes/typography/heading.pyi +107 -96
  198. reflex/components/radix/themes/typography/link.py +1 -1
  199. reflex/components/radix/themes/typography/link.pyi +113 -102
  200. reflex/components/radix/themes/typography/text.py +1 -1
  201. reflex/components/radix/themes/typography/text.pyi +572 -501
  202. reflex/components/react_player/audio.pyi +60 -33
  203. reflex/components/react_player/react_player.py +1 -1
  204. reflex/components/react_player/react_player.pyi +60 -33
  205. reflex/components/react_player/video.pyi +60 -33
  206. reflex/components/recharts/cartesian.py +3 -2
  207. reflex/components/recharts/cartesian.pyi +861 -678
  208. reflex/components/recharts/charts.py +5 -4
  209. reflex/components/recharts/charts.pyi +357 -252
  210. reflex/components/recharts/general.py +2 -1
  211. reflex/components/recharts/general.pyi +231 -180
  212. reflex/components/recharts/polar.py +5 -4
  213. reflex/components/recharts/polar.pyi +181 -144
  214. reflex/components/recharts/recharts.pyi +53 -33
  215. reflex/components/sonner/toast.py +17 -16
  216. reflex/components/sonner/toast.pyi +47 -36
  217. reflex/components/suneditor/editor.py +3 -2
  218. reflex/components/suneditor/editor.pyi +78 -55
  219. reflex/components/tags/cond_tag.py +4 -6
  220. reflex/components/tags/iter_tag.py +16 -28
  221. reflex/components/tags/match_tag.py +4 -6
  222. reflex/components/tags/tag.py +23 -40
  223. reflex/custom_components/custom_components.py +1 -3
  224. reflex/event.py +65 -113
  225. reflex/experimental/client_state.py +24 -25
  226. reflex/experimental/hooks.py +16 -16
  227. reflex/experimental/layout.py +5 -5
  228. reflex/experimental/layout.pyi +187 -136
  229. reflex/{vars → ivars}/__init__.py +2 -6
  230. reflex/{vars → ivars}/base.py +216 -599
  231. reflex/{vars → ivars}/function.py +19 -15
  232. reflex/{vars → ivars}/number.py +20 -41
  233. reflex/{vars → ivars}/object.py +30 -28
  234. reflex/{vars → ivars}/sequence.py +50 -53
  235. reflex/middleware/hydrate_middleware.py +0 -2
  236. reflex/middleware/middleware.py +3 -3
  237. reflex/state.py +82 -148
  238. reflex/style.py +22 -21
  239. reflex/utils/exceptions.py +0 -20
  240. reflex/utils/format.py +34 -54
  241. reflex/utils/imports.py +73 -16
  242. reflex/utils/prerequisites.py +15 -35
  243. reflex/utils/pyi_generator.py +8 -13
  244. reflex/utils/serializers.py +22 -12
  245. reflex/utils/telemetry.py +2 -3
  246. reflex/utils/types.py +5 -10
  247. reflex/vars.py +501 -0
  248. {reflex-0.6.0.dist-info → reflex-0.6.0a1.dist-info}/METADATA +5 -4
  249. reflex-0.6.0a1.dist-info/RECORD +384 -0
  250. reflex-0.6.0.dist-info/RECORD +0 -382
  251. {reflex-0.6.0.dist-info → reflex-0.6.0a1.dist-info}/LICENSE +0 -0
  252. {reflex-0.6.0.dist-info → reflex-0.6.0a1.dist-info}/WHEEL +0 -0
  253. {reflex-0.6.0.dist-info → reflex-0.6.0a1.dist-info}/entry_points.txt +0 -0
@@ -9,12 +9,12 @@ from reflex.base import Base
9
9
  from reflex.components.component import Component, NoSSRComponent
10
10
  from reflex.components.literals import LiteralRowMarker
11
11
  from reflex.event import EventHandler
12
+ from reflex.ivars.base import ImmutableVar
13
+ from reflex.ivars.sequence import ArrayVar
12
14
  from reflex.utils import console, format, types
13
15
  from reflex.utils.imports import ImportDict, ImportVar
14
16
  from reflex.utils.serializers import serializer
15
- from reflex.vars import get_unique_variable_name
16
- from reflex.vars.base import Var
17
- from reflex.vars.sequence import ArrayVar
17
+ from reflex.vars import Var, get_unique_variable_name
18
18
 
19
19
 
20
20
  # TODO: Fix the serialization issue for custom types.
@@ -295,7 +295,7 @@ class DataEditor(NoSSRComponent):
295
295
 
296
296
  # Define the name of the getData callback associated with this component and assign to get_cell_content.
297
297
  data_callback = f"getData_{editor_id}"
298
- self.get_cell_content = Var(_js_expr=data_callback) # type: ignore
298
+ self.get_cell_content = ImmutableVar.create(data_callback) # type: ignore
299
299
 
300
300
  code = [f"function {data_callback}([col, row])" "{"]
301
301
 
@@ -333,16 +333,18 @@ class DataEditor(NoSSRComponent):
333
333
 
334
334
  # If rows is not provided, determine from data.
335
335
  if rows is None:
336
- if isinstance(data, Var) and not isinstance(data, ArrayVar):
336
+ if isinstance(data, ImmutableVar) and not isinstance(data, ArrayVar):
337
337
  raise ValueError(
338
338
  "DataEditor data must be an ArrayVar if rows is not provided."
339
339
  )
340
- props["rows"] = data.length() if isinstance(data, Var) else len(data)
340
+ props["rows"] = (
341
+ data.length() if isinstance(data, ImmutableVar) else len(data)
342
+ )
341
343
 
342
- if not isinstance(columns, Var) and len(columns):
344
+ if not isinstance(columns, ImmutableVar) and len(columns):
343
345
  if (
344
346
  types.is_dataframe(type(data))
345
- or isinstance(data, Var)
347
+ or isinstance(data, ImmutableVar)
346
348
  and types.is_dataframe(data._var_type)
347
349
  ):
348
350
  raise ValueError(
@@ -9,10 +9,11 @@ from typing import Any, Callable, Dict, List, Literal, Optional, Union, overload
9
9
  from reflex.base import Base
10
10
  from reflex.components.component import NoSSRComponent
11
11
  from reflex.event import EventHandler, EventSpec
12
+ from reflex.ivars.base import ImmutableVar
12
13
  from reflex.style import Style
13
14
  from reflex.utils.imports import ImportDict
14
15
  from reflex.utils.serializers import serializer
15
- from reflex.vars.base import Var
16
+ from reflex.vars import Var
16
17
 
17
18
  class GridColumnIcons(Enum):
18
19
  Array = "array"
@@ -88,9 +89,9 @@ class DataEditor(NoSSRComponent):
88
89
  *children,
89
90
  rows: Optional[Union[Var[int], int]] = None,
90
91
  columns: Optional[
91
- Union[List[Dict[str, Any]], Var[List[Dict[str, Any]]]]
92
+ Union[Var[List[Dict[str, Any]]], List[Dict[str, Any]]]
92
93
  ] = None,
93
- data: Optional[Union[List[List[Any]], Var[List[List[Any]]]]] = None,
94
+ data: Optional[Union[Var[List[List[Any]]], List[List[Any]]]] = None,
94
95
  get_cell_content: Optional[Union[Var[str], str]] = None,
95
96
  get_cell_for_selection: Optional[Union[Var[bool], bool]] = None,
96
97
  on_paste: Optional[Union[Var[bool], bool]] = None,
@@ -106,8 +107,8 @@ class DataEditor(NoSSRComponent):
106
107
  row_height: Optional[Union[Var[int], int]] = None,
107
108
  row_markers: Optional[
108
109
  Union[
109
- Literal["both", "checkbox", "clickable-number", "none", "number"],
110
- Var[Literal["both", "checkbox", "clickable-number", "none", "number"]],
110
+ Var[Literal["none", "number", "checkbox", "both", "clickable-number"]],
111
+ Literal["none", "number", "checkbox", "both", "clickable-number"],
111
112
  ]
112
113
  ] = None,
113
114
  row_marker_start_index: Optional[Union[Var[int], int]] = None,
@@ -117,8 +118,8 @@ class DataEditor(NoSSRComponent):
117
118
  vertical_border: Optional[Union[Var[bool], bool]] = None,
118
119
  column_select: Optional[
119
120
  Union[
120
- Literal["multi", "none", "single"],
121
- Var[Literal["multi", "none", "single"]],
121
+ Var[Literal["none", "single", "multi"]],
122
+ Literal["none", "single", "multi"],
122
123
  ]
123
124
  ] = None,
124
125
  prevent_diagonal_scrolling: Optional[Union[Var[bool], bool]] = None,
@@ -127,94 +128,106 @@ class DataEditor(NoSSRComponent):
127
128
  scroll_offset_x: Optional[Union[Var[int], int]] = None,
128
129
  scroll_offset_y: Optional[Union[Var[int], int]] = None,
129
130
  theme: Optional[
130
- Union[DataEditorTheme, Dict, Var[Union[DataEditorTheme, Dict]]]
131
+ Union[Var[Union[DataEditorTheme, Dict]], DataEditorTheme, Dict]
131
132
  ] = None,
132
133
  style: Optional[Style] = None,
133
134
  key: Optional[Any] = None,
134
135
  id: Optional[Any] = None,
135
136
  class_name: Optional[Any] = None,
136
137
  autofocus: Optional[bool] = None,
137
- custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
138
- on_blur: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
138
+ custom_attrs: Optional[Dict[str, Union[ImmutableVar, str]]] = None,
139
+ on_blur: Optional[
140
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
141
+ ] = None,
139
142
  on_cell_activated: Optional[
140
- Union[EventHandler, EventSpec, list, Callable, Var]
143
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
141
144
  ] = None,
142
145
  on_cell_clicked: Optional[
143
- Union[EventHandler, EventSpec, list, Callable, Var]
146
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
144
147
  ] = None,
145
148
  on_cell_context_menu: Optional[
146
- Union[EventHandler, EventSpec, list, Callable, Var]
149
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
147
150
  ] = None,
148
151
  on_cell_edited: Optional[
149
- Union[EventHandler, EventSpec, list, Callable, Var]
152
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
153
+ ] = None,
154
+ on_click: Optional[
155
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
150
156
  ] = None,
151
- on_click: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
152
157
  on_column_resize: Optional[
153
- Union[EventHandler, EventSpec, list, Callable, Var]
158
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
154
159
  ] = None,
155
160
  on_context_menu: Optional[
156
- Union[EventHandler, EventSpec, list, Callable, Var]
161
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
162
+ ] = None,
163
+ on_delete: Optional[
164
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
157
165
  ] = None,
158
- on_delete: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
159
166
  on_double_click: Optional[
160
- Union[EventHandler, EventSpec, list, Callable, Var]
167
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
161
168
  ] = None,
162
169
  on_finished_editing: Optional[
163
- Union[EventHandler, EventSpec, list, Callable, Var]
170
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
171
+ ] = None,
172
+ on_focus: Optional[
173
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
164
174
  ] = None,
165
- on_focus: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
166
175
  on_group_header_clicked: Optional[
167
- Union[EventHandler, EventSpec, list, Callable, Var]
176
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
168
177
  ] = None,
169
178
  on_group_header_context_menu: Optional[
170
- Union[EventHandler, EventSpec, list, Callable, Var]
179
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
171
180
  ] = None,
172
181
  on_group_header_renamed: Optional[
173
- Union[EventHandler, EventSpec, list, Callable, Var]
182
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
174
183
  ] = None,
175
184
  on_header_clicked: Optional[
176
- Union[EventHandler, EventSpec, list, Callable, Var]
185
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
177
186
  ] = None,
178
187
  on_header_context_menu: Optional[
179
- Union[EventHandler, EventSpec, list, Callable, Var]
188
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
180
189
  ] = None,
181
190
  on_header_menu_click: Optional[
182
- Union[EventHandler, EventSpec, list, Callable, Var]
191
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
183
192
  ] = None,
184
193
  on_item_hovered: Optional[
185
- Union[EventHandler, EventSpec, list, Callable, Var]
194
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
195
+ ] = None,
196
+ on_mount: Optional[
197
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
186
198
  ] = None,
187
- on_mount: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
188
199
  on_mouse_down: Optional[
189
- Union[EventHandler, EventSpec, list, Callable, Var]
200
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
190
201
  ] = None,
191
202
  on_mouse_enter: Optional[
192
- Union[EventHandler, EventSpec, list, Callable, Var]
203
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
193
204
  ] = None,
194
205
  on_mouse_leave: Optional[
195
- Union[EventHandler, EventSpec, list, Callable, Var]
206
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
196
207
  ] = None,
197
208
  on_mouse_move: Optional[
198
- Union[EventHandler, EventSpec, list, Callable, Var]
209
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
199
210
  ] = None,
200
211
  on_mouse_out: Optional[
201
- Union[EventHandler, EventSpec, list, Callable, Var]
212
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
202
213
  ] = None,
203
214
  on_mouse_over: Optional[
204
- Union[EventHandler, EventSpec, list, Callable, Var]
215
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
205
216
  ] = None,
206
217
  on_mouse_up: Optional[
207
- Union[EventHandler, EventSpec, list, Callable, Var]
218
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
208
219
  ] = None,
209
220
  on_row_appended: Optional[
210
- Union[EventHandler, EventSpec, list, Callable, Var]
221
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
222
+ ] = None,
223
+ on_scroll: Optional[
224
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
211
225
  ] = None,
212
- on_scroll: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
213
226
  on_selection_cleared: Optional[
214
- Union[EventHandler, EventSpec, list, Callable, Var]
227
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
215
228
  ] = None,
216
229
  on_unmount: Optional[
217
- Union[EventHandler, EventSpec, list, Callable, Var]
230
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
218
231
  ] = None,
219
232
  **props,
220
233
  ) -> "DataEditor":
@@ -7,8 +7,8 @@ from typing import Any, Callable, Dict, Optional, 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
10
11
  from reflex.style import Style
11
- from reflex.vars.base import Var
12
12
 
13
13
  class Element(Component):
14
14
  @overload
@@ -21,41 +21,51 @@ class Element(Component):
21
21
  id: Optional[Any] = None,
22
22
  class_name: Optional[Any] = None,
23
23
  autofocus: Optional[bool] = None,
24
- custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
25
- on_blur: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
26
- on_click: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
24
+ custom_attrs: Optional[Dict[str, Union[ImmutableVar, str]]] = None,
25
+ on_blur: Optional[
26
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
27
+ ] = None,
28
+ on_click: Optional[
29
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
30
+ ] = None,
27
31
  on_context_menu: Optional[
28
- Union[EventHandler, EventSpec, list, Callable, Var]
32
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
29
33
  ] = None,
30
34
  on_double_click: Optional[
31
- Union[EventHandler, EventSpec, list, Callable, Var]
35
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
36
+ ] = None,
37
+ on_focus: Optional[
38
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
39
+ ] = None,
40
+ on_mount: Optional[
41
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
32
42
  ] = None,
33
- on_focus: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
34
- on_mount: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
35
43
  on_mouse_down: Optional[
36
- Union[EventHandler, EventSpec, list, Callable, Var]
44
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
37
45
  ] = None,
38
46
  on_mouse_enter: Optional[
39
- Union[EventHandler, EventSpec, list, Callable, Var]
47
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
40
48
  ] = None,
41
49
  on_mouse_leave: Optional[
42
- Union[EventHandler, EventSpec, list, Callable, Var]
50
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
43
51
  ] = None,
44
52
  on_mouse_move: Optional[
45
- Union[EventHandler, EventSpec, list, Callable, Var]
53
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
46
54
  ] = None,
47
55
  on_mouse_out: Optional[
48
- Union[EventHandler, EventSpec, list, Callable, Var]
56
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
49
57
  ] = None,
50
58
  on_mouse_over: Optional[
51
- Union[EventHandler, EventSpec, list, Callable, Var]
59
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
52
60
  ] = None,
53
61
  on_mouse_up: Optional[
54
- Union[EventHandler, EventSpec, list, Callable, Var]
62
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
63
+ ] = None,
64
+ on_scroll: Optional[
65
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
55
66
  ] = None,
56
- on_scroll: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
57
67
  on_unmount: Optional[
58
- Union[EventHandler, EventSpec, list, Callable, Var]
68
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
59
69
  ] = None,
60
70
  **props,
61
71
  ) -> "Element":
@@ -3,7 +3,7 @@
3
3
  from typing import Union
4
4
 
5
5
  from reflex.components.el.element import Element
6
- from reflex.vars.base import Var
6
+ from reflex.vars import Var as Var
7
7
 
8
8
 
9
9
  class BaseHTML(Element):
@@ -7,8 +7,9 @@ from typing import Any, Callable, Dict, Optional, Union, overload
7
7
 
8
8
  from reflex.components.el.element import Element
9
9
  from reflex.event import EventHandler, EventSpec
10
+ from reflex.ivars.base import ImmutableVar
10
11
  from reflex.style import Style
11
- from reflex.vars.base import Var
12
+ from reflex.vars import Var
12
13
 
13
14
  class BaseHTML(Element):
14
15
  @overload
@@ -16,70 +17,80 @@ class BaseHTML(Element):
16
17
  def create( # type: ignore
17
18
  cls,
18
19
  *children,
19
- access_key: Optional[Union[Var[Union[bool, int, str]], bool, int, str]] = None,
20
+ access_key: Optional[Union[Var[Union[bool, int, str]], str, int, bool]] = None,
20
21
  auto_capitalize: Optional[
21
- Union[Var[Union[bool, int, str]], bool, int, str]
22
+ Union[Var[Union[bool, int, str]], str, int, bool]
22
23
  ] = None,
23
24
  content_editable: Optional[
24
- Union[Var[Union[bool, int, str]], bool, int, str]
25
+ Union[Var[Union[bool, int, str]], str, int, bool]
25
26
  ] = None,
26
27
  context_menu: Optional[
27
- Union[Var[Union[bool, int, str]], bool, int, str]
28
+ Union[Var[Union[bool, int, str]], str, int, bool]
28
29
  ] = None,
29
- dir: Optional[Union[Var[Union[bool, int, str]], bool, int, str]] = None,
30
- draggable: Optional[Union[Var[Union[bool, int, str]], bool, int, str]] = None,
30
+ dir: Optional[Union[Var[Union[bool, int, str]], str, int, bool]] = None,
31
+ draggable: Optional[Union[Var[Union[bool, int, str]], str, int, bool]] = None,
31
32
  enter_key_hint: Optional[
32
- Union[Var[Union[bool, int, str]], bool, int, str]
33
- ] = None,
34
- hidden: Optional[Union[Var[Union[bool, int, str]], bool, int, str]] = None,
35
- input_mode: Optional[Union[Var[Union[bool, int, str]], bool, int, str]] = None,
36
- item_prop: Optional[Union[Var[Union[bool, int, str]], bool, int, str]] = None,
37
- lang: Optional[Union[Var[Union[bool, int, str]], bool, int, str]] = None,
38
- role: Optional[Union[Var[Union[bool, int, str]], bool, int, str]] = None,
39
- slot: Optional[Union[Var[Union[bool, int, str]], bool, int, str]] = None,
40
- spell_check: Optional[Union[Var[Union[bool, int, str]], bool, int, str]] = None,
41
- tab_index: Optional[Union[Var[Union[bool, int, str]], bool, int, str]] = None,
42
- title: Optional[Union[Var[Union[bool, int, str]], bool, int, str]] = None,
33
+ Union[Var[Union[bool, int, str]], str, int, bool]
34
+ ] = None,
35
+ hidden: Optional[Union[Var[Union[bool, int, str]], str, int, bool]] = None,
36
+ input_mode: Optional[Union[Var[Union[bool, int, str]], str, int, bool]] = None,
37
+ item_prop: Optional[Union[Var[Union[bool, int, str]], str, int, bool]] = None,
38
+ lang: Optional[Union[Var[Union[bool, int, str]], str, int, bool]] = None,
39
+ role: Optional[Union[Var[Union[bool, int, str]], str, int, bool]] = None,
40
+ slot: Optional[Union[Var[Union[bool, int, str]], str, int, bool]] = None,
41
+ spell_check: Optional[Union[Var[Union[bool, int, str]], str, int, bool]] = None,
42
+ tab_index: Optional[Union[Var[Union[bool, int, str]], str, int, bool]] = None,
43
+ title: Optional[Union[Var[Union[bool, int, str]], str, int, bool]] = None,
43
44
  style: Optional[Style] = None,
44
45
  key: Optional[Any] = None,
45
46
  id: Optional[Any] = None,
46
47
  class_name: Optional[Any] = None,
47
48
  autofocus: Optional[bool] = None,
48
- custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
49
- on_blur: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
50
- on_click: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
49
+ custom_attrs: Optional[Dict[str, Union[ImmutableVar, str]]] = None,
50
+ on_blur: Optional[
51
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
52
+ ] = None,
53
+ on_click: Optional[
54
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
55
+ ] = None,
51
56
  on_context_menu: Optional[
52
- Union[EventHandler, EventSpec, list, Callable, Var]
57
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
53
58
  ] = None,
54
59
  on_double_click: Optional[
55
- Union[EventHandler, EventSpec, list, Callable, Var]
60
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
61
+ ] = None,
62
+ on_focus: Optional[
63
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
64
+ ] = None,
65
+ on_mount: Optional[
66
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
56
67
  ] = None,
57
- on_focus: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
58
- on_mount: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
59
68
  on_mouse_down: Optional[
60
- Union[EventHandler, EventSpec, list, Callable, Var]
69
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
61
70
  ] = None,
62
71
  on_mouse_enter: Optional[
63
- Union[EventHandler, EventSpec, list, Callable, Var]
72
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
64
73
  ] = None,
65
74
  on_mouse_leave: Optional[
66
- Union[EventHandler, EventSpec, list, Callable, Var]
75
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
67
76
  ] = None,
68
77
  on_mouse_move: Optional[
69
- Union[EventHandler, EventSpec, list, Callable, Var]
78
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
70
79
  ] = None,
71
80
  on_mouse_out: Optional[
72
- Union[EventHandler, EventSpec, list, Callable, Var]
81
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
73
82
  ] = None,
74
83
  on_mouse_over: Optional[
75
- Union[EventHandler, EventSpec, list, Callable, Var]
84
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
76
85
  ] = None,
77
86
  on_mouse_up: Optional[
78
- Union[EventHandler, EventSpec, list, Callable, Var]
87
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
88
+ ] = None,
89
+ on_scroll: Optional[
90
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
79
91
  ] = None,
80
- on_scroll: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
81
92
  on_unmount: Optional[
82
- Union[EventHandler, EventSpec, list, Callable, Var]
93
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
83
94
  ] = None,
84
95
  **props,
85
96
  ) -> "BaseHTML":
@@ -11,13 +11,13 @@ from reflex.components.el.element import Element
11
11
  from reflex.components.tags.tag import Tag
12
12
  from reflex.constants import Dirs, EventTriggers
13
13
  from reflex.event import EventChain, EventHandler
14
+ from reflex.ivars.base import ImmutableVar, LiteralVar
14
15
  from reflex.utils.imports import ImportDict
15
- from reflex.vars import VarData
16
- from reflex.vars.base import LiteralVar, Var
16
+ from reflex.vars import Var, VarData
17
17
 
18
18
  from .base import BaseHTML
19
19
 
20
- FORM_DATA = Var(_js_expr="form_data")
20
+ FORM_DATA = ImmutableVar.create("form_data")
21
21
  HANDLE_SUBMIT_JS_JINJA2 = Environment().from_string(
22
22
  """
23
23
  const handleSubmit_{{ handle_submit_unique_name }} = useCallback((ev) => {
@@ -197,8 +197,8 @@ class Form(BaseHTML):
197
197
  if EventTriggers.ON_SUBMIT in self.event_triggers:
198
198
  render_tag.add_props(
199
199
  **{
200
- EventTriggers.ON_SUBMIT: Var(
201
- _js_expr=f"handleSubmit_{self.handle_submit_unique_name}",
200
+ EventTriggers.ON_SUBMIT: ImmutableVar(
201
+ _var_name=f"handleSubmit_{self.handle_submit_unique_name}",
202
202
  _var_type=EventChain,
203
203
  )
204
204
  }
@@ -212,21 +212,21 @@ class Form(BaseHTML):
212
212
  # when ref start with refs_ it's an array of refs, so we need different method
213
213
  # to collect data
214
214
  if ref.startswith("refs_"):
215
- ref_var = Var(_js_expr=ref[:-3]).as_ref()
216
- form_refs[ref[len("refs_") : -3]] = Var(
217
- _js_expr=f"getRefValues({str(ref_var)})",
215
+ ref_var = ImmutableVar.create_safe(ref[:-3]).as_ref()
216
+ form_refs[ref[len("refs_") : -3]] = ImmutableVar.create_safe(
217
+ f"getRefValues({str(ref_var)})",
218
218
  _var_data=VarData.merge(ref_var._get_all_var_data()),
219
219
  )
220
220
  else:
221
- ref_var = Var(_js_expr=ref).as_ref()
222
- form_refs[ref[4:]] = Var(
223
- _js_expr=f"getRefValue({str(ref_var)})",
221
+ ref_var = ImmutableVar.create_safe(ref).as_ref()
222
+ form_refs[ref[4:]] = ImmutableVar.create_safe(
223
+ f"getRefValue({str(ref_var)})",
224
224
  _var_data=VarData.merge(ref_var._get_all_var_data()),
225
225
  )
226
226
  # print(repr(form_refs))
227
227
  return form_refs
228
228
 
229
- def _get_vars(self, include_children: bool = True) -> Iterator[Var]:
229
+ def _get_vars(self, include_children: bool = True) -> Iterator[ImmutableVar]:
230
230
  yield from super()._get_vars(include_children=include_children)
231
231
  yield from self._get_form_refs().values()
232
232
 
@@ -624,15 +624,15 @@ class Textarea(BaseHTML):
624
624
  "Cannot combine `enter_key_submit` with `on_key_down`.",
625
625
  )
626
626
  tag.add_props(
627
- on_key_down=Var(
628
- _js_expr=f"(e) => enterKeySubmitOnKeyDown(e, {str(self.enter_key_submit)})",
627
+ on_key_down=ImmutableVar.create_safe(
628
+ f"(e) => enterKeySubmitOnKeyDown(e, {str(self.enter_key_submit)})",
629
629
  _var_data=VarData.merge(self.enter_key_submit._get_all_var_data()),
630
630
  )
631
631
  )
632
632
  if self.auto_height is not None:
633
633
  tag.add_props(
634
- on_input=Var(
635
- _js_expr=f"(e) => autoHeightOnInput(e, {str(self.auto_height)})",
634
+ on_input=ImmutableVar.create_safe(
635
+ f"(e) => autoHeightOnInput(e, {str(self.auto_height)})",
636
636
  _var_data=VarData.merge(self.auto_height._get_all_var_data()),
637
637
  )
638
638
  )