reflex 0.5.10a3__py3-none-any.whl → 0.6.0__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 (303) 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 +4 -4
  4. reflex/.templates/jinja/web/utils/context.js.jinja2 +1 -1
  5. reflex/.templates/jinja/web/utils/theme.js.jinja2 +1 -1
  6. reflex/.templates/web/utils/state.js +3 -1
  7. reflex/__init__.py +10 -3
  8. reflex/__init__.pyi +3 -2
  9. reflex/app.py +47 -11
  10. reflex/app_module_for_backend.py +1 -1
  11. reflex/base.py +3 -2
  12. reflex/compiler/compiler.py +5 -5
  13. reflex/compiler/utils.py +5 -3
  14. reflex/components/base/app_wrap.py +2 -4
  15. reflex/components/base/app_wrap.pyi +16 -26
  16. reflex/components/base/bare.py +6 -4
  17. reflex/components/base/body.pyi +16 -26
  18. reflex/components/base/document.pyi +76 -126
  19. reflex/components/base/error_boundary.py +9 -8
  20. reflex/components/base/error_boundary.pyi +18 -30
  21. reflex/components/base/fragment.pyi +16 -26
  22. reflex/components/base/head.pyi +31 -51
  23. reflex/components/base/link.py +1 -1
  24. reflex/components/base/link.pyi +31 -51
  25. reflex/components/base/meta.pyi +61 -101
  26. reflex/components/base/script.py +2 -2
  27. reflex/components/base/script.pyi +20 -36
  28. reflex/components/component.py +107 -130
  29. reflex/components/core/banner.py +61 -66
  30. reflex/components/core/banner.pyi +129 -230
  31. reflex/components/core/client_side_routing.py +2 -2
  32. reflex/components/core/client_side_routing.pyi +31 -51
  33. reflex/components/core/clipboard.py +4 -3
  34. reflex/components/core/clipboard.pyi +19 -31
  35. reflex/components/core/cond.py +21 -44
  36. reflex/components/core/debounce.py +7 -9
  37. reflex/components/core/debounce.pyi +19 -31
  38. reflex/components/core/foreach.py +4 -14
  39. reflex/components/core/html.py +1 -1
  40. reflex/components/core/html.pyi +34 -44
  41. reflex/components/core/match.py +36 -43
  42. reflex/components/core/upload.py +27 -26
  43. reflex/components/core/upload.pyi +81 -116
  44. reflex/components/datadisplay/code.py +55 -29
  45. reflex/components/datadisplay/code.pyi +303 -410
  46. reflex/components/datadisplay/dataeditor.py +13 -9
  47. reflex/components/datadisplay/dataeditor.pyi +39 -51
  48. reflex/components/el/__init__.py +0 -1
  49. reflex/components/el/__init__.pyi +0 -11
  50. reflex/components/el/element.pyi +16 -26
  51. reflex/components/el/elements/__init__.py +1 -7
  52. reflex/components/el/elements/__init__.pyi +1 -15
  53. reflex/components/el/elements/base.py +1 -1
  54. reflex/components/el/elements/base.pyi +33 -43
  55. reflex/components/el/elements/forms.py +26 -33
  56. reflex/components/el/elements/forms.pyi +542 -694
  57. reflex/components/el/elements/inline.py +1 -1
  58. reflex/components/el/elements/inline.pyi +909 -1189
  59. reflex/components/el/elements/media.py +1 -22
  60. reflex/components/el/elements/media.pyi +765 -975
  61. reflex/components/el/elements/metadata.py +3 -5
  62. reflex/components/el/elements/metadata.pyi +175 -235
  63. reflex/components/el/elements/other.py +1 -1
  64. reflex/components/el/elements/other.pyi +228 -298
  65. reflex/components/el/elements/scripts.py +1 -1
  66. reflex/components/el/elements/scripts.pyi +106 -136
  67. reflex/components/el/elements/sectioning.py +0 -2
  68. reflex/components/el/elements/sectioning.pyi +481 -631
  69. reflex/components/el/elements/tables.py +1 -1
  70. reflex/components/el/elements/tables.pyi +341 -441
  71. reflex/components/el/elements/typography.py +1 -1
  72. reflex/components/el/elements/typography.pyi +491 -641
  73. reflex/components/gridjs/datatable.py +9 -13
  74. reflex/components/gridjs/datatable.pyi +33 -53
  75. reflex/components/lucide/icon.py +3 -127
  76. reflex/components/lucide/icon.pyi +31 -160
  77. reflex/components/markdown/markdown.py +32 -42
  78. reflex/components/markdown/markdown.pyi +28 -41
  79. reflex/components/moment/moment.py +13 -12
  80. reflex/components/moment/moment.pyi +22 -33
  81. reflex/components/next/base.pyi +16 -26
  82. reflex/components/next/image.py +1 -5
  83. reflex/components/next/image.pyi +21 -35
  84. reflex/components/next/link.py +1 -1
  85. reflex/components/next/link.pyi +16 -26
  86. reflex/components/next/video.py +1 -1
  87. reflex/components/next/video.pyi +16 -26
  88. reflex/components/plotly/plotly.py +17 -30
  89. reflex/components/plotly/plotly.pyi +38 -52
  90. reflex/components/props.py +21 -10
  91. reflex/components/radix/__init__.pyi +2 -1
  92. reflex/components/radix/primitives/accordion.py +6 -7
  93. reflex/components/radix/primitives/accordion.pyi +415 -485
  94. reflex/components/radix/primitives/base.py +1 -1
  95. reflex/components/radix/primitives/base.pyi +31 -51
  96. reflex/components/radix/primitives/drawer.py +1 -1
  97. reflex/components/radix/primitives/drawer.pyi +162 -262
  98. reflex/components/radix/primitives/form.py +1 -1
  99. reflex/components/radix/primitives/form.pyi +247 -353
  100. reflex/components/radix/primitives/progress.py +1 -1
  101. reflex/components/radix/primitives/progress.pyi +226 -276
  102. reflex/components/radix/primitives/slider.py +1 -1
  103. reflex/components/radix/primitives/slider.pyi +82 -132
  104. reflex/components/radix/themes/base.py +8 -25
  105. reflex/components/radix/themes/base.pyi +171 -242
  106. reflex/components/radix/themes/color_mode.py +11 -20
  107. reflex/components/radix/themes/color_mode.pyi +198 -231
  108. reflex/components/radix/themes/components/__init__.pyi +1 -0
  109. reflex/components/radix/themes/components/alert_dialog.py +1 -1
  110. reflex/components/radix/themes/components/alert_dialog.pyi +129 -199
  111. reflex/components/radix/themes/components/aspect_ratio.py +1 -1
  112. reflex/components/radix/themes/components/aspect_ratio.pyi +16 -26
  113. reflex/components/radix/themes/components/avatar.py +1 -1
  114. reflex/components/radix/themes/components/avatar.pyi +69 -79
  115. reflex/components/radix/themes/components/badge.py +1 -1
  116. reflex/components/radix/themes/components/badge.pyi +87 -97
  117. reflex/components/radix/themes/components/button.py +1 -1
  118. reflex/components/radix/themes/components/button.pyi +97 -107
  119. reflex/components/radix/themes/components/callout.py +1 -1
  120. reflex/components/radix/themes/components/callout.pyi +317 -367
  121. reflex/components/radix/themes/components/card.py +1 -1
  122. reflex/components/radix/themes/components/card.pyi +37 -47
  123. reflex/components/radix/themes/components/checkbox.py +2 -4
  124. reflex/components/radix/themes/components/checkbox.pyi +205 -241
  125. reflex/components/radix/themes/components/checkbox_cards.py +1 -1
  126. reflex/components/radix/themes/components/checkbox_cards.pyi +92 -112
  127. reflex/components/radix/themes/components/checkbox_group.py +1 -1
  128. reflex/components/radix/themes/components/checkbox_group.pyi +84 -104
  129. reflex/components/radix/themes/components/context_menu.py +1 -1
  130. reflex/components/radix/themes/components/context_menu.pyi +230 -310
  131. reflex/components/radix/themes/components/data_list.py +6 -1
  132. reflex/components/radix/themes/components/data_list.pyi +131 -166
  133. reflex/components/radix/themes/components/dialog.py +1 -1
  134. reflex/components/radix/themes/components/dialog.pyi +132 -202
  135. reflex/components/radix/themes/components/dropdown_menu.py +1 -1
  136. reflex/components/radix/themes/components/dropdown_menu.pyi +241 -323
  137. reflex/components/radix/themes/components/hover_card.py +1 -1
  138. reflex/components/radix/themes/components/hover_card.pyi +86 -126
  139. reflex/components/radix/themes/components/icon_button.py +1 -1
  140. reflex/components/radix/themes/components/icon_button.pyi +97 -107
  141. reflex/components/radix/themes/components/inset.py +1 -1
  142. reflex/components/radix/themes/components/inset.pyi +46 -56
  143. reflex/components/radix/themes/components/popover.py +1 -1
  144. reflex/components/radix/themes/components/popover.pyi +91 -131
  145. reflex/components/radix/themes/components/progress.py +1 -1
  146. reflex/components/radix/themes/components/progress.pyi +70 -80
  147. reflex/components/radix/themes/components/radio.py +1 -1
  148. reflex/components/radix/themes/components/radio.pyi +68 -78
  149. reflex/components/radix/themes/components/radio_cards.py +1 -1
  150. reflex/components/radix/themes/components/radio_cards.pyi +96 -116
  151. reflex/components/radix/themes/components/radio_group.py +32 -31
  152. reflex/components/radix/themes/components/radio_group.pyi +230 -266
  153. reflex/components/radix/themes/components/scroll_area.py +1 -1
  154. reflex/components/radix/themes/components/scroll_area.pyi +20 -30
  155. reflex/components/radix/themes/components/segmented_control.py +1 -1
  156. reflex/components/radix/themes/components/segmented_control.pyi +88 -110
  157. reflex/components/radix/themes/components/select.py +1 -1
  158. reflex/components/radix/themes/components/select.pyi +365 -461
  159. reflex/components/radix/themes/components/separator.py +2 -4
  160. reflex/components/radix/themes/components/separator.pyi +68 -78
  161. reflex/components/radix/themes/components/skeleton.py +1 -1
  162. reflex/components/radix/themes/components/skeleton.pyi +22 -32
  163. reflex/components/radix/themes/components/slider.py +1 -1
  164. reflex/components/radix/themes/components/slider.pyi +74 -86
  165. reflex/components/radix/themes/components/spinner.py +1 -1
  166. reflex/components/radix/themes/components/spinner.pyi +18 -28
  167. reflex/components/radix/themes/components/switch.py +1 -1
  168. reflex/components/radix/themes/components/switch.pyi +70 -82
  169. reflex/components/radix/themes/components/table.py +1 -1
  170. reflex/components/radix/themes/components/table.pyi +254 -324
  171. reflex/components/radix/themes/components/tabs.py +1 -1
  172. reflex/components/radix/themes/components/tabs.pyi +134 -188
  173. reflex/components/radix/themes/components/text_area.py +1 -1
  174. reflex/components/radix/themes/components/text_area.pyi +95 -109
  175. reflex/components/radix/themes/components/text_field.py +1 -80
  176. reflex/components/radix/themes/components/text_field.pyi +245 -290
  177. reflex/components/radix/themes/components/tooltip.py +1 -1
  178. reflex/components/radix/themes/components/tooltip.pyi +25 -35
  179. reflex/components/radix/themes/layout/__init__.pyi +1 -0
  180. reflex/components/radix/themes/layout/base.py +1 -1
  181. reflex/components/radix/themes/layout/base.pyi +55 -65
  182. reflex/components/radix/themes/layout/box.pyi +33 -43
  183. reflex/components/radix/themes/layout/center.pyi +55 -65
  184. reflex/components/radix/themes/layout/container.py +2 -4
  185. reflex/components/radix/themes/layout/container.pyi +35 -45
  186. reflex/components/radix/themes/layout/flex.py +1 -1
  187. reflex/components/radix/themes/layout/flex.pyi +55 -65
  188. reflex/components/radix/themes/layout/grid.py +1 -1
  189. reflex/components/radix/themes/layout/grid.pyi +63 -73
  190. reflex/components/radix/themes/layout/list.py +1 -1
  191. reflex/components/radix/themes/layout/list.pyi +188 -238
  192. reflex/components/radix/themes/layout/section.py +2 -4
  193. reflex/components/radix/themes/layout/section.pyi +35 -45
  194. reflex/components/radix/themes/layout/spacer.pyi +55 -65
  195. reflex/components/radix/themes/layout/stack.py +1 -1
  196. reflex/components/radix/themes/layout/stack.pyi +125 -155
  197. reflex/components/radix/themes/typography/blockquote.py +1 -1
  198. reflex/components/radix/themes/typography/blockquote.pyi +88 -98
  199. reflex/components/radix/themes/typography/code.py +1 -1
  200. reflex/components/radix/themes/typography/code.pyi +89 -99
  201. reflex/components/radix/themes/typography/heading.py +1 -1
  202. reflex/components/radix/themes/typography/heading.pyi +95 -105
  203. reflex/components/radix/themes/typography/link.py +1 -1
  204. reflex/components/radix/themes/typography/link.pyi +101 -111
  205. reflex/components/radix/themes/typography/text.py +1 -1
  206. reflex/components/radix/themes/typography/text.pyi +494 -564
  207. reflex/components/react_player/audio.pyi +32 -58
  208. reflex/components/react_player/react_player.py +1 -1
  209. reflex/components/react_player/react_player.pyi +32 -58
  210. reflex/components/react_player/video.pyi +32 -58
  211. reflex/components/recharts/cartesian.py +22 -19
  212. reflex/components/recharts/cartesian.pyi +658 -840
  213. reflex/components/recharts/charts.py +3 -3
  214. reflex/components/recharts/charts.pyi +238 -342
  215. reflex/components/recharts/general.py +8 -8
  216. reflex/components/recharts/general.pyi +175 -225
  217. reflex/components/recharts/polar.py +11 -11
  218. reflex/components/recharts/polar.pyi +135 -171
  219. reflex/components/recharts/recharts.pyi +31 -51
  220. reflex/components/sonner/toast.py +27 -31
  221. reflex/components/sonner/toast.pyi +36 -45
  222. reflex/components/suneditor/editor.py +1 -1
  223. reflex/components/suneditor/editor.pyi +54 -76
  224. reflex/components/tags/cond_tag.py +6 -4
  225. reflex/components/tags/iter_tag.py +37 -25
  226. reflex/components/tags/match_tag.py +6 -4
  227. reflex/components/tags/tag.py +43 -28
  228. reflex/constants/base.py +3 -1
  229. reflex/constants/event.py +1 -0
  230. reflex/custom_components/custom_components.py +3 -1
  231. reflex/event.py +166 -108
  232. reflex/experimental/__init__.py +25 -6
  233. reflex/experimental/client_state.py +34 -57
  234. reflex/experimental/hooks.py +12 -17
  235. reflex/experimental/layout.py +4 -4
  236. reflex/experimental/layout.pyi +130 -180
  237. reflex/middleware/hydrate_middleware.py +2 -0
  238. reflex/middleware/middleware.py +3 -3
  239. reflex/model.py +22 -0
  240. reflex/reflex.py +4 -0
  241. reflex/state.py +491 -110
  242. reflex/style.py +56 -39
  243. reflex/testing.py +8 -3
  244. reflex/utils/exceptions.py +32 -0
  245. reflex/utils/exec.py +0 -14
  246. reflex/utils/format.py +80 -209
  247. reflex/utils/imports.py +16 -73
  248. reflex/utils/net.py +43 -0
  249. reflex/utils/path_ops.py +13 -1
  250. reflex/utils/prerequisites.py +81 -41
  251. reflex/utils/pyi_generator.py +12 -6
  252. reflex/utils/serializers.py +13 -41
  253. reflex/utils/telemetry.py +3 -2
  254. reflex/utils/types.py +47 -7
  255. reflex/{experimental/vars → vars}/__init__.py +6 -3
  256. reflex/vars/base.py +2563 -0
  257. reflex/vars/function.py +196 -0
  258. reflex/vars/number.py +1158 -0
  259. reflex/vars/object.py +562 -0
  260. reflex/vars/sequence.py +1604 -0
  261. {reflex-0.5.10a3.dist-info → reflex-0.6.0.dist-info}/METADATA +6 -9
  262. reflex-0.6.0.dist-info/RECORD +382 -0
  263. reflex/.templates/apps/demo/.gitignore +0 -4
  264. reflex/.templates/apps/demo/assets/favicon.ico +0 -0
  265. reflex/.templates/apps/demo/assets/github.svg +0 -10
  266. reflex/.templates/apps/demo/assets/icon.svg +0 -37
  267. reflex/.templates/apps/demo/assets/logo.svg +0 -68
  268. reflex/.templates/apps/demo/assets/paneleft.svg +0 -13
  269. reflex/.templates/apps/demo/code/__init__.py +0 -1
  270. reflex/.templates/apps/demo/code/demo.py +0 -127
  271. reflex/.templates/apps/demo/code/pages/__init__.py +0 -7
  272. reflex/.templates/apps/demo/code/pages/chatapp.py +0 -31
  273. reflex/.templates/apps/demo/code/pages/datatable.py +0 -360
  274. reflex/.templates/apps/demo/code/pages/forms.py +0 -257
  275. reflex/.templates/apps/demo/code/pages/graphing.py +0 -253
  276. reflex/.templates/apps/demo/code/pages/home.py +0 -56
  277. reflex/.templates/apps/demo/code/sidebar.py +0 -178
  278. reflex/.templates/apps/demo/code/state.py +0 -22
  279. reflex/.templates/apps/demo/code/states/form_state.py +0 -40
  280. reflex/.templates/apps/demo/code/states/pie_state.py +0 -47
  281. reflex/.templates/apps/demo/code/styles.py +0 -68
  282. reflex/.templates/apps/demo/code/webui/__init__.py +0 -0
  283. reflex/.templates/apps/demo/code/webui/components/__init__.py +0 -4
  284. reflex/.templates/apps/demo/code/webui/components/chat.py +0 -118
  285. reflex/.templates/apps/demo/code/webui/components/loading_icon.py +0 -19
  286. reflex/.templates/apps/demo/code/webui/components/modal.py +0 -56
  287. reflex/.templates/apps/demo/code/webui/components/navbar.py +0 -70
  288. reflex/.templates/apps/demo/code/webui/components/sidebar.py +0 -66
  289. reflex/.templates/apps/demo/code/webui/state.py +0 -146
  290. reflex/.templates/apps/demo/code/webui/styles.py +0 -88
  291. reflex/.templates/web/components/reflex/chakra_color_mode_provider.js +0 -36
  292. reflex/experimental/vars/base.py +0 -583
  293. reflex/experimental/vars/function.py +0 -290
  294. reflex/experimental/vars/number.py +0 -1458
  295. reflex/experimental/vars/object.py +0 -804
  296. reflex/experimental/vars/sequence.py +0 -1764
  297. reflex/utils/watch.py +0 -96
  298. reflex/vars.py +0 -2604
  299. reflex/vars.pyi +0 -218
  300. reflex-0.5.10a3.dist-info/RECORD +0 -413
  301. {reflex-0.5.10a3.dist-info → reflex-0.6.0.dist-info}/LICENSE +0 -0
  302. {reflex-0.5.10a3.dist-info → reflex-0.6.0.dist-info}/WHEEL +0 -0
  303. {reflex-0.5.10a3.dist-info → reflex-0.6.0.dist-info}/entry_points.txt +0 -0
