reflex 0.7.1a4__py3-none-any.whl → 0.7.2a1__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 (226) hide show
  1. reflex/.templates/jinja/web/utils/context.js.jinja2 +8 -8
  2. reflex/.templates/web/components/reflex/radix_themes_color_mode_provider.js +3 -3
  3. reflex/admin.py +1 -2
  4. reflex/app.py +46 -49
  5. reflex/app_mixins/lifespan.py +2 -2
  6. reflex/app_mixins/middleware.py +1 -2
  7. reflex/assets.py +1 -2
  8. reflex/base.py +2 -2
  9. reflex/compiler/compiler.py +51 -16
  10. reflex/compiler/utils.py +4 -13
  11. reflex/components/base/app_wrap.pyi +7 -7
  12. reflex/components/base/bare.py +3 -3
  13. reflex/components/base/body.pyi +7 -7
  14. reflex/components/base/document.py +1 -3
  15. reflex/components/base/document.pyi +32 -32
  16. reflex/components/base/error_boundary.py +2 -4
  17. reflex/components/base/error_boundary.pyi +11 -13
  18. reflex/components/base/fragment.pyi +7 -7
  19. reflex/components/base/head.pyi +13 -13
  20. reflex/components/base/link.pyi +22 -22
  21. reflex/components/base/meta.py +5 -7
  22. reflex/components/base/meta.pyi +40 -40
  23. reflex/components/base/script.pyi +11 -14
  24. reflex/components/base/strict_mode.pyi +7 -7
  25. reflex/components/component.py +188 -113
  26. reflex/components/core/auto_scroll.py +8 -1
  27. reflex/components/core/auto_scroll.pyi +183 -210
  28. reflex/components/core/banner.py +2 -4
  29. reflex/components/core/banner.pyi +390 -444
  30. reflex/components/core/breakpoints.py +5 -5
  31. reflex/components/core/client_side_routing.pyi +14 -14
  32. reflex/components/core/clipboard.py +4 -4
  33. reflex/components/core/clipboard.pyi +12 -14
  34. reflex/components/core/cond.py +17 -25
  35. reflex/components/core/debounce.py +3 -3
  36. reflex/components/core/debounce.pyi +14 -14
  37. reflex/components/core/foreach.py +7 -2
  38. reflex/components/core/html.py +1 -3
  39. reflex/components/core/html.pyi +184 -213
  40. reflex/components/core/match.py +15 -19
  41. reflex/components/core/sticky.pyi +930 -1078
  42. reflex/components/core/upload.py +4 -4
  43. reflex/components/core/upload.pyi +62 -62
  44. reflex/components/datadisplay/code.py +6 -6
  45. reflex/components/datadisplay/code.pyi +1159 -1165
  46. reflex/components/datadisplay/dataeditor.py +49 -49
  47. reflex/components/datadisplay/dataeditor.pyi +95 -123
  48. reflex/components/datadisplay/logo.py +1 -3
  49. reflex/components/datadisplay/shiki_code_block.py +8 -10
  50. reflex/components/datadisplay/shiki_code_block.pyi +1678 -1720
  51. reflex/components/el/element.pyi +7 -7
  52. reflex/components/el/elements/base.pyi +183 -210
  53. reflex/components/el/elements/forms.py +23 -23
  54. reflex/components/el/elements/forms.pyi +2571 -2933
  55. reflex/components/el/elements/inline.py +4 -4
  56. reflex/components/el/elements/inline.pyi +5191 -5953
  57. reflex/components/el/elements/media.py +47 -47
  58. reflex/components/el/elements/media.pyi +4802 -5500
  59. reflex/components/el/elements/metadata.py +1 -3
  60. reflex/components/el/elements/metadata.pyi +782 -896
  61. reflex/components/el/elements/other.pyi +1278 -1467
  62. reflex/components/el/elements/scripts.pyi +580 -667
  63. reflex/components/el/elements/sectioning.pyi +2761 -3166
  64. reflex/components/el/elements/tables.pyi +1840 -2119
  65. reflex/components/el/elements/typography.pyi +2772 -3179
  66. reflex/components/gridjs/datatable.py +7 -7
  67. reflex/components/gridjs/datatable.pyi +19 -19
  68. reflex/components/lucide/icon.pyi +21 -21
  69. reflex/components/markdown/markdown.py +2 -2
  70. reflex/components/markdown/markdown.pyi +9 -9
  71. reflex/components/moment/moment.py +11 -12
  72. reflex/components/moment/moment.pyi +44 -47
  73. reflex/components/next/base.pyi +7 -7
  74. reflex/components/next/image.py +3 -3
  75. reflex/components/next/image.pyi +19 -21
  76. reflex/components/next/link.pyi +9 -9
  77. reflex/components/next/video.py +1 -3
  78. reflex/components/next/video.pyi +9 -9
  79. reflex/components/plotly/plotly.py +22 -45
  80. reflex/components/plotly/plotly.pyi +164 -164
  81. reflex/components/radix/primitives/accordion.py +14 -14
  82. reflex/components/radix/primitives/accordion.pyi +439 -487
  83. reflex/components/radix/primitives/base.py +1 -3
  84. reflex/components/radix/primitives/base.pyi +15 -15
  85. reflex/components/radix/primitives/drawer.py +3 -3
  86. reflex/components/radix/primitives/drawer.pyi +110 -116
  87. reflex/components/radix/primitives/form.py +1 -1
  88. reflex/components/radix/primitives/form.pyi +668 -752
  89. reflex/components/radix/primitives/progress.py +6 -6
  90. reflex/components/radix/primitives/progress.pyi +225 -243
  91. reflex/components/radix/primitives/slider.py +6 -6
  92. reflex/components/radix/primitives/slider.pyi +52 -55
  93. reflex/components/radix/themes/base.py +3 -6
  94. reflex/components/radix/themes/base.pyi +197 -303
  95. reflex/components/radix/themes/color_mode.py +5 -5
  96. reflex/components/radix/themes/color_mode.pyi +366 -436
  97. reflex/components/radix/themes/components/alert_dialog.pyi +229 -262
  98. reflex/components/radix/themes/components/aspect_ratio.py +1 -3
  99. reflex/components/radix/themes/components/aspect_ratio.pyi +8 -8
  100. reflex/components/radix/themes/components/avatar.pyi +79 -94
  101. reflex/components/radix/themes/components/badge.pyi +252 -295
  102. reflex/components/radix/themes/components/button.pyi +269 -314
  103. reflex/components/radix/themes/components/callout.py +2 -2
  104. reflex/components/radix/themes/components/callout.pyi +1116 -1290
  105. reflex/components/radix/themes/components/card.pyi +194 -229
  106. reflex/components/radix/themes/components/checkbox.pyi +243 -278
  107. reflex/components/radix/themes/components/checkbox_cards.py +3 -7
  108. reflex/components/radix/themes/components/checkbox_cards.pyi +101 -135
  109. reflex/components/radix/themes/components/checkbox_group.py +2 -2
  110. reflex/components/radix/themes/components/checkbox_group.pyi +83 -96
  111. reflex/components/radix/themes/components/context_menu.py +18 -15
  112. reflex/components/radix/themes/components/context_menu.pyi +408 -458
  113. reflex/components/radix/themes/components/data_list.pyi +122 -147
  114. reflex/components/radix/themes/components/dialog.pyi +231 -264
  115. reflex/components/radix/themes/components/dropdown_menu.py +16 -13
  116. reflex/components/radix/themes/components/dropdown_menu.pyi +223 -246
  117. reflex/components/radix/themes/components/hover_card.py +2 -2
  118. reflex/components/radix/themes/components/hover_card.pyi +237 -282
  119. reflex/components/radix/themes/components/icon_button.pyi +269 -314
  120. reflex/components/radix/themes/components/inset.py +8 -8
  121. reflex/components/radix/themes/components/inset.pyi +232 -292
  122. reflex/components/radix/themes/components/popover.py +2 -2
  123. reflex/components/radix/themes/components/popover.pyi +229 -271
  124. reflex/components/radix/themes/components/progress.pyi +80 -96
  125. reflex/components/radix/themes/components/radio.pyi +73 -86
  126. reflex/components/radix/themes/components/radio_cards.py +4 -8
  127. reflex/components/radix/themes/components/radio_cards.pyi +117 -154
  128. reflex/components/radix/themes/components/radio_group.py +3 -3
  129. reflex/components/radix/themes/components/radio_group.pyi +250 -291
  130. reflex/components/radix/themes/components/scroll_area.pyi +14 -20
  131. reflex/components/radix/themes/components/segmented_control.py +6 -6
  132. reflex/components/radix/themes/components/segmented_control.pyi +89 -108
  133. reflex/components/radix/themes/components/select.py +7 -7
  134. reflex/components/radix/themes/components/select.pyi +376 -444
  135. reflex/components/radix/themes/components/separator.pyi +79 -93
  136. reflex/components/radix/themes/components/skeleton.pyi +32 -26
  137. reflex/components/radix/themes/components/slider.py +8 -8
  138. reflex/components/radix/themes/components/slider.pyi +99 -122
  139. reflex/components/radix/themes/components/spinner.pyi +12 -19
  140. reflex/components/radix/themes/components/switch.pyi +84 -99
  141. reflex/components/radix/themes/components/table.py +9 -9
  142. reflex/components/radix/themes/components/table.pyi +1440 -1794
  143. reflex/components/radix/themes/components/tabs.py +4 -4
  144. reflex/components/radix/themes/components/tabs.pyi +120 -132
  145. reflex/components/radix/themes/components/text_area.pyi +281 -331
  146. reflex/components/radix/themes/components/text_field.py +2 -2
  147. reflex/components/radix/themes/components/text_field.pyi +639 -734
  148. reflex/components/radix/themes/components/tooltip.py +6 -6
  149. reflex/components/radix/themes/components/tooltip.pyi +34 -43
  150. reflex/components/radix/themes/layout/base.pyi +85 -182
  151. reflex/components/radix/themes/layout/box.pyi +183 -210
  152. reflex/components/radix/themes/layout/center.pyi +225 -286
  153. reflex/components/radix/themes/layout/container.pyi +191 -224
  154. reflex/components/radix/themes/layout/flex.py +2 -2
  155. reflex/components/radix/themes/layout/flex.pyi +225 -286
  156. reflex/components/radix/themes/layout/grid.py +2 -2
  157. reflex/components/radix/themes/layout/grid.pyi +245 -315
  158. reflex/components/radix/themes/layout/list.py +2 -2
  159. reflex/components/radix/themes/layout/list.pyi +712 -815
  160. reflex/components/radix/themes/layout/section.pyi +187 -221
  161. reflex/components/radix/themes/layout/spacer.pyi +225 -286
  162. reflex/components/radix/themes/layout/stack.pyi +625 -768
  163. reflex/components/radix/themes/typography/blockquote.pyi +257 -299
  164. reflex/components/radix/themes/typography/code.pyi +259 -304
  165. reflex/components/radix/themes/typography/heading.pyi +272 -324
  166. reflex/components/radix/themes/typography/link.pyi +302 -358
  167. reflex/components/radix/themes/typography/text.pyi +1669 -1945
  168. reflex/components/react_player/audio.pyi +20 -22
  169. reflex/components/react_player/react_player.pyi +19 -19
  170. reflex/components/react_player/video.pyi +20 -22
  171. reflex/components/recharts/cartesian.py +100 -97
  172. reflex/components/recharts/cartesian.pyi +891 -1007
  173. reflex/components/recharts/charts.py +42 -42
  174. reflex/components/recharts/charts.pyi +212 -249
  175. reflex/components/recharts/general.py +22 -21
  176. reflex/components/recharts/general.pyi +198 -223
  177. reflex/components/recharts/polar.py +42 -45
  178. reflex/components/recharts/polar.pyi +254 -288
  179. reflex/components/recharts/recharts.pyi +13 -13
  180. reflex/components/sonner/toast.py +20 -20
  181. reflex/components/sonner/toast.pyi +58 -61
  182. reflex/components/suneditor/editor.py +9 -9
  183. reflex/components/suneditor/editor.pyi +78 -83
  184. reflex/components/tags/cond_tag.py +2 -2
  185. reflex/components/tags/iter_tag.py +10 -14
  186. reflex/components/tags/match_tag.py +2 -2
  187. reflex/components/tags/tag.py +10 -10
  188. reflex/config.py +36 -35
  189. reflex/constants/__init__.py +56 -53
  190. reflex/custom_components/custom_components.py +6 -7
  191. reflex/event.py +38 -42
  192. reflex/experimental/client_state.py +2 -4
  193. reflex/experimental/layout.py +2 -2
  194. reflex/experimental/layout.pyi +579 -663
  195. reflex/istate/data.py +4 -5
  196. reflex/middleware/hydrate_middleware.py +2 -2
  197. reflex/middleware/middleware.py +2 -2
  198. reflex/model.py +3 -5
  199. reflex/page.py +2 -2
  200. reflex/reflex.py +9 -10
  201. reflex/state.py +77 -49
  202. reflex/style.py +9 -3
  203. reflex/testing.py +21 -24
  204. reflex/utils/console.py +1 -1
  205. reflex/utils/decorator.py +26 -1
  206. reflex/utils/exec.py +6 -11
  207. reflex/utils/export.py +2 -3
  208. reflex/utils/format.py +4 -4
  209. reflex/utils/imports.py +12 -12
  210. reflex/utils/prerequisites.py +35 -84
  211. reflex/utils/processes.py +5 -5
  212. reflex/utils/pyi_generator.py +33 -22
  213. reflex/utils/serializers.py +60 -15
  214. reflex/utils/types.py +237 -56
  215. reflex/vars/base.py +122 -72
  216. reflex/vars/datetime.py +2 -2
  217. reflex/vars/function.py +52 -55
  218. reflex/vars/number.py +59 -5
  219. reflex/vars/object.py +57 -26
  220. reflex/vars/sequence.py +983 -958
  221. {reflex-0.7.1a4.dist-info → reflex-0.7.2a1.dist-info}/METADATA +3 -6
  222. reflex-0.7.2a1.dist-info/RECORD +405 -0
  223. {reflex-0.7.1a4.dist-info → reflex-0.7.2a1.dist-info}/WHEEL +1 -1
  224. reflex-0.7.1a4.dist-info/RECORD +0 -405
  225. {reflex-0.7.1a4.dist-info → reflex-0.7.2a1.dist-info}/LICENSE +0 -0
  226. {reflex-0.7.1a4.dist-info → reflex-0.7.2a1.dist-info}/entry_points.txt +0 -0
