reflex 0.5.10a3__py3-none-any.whl → 0.6.0a1__py3-none-any.whl

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

Potentially problematic release.


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

Files changed (237) hide show
  1. reflex/.templates/jinja/web/pages/utils.js.jinja2 +4 -4
  2. reflex/.templates/jinja/web/utils/context.js.jinja2 +1 -1
  3. reflex/.templates/jinja/web/utils/theme.js.jinja2 +1 -1
  4. reflex/__init__.py +3 -2
  5. reflex/__init__.pyi +2 -2
  6. reflex/app.py +43 -9
  7. reflex/base.py +3 -2
  8. reflex/compiler/compiler.py +6 -6
  9. reflex/compiler/utils.py +5 -3
  10. reflex/components/base/app_wrap.py +2 -4
  11. reflex/components/base/app_wrap.pyi +17 -17
  12. reflex/components/base/bare.py +7 -4
  13. reflex/components/base/body.pyi +17 -17
  14. reflex/components/base/document.pyi +81 -81
  15. reflex/components/base/error_boundary.py +10 -8
  16. reflex/components/base/error_boundary.pyi +20 -19
  17. reflex/components/base/fragment.pyi +17 -17
  18. reflex/components/base/head.pyi +33 -33
  19. reflex/components/base/link.pyi +34 -33
  20. reflex/components/base/meta.pyi +65 -65
  21. reflex/components/base/script.py +2 -1
  22. reflex/components/base/script.pyi +21 -20
  23. reflex/components/component.py +116 -145
  24. reflex/components/core/banner.py +59 -60
  25. reflex/components/core/banner.pyi +86 -150
  26. reflex/components/core/client_side_routing.py +2 -1
  27. reflex/components/core/client_side_routing.pyi +34 -33
  28. reflex/components/core/clipboard.py +2 -2
  29. reflex/components/core/clipboard.pyi +19 -18
  30. reflex/components/core/cond.py +21 -44
  31. reflex/components/core/debounce.py +6 -8
  32. reflex/components/core/debounce.pyi +19 -18
  33. reflex/components/core/foreach.py +5 -14
  34. reflex/components/core/html.pyi +18 -17
  35. reflex/components/core/match.py +36 -43
  36. reflex/components/core/upload.py +32 -25
  37. reflex/components/core/upload.pyi +84 -73
  38. reflex/components/datadisplay/code.py +55 -28
  39. reflex/components/datadisplay/code.pyi +20 -17
  40. reflex/components/datadisplay/dataeditor.py +17 -11
  41. reflex/components/datadisplay/dataeditor.pyi +34 -33
  42. reflex/components/el/__init__.py +0 -1
  43. reflex/components/el/__init__.pyi +0 -11
  44. reflex/components/el/element.pyi +17 -17
  45. reflex/components/el/elements/__init__.py +1 -7
  46. reflex/components/el/elements/__init__.pyi +1 -15
  47. reflex/components/el/elements/base.pyi +18 -17
  48. reflex/components/el/elements/forms.py +24 -31
  49. reflex/components/el/elements/forms.pyi +237 -236
  50. reflex/components/el/elements/inline.pyi +450 -449
  51. reflex/components/el/elements/media.py +0 -21
  52. reflex/components/el/elements/media.pyi +338 -337
  53. reflex/components/el/elements/metadata.py +3 -2
  54. reflex/components/el/elements/metadata.pyi +98 -97
  55. reflex/components/el/elements/other.pyi +114 -113
  56. reflex/components/el/elements/scripts.pyi +50 -49
  57. reflex/components/el/elements/sectioning.pyi +242 -241
  58. reflex/components/el/elements/tables.pyi +162 -161
  59. reflex/components/el/elements/typography.pyi +242 -241
  60. reflex/components/gridjs/datatable.py +13 -14
  61. reflex/components/gridjs/datatable.pyi +34 -33
  62. reflex/components/lucide/icon.py +2 -126
  63. reflex/components/lucide/icon.pyi +34 -142
  64. reflex/components/markdown/markdown.py +30 -35
  65. reflex/components/markdown/markdown.pyi +29 -32
  66. reflex/components/moment/moment.pyi +19 -18
  67. reflex/components/next/base.pyi +17 -17
  68. reflex/components/next/image.py +0 -4
  69. reflex/components/next/image.pyi +20 -19
  70. reflex/components/next/link.pyi +18 -17
  71. reflex/components/next/video.pyi +18 -17
  72. reflex/components/plotly/plotly.py +16 -28
  73. reflex/components/plotly/plotly.pyi +36 -35
  74. reflex/components/props.py +21 -10
  75. reflex/components/radix/__init__.pyi +1 -1
  76. reflex/components/radix/primitives/__init__.pyi +0 -1
  77. reflex/components/radix/primitives/accordion.py +7 -8
  78. reflex/components/radix/primitives/accordion.pyi +117 -116
  79. reflex/components/radix/primitives/base.pyi +34 -33
  80. reflex/components/radix/primitives/drawer.pyi +169 -168
  81. reflex/components/radix/primitives/form.pyi +168 -167
  82. reflex/components/radix/primitives/progress.pyi +82 -81
  83. reflex/components/radix/primitives/slider.pyi +84 -83
  84. reflex/components/radix/themes/base.py +8 -4
  85. reflex/components/radix/themes/base.pyi +114 -113
  86. reflex/components/radix/themes/color_mode.py +12 -21
  87. reflex/components/radix/themes/color_mode.pyi +67 -67
  88. reflex/components/radix/themes/components/__init__.pyi +1 -0
  89. reflex/components/radix/themes/components/alert_dialog.pyi +118 -117
  90. reflex/components/radix/themes/components/aspect_ratio.pyi +18 -17
  91. reflex/components/radix/themes/components/avatar.pyi +18 -17
  92. reflex/components/radix/themes/components/badge.pyi +18 -17
  93. reflex/components/radix/themes/components/button.pyi +18 -17
  94. reflex/components/radix/themes/components/callout.pyi +82 -81
  95. reflex/components/radix/themes/components/card.pyi +18 -17
  96. reflex/components/radix/themes/components/checkbox.py +2 -3
  97. reflex/components/radix/themes/components/checkbox.pyi +53 -52
  98. reflex/components/radix/themes/components/checkbox_cards.pyi +34 -33
  99. reflex/components/radix/themes/components/checkbox_group.pyi +34 -33
  100. reflex/components/radix/themes/components/context_menu.pyi +140 -139
  101. reflex/components/radix/themes/components/data_list.py +5 -0
  102. reflex/components/radix/themes/components/data_list.pyi +71 -65
  103. reflex/components/radix/themes/components/dialog.pyi +121 -120
  104. reflex/components/radix/themes/components/dropdown_menu.pyi +142 -141
  105. reflex/components/radix/themes/components/hover_card.pyi +68 -67
  106. reflex/components/radix/themes/components/icon_button.py +2 -1
  107. reflex/components/radix/themes/components/icon_button.pyi +18 -17
  108. reflex/components/radix/themes/components/inset.pyi +18 -17
  109. reflex/components/radix/themes/components/popover.pyi +73 -72
  110. reflex/components/radix/themes/components/progress.pyi +18 -17
  111. reflex/components/radix/themes/components/radio.pyi +18 -17
  112. reflex/components/radix/themes/components/radio_cards.pyi +35 -34
  113. reflex/components/radix/themes/components/radio_group.py +35 -31
  114. reflex/components/radix/themes/components/radio_group.pyi +73 -66
  115. reflex/components/radix/themes/components/scroll_area.pyi +18 -17
  116. reflex/components/radix/themes/components/segmented_control.pyi +35 -34
  117. reflex/components/radix/themes/components/select.py +2 -1
  118. reflex/components/radix/themes/components/select.pyi +155 -154
  119. reflex/components/radix/themes/components/separator.py +2 -3
  120. reflex/components/radix/themes/components/separator.pyi +18 -17
  121. reflex/components/radix/themes/components/skeleton.pyi +18 -17
  122. reflex/components/radix/themes/components/slider.py +2 -1
  123. reflex/components/radix/themes/components/slider.pyi +20 -19
  124. reflex/components/radix/themes/components/spinner.pyi +18 -17
  125. reflex/components/radix/themes/components/switch.pyi +19 -18
  126. reflex/components/radix/themes/components/table.pyi +114 -113
  127. reflex/components/radix/themes/components/tabs.pyi +84 -83
  128. reflex/components/radix/themes/components/text_area.pyi +21 -20
  129. reflex/components/radix/themes/components/text_field.py +0 -79
  130. reflex/components/radix/themes/components/text_field.pyi +57 -63
  131. reflex/components/radix/themes/components/tooltip.pyi +21 -20
  132. reflex/components/radix/themes/layout/base.pyi +18 -17
  133. reflex/components/radix/themes/layout/box.pyi +18 -17
  134. reflex/components/radix/themes/layout/center.pyi +18 -17
  135. reflex/components/radix/themes/layout/container.py +2 -3
  136. reflex/components/radix/themes/layout/container.pyi +18 -17
  137. reflex/components/radix/themes/layout/flex.pyi +18 -17
  138. reflex/components/radix/themes/layout/grid.pyi +18 -17
  139. reflex/components/radix/themes/layout/list.py +5 -4
  140. reflex/components/radix/themes/layout/list.pyi +86 -85
  141. reflex/components/radix/themes/layout/section.py +2 -3
  142. reflex/components/radix/themes/layout/section.pyi +18 -17
  143. reflex/components/radix/themes/layout/spacer.pyi +18 -17
  144. reflex/components/radix/themes/layout/stack.pyi +50 -49
  145. reflex/components/radix/themes/typography/blockquote.pyi +18 -17
  146. reflex/components/radix/themes/typography/code.pyi +18 -17
  147. reflex/components/radix/themes/typography/heading.pyi +18 -17
  148. reflex/components/radix/themes/typography/link.pyi +18 -17
  149. reflex/components/radix/themes/typography/text.pyi +114 -113
  150. reflex/components/react_player/audio.pyi +34 -33
  151. reflex/components/react_player/react_player.pyi +34 -33
  152. reflex/components/react_player/video.pyi +34 -33
  153. reflex/components/recharts/cartesian.py +23 -19
  154. reflex/components/recharts/cartesian.pyi +297 -296
  155. reflex/components/recharts/charts.py +6 -5
  156. reflex/components/recharts/charts.pyi +179 -178
  157. reflex/components/recharts/general.py +8 -7
  158. reflex/components/recharts/general.pyi +82 -81
  159. reflex/components/recharts/polar.py +14 -13
  160. reflex/components/recharts/polar.pyi +76 -75
  161. reflex/components/recharts/recharts.pyi +33 -33
  162. reflex/components/sonner/toast.py +30 -33
  163. reflex/components/sonner/toast.pyi +27 -25
  164. reflex/components/suneditor/editor.py +2 -1
  165. reflex/components/suneditor/editor.pyi +27 -26
  166. reflex/components/tags/iter_tag.py +16 -16
  167. reflex/components/tags/tag.py +8 -10
  168. reflex/constants/base.py +3 -1
  169. reflex/constants/event.py +1 -0
  170. reflex/event.py +89 -79
  171. reflex/experimental/__init__.py +25 -6
  172. reflex/experimental/client_state.py +34 -58
  173. reflex/experimental/hooks.py +13 -18
  174. reflex/experimental/layout.py +5 -5
  175. reflex/experimental/layout.pyi +84 -83
  176. reflex/{experimental/vars → ivars}/__init__.py +0 -1
  177. reflex/ivars/base.py +2180 -0
  178. reflex/ivars/function.py +200 -0
  179. reflex/ivars/number.py +1137 -0
  180. reflex/ivars/object.py +564 -0
  181. reflex/ivars/sequence.py +1601 -0
  182. reflex/model.py +22 -0
  183. reflex/reflex.py +4 -0
  184. reflex/state.py +388 -73
  185. reflex/style.py +52 -34
  186. reflex/testing.py +8 -3
  187. reflex/utils/exceptions.py +12 -0
  188. reflex/utils/exec.py +0 -14
  189. reflex/utils/format.py +74 -223
  190. reflex/utils/net.py +43 -0
  191. reflex/utils/path_ops.py +13 -1
  192. reflex/utils/prerequisites.py +46 -26
  193. reflex/utils/pyi_generator.py +5 -4
  194. reflex/utils/serializers.py +13 -31
  195. reflex/utils/types.py +44 -9
  196. reflex/vars.py +127 -2230
  197. {reflex-0.5.10a3.dist-info → reflex-0.6.0a1.dist-info}/METADATA +4 -6
  198. reflex-0.6.0a1.dist-info/RECORD +384 -0
  199. reflex/.templates/apps/demo/.gitignore +0 -4
  200. reflex/.templates/apps/demo/assets/favicon.ico +0 -0
  201. reflex/.templates/apps/demo/assets/github.svg +0 -10
  202. reflex/.templates/apps/demo/assets/icon.svg +0 -37
  203. reflex/.templates/apps/demo/assets/logo.svg +0 -68
  204. reflex/.templates/apps/demo/assets/paneleft.svg +0 -13
  205. reflex/.templates/apps/demo/code/__init__.py +0 -1
  206. reflex/.templates/apps/demo/code/demo.py +0 -127
  207. reflex/.templates/apps/demo/code/pages/__init__.py +0 -7
  208. reflex/.templates/apps/demo/code/pages/chatapp.py +0 -31
  209. reflex/.templates/apps/demo/code/pages/datatable.py +0 -360
  210. reflex/.templates/apps/demo/code/pages/forms.py +0 -257
  211. reflex/.templates/apps/demo/code/pages/graphing.py +0 -253
  212. reflex/.templates/apps/demo/code/pages/home.py +0 -56
  213. reflex/.templates/apps/demo/code/sidebar.py +0 -178
  214. reflex/.templates/apps/demo/code/state.py +0 -22
  215. reflex/.templates/apps/demo/code/states/form_state.py +0 -40
  216. reflex/.templates/apps/demo/code/states/pie_state.py +0 -47
  217. reflex/.templates/apps/demo/code/styles.py +0 -68
  218. reflex/.templates/apps/demo/code/webui/__init__.py +0 -0
  219. reflex/.templates/apps/demo/code/webui/components/__init__.py +0 -4
  220. reflex/.templates/apps/demo/code/webui/components/chat.py +0 -118
  221. reflex/.templates/apps/demo/code/webui/components/loading_icon.py +0 -19
  222. reflex/.templates/apps/demo/code/webui/components/modal.py +0 -56
  223. reflex/.templates/apps/demo/code/webui/components/navbar.py +0 -70
  224. reflex/.templates/apps/demo/code/webui/components/sidebar.py +0 -66
  225. reflex/.templates/apps/demo/code/webui/state.py +0 -146
  226. reflex/.templates/apps/demo/code/webui/styles.py +0 -88
  227. reflex/experimental/vars/base.py +0 -583
  228. reflex/experimental/vars/function.py +0 -290
  229. reflex/experimental/vars/number.py +0 -1458
  230. reflex/experimental/vars/object.py +0 -804
  231. reflex/experimental/vars/sequence.py +0 -1764
  232. reflex/utils/watch.py +0 -96
  233. reflex/vars.pyi +0 -218
  234. reflex-0.5.10a3.dist-info/RECORD +0 -413
  235. {reflex-0.5.10a3.dist-info → reflex-0.6.0a1.dist-info}/LICENSE +0 -0
  236. {reflex-0.5.10a3.dist-info → reflex-0.6.0a1.dist-info}/WHEEL +0 -0
  237. {reflex-0.5.10a3.dist-info → reflex-0.6.0a1.dist-info}/entry_points.txt +0 -0
