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

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

Potentially problematic release.


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

Files changed (252) hide show
  1. reflex/.templates/jinja/custom_components/pyproject.toml.jinja2 +2 -2
  2. reflex/.templates/jinja/web/pages/_app.js.jinja2 +1 -1
  3. reflex/.templates/jinja/web/pages/utils.js.jinja2 +2 -2
  4. reflex/__init__.py +8 -2
  5. reflex/__init__.pyi +2 -1
  6. reflex/app.py +10 -4
  7. reflex/base.py +1 -1
  8. reflex/compiler/compiler.py +2 -2
  9. reflex/compiler/utils.py +3 -3
  10. reflex/components/base/app_wrap.py +2 -2
  11. reflex/components/base/app_wrap.pyi +17 -27
  12. reflex/components/base/bare.py +4 -5
  13. reflex/components/base/body.pyi +17 -27
  14. reflex/components/base/document.pyi +81 -131
  15. reflex/components/base/error_boundary.py +6 -7
  16. reflex/components/base/error_boundary.pyi +20 -33
  17. reflex/components/base/fragment.pyi +17 -27
  18. reflex/components/base/head.pyi +33 -53
  19. reflex/components/base/link.py +1 -1
  20. reflex/components/base/link.pyi +33 -54
  21. reflex/components/base/meta.pyi +65 -105
  22. reflex/components/base/script.py +1 -2
  23. reflex/components/base/script.pyi +21 -38
  24. reflex/components/component.py +45 -47
  25. reflex/components/core/banner.py +23 -27
  26. reflex/components/core/banner.pyi +134 -171
  27. reflex/components/core/breakpoints.py +3 -1
  28. reflex/components/core/client_side_routing.py +2 -3
  29. reflex/components/core/client_side_routing.pyi +33 -54
  30. reflex/components/core/clipboard.py +2 -1
  31. reflex/components/core/clipboard.pyi +20 -33
  32. reflex/components/core/cond.py +5 -5
  33. reflex/components/core/debounce.py +5 -5
  34. reflex/components/core/debounce.pyi +20 -33
  35. reflex/components/core/foreach.py +3 -4
  36. reflex/components/core/html.py +1 -1
  37. reflex/components/core/html.pyi +35 -46
  38. reflex/components/core/match.py +17 -17
  39. reflex/components/core/upload.py +17 -23
  40. reflex/components/core/upload.pyi +78 -124
  41. reflex/components/datadisplay/code.py +9 -10
  42. reflex/components/datadisplay/code.pyi +302 -412
  43. reflex/components/datadisplay/dataeditor.py +8 -10
  44. reflex/components/datadisplay/dataeditor.pyi +40 -53
  45. reflex/components/el/element.pyi +17 -27
  46. reflex/components/el/elements/base.py +1 -1
  47. reflex/components/el/elements/base.pyi +34 -45
  48. reflex/components/el/elements/forms.py +16 -16
  49. reflex/components/el/elements/forms.pyi +554 -707
  50. reflex/components/el/elements/inline.py +1 -1
  51. reflex/components/el/elements/inline.pyi +937 -1218
  52. reflex/components/el/elements/media.py +1 -1
  53. reflex/components/el/elements/media.pyi +786 -997
  54. reflex/components/el/elements/metadata.py +3 -6
  55. reflex/components/el/elements/metadata.pyi +181 -242
  56. reflex/components/el/elements/other.py +1 -1
  57. reflex/components/el/elements/other.pyi +235 -306
  58. reflex/components/el/elements/scripts.py +1 -1
  59. reflex/components/el/elements/scripts.pyi +109 -140
  60. reflex/components/el/elements/sectioning.py +0 -2
  61. reflex/components/el/elements/sectioning.pyi +496 -647
  62. reflex/components/el/elements/tables.py +1 -1
  63. reflex/components/el/elements/tables.pyi +351 -452
  64. reflex/components/el/elements/typography.py +1 -1
  65. reflex/components/el/elements/typography.pyi +506 -657
  66. reflex/components/gridjs/datatable.py +6 -9
  67. reflex/components/gridjs/datatable.pyi +35 -56
  68. reflex/components/lucide/icon.py +1 -1
  69. reflex/components/lucide/icon.pyi +33 -54
  70. reflex/components/markdown/markdown.py +26 -31
  71. reflex/components/markdown/markdown.pyi +27 -37
  72. reflex/components/moment/moment.py +13 -12
  73. reflex/components/moment/moment.pyi +23 -35
  74. reflex/components/next/base.pyi +17 -27
  75. reflex/components/next/image.py +1 -1
  76. reflex/components/next/image.pyi +22 -37
  77. reflex/components/next/link.py +1 -1
  78. reflex/components/next/link.pyi +17 -28
  79. reflex/components/next/video.py +1 -1
  80. reflex/components/next/video.pyi +17 -28
  81. reflex/components/plotly/plotly.py +12 -13
  82. reflex/components/plotly/plotly.pyi +39 -54
  83. reflex/components/props.py +1 -1
  84. reflex/components/radix/__init__.pyi +1 -0
  85. reflex/components/radix/primitives/__init__.pyi +1 -0
  86. reflex/components/radix/primitives/accordion.py +4 -4
  87. reflex/components/radix/primitives/accordion.pyi +424 -495
  88. reflex/components/radix/primitives/base.py +1 -1
  89. reflex/components/radix/primitives/base.pyi +33 -54
  90. reflex/components/radix/primitives/drawer.py +1 -1
  91. reflex/components/radix/primitives/drawer.pyi +172 -273
  92. reflex/components/radix/primitives/form.py +1 -1
  93. reflex/components/radix/primitives/form.pyi +257 -364
  94. reflex/components/radix/primitives/progress.py +1 -1
  95. reflex/components/radix/primitives/progress.pyi +231 -282
  96. reflex/components/radix/primitives/slider.py +1 -1
  97. reflex/components/radix/primitives/slider.pyi +87 -138
  98. reflex/components/radix/themes/base.py +3 -24
  99. reflex/components/radix/themes/base.pyi +178 -250
  100. reflex/components/radix/themes/color_mode.py +5 -5
  101. reflex/components/radix/themes/color_mode.pyi +187 -220
  102. reflex/components/radix/themes/components/alert_dialog.py +1 -1
  103. reflex/components/radix/themes/components/alert_dialog.pyi +136 -207
  104. reflex/components/radix/themes/components/aspect_ratio.py +1 -1
  105. reflex/components/radix/themes/components/aspect_ratio.pyi +17 -28
  106. reflex/components/radix/themes/components/avatar.py +1 -1
  107. reflex/components/radix/themes/components/avatar.pyi +70 -81
  108. reflex/components/radix/themes/components/badge.py +1 -1
  109. reflex/components/radix/themes/components/badge.pyi +88 -99
  110. reflex/components/radix/themes/components/button.py +1 -1
  111. reflex/components/radix/themes/components/button.pyi +98 -109
  112. reflex/components/radix/themes/components/callout.py +1 -1
  113. reflex/components/radix/themes/components/callout.pyi +322 -373
  114. reflex/components/radix/themes/components/card.py +1 -1
  115. reflex/components/radix/themes/components/card.pyi +38 -49
  116. reflex/components/radix/themes/components/checkbox.py +1 -2
  117. reflex/components/radix/themes/components/checkbox.pyi +208 -245
  118. reflex/components/radix/themes/components/checkbox_cards.py +1 -1
  119. reflex/components/radix/themes/components/checkbox_cards.pyi +94 -115
  120. reflex/components/radix/themes/components/checkbox_group.py +1 -1
  121. reflex/components/radix/themes/components/checkbox_group.pyi +86 -107
  122. reflex/components/radix/themes/components/context_menu.py +1 -1
  123. reflex/components/radix/themes/components/context_menu.pyi +238 -319
  124. reflex/components/radix/themes/components/data_list.py +1 -1
  125. reflex/components/radix/themes/components/data_list.pyi +130 -171
  126. reflex/components/radix/themes/components/dialog.py +1 -1
  127. reflex/components/radix/themes/components/dialog.pyi +139 -210
  128. reflex/components/radix/themes/components/dropdown_menu.py +1 -1
  129. reflex/components/radix/themes/components/dropdown_menu.pyi +249 -332
  130. reflex/components/radix/themes/components/hover_card.py +1 -1
  131. reflex/components/radix/themes/components/hover_card.pyi +90 -131
  132. reflex/components/radix/themes/components/icon_button.py +2 -3
  133. reflex/components/radix/themes/components/icon_button.pyi +98 -109
  134. reflex/components/radix/themes/components/inset.py +1 -1
  135. reflex/components/radix/themes/components/inset.pyi +47 -58
  136. reflex/components/radix/themes/components/popover.py +1 -1
  137. reflex/components/radix/themes/components/popover.pyi +95 -136
  138. reflex/components/radix/themes/components/progress.py +1 -1
  139. reflex/components/radix/themes/components/progress.pyi +71 -82
  140. reflex/components/radix/themes/components/radio.py +1 -1
  141. reflex/components/radix/themes/components/radio.pyi +69 -80
  142. reflex/components/radix/themes/components/radio_cards.py +1 -1
  143. reflex/components/radix/themes/components/radio_cards.pyi +98 -119
  144. reflex/components/radix/themes/components/radio_group.py +8 -11
  145. reflex/components/radix/themes/components/radio_group.pyi +228 -271
  146. reflex/components/radix/themes/components/scroll_area.py +1 -1
  147. reflex/components/radix/themes/components/scroll_area.pyi +21 -32
  148. reflex/components/radix/themes/components/segmented_control.py +1 -1
  149. reflex/components/radix/themes/components/segmented_control.pyi +90 -113
  150. reflex/components/radix/themes/components/select.py +2 -3
  151. reflex/components/radix/themes/components/select.pyi +374 -471
  152. reflex/components/radix/themes/components/separator.py +1 -2
  153. reflex/components/radix/themes/components/separator.pyi +69 -80
  154. reflex/components/radix/themes/components/skeleton.py +1 -1
  155. reflex/components/radix/themes/components/skeleton.pyi +23 -34
  156. reflex/components/radix/themes/components/slider.py +2 -3
  157. reflex/components/radix/themes/components/slider.pyi +75 -88
  158. reflex/components/radix/themes/components/spinner.py +1 -1
  159. reflex/components/radix/themes/components/spinner.pyi +19 -30
  160. reflex/components/radix/themes/components/switch.py +1 -1
  161. reflex/components/radix/themes/components/switch.pyi +71 -84
  162. reflex/components/radix/themes/components/table.py +1 -1
  163. reflex/components/radix/themes/components/table.pyi +261 -332
  164. reflex/components/radix/themes/components/tabs.py +1 -1
  165. reflex/components/radix/themes/components/tabs.pyi +139 -194
  166. reflex/components/radix/themes/components/text_area.py +1 -1
  167. reflex/components/radix/themes/components/text_area.pyi +96 -111
  168. reflex/components/radix/themes/components/text_field.py +1 -1
  169. reflex/components/radix/themes/components/text_field.pyi +247 -286
  170. reflex/components/radix/themes/components/tooltip.py +1 -1
  171. reflex/components/radix/themes/components/tooltip.pyi +26 -37
  172. reflex/components/radix/themes/layout/__init__.pyi +1 -0
  173. reflex/components/radix/themes/layout/base.py +1 -1
  174. reflex/components/radix/themes/layout/base.pyi +56 -67
  175. reflex/components/radix/themes/layout/box.pyi +34 -45
  176. reflex/components/radix/themes/layout/center.pyi +56 -67
  177. reflex/components/radix/themes/layout/container.py +1 -2
  178. reflex/components/radix/themes/layout/container.pyi +36 -47
  179. reflex/components/radix/themes/layout/flex.py +1 -1
  180. reflex/components/radix/themes/layout/flex.pyi +56 -67
  181. reflex/components/radix/themes/layout/grid.py +1 -1
  182. reflex/components/radix/themes/layout/grid.pyi +64 -75
  183. reflex/components/radix/themes/layout/list.py +5 -6
  184. reflex/components/radix/themes/layout/list.pyi +193 -244
  185. reflex/components/radix/themes/layout/section.py +1 -2
  186. reflex/components/radix/themes/layout/section.pyi +36 -47
  187. reflex/components/radix/themes/layout/spacer.pyi +56 -67
  188. reflex/components/radix/themes/layout/stack.py +1 -1
  189. reflex/components/radix/themes/layout/stack.pyi +128 -159
  190. reflex/components/radix/themes/typography/blockquote.py +1 -1
  191. reflex/components/radix/themes/typography/blockquote.pyi +89 -100
  192. reflex/components/radix/themes/typography/code.py +1 -1
  193. reflex/components/radix/themes/typography/code.pyi +90 -101
  194. reflex/components/radix/themes/typography/heading.py +1 -1
  195. reflex/components/radix/themes/typography/heading.pyi +96 -107
  196. reflex/components/radix/themes/typography/link.py +1 -1
  197. reflex/components/radix/themes/typography/link.pyi +102 -113
  198. reflex/components/radix/themes/typography/text.py +1 -1
  199. reflex/components/radix/themes/typography/text.pyi +501 -572
  200. reflex/components/react_player/audio.pyi +33 -60
  201. reflex/components/react_player/react_player.py +1 -1
  202. reflex/components/react_player/react_player.pyi +33 -60
  203. reflex/components/react_player/video.pyi +33 -60
  204. reflex/components/recharts/cartesian.py +2 -3
  205. reflex/components/recharts/cartesian.pyi +678 -861
  206. reflex/components/recharts/charts.py +4 -5
  207. reflex/components/recharts/charts.pyi +252 -357
  208. reflex/components/recharts/general.py +1 -2
  209. reflex/components/recharts/general.pyi +180 -231
  210. reflex/components/recharts/polar.py +4 -5
  211. reflex/components/recharts/polar.pyi +144 -181
  212. reflex/components/recharts/recharts.pyi +33 -53
  213. reflex/components/sonner/toast.py +16 -17
  214. reflex/components/sonner/toast.pyi +36 -47
  215. reflex/components/suneditor/editor.py +2 -3
  216. reflex/components/suneditor/editor.pyi +55 -78
  217. reflex/components/tags/cond_tag.py +6 -4
  218. reflex/components/tags/iter_tag.py +28 -16
  219. reflex/components/tags/match_tag.py +6 -4
  220. reflex/components/tags/tag.py +40 -23
  221. reflex/custom_components/custom_components.py +3 -1
  222. reflex/event.py +115 -67
  223. reflex/experimental/client_state.py +18 -18
  224. reflex/experimental/hooks.py +16 -16
  225. reflex/experimental/layout.py +5 -5
  226. reflex/experimental/layout.pyi +136 -187
  227. reflex/middleware/hydrate_middleware.py +2 -0
  228. reflex/middleware/middleware.py +3 -3
  229. reflex/state.py +149 -82
  230. reflex/style.py +21 -22
  231. reflex/utils/exceptions.py +20 -0
  232. reflex/utils/format.py +54 -34
  233. reflex/utils/imports.py +16 -73
  234. reflex/utils/prerequisites.py +15 -8
  235. reflex/utils/pyi_generator.py +13 -8
  236. reflex/utils/serializers.py +12 -22
  237. reflex/utils/telemetry.py +3 -2
  238. reflex/utils/types.py +11 -6
  239. reflex/{ivars → vars}/__init__.py +6 -2
  240. reflex/{ivars → vars}/base.py +599 -216
  241. reflex/{ivars → vars}/function.py +15 -19
  242. reflex/{ivars → vars}/number.py +41 -20
  243. reflex/{ivars → vars}/object.py +28 -30
  244. reflex/{ivars → vars}/sequence.py +53 -42
  245. {reflex-0.6.0a1.dist-info → reflex-0.6.0a3.dist-info}/METADATA +4 -6
  246. reflex-0.6.0a3.dist-info/RECORD +382 -0
  247. reflex/.templates/web/components/reflex/chakra_color_mode_provider.js +0 -36
  248. reflex/vars.py +0 -501
  249. reflex-0.6.0a1.dist-info/RECORD +0 -384
  250. {reflex-0.6.0a1.dist-info → reflex-0.6.0a3.dist-info}/LICENSE +0 -0
  251. {reflex-0.6.0a1.dist-info → reflex-0.6.0a3.dist-info}/WHEEL +0 -0
  252. {reflex-0.6.0a1.dist-info → reflex-0.6.0a3.dist-info}/entry_points.txt +0 -0