@@ -1,19 +1,21 @@
1
1
  """Tag to conditionally render components."""
2
2
 
3
+ import dataclasses
3
4
  from typing import Any, Dict, Optional
4
5
 
5
6
  from reflex.components.tags.tag import Tag
6
- from reflex.vars import Var
7
+ from reflex.vars.base import Var
7
8
 
8
9
 
10
+ @dataclasses.dataclass()
9
11
  class CondTag(Tag):
10
12
  """A conditional tag."""
11
13
 
12
14
  # The condition to determine which component to render.
13
- cond: Var[Any]
15
+ cond: Var[Any] = dataclasses.field(default_factory=lambda: Var.create(True))
14
16
 
15
17
  # The code to render if the condition is true.
16
- true_value: Dict
18
+ true_value: Dict = dataclasses.field(default_factory=dict)
17
19
 
18
20
  # The code to render if the condition is false.
19
- false_value: Optional[Dict]
21
+ false_value: Optional[Dict] = None
@@ -2,30 +2,43 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ import dataclasses
5
6
  import inspect
6
- from typing import TYPE_CHECKING, Any, Callable, List, Tuple, Type, Union, get_args
7
+ from typing import (
8
+ TYPE_CHECKING,
9
+ Any,
10
+ Callable,
11
+ Iterable,
12
+ Tuple,
13
+ Type,
14
+ Union,
15
+ get_args,
16
+ )
7
17
 