@@ -87,36 +87,28 @@ from .inline import u as u
87
87
  from .inline import wbr as wbr
88
88
  from .media import Area as Area
89
89
  from .media import Audio as Audio
90
- from .media import Defs as Defs
91
90
  from .media import Embed as Embed
92
91
  from .media import Iframe as Iframe
93
92
  from .media import Img as Img
94
- from .media import LinearGradient as LinearGradient
95
93
  from .media import Map as Map
96
94
  from .media import Object as Object
97
- from .media import Path as Path
98
95
  from .media import Picture as Picture
99
96
  from .media import Portal as Portal
100
97
  from .media import Source as Source
101
- from .media import Stop as Stop
102
98
  from .media import Svg as Svg
103
99
  from .media import Track as Track
104
100
  from .media import Video as Video
105
101
  from .media import area as area
106
102
  from .media import audio as audio
107
- from .media import defs as defs # type: ignore
108
103
  from .media import embed as embed
109
104
  from .media import iframe as iframe
110
105
  from .media import image as image
111
106
  from .media import img as img
112
- from .media import lineargradient as lineargradient # type: ignore
113
107
  from .media import map as map
114
108
  from .media import object as object
115
- from .media import path as path # type: ignore
116
109
  from .media import picture as picture
117
110
  from .media import portal as portal