@@ -2,13 +2,13 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- from typing import Dict, Tuple, TypeVar, Union
5
+ from typing import TypeVar
6
6
 
7
7
  breakpoints_values = ["30em", "48em", "62em", "80em", "96em"]
8
8
  breakpoint_names = ["xs", "sm", "md", "lg", "xl"]
9
9
 
10
10
 
11
- def set_breakpoints(values: Tuple[str, str, str, str, str]):
11
+ def set_breakpoints(values: tuple[str, str, str, str, str]):
12
12
  """Overwrite default breakpoint values.
13
13
 
14
14
  Args:
@@ -22,7 +22,7 @@ K = TypeVar("K", bound=str)
22
22
  V = TypeVar("V")
23
23
 
24
24
 
25
- class Breakpoints(Dict[K, V]):
25
+ class Breakpoints(dict[K, V]):
26
26
  """A responsive styling helper."""
27
27
 
28
28
  def factorize(self):
@@ -46,7 +46,7 @@ class Breakpoints(Dict[K, V]):
46
46
  @classmethod
47
47
  def create(
48
48
  cls,
49
- custom: Dict[K, V] | None = None,
49
+ custom: dict[K, V] | None = None,
50
50
  initial: V | None = None,
51
51
  xs: V | None = None,
52
52
  sm: V | None = None,
@@ -94,4 +94,4 @@ breakpoints = Breakpoints.create
94
94
 
95
95
  T = TypeVar("T")
96
96
 
97
- Responsive = Union[T, Breakpoints[str, T]]
97
+ Responsive = T | Breakpoints[str, T]
@@ -3,7 +3,7 @@
3
3
  # ------------------- DO NOT EDIT ----------------------
4
4
  # This file was generated by `reflex/utils/pyi_generator.py`!
5
5
  # ------------------------------------------------------
6
- from typing import Any, Dict, Optional, Union, overload
6
+ from typing import Any, Optional, overload
7
7
 
8
8
  from reflex.components.component import Component
9
9
  from reflex.event import EventType
@@ -20,12 +20,12 @@ class ClientSideRouting(Component):
20
20
  def create( # type: ignore
21
21
  cls,
22
22
  *children,
23
- style: Optional[Style] = None,
24
- key: Optional[Any] = None,
25
- id: Optional[Any] = None,
26
- class_name: Optional[Any] = None,
27
- autofocus: Optional[bool] = None,
28
- custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None,
23
+ style: Style | None = None,
24
+ key: Any | None = None,
25
+ id: Any | None = None,
26
+ class_name: Any | None = None,
27
+ autofocus: bool | None = None,
28
+ custom_attrs: dict[str, Var | Any] | None = None,
29
29
  on_blur: Optional[EventType[()]] = None,
30
30
  on_click: Optional[EventType[()]] = None,
31
31
  on_context_menu: Optional[EventType[()]] = None,
@@ -68,13 +68,13 @@ class Default404Page(Component):
68
68
  def create( # type: ignore
69
69
  cls,
70
70
  *children,
71
- status_code: Optional[Union[Var[int], int]] = None,
72
- style: Optional[Style] = None,
73
- key: Optional[Any] = None,
74
- id: Optional[Any] = None,
75
- class_name: Optional[Any] = None,
76
- autofocus: Optional[bool] = None,
77
- custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None,
71
+ status_code: Var[int] | int | None = None,
72
+ style: Style | None = None,
73
+ key: Any | None = None,
74
+ id: Any | None = None,
75
+ class_name: Any | None = None,
76
+ autofocus: bool | None = None,
77
+ custom_attrs: dict[str, Var | Any] | None = None,
78
78
  on_blur: Optional[EventType[()]] = None,
79
79
  on_click: Optional[EventType[()]] = None,
80
80
  on_context_menu: Optional[EventType[()]] = None,
@@ -2,7 +2,7 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- from typing import Dict, List, Tuple, Union
5
+ from typing import Sequence
6
6
 
7
7
  from reflex.components.base.fragment import Fragment
8
8
  from reflex.components.tags.tag import Tag
@@ -18,13 +18,13 @@ class Clipboard(Fragment):
18
18
  """Clipboard component."""
19
19
 
20
20
  # The element ids to attach the event listener to. Defaults to all child components or the document.
21
- targets: Var[List[str]]
21
+ targets: Var[Sequence[str]]
22
22
 
23
23
  # Called when the user pastes data into the document. Data is a list of tuples of (mime_type, data). Binary types will be base64 encoded as a data uri.
24
- on_paste: EventHandler[passthrough_event_spec(List[Tuple[str, str]])]
24
+ on_paste: EventHandler[passthrough_event_spec(list[tuple[str, str]])]
25
25
 
26
26
  # Save the original event actions for the on_paste event.
27
- on_paste_event_actions: Var[Dict[str, Union[bool, int]]]
27
+ on_paste_event_actions: Var[dict[str, bool | int]]
28
28
 
29
29
  @classmethod
30
30
  def create(cls, *children, **props):
@@ -3,7 +3,7 @@
3
3
  # ------------------- DO NOT EDIT ----------------------
4
4
  # This file was generated by `reflex/utils/pyi_generator.py`!
5
5
  # ------------------------------------------------------
6
- from typing import Any, Dict, List, Optional, Union, overload
6
+ from typing import Any, Optional, Sequence, overload
7
7
 
8
8
  from reflex.components.base.fragment import Fragment
9
9
  from reflex.event import EventType
@@ -17,16 +17,16 @@ class Clipboard(Fragment):
17
17
  def create( # type: ignore
18
18
  cls,
19
19
  *children,
20
- targets: Optional[Union[List[str], Var[List[str]]]] = None,
21
- on_paste_event_actions: Optional[
22
- Union[Dict[str, Union[bool, int]], Var[Dict[str, Union[bool, int]]]]
23
- ] = None,
24
- style: Optional[Style] = None,
25
- key: Optional[Any] = None,
26
- id: Optional[Any] = None,
27
- class_name: Optional[Any] = None,
28
- autofocus: Optional[bool] = None,
29
- custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None,
20
+ targets: Sequence[str] | Var[Sequence[str]] | None = None,
21
+ on_paste_event_actions: Var[dict[str, bool | int]]
22
+ | dict[str, bool | int]
23
+ | None = None,
24
+ style: Style | None = None,
25
+ key: Any | None = None,
26
+ id: Any | None = None,
27
+ class_name: Any | None = None,
28
+ autofocus: bool | None = None,
29
+ custom_attrs: dict[str, Var | Any] | None = None,
30
30
  on_blur: Optional[EventType[()]] = None,
31
31
  on_click: Optional[EventType[()]] = None,
32
32
  on_context_menu: Optional[EventType[()]] = None,
@@ -40,9 +40,7 @@ class Clipboard(Fragment):
40
40
  on_mouse_out: Optional[EventType[()]] = None,
41
41
  on_mouse_over: Optional[EventType[()]] = None,
42
42
  on_mouse_up: Optional[EventType[()]] = None,
43
- on_paste: Optional[
44
- Union[EventType[()], EventType[list[tuple[str, str]]]]
45
- ] = None,
43
+ on_paste: Optional[EventType[()] | EventType[list[tuple[str, str]]]] = None,
46
44
  on_scroll: Optional[EventType[()]] = None,
47
45
  on_unmount: Optional[EventType[()]] = None,
48
46
  **props,
@@ -2,13 +2,14 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- from typing import Any, Dict, Optional, overload
5
+ from typing import Any, Dict, overload
6
6
 
7
7
  from reflex.components.base.fragment import Fragment
8
8
  from reflex.components.component import BaseComponent, Component, MemoizationLeaf
9
9
  from reflex.components.tags import CondTag, Tag
10
10
  from reflex.constants import Dirs
11
11
  from reflex.style import LIGHT_COLOR_MODE, resolved_color_mode
12
+ from reflex.utils import types
12
13
  from reflex.utils.imports import ImportDict, ImportVar
13
14
  from reflex.vars import VarData
14
15
  from reflex.vars.base import LiteralVar, Var
@@ -25,17 +26,12 @@ class Cond(MemoizationLeaf):
25
26
  # The cond to determine which component to render.
26
27
  cond: Var[Any]
27
28
 
28
- # The component to render if the cond is true.
29
- comp1: BaseComponent | None = None
30
- # The component to render if the cond is false.
31
- comp2: BaseComponent | None = None
32
-
33
29
  @classmethod
34
30
  def create(
35
31
  cls,
36
32
  cond: Var,
37
33
  comp1: BaseComponent,
38
- comp2: Optional[BaseComponent] = None,
34
+ comp2: BaseComponent | None = None,
39
35
  ) -> Component:
40
36
  """Create a conditional component.