8
18
  from reflex.components.tags.tag import Tag
9
- from reflex.vars import BaseVar, Var
19
+ from reflex.vars import LiteralArrayVar, Var, get_unique_variable_name
10
20
 
11
21
  if TYPE_CHECKING:
12
22
  from reflex.components.component import Component
13
23
 
14
24
 
25
+ @dataclasses.dataclass()
15
26
  class IterTag(Tag):
16
27
  """An iterator tag."""
17
28
 
18
29
  # The var to iterate over.
19
- iterable: Var[List]
30
+ iterable: Var[Iterable] = dataclasses.field(
31
+ default_factory=lambda: LiteralArrayVar.create([])
32
+ )
20
33
 
21
34
  # The component render function for each item in the iterable.
22
- render_fn: Callable
35
+ render_fn: Callable = dataclasses.field(default_factory=lambda: lambda x: x)
23
36
 
24
37
  # The name of the arg var.
25
- arg_var_name: str
38
+ arg_var_name: str = dataclasses.field(default_factory=get_unique_variable_name)
26
39
 
27
40
  # The name of the index var.
28
- index_var_name: str
41
+ index_var_name: str = dataclasses.field(default_factory=get_unique_variable_name)
29
42
 
30
43
  def get_iterable_var_type(self) -> Type:
31
44
  """Get the type of the iterable var.
@@ -33,15 +46,16 @@ class IterTag(Tag):
33
46
  Returns:
34
47
  The type of the iterable var.
35
48
  """
49
+ iterable = self.iterable
36
50
  try:
37
- if self.iterable._var_type.mro()[0] == dict:
51
+ if iterable._var_type.mro()[0] == dict:
38
52
  # Arg is a tuple of (key, value).
39
- return Tuple[get_args(self.iterable._var_type)] # type: ignore
40
- elif self.iterable._var_type.mro()[0] == tuple:
53
+ return Tuple[get_args(iterable._var_type)] # type: ignore
54
+ elif iterable._var_type.mro()[0] == tuple:
41
55
  # Arg is a union of any possible values in the tuple.
42
- return Union[get_args(self.iterable._var_type)] # type: ignore
56
+ return Union[get_args(iterable._var_type)] # type: ignore
43
57
  else:
44
- return get_args(self.iterable._var_type)[0]
58
+ return get_args(iterable._var_type)[0]
45
59
  except Exception:
46
60
  return Any
47
61
 
@@ -53,10 +67,10 @@ class IterTag(Tag):
53
67
  Returns:
54
68
  The index var.
55
69
  """
56
- return BaseVar(
57
- _var_name=self.index_var_name,
70
+ return Var(
71
+ _js_expr=self.index_var_name,
58
72
  _var_type=int,
59
- )
73
+ ).guess_type()
60
74
 
61
75
  def get_arg_var(self) -> Var:
62
76
  """Get the arg var for the tag (with curly braces).