@@ -28,22 +28,19 @@ from reflex import constants
28
28
  from reflex.constants.base import REFLEX_VAR_OPENING_TAG
29
29
  from reflex.utils.exceptions import VarTypeError
30
30
  from reflex.utils.types import GenericType, get_origin
31
- from reflex.vars import (
32
- Var,
33
- VarData,
34
- _global_vars,
35
- get_unique_variable_name,
36
- )
37
31
 
38
32
  from .base import (
39
33
  CachedVarOperation,
40
34
  CustomVarOperationReturn,
41
- ImmutableVar,
42
35
  LiteralNoneVar,
43
36
  LiteralVar,
44
37
  ToOperation,
38
+ Var,
39
+ VarData,
40
+ _global_vars,
45
41
  cached_property_no_lock,
46
42
  figure_out_type,
43
+ get_unique_variable_name,
47
44
  unionize,
48
45
  var_operation,
49
46
  var_operation_return,
@@ -59,7 +56,7 @@ if TYPE_CHECKING:
59
56
  from .object import ObjectVar
60
57
 
61
58
 
62
- class StringVar(ImmutableVar[str]):
59
+ class StringVar(Var[str]):
63
60
  """Base class for immutable string vars."""
64
61
 
65
62
  @overload
@@ -556,19 +553,21 @@ class LiteralStringVar(LiteralVar, StringVar):
556
553
  def create(
557
554
  cls,
558
555
  value: str,
556
+ _var_type: GenericType | None = str,
559
557
  _var_data: VarData | None = None,
560
558
  ) -> StringVar:
561
559
  """Create a var from a string value.
562
560
 
563
561
  Args:
564
562
  value: The value to create the var from.
563
+ _var_type: The type of the var.
565
564
  _var_data: Additional hooks and imports associated with the Var.
566
565
 
567
566
  Returns:
568
567
  The var.
569
568
  """
570
569
  if REFLEX_VAR_OPENING_TAG in value:
571
- strings_and_vals: list[ImmutableVar | str] = []
570
+ strings_and_vals: list[Var | str] = []
572
571
  offset = 0
573
572
 
574
573
  # Find all tags
@@ -585,27 +584,36 @@ class LiteralStringVar(LiteralVar, StringVar):
585
584
  # This is a global immutable var.
586
585
  var = _global_vars[int(serialized_data)]
587
586
  strings_and_vals.append(var)
588
- value = value[(end + len(var._var_name)) :]
587
+ value = value[(end + len(var._js_expr)) :]
589
588
 
590
589
  offset += end - start
591
590
 
592
591
  strings_and_vals.append(value)
593
592
 
594
593
  filtered_strings_and_vals = [
595
- s for s in strings_and_vals if isinstance(s, ImmutableVar) or s
594
+ s for s in strings_and_vals if isinstance(s, Var) or s
596
595
  ]
597
-
598
596
  if len(filtered_strings_and_vals) == 1:
599
- return LiteralVar.create(filtered_strings_and_vals[0]).to(StringVar)
597
+ only_string = filtered_strings_and_vals[0]
598
+ if isinstance(only_string, str):
599
+ return LiteralVar.create(only_string).to(StringVar, _var_type)
600
+ else:
601
+ return only_string.to(StringVar, only_string._var_type)
600
602
 
601
- return ConcatVarOperation.create(
603
+ concat_result = ConcatVarOperation.create(
602
604
  *filtered_strings_and_vals,
603
605
  _var_data=_var_data,
604
606
  )
605
607
 
608
+ return (
609
+ concat_result
610
+ if _var_type is str
611
+ else concat_result.to(StringVar, _var_type)
612
+ )
613
+
606
614
  return LiteralStringVar(
607
- _var_name=json.dumps(value),
608
- _var_type=str,
615
+ _js_expr=json.dumps(value),
616
+ _var_type=_var_type,
609
617
  _var_data=_var_data,
610
618
  _var_value=value,
611
619
  )
@@ -635,7 +643,7 @@ class LiteralStringVar(LiteralVar, StringVar):
635
643
  class ConcatVarOperation(CachedVarOperation, StringVar):
636
644
  """Representing a concatenation of literal string vars."""
637
645
 
638
- _var_value: Tuple[ImmutableVar, ...] = dataclasses.field(default_factory=tuple)
646
+ _var_value: Tuple[Var, ...] = dataclasses.field(default_factory=tuple)
639
647
 
640
648
  @cached_property_no_lock
641
649
  def _cached_var_name(self) -> str:
@@ -644,7 +652,7 @@ class ConcatVarOperation(CachedVarOperation, StringVar):
644
652
  Returns:
645
653
  The name of the var.
646
654
  """
647
- list_of_strs: List[Union[str, ImmutableVar]] = []
655
+ list_of_strs: List[Union[str, Var]] = []
648
656
  last_string = ""
649
657
  for var in self._var_value:
650
658
  if isinstance(var, LiteralStringVar):
@@ -659,9 +667,7 @@ class ConcatVarOperation(CachedVarOperation, StringVar):
659
667
  list_of_strs.append(last_string)
660
668
 
661
669
  list_of_strs_filtered = [
662
- str(LiteralVar.create(s))
663
- for s in list_of_strs
664
- if isinstance(s, ImmutableVar) or s
670
+ str(LiteralVar.create(s)) for s in list_of_strs if isinstance(s, Var) or s
665
671
  ]
666
672
 
667
673
  if len(list_of_strs_filtered) == 1:
@@ -680,7 +686,7 @@ class ConcatVarOperation(CachedVarOperation, StringVar):
680
686
  *[
681
687
  var._get_all_var_data()
682
688
  for var in self._var_value
683
- if isinstance(var, ImmutableVar)
689
+ if isinstance(var, Var)
684
690
  ],
685
691
  self._var_data,
686
692
  )
@@ -701,7 +707,7 @@ class ConcatVarOperation(CachedVarOperation, StringVar):
701
707
  The var.
702
708
  """
703
709
  return cls(
704
- _var_name="",
710
+ _js_expr="",
705
711
  _var_type=str,
706
712
  _var_data=_var_data,
707
713
  _var_value=tuple(map(LiteralVar.create, value)),
@@ -718,7 +724,7 @@ KEY_TYPE = TypeVar("KEY_TYPE")
718
724
  VALUE_TYPE = TypeVar("VALUE_TYPE")
719
725
 
720
726
 
721
- class ArrayVar(ImmutableVar[ARRAY_VAR_TYPE]):
727
+ class ArrayVar(Var[ARRAY_VAR_TYPE]):
722
728
  """Base class for immutable array vars."""
723
729
 
724
730
  @overload
@@ -856,9 +862,9 @@ class ArrayVar(ImmutableVar[ARRAY_VAR_TYPE]):
856
862
  ) -> ObjectVar[Dict[KEY_TYPE, VALUE_TYPE]]: ...
857
863
 
858
864
  @overload
859
- def __getitem__(self, i: int | NumberVar) -> ImmutableVar: ...
865
+ def __getitem__(self, i: int | NumberVar) -> Var: ...
860
866
 
861
- def __getitem__(self, i: Any) -> ArrayVar[ARRAY_VAR_TYPE] | ImmutableVar:
867
+ def __getitem__(self, i: Any) -> ArrayVar[ARRAY_VAR_TYPE] | Var:
862
868
  """Get a slice of the array.
863
869
 
864
870
  Args:
@@ -897,6 +903,15 @@ class ArrayVar(ImmutableVar[ARRAY_VAR_TYPE]):
897
903
  /,
898
904
  ) -> ArrayVar[List[int]]: ...
899
905
 
906
+ @overload
907
+ @classmethod
908
+ def range(
909
+ cls,
910
+ first_endpoint: int | NumberVar,
911
+ second_endpoint: int | NumberVar | None = None,
912
+ step: int | NumberVar | None = None,
913
+ ) -> ArrayVar[List[int]]: ...
914
+
900
915
  @classmethod
901
916
  def range(
902
917
  cls,
@@ -1096,15 +1111,15 @@ class ArrayVar(ImmutableVar[ARRAY_VAR_TYPE]):
1096
1111
  function_var = ArgsFunctionOperation.create(tuple(), return_value)
1097
1112
  else:
1098
1113
  # generic number var
1099
- number_var = ImmutableVar("").to(NumberVar)
1114
+ number_var = Var("").to(NumberVar)
1100
1115
 
1101
1116
  first_arg_type = self[number_var]._var_type
1102
1117
 
1103
1118
  arg_name = get_unique_variable_name()
1104
1119
 
1105
1120
  # get first argument type
1106
- first_arg = ImmutableVar(
1107
- _var_name=arg_name,
1121
+ first_arg = Var(
1122
+ _js_expr=arg_name,
1108
1123
  _var_type=first_arg_type,
1109
1124
  ).guess_type()
1110
1125
 
@@ -1131,9 +1146,9 @@ class LiteralArrayVar(CachedVarOperation, LiteralVar, ArrayVar[ARRAY_VAR_TYPE]):
1131
1146
  """Base class for immutable literal array vars."""
1132
1147
 
1133
1148
  _var_value: Union[
1134
- List[Union[ImmutableVar, Any]],
1135
- Set[Union[ImmutableVar, Any]],
1136
- Tuple[Union[ImmutableVar, Any], ...],
1149
+ List[Union[Var, Any]],
1150
+ Set[Union[Var, Any]],
1151
+ Tuple[Union[Var, Any], ...],
1137
1152
  ] = dataclasses.field(default_factory=list)
1138
1153
 
1139
1154
  @cached_property_no_lock
@@ -1172,7 +1187,7 @@ class LiteralArrayVar(CachedVarOperation, LiteralVar, ArrayVar[ARRAY_VAR_TYPE]):
1172
1187
  Returns:
1173
1188
  The hash of the var.
1174
1189
  """
1175
- return hash((self.__class__.__name__, self._var_name))
1190
+ return hash((self.__class__.__name__, self._js_expr))
1176
1191
 
1177
1192
  def json(self) -> str:
1178
1193
  """Get the JSON representation of the var.
@@ -1205,7 +1220,7 @@ class LiteralArrayVar(CachedVarOperation, LiteralVar, ArrayVar[ARRAY_VAR_TYPE]):
1205
1220
  The var.
1206
1221
  """
1207
1222
  return cls(
1208
- _var_name="",
1223
+ _js_expr="",
1209
1224
  _var_type=figure_out_type(value) if _var_type is None else _var_type,
1210
1225
  _var_data=_var_data,
1211
1226
  _var_value=value,
@@ -1256,18 +1271,14 @@ class ArraySliceOperation(CachedVarOperation, ArrayVar):
1256
1271
  start, end, step = self._start, self._stop, self._step
1257
1272
 
1258
1273
  normalized_start = (
1259
- LiteralVar.create(start)
1260
- if start is not None
1261
- else ImmutableVar.create_safe("undefined")
1274
+ LiteralVar.create(start) if start is not None else Var(_js_expr="undefined")
1262
1275
  )
1263
1276
  normalized_end = (
1264
- LiteralVar.create(end)
1265
- if end is not None
1266
- else ImmutableVar.create_safe("undefined")
1277
+ LiteralVar.create(end) if end is not None else Var(_js_expr="undefined")
1267
1278
  )
1268
1279
  if step is None:
1269
1280
  return f"{str(self._array)}.slice({str(normalized_start)}, {str(normalized_end)})"
1270
- if not isinstance(step, ImmutableVar):
1281
+ if not isinstance(step, Var):
1271
1282
  if step < 0:
1272
1283
  actual_start = end + 1 if end is not None else 0
1273
1284
  actual_end = start + 1 if start is not None else self._array.length()
@@ -1299,7 +1310,7 @@ class ArraySliceOperation(CachedVarOperation, ArrayVar):
1299
1310
  The var.
1300
1311
  """
1301
1312
  return cls(
1302
- _var_name="",
1313
+ _js_expr="",
1303
1314
  _var_type=array._var_type,
1304
1315
  _var_data=_var_data,
1305
1316
  _array=array,
@@ -1,18 +1,16 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: reflex
3
- Version: 0.6.0a1
3
+ Version: 0.6.0a3
4
4
  Summary: Web apps in pure Python.
5
5
  Home-page: https://reflex.dev
6
6
  License: Apache-2.0
7
7
  Keywords: web,framework
8
8
  Author: Nikhil Rao
9
9
  Author-email: nikhil@reflex.dev
10
- Requires-Python: >=3.8,<4.0
10
+ Requires-Python: >=3.10,<4.0
11
11
  Classifier: Development Status :: 4 - Beta
12
12
  Classifier: License :: OSI Approved :: Apache Software License
13
13
  Classifier: Programming Language :: Python :: 3
14
- Classifier: Programming Language :: Python :: 3.8
15
- Classifier: Programming Language :: Python :: 3.9
16
14
  Classifier: Programming Language :: Python :: 3.10
17
15
  Classifier: Programming Language :: Python :: 3.11
18
16
  Classifier: Programming Language :: Python :: 3.12
@@ -34,7 +32,7 @@ Requires-Dist: python-engineio (!=4.6.0)
34
32
  Requires-Dist: python-multipart (>=0.0.5,<0.1)
35
33
  Requires-Dist: python-socketio (>=5.7.0,<6.0)
36
34
  Requires-Dist: redis (>=4.3.5,<6.0)
37
- Requires-Dist: reflex-chakra (>=0.6.0a)
35
+ Requires-Dist: reflex-chakra (>=0.6.0a6)
38
36
  Requires-Dist: reflex-hosting-cli (>=0.1.2,<2.0)
39
37
  Requires-Dist: rich (>=13.0.0,<14.0)
40
38
  Requires-Dist: setuptools (>=69.1.1,<70.2)
@@ -88,7 +86,7 @@ See our [architecture page](https://reflex.dev/blog/2024-03-21-reflex-architectu
88
86
 
89
87
  ## ⚙️ Installation
90
88
 
91
- Open a terminal and run (Requires Python 3.8+):
89
+ Open a terminal and run (Requires Python 3.10+):
92
90
 
93
91
  ```bash
94
92
  pip install reflex