41
37
 
@@ -53,19 +49,17 @@ class Cond(MemoizationLeaf):
53
49
  if comp2 is None or type(comp2).__name__ != "Fragment":
54
50
  comp2 = Fragment.create(comp2) if comp2 else Fragment.create()
55
51
  return Fragment.create(
56
- cls(
57
- cond=cond,
58
- comp1=comp1,
59
- comp2=comp2,
52
+ cls._create(
60
53
  children=[comp1, comp2],
54
+ cond=cond,
61
55
  )
62
56
  )
63
57
 
64
58
  def _render(self) -> Tag:
65
59
  return CondTag(
66
60
  cond=self.cond,
67
- true_value=self.comp1.render(), # pyright: ignore [reportOptionalMemberAccess]
68
- false_value=self.comp2.render(), # pyright: ignore [reportOptionalMemberAccess]
61
+ true_value=self.children[0].render(),
62
+ false_value=self.children[1].render(),
69
63
  )
70
64
 
71
65
  def render(self) -> Dict:
@@ -85,7 +79,7 @@ class Cond(MemoizationLeaf):
85
79
  ).set(
86
80
  props=tag.format_props(),
87
81
  ),
88
- cond_state=f"isTrue({self.cond!s})",
82
+ cond_state=str(self.cond),
89
83
  )