@@ -66,10 +80,10 @@ class IterTag(Tag):
66
80
  Returns:
67
81
  The arg var.
68
82
  """
69
- return BaseVar(
70
- _var_name=self.arg_var_name,
83
+ return Var(
84
+ _js_expr=self.arg_var_name,
71
85
  _var_type=self.get_iterable_var_type(),
72
- )
86
+ ).guess_type()
73
87
 
74
88
  def get_index_var_arg(self) -> Var:
75
89
  """Get the index var for the tag (without curly braces).
@@ -79,11 +93,10 @@ class IterTag(Tag):
79
93
  Returns:
80
94
  The index var.
81
95
  """
82
- return BaseVar(
83
- _var_name=self.index_var_name,
96
+ return Var(
97
+ _js_expr=self.index_var_name,
84
98
  _var_type=int,
85
- _var_is_local=True,
86
- )
99
+ ).guess_type()
87
100
 
88
101
  def get_arg_var_arg(self) -> Var:
89
102
  """Get the arg var for the tag (without curly braces).
@@ -93,11 +106,10 @@ class IterTag(Tag):
93
106
  Returns:
94
107
  The arg var.
95
108
  """
96
- return BaseVar(
97
- _var_name=self.arg_var_name,
109
+ return Var(
110
+ _js_expr=self.arg_var_name,
98
111
  _var_type=self.get_iterable_var_type(),
99
- _var_is_local=True,
100
- )
112
+ ).guess_type()
101
113
 
102
114
  def render_component(self) -> Component:
103
115
  """Render the component.