118
111
  from .media import source as source
119
- from .media import stop as stop # type: ignore
120
112
  from .media import svg as svg
121
113
  from .media import track as track
122
114
  from .media import video as video
@@ -292,11 +284,6 @@ _MAPPING = {
292
284
  "portal",
293
285
  "source",
294
286
  "svg",
295
- "defs",
296
- "lineargradient",
297
- "LinearGradient",
298
- "stop",
299
- "path",
300
287
  ],
301
288
  "metadata": ["base", "head", "link", "meta", "title", "style"],
302
289
  "other": ["details", "dialog", "summary", "slot", "template", "math", "html"],
@@ -348,7 +335,6 @@ _MAPPING = {
348
335
  "Del",
349
336
  ],
350
337
  }
351
- EXCLUDE = ["del_", "Del", "image", "lineargradient", "LinearGradient"]
338
+ EXCLUDE = ["del_", "Del", "image"]
352
339
  for _, v in _MAPPING.items():
353
340
  v.extend([mod.capitalize() for mod in v if mod not in EXCLUDE])
354
- _PYRIGHT_IGNORE_IMPORTS = ["stop", "lineargradient", "path", "defs"]
@@ -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 import BaseVar, Var
12
+ from reflex.vars import Var
12
13
 
13
14
  class BaseHTML(Element):