90
84
 
91
85
  def add_imports(self) -> ImportDict:
@@ -136,7 +130,7 @@ def cond(condition: Any, c1: Any, c2: Any = None) -> Component | Var:
136
130
  if isinstance(c1, BaseComponent):
137
131
  if c2 is not None and not isinstance(c2, BaseComponent):
138
132
  raise ValueError("Both arguments must be components.")
139
- return Cond.create(cond_var, c1, c2)
133
+ return Cond.create(cond_var.bool(), c1, c2)
140
134
 
141
135
  # Otherwise, create a conditional Var.
142
136
  # Check that the second argument is valid.
@@ -145,20 +139,18 @@ def cond(condition: Any, c1: Any, c2: Any = None) -> Component | Var:
145
139
  if c2 is None:
146
140
  raise ValueError("For conditional vars, the second argument must be set.")
147
141
 
148
- def create_var(cond_part: Any) -> Var[Any]:
149
- return LiteralVar.create(cond_part)
150
-
151
142
  # convert the truth and false cond parts into vars so the _var_data can be obtained.
152
- c1 = create_var(c1)
153
- c2 = create_var(c2)
143
+ c1_var = Var.create(c1)
144
+ c2_var = Var.create(c2)
145
+
146
+ if condition is c1_var:
147
+ c1_var = c1_var.to(types.value_inside_optional(c1_var._var_type))
154
148
 