@@ -1,19 +1,21 @@
1
1
  """Tag to conditionally match cases."""
2
2
 
3
+ import dataclasses
3
4
  from typing import Any, List
4
5
 
5
6
  from reflex.components.tags.tag import Tag
6
- from reflex.vars import Var
7
+ from reflex.vars.base import Var
7
8
 
8
9
 
10
+ @dataclasses.dataclass()
9
11
  class MatchTag(Tag):
10
12
  """A match tag."""
11
13
 
12
14
  # The condition to determine which case to match.
13
- cond: Var[Any]
15
+ cond: Var[Any] = dataclasses.field(default_factory=lambda: Var.create(True))
14
16
 
15
17
  # The list of match cases to be matched.
16
- match_cases: List[Any]
18
+ match_cases: List[Any] = dataclasses.field(default_factory=list)
17
19
 
18
20
  # The catchall case to match.
19
- default: Any
21
+ default: Any = dataclasses.field(default=Var.create(None))
@@ -2,22 +2,23 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- from typing import Any, Dict, List, Optional, Set, Tuple, Union
5
+ import dataclasses
6
+ from typing import Any, Dict, List, Optional, Tuple, Union
6
7
 
7
- from reflex.base import Base
8
8
  from reflex.event import EventChain
9
9
  from reflex.utils import format, types