14
15
  @overload
@@ -45,51 +46,51 @@ class BaseHTML(Element):
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
+ custom_attrs: Optional[Dict[str, Union[ImmutableVar, str]]] = None,
49
50
  on_blur: Optional[
50
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
51
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
51
52
  ] = None,
52
53
  on_click: Optional[
53
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
54
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
54
55
  ] = None,
55
56
  on_context_menu: Optional[
56
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
57
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
57
58
  ] = None,
58
59
  on_double_click: Optional[
59
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
60
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
60
61
  ] = None,
61
62
  on_focus: Optional[
62
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
63
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
63
64
  ] = None,
64
65
  on_mount: Optional[
65
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
66
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
66
67
  ] = None,
67
68
  on_mouse_down: Optional[
68
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
69
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
69
70
  ] = None,
70
71
  on_mouse_enter: Optional[
71
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
72
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
72
73
  ] = None,
73
74
  on_mouse_leave: Optional[
74
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
75
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
75
76
  ] = None,
76
77
  on_mouse_move: Optional[
77
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
78
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
78
79
  ] = None,
79
80
  on_mouse_out: Optional[
80
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
81
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
81
82
  ] = None,
82
83
  on_mouse_over: Optional[
83
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
84
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
84
85
  ] = None,
85
86
  on_mouse_up: Optional[
86
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
87
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
87
88
  ] = None,