155
149
  # Create the conditional var.
156
150
  return ternary_operation(
157
- cond_var.bool()._replace(
158
- merge_var_data=VarData(imports=_IS_TRUE_IMPORT),
159
- ),
160
- c1,
161
- c2,
151
+ cond_var.bool(),
152
+ c1_var,
153
+ c2_var,
162
154
  )
163
155
 
164
156
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- from typing import Any, Type, Union
5
+ from typing import Any, Type
6
6
 
7
7
  from reflex.components.component import Component
8
8
  from reflex.constants import EventTriggers
@@ -37,7 +37,7 @@ class DebounceInput(Component):
37
37
  force_notify_on_blur: Var[bool]
38
38
 
39
39
  # If provided, create a fully-controlled input
40
- value: Var[Union[str, int, float]]
40
+ value: Var[str | int | float]
41
41
 
42
42
  # The ref to attach to the created input
43
43
  input_ref: Var[str]
@@ -127,7 +127,7 @@ class DebounceInput(Component):
127
127
  component._get_style = child._get_style
128
128
  component.event_triggers.update(child.event_triggers)
129
129
  component.children = child.children
130
- component._rename_props = child._rename_props
130
+ component._rename_props = child._rename_props # pyright: ignore[reportAttributeAccessIssue]
131
131
  outer_get_all_custom_code = component._get_all_custom_code