10
- from reflex.vars import Var
10
+ from reflex.vars.base import LiteralVar, Var
11
11
 
12
12
 
13
- class Tag(Base):
13
+ @dataclasses.dataclass()
14
+ class Tag:
14
15
  """A React tag."""
15
16
 
16
17
  # The name of the tag.
17
18
  name: str = ""
18
19
 
19
20
  # The props of the tag.
20
- props: Dict[str, Any] = {}
21
+ props: Dict[str, Any] = dataclasses.field(default_factory=dict)
21
22
 
22
23
  # The inner contents of the tag.
23
24
  contents: str = ""
@@ -26,25 +27,18 @@ class Tag(Base):
26
27
  args: Optional[Tuple[str, ...]] = None
27
28
 
28
29
  # Special props that aren't key value pairs.
29
- special_props: Set[Var] = set()
30
+ special_props: List[Var] = dataclasses.field(default_factory=list)
30
31
 
31
32
  # The children components.
32
- children: List[Any] = []
33
-
34
- def __init__(self, *args, **kwargs):
35
- """Initialize the tag.
36
-
37
- Args:
38
- *args: Args to initialize the tag.
39
- **kwargs: Kwargs to initialize the tag.
40
- """
41
- # Convert any props to vars.
42
- if "props" in kwargs:
43
- kwargs["props"] = {
44
- name: Var.create(value, _var_is_string=False)
45
- for name, value in kwargs["props"].items()
46
- }
47
- super().__init__(*args, **kwargs)
33
+ children: List[Any] = dataclasses.field(default_factory=list)
34
+
35
+ def __post_init__(self):
36
+ """Post initialize the tag."""
37
+ object.__setattr__(
38
+ self,
39
+ "props",
40
+ {name: LiteralVar.create(value) for name, value in self.props.items()},
41
+ )
48
42
 