88
89
  on_scroll: Optional[
89
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
90
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
90
91
  ] = None,
91
92
  on_unmount: Optional[
92
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
93
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
93
94
  ] = None,
94
95
  **props,
95
96
  ) -> "BaseHTML":
@@ -11,21 +11,21 @@ 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.utils.format import format_event_chain
14
+ from reflex.ivars.base import ImmutableVar, LiteralVar
15
15
  from reflex.utils.imports import ImportDict
16
- from reflex.vars import BaseVar, Var
16
+ from reflex.vars import Var, VarData
17
17
 
18
18
  from .base import BaseHTML
19
19
 
20
- FORM_DATA = Var.create("form_data", _var_is_string=False)
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) => {
24
24
  const $form = ev.target
25
25
  ev.preventDefault()
26
- const {{ form_data }} = {...Object.fromEntries(new FormData($form).entries()), ...{{ field_ref_mapping }}}
26
+ const {{ form_data }} = {...Object.fromEntries(new FormData($form).entries()), ...{{ field_ref_mapping }}};
27
27
 
28
- {{ on_submit_event_chain }}
28
+ ({{ on_submit_event_chain }}());
29
29
 
30
30
  if ({{ reset_on_submit }}) {
31
31
  $form.reset()
@@ -184,9 +184,9 @@ class Form(BaseHTML):
184
184
  HANDLE_SUBMIT_JS_JINJA2.render(
185
185
  handle_submit_unique_name=self.handle_submit_unique_name,
186
186
  form_data=FORM_DATA,
187
- field_ref_mapping=str(Var.create_safe(self._get_form_refs())),
188
- on_submit_event_chain=format_event_chain(
189
- self.event_triggers[EventTriggers.ON_SUBMIT]
187
+ field_ref_mapping=str(LiteralVar.create(self._get_form_refs())),
188
+ on_submit_event_chain=str(
189
+ LiteralVar.create(self.event_triggers[EventTriggers.ON_SUBMIT])
190
190
  ),
191
191
  reset_on_submit=self.reset_on_submit,
192
192
  )
@@ -197,7 +197,7 @@ 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: BaseVar(
200
+ EventTriggers.ON_SUBMIT: ImmutableVar(
201
201
  _var_name=f"handleSubmit_{self.handle_submit_unique_name}",
202
202
  _var_type=EventChain,
203
203
  )
@@ -212,24 +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.create_safe(ref[:-3], _var_is_string=False).as_ref()
216
- form_refs[ref[5:-3]] = Var.create_safe(
215
+ ref_var = ImmutableVar.create_safe(ref[:-3]).as_ref()
216
+ form_refs[ref[len("refs_") : -3]] = ImmutableVar.create_safe(
217
217
  f"getRefValues({str(ref_var)})",
218
- _var_is_local=False,
219
- _var_is_string=False,
220
- _var_data=ref_var._var_data,
218
+ _var_data=VarData.merge(ref_var._get_all_var_data()),
221
219
  )
222
220
  else:
223
- ref_var = Var.create_safe(ref, _var_is_string=False).as_ref()
224
- form_refs[ref[4:]] = Var.create_safe(
221
+ ref_var = ImmutableVar.create_safe(ref).as_ref()
222
+ form_refs[ref[4:]] = ImmutableVar.create_safe(
225
223
  f"getRefValue({str(ref_var)})",
226
- _var_is_local=False,
227
- _var_is_string=False,
228
- _var_data=ref_var._var_data,
224
+ _var_data=VarData.merge(ref_var._get_all_var_data()),
229
225
  )
226
+ # print(repr(form_refs))
230
227
  return form_refs
231
228
 
232
- def _get_vars(self, include_children: bool = True) -> Iterator[Var]:
229
+ def _get_vars(self, include_children: bool = True) -> Iterator[ImmutableVar]:
233
230
  yield from super()._get_vars(include_children=include_children)
234
231
  yield from self._get_form_refs().values()
235
232
 
@@ -503,7 +500,7 @@ AUTO_HEIGHT_JS = """
503
500
  const autoHeightOnInput = (e, is_enabled) => {
504
501
  if (is_enabled) {
505
502
  const el = e.target;
506
- el.style.overflowY = "hidden";
503
+ el.style.overflowY = "scroll";
507
504
  el.style.height = "auto";
508
505
  el.style.height = (e.target.scrollHeight) + "px";
509
506
  if (el.form && !el.form.data_resize_on_reset) {
@@ -627,20 +624,16 @@ class Textarea(BaseHTML):
627
624
  "Cannot combine `enter_key_submit` with `on_key_down`.",
628
625
  )
629
626
  tag.add_props(
630
- on_key_down=Var.create_safe(
631
- f"(e) => enterKeySubmitOnKeyDown(e, {self.enter_key_submit._var_name_unwrapped})",
632
- _var_is_local=False,
633
- _var_is_string=False,
634
- _var_data=self.enter_key_submit._var_data,
627
+ on_key_down=ImmutableVar.create_safe(
628
+ f"(e) => enterKeySubmitOnKeyDown(e, {str(self.enter_key_submit)})",
629
+ _var_data=VarData.merge(self.enter_key_submit._get_all_var_data()),
635
630
  )
636
631
  )
637
632
  if self.auto_height is not None:
638
633
  tag.add_props(
639
- on_input=Var.create_safe(
640
- f"(e) => autoHeightOnInput(e, {self.auto_height._var_name_unwrapped})",
641
- _var_is_local=False,
642
- _var_is_string=False,
643
- _var_data=self.auto_height._var_data,
634
+ on_input=ImmutableVar.create_safe(
635
+ f"(e) => autoHeightOnInput(e, {str(self.auto_height)})",
636
+ _var_data=VarData.merge(self.auto_height._get_all_var_data()),
644
637
  )
645
638
  )
646
639
  return tag