132
132
  component._get_all_custom_code = lambda: outer_get_all_custom_code().union(
133
133
  child._get_all_custom_code()
@@ -3,7 +3,7 @@
3
3
  # ------------------- DO NOT EDIT ----------------------
4
4
  # This file was generated by `reflex/utils/pyi_generator.py`!
5
5
  # ------------------------------------------------------
6
- from typing import Any, Dict, Optional, Type, Union, overload
6
+ from typing import Any, Optional, Type, overload
7
7
 
8
8
  from reflex.components.component import Component
9
9
  from reflex.event import EventType
@@ -18,19 +18,19 @@ class DebounceInput(Component):
18
18
  def create( # type: ignore
19
19
  cls,
20
20
  *children,
21
- min_length: Optional[Union[Var[int], int]] = None,
22
- debounce_timeout: Optional[Union[Var[int], int]] = None,
23
- force_notify_by_enter: Optional[Union[Var[bool], bool]] = None,
24
- force_notify_on_blur: Optional[Union[Var[bool], bool]] = None,
25
- value: Optional[Union[Var[Union[float, int, str]], float, int, str]] = None,
26
- input_ref: Optional[Union[Var[str], str]] = None,
27
- element: Optional[Union[Type[Component], Var[Type[Component]]]] = None,
28
- style: Optional[Style] = None,
29
- key: Optional[Any] = None,
30
- id: Optional[Any] = None,
31
- class_name: Optional[Any] = None,
32
- autofocus: Optional[bool] = None,
33
- custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None,
21
+ min_length: Var[int] | int | None = None,
22
+ debounce_timeout: Var[int] | int | None = None,
23
+ force_notify_by_enter: Var[bool] | bool | None = None,
24
+ force_notify_on_blur: Var[bool] | bool | None = None,
25
+ value: Var[float | int | str] | float | int | str | None = None,
26
+ input_ref: Var[str] | str | None = None,
27
+ element: Type[Component] | Var[Type[Component]] | None = None,
28
+ style: Style | None = None,
29
+ key: Any | None = None,
30
+ id: Any | None = None,
31
+ class_name: Any | None = None,
32
+ autofocus: bool | None = None,
33
+ custom_attrs: dict[str, Var | Any] | None = None,
34
34
  on_blur: Optional[EventType[()]] = None,
35
35
  on_change: Optional[EventType[()]] = None,
36
36
  on_click: Optional[EventType[()]] = None,
@@ -8,9 +8,11 @@ from typing import Any, Callable, Iterable
8
8
 
9
9
  from reflex.components.base.fragment import Fragment
10
10
  from reflex.components.component import Component
11
+ from reflex.components.core.cond import cond
11
12
  from reflex.components.tags import IterTag
12
13
  from reflex.constants import MemoizationMode
13
14
  from reflex.state import ComponentState
15
+ from reflex.utils import types
14
16
  from reflex.utils.exceptions import UntypedVarError
15
17
  from reflex.vars.base import LiteralVar, Var
16
18
 
@@ -85,7 +87,11 @@ class Foreach(Component):
85
87
  "See https://reflex.dev/docs/library/dynamic-rendering/foreach/"
86
88
  )
87
89
 
88
- component = cls(
90
+ if types.is_optional(iterable._var_type):
91
+ iterable = cond(iterable, iterable, [])
92
+
93
+ component = cls._create(
94
+ children=[],
89
95
  iterable=iterable,
90
96
  render_fn=render_fn,
91
97
  )
@@ -164,7 +170,6 @@ class Foreach(Component):
164
170
  iterable_state=str(tag.iterable),
165
171
  arg_name=tag.arg_var_name,
166
172
  arg_index=tag.get_index_var_arg(),
167
- iterable_type=tag.iterable._var_type.mro()[0].__name__,
168
173
  )
169
174
 
170
175
 
@@ -1,7 +1,5 @@
1
1
  """A html component."""
2
2
 
3
- from typing import Dict
4
-
5
3
  from reflex.components.el.elements.typography import Div
6
4
  from reflex.vars.base import Var
7
5
 
@@ -14,7 +12,7 @@ class Html(Div):
14
12
  """
15
13
 
16
14
  # The HTML to render.
17
- dangerouslySetInnerHTML: Var[Dict[str, str]] # noqa: N815
15
+ dangerouslySetInnerHTML: Var[dict[str, str]] # noqa: N815
18
16
 
19
17
  @classmethod
20
18
  def create(cls, *children, **props):