49
43
  def format_props(self) -> List:
50
44
  """Format the tag's props.
@@ -54,6 +48,29 @@ class Tag(Base):
54
48
  """
55
49
  return format.format_props(*self.special_props, **self.props)
56
50
 
51
+ def set(self, **kwargs: Any):
52
+ """Set the tag's fields.
53
+
54
+ Args:
55
+ kwargs: The fields to set.
56
+
57
+ Returns:
58
+ The tag with the fields
59
+ """
60
+ for name, value in kwargs.items():
61
+ setattr(self, name, value)
62
+
63
+ return self
64
+
65
+ def __iter__(self):
66
+ """Iterate over the tag's fields.
67
+
68
+ Yields:
69
+ Tuple[str, Any]: The field name and value.
70
+ """
71
+ for field in dataclasses.fields(self):
72
+ yield field.name, getattr(self, field.name)
73
+
57
74
  def add_props(self, **kwargs: Optional[Any]) -> Tag:
58
75
  """Add props to the tag.
59
76
 
@@ -63,14 +80,12 @@ class Tag(Base):
63
80
  Returns:
64
81
  The tag with the props added.
65
82
  """
66
- from reflex.components.core.colors import Color
67
-
68
83
  self.props.update(
69
84
  {
70
- format.to_camel_case(name, allow_hyphens=True): prop
71
- if types._isinstance(prop, Union[EventChain, dict])
72
- else Var.create(
73
- prop, _var_is_string=isinstance(prop, Color)
85
+ format.to_camel_case(name, allow_hyphens=True): (
86
+ prop
87
+ if types._isinstance(prop, Union[EventChain, dict])
88
+ else LiteralVar.create(prop)
74
89
  ) # rx.color is always a string
75
90
  for name, prop in kwargs.items()
76
91
  if self.is_valid_prop(prop)
reflex/constants/base.py CHANGED
@@ -45,6 +45,8 @@ class Dirs(SimpleNamespace):
45
45
  REFLEX_JSON = "reflex.json"
46
46
  # The name of the postcss config file.
47
47
  POSTCSS_JS = "postcss.config.js"
48
+ # The name of the states directory.
49
+ STATES = "states"
48
50
 
49
51
 
50
52
  class Reflex(SimpleNamespace):
@@ -103,7 +105,7 @@ class Templates(SimpleNamespace):
103
105
 
104
106
  # The reflex.build backend host
105
107
  REFLEX_BUILD_BACKEND = os.environ.get(
106
- "REFLEX_BUILD_BACKEND", "https://rxh-prod-flexgen.fly.dev"
108
+ "REFLEX_BUILD_BACKEND", "https://flexgen-prod-flexgen.fly.dev"
107
109
  )
108
110
 
109
111
  # The URL to redirect to reflex.build
reflex/constants/event.py CHANGED
@@ -11,6 +11,7 @@ class Endpoint(Enum):
11
11
  EVENT = "_event"
12
12
  UPLOAD = "_upload"
13
13
  AUTH_CODESPACE = "auth-codespace"
14
+ HEALTH = "_health"
14
15
 
15
16
  def __str__(self) -> str:
16
17
  """Get the string representation of the endpoint.
@@ -65,7 +65,9 @@ def _create_package_config(module_name: str, package_name: str):
65
65
  with open(CustomComponents.PYPROJECT_TOML, "w") as f:
66
66
  f.write(
67
67
  templates.CUSTOM_COMPONENTS_PYPROJECT_TOML.render(
68
- module_name=module_name, package_name=package_name
68
+ module_name=module_name,
69
+ package_name=package_name,
70
+ reflex_version=constants.Reflex.VERSION,
69
71
  )
70
72
  )
71
73