reflex 0.7.13a2__py3-none-any.whl → 0.7.14a1__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 (256) hide show
  1. reflex/.templates/apps/blank/code/blank.py +0 -2
  2. reflex/app.py +64 -69
  3. reflex/app_mixins/lifespan.py +2 -3
  4. reflex/app_mixins/middleware.py +1 -0
  5. reflex/app_mixins/mixin.py +0 -1
  6. reflex/assets.py +6 -3
  7. reflex/base.py +3 -2
  8. reflex/compiler/compiler.py +77 -64
  9. reflex/compiler/utils.py +8 -6
  10. reflex/components/base/app_wrap.pyi +0 -1
  11. reflex/components/base/bare.py +5 -7
  12. reflex/components/base/body.pyi +0 -1
  13. reflex/components/base/document.pyi +0 -5
  14. reflex/components/base/error_boundary.pyi +0 -1
  15. reflex/components/base/fragment.pyi +0 -1
  16. reflex/components/base/head.pyi +0 -2
  17. reflex/components/base/link.pyi +0 -2
  18. reflex/components/base/meta.py +2 -1
  19. reflex/components/base/meta.pyi +0 -4
  20. reflex/components/base/script.py +2 -1
  21. reflex/components/base/script.pyi +0 -1
  22. reflex/components/base/strict_mode.pyi +0 -1
  23. reflex/components/component.py +38 -40
  24. reflex/components/core/auto_scroll.pyi +0 -1
  25. reflex/components/core/banner.pyi +0 -6
  26. reflex/components/core/breakpoints.py +9 -11
  27. reflex/components/core/client_side_routing.pyi +0 -2
  28. reflex/components/core/clipboard.pyi +0 -1
  29. reflex/components/core/colors.py +10 -7
  30. reflex/components/core/cond.py +4 -2
  31. reflex/components/core/debounce.py +5 -3
  32. reflex/components/core/debounce.pyi +0 -1
  33. reflex/components/core/foreach.py +8 -6
  34. reflex/components/core/html.py +3 -3
  35. reflex/components/core/html.pyi +0 -1
  36. reflex/components/core/match.py +19 -17
  37. reflex/components/core/sticky.pyi +0 -4
  38. reflex/components/core/upload.pyi +0 -5
  39. reflex/components/datadisplay/code.py +1 -2
  40. reflex/components/datadisplay/code.pyi +0 -2
  41. reflex/components/datadisplay/dataeditor.py +7 -10
  42. reflex/components/datadisplay/dataeditor.pyi +0 -1
  43. reflex/components/datadisplay/logo.py +3 -4
  44. reflex/components/datadisplay/shiki_code_block.py +8 -11
  45. reflex/components/datadisplay/shiki_code_block.pyi +0 -3
  46. reflex/components/dynamic.py +2 -3
  47. reflex/components/el/__init__.pyi +2 -0
  48. reflex/components/el/element.pyi +0 -1
  49. reflex/components/el/elements/__init__.py +1 -0
  50. reflex/components/el/elements/__init__.pyi +3 -0
  51. reflex/components/el/elements/base.pyi +0 -1
  52. reflex/components/el/elements/forms.py +3 -4
  53. reflex/components/el/elements/forms.pyi +1 -18
  54. reflex/components/el/elements/inline.pyi +0 -28
  55. reflex/components/el/elements/media.py +26 -0
  56. reflex/components/el/elements/media.pyi +259 -25
  57. reflex/components/el/elements/metadata.py +0 -1
  58. reflex/components/el/elements/metadata.pyi +0 -6
  59. reflex/components/el/elements/other.pyi +0 -7
  60. reflex/components/el/elements/scripts.pyi +0 -3
  61. reflex/components/el/elements/sectioning.pyi +0 -15
  62. reflex/components/el/elements/tables.pyi +0 -10
  63. reflex/components/el/elements/typography.pyi +0 -15
  64. reflex/components/gridjs/datatable.py +10 -13
  65. reflex/components/gridjs/datatable.pyi +0 -2
  66. reflex/components/lucide/icon.py +10 -9
  67. reflex/components/lucide/icon.pyi +0 -3
  68. reflex/components/markdown/markdown.py +6 -8
  69. reflex/components/markdown/markdown.pyi +0 -1
  70. reflex/components/moment/moment.pyi +0 -1
  71. reflex/components/next/base.py +0 -2
  72. reflex/components/next/base.pyi +0 -3
  73. reflex/components/next/image.pyi +0 -1
  74. reflex/components/next/link.pyi +0 -1
  75. reflex/components/next/video.pyi +0 -1
  76. reflex/components/plotly/plotly.pyi +0 -9
  77. reflex/components/props.py +4 -3
  78. reflex/components/radix/primitives/accordion.pyi +0 -7
  79. reflex/components/radix/primitives/base.py +1 -3
  80. reflex/components/radix/primitives/base.pyi +0 -2
  81. reflex/components/radix/primitives/drawer.pyi +0 -11
  82. reflex/components/radix/primitives/form.py +4 -8
  83. reflex/components/radix/primitives/form.pyi +0 -12
  84. reflex/components/radix/primitives/progress.py +1 -1
  85. reflex/components/radix/primitives/progress.pyi +0 -5
  86. reflex/components/radix/primitives/slider.py +1 -1
  87. reflex/components/radix/primitives/slider.pyi +0 -5
  88. reflex/components/radix/themes/base.pyi +0 -8
  89. reflex/components/radix/themes/color_mode.pyi +0 -3
  90. reflex/components/radix/themes/components/alert_dialog.py +4 -2
  91. reflex/components/radix/themes/components/alert_dialog.pyi +4 -9
  92. reflex/components/radix/themes/components/aspect_ratio.py +1 -2
  93. reflex/components/radix/themes/components/aspect_ratio.pyi +1 -3
  94. reflex/components/radix/themes/components/avatar.py +5 -2
  95. reflex/components/radix/themes/components/avatar.pyi +1 -3
  96. reflex/components/radix/themes/components/badge.py +5 -2
  97. reflex/components/radix/themes/components/badge.pyi +1 -3
  98. reflex/components/radix/themes/components/button.py +2 -3
  99. reflex/components/radix/themes/components/button.pyi +1 -3
  100. reflex/components/radix/themes/components/callout.py +1 -2
  101. reflex/components/radix/themes/components/callout.pyi +1 -7
  102. reflex/components/radix/themes/components/card.py +1 -2
  103. reflex/components/radix/themes/components/card.pyi +1 -3
  104. reflex/components/radix/themes/components/checkbox.py +7 -4
  105. reflex/components/radix/themes/components/checkbox.pyi +1 -5
  106. reflex/components/radix/themes/components/checkbox_cards.py +1 -2
  107. reflex/components/radix/themes/components/checkbox_cards.pyi +1 -4
  108. reflex/components/radix/themes/components/checkbox_group.py +1 -2
  109. reflex/components/radix/themes/components/checkbox_group.pyi +1 -4
  110. reflex/components/radix/themes/components/context_menu.py +1 -1
  111. reflex/components/radix/themes/components/context_menu.pyi +1 -14
  112. reflex/components/radix/themes/components/data_list.py +1 -2
  113. reflex/components/radix/themes/components/data_list.pyi +1 -6
  114. reflex/components/radix/themes/components/dialog.py +4 -2
  115. reflex/components/radix/themes/components/dialog.pyi +4 -9
  116. reflex/components/radix/themes/components/dropdown_menu.py +5 -2
  117. reflex/components/radix/themes/components/dropdown_menu.pyi +4 -10
  118. reflex/components/radix/themes/components/hover_card.py +4 -2
  119. reflex/components/radix/themes/components/hover_card.pyi +4 -6
  120. reflex/components/radix/themes/components/icon_button.py +7 -8
  121. reflex/components/radix/themes/components/icon_button.pyi +1 -3
  122. reflex/components/radix/themes/components/inset.py +1 -2
  123. reflex/components/radix/themes/components/inset.pyi +1 -3
  124. reflex/components/radix/themes/components/popover.py +4 -2
  125. reflex/components/radix/themes/components/popover.pyi +4 -6
  126. reflex/components/radix/themes/components/progress.py +1 -2
  127. reflex/components/radix/themes/components/progress.pyi +1 -3
  128. reflex/components/radix/themes/components/radio.py +1 -2
  129. reflex/components/radix/themes/components/radio.pyi +1 -3
  130. reflex/components/radix/themes/components/radio_cards.py +1 -2
  131. reflex/components/radix/themes/components/radio_cards.pyi +1 -4
  132. reflex/components/radix/themes/components/radio_group.py +7 -5
  133. reflex/components/radix/themes/components/radio_group.pyi +1 -6
  134. reflex/components/radix/themes/components/scroll_area.py +1 -2
  135. reflex/components/radix/themes/components/scroll_area.pyi +1 -3
  136. reflex/components/radix/themes/components/segmented_control.py +1 -2
  137. reflex/components/radix/themes/components/segmented_control.pyi +1 -4
  138. reflex/components/radix/themes/components/select.py +5 -2
  139. reflex/components/radix/themes/components/select.pyi +1 -11
  140. reflex/components/radix/themes/components/separator.py +1 -2
  141. reflex/components/radix/themes/components/separator.pyi +1 -3
  142. reflex/components/radix/themes/components/skeleton.py +1 -2
  143. reflex/components/radix/themes/components/skeleton.pyi +1 -3
  144. reflex/components/radix/themes/components/slider.py +1 -2
  145. reflex/components/radix/themes/components/slider.pyi +1 -3
  146. reflex/components/radix/themes/components/spinner.py +1 -2
  147. reflex/components/radix/themes/components/spinner.pyi +1 -3
  148. reflex/components/radix/themes/components/switch.py +1 -2
  149. reflex/components/radix/themes/components/switch.pyi +1 -3
  150. reflex/components/radix/themes/components/table.py +1 -2
  151. reflex/components/radix/themes/components/table.pyi +1 -9
  152. reflex/components/radix/themes/components/tabs.py +1 -2
  153. reflex/components/radix/themes/components/tabs.pyi +1 -7
  154. reflex/components/radix/themes/components/text_area.py +5 -2
  155. reflex/components/radix/themes/components/text_area.pyi +1 -3
  156. reflex/components/radix/themes/components/text_field.py +5 -2
  157. reflex/components/radix/themes/components/text_field.pyi +1 -5
  158. reflex/components/radix/themes/components/tooltip.py +1 -2
  159. reflex/components/radix/themes/components/tooltip.pyi +1 -3
  160. reflex/components/radix/themes/layout/base.py +5 -2
  161. reflex/components/radix/themes/layout/base.pyi +5 -3
  162. reflex/components/radix/themes/layout/box.py +1 -2
  163. reflex/components/radix/themes/layout/box.pyi +1 -3
  164. reflex/components/radix/themes/layout/center.pyi +0 -1
  165. reflex/components/radix/themes/layout/container.py +1 -2
  166. reflex/components/radix/themes/layout/container.pyi +1 -3
  167. reflex/components/radix/themes/layout/flex.py +6 -2
  168. reflex/components/radix/themes/layout/flex.pyi +1 -3
  169. reflex/components/radix/themes/layout/grid.py +6 -2
  170. reflex/components/radix/themes/layout/grid.pyi +1 -3
  171. reflex/components/radix/themes/layout/list.py +2 -1
  172. reflex/components/radix/themes/layout/list.pyi +0 -5
  173. reflex/components/radix/themes/layout/section.py +1 -2
  174. reflex/components/radix/themes/layout/section.pyi +1 -3
  175. reflex/components/radix/themes/layout/spacer.pyi +0 -1
  176. reflex/components/radix/themes/layout/stack.py +1 -1
  177. reflex/components/radix/themes/layout/stack.pyi +0 -3
  178. reflex/components/radix/themes/typography/blockquote.py +1 -1
  179. reflex/components/radix/themes/typography/blockquote.pyi +1 -3
  180. reflex/components/radix/themes/typography/code.py +5 -1
  181. reflex/components/radix/themes/typography/code.pyi +1 -3
  182. reflex/components/radix/themes/typography/heading.py +1 -1
  183. reflex/components/radix/themes/typography/heading.pyi +1 -3
  184. reflex/components/radix/themes/typography/link.py +3 -2
  185. reflex/components/radix/themes/typography/link.pyi +1 -3
  186. reflex/components/radix/themes/typography/text.py +1 -1
  187. reflex/components/radix/themes/typography/text.pyi +1 -9
  188. reflex/components/react_player/audio.py +0 -2
  189. reflex/components/react_player/audio.pyi +0 -3
  190. reflex/components/react_player/react_player.pyi +0 -1
  191. reflex/components/react_player/video.py +0 -2
  192. reflex/components/react_player/video.pyi +0 -3
  193. reflex/components/recharts/__init__.py +1 -1
  194. reflex/components/recharts/__init__.pyi +1 -1
  195. reflex/components/recharts/cartesian.py +20 -25
  196. reflex/components/recharts/cartesian.pyi +20 -37
  197. reflex/components/recharts/charts.py +2 -1
  198. reflex/components/recharts/charts.pyi +0 -12
  199. reflex/components/recharts/general.pyi +0 -6
  200. reflex/components/recharts/polar.py +5 -4
  201. reflex/components/recharts/polar.pyi +4 -10
  202. reflex/components/recharts/recharts.py +12 -10
  203. reflex/components/recharts/recharts.pyi +10 -11
  204. reflex/components/sonner/toast.py +2 -2
  205. reflex/components/sonner/toast.pyi +0 -2
  206. reflex/components/suneditor/editor.py +2 -1
  207. reflex/components/suneditor/editor.pyi +0 -1
  208. reflex/components/tags/iter_tag.py +4 -2
  209. reflex/config.py +47 -35
  210. reflex/constants/base.py +3 -3
  211. reflex/constants/compiler.py +8 -6
  212. reflex/constants/installer.py +24 -15
  213. reflex/custom_components/custom_components.py +1 -2
  214. reflex/event.py +58 -60
  215. reflex/experimental/__init__.py +2 -2
  216. reflex/experimental/client_state.py +9 -4
  217. reflex/experimental/layout.pyi +0 -5
  218. reflex/istate/manager.py +15 -19
  219. reflex/istate/proxy.py +19 -12
  220. reflex/model.py +6 -4
  221. reflex/plugins/base.py +8 -0
  222. reflex/plugins/tailwind_v3.py +8 -0
  223. reflex/plugins/tailwind_v4.py +8 -0
  224. reflex/reflex.py +9 -11
  225. reflex/route.py +7 -9
  226. reflex/state.py +66 -70
  227. reflex/style.py +3 -1
  228. reflex/testing.py +46 -29
  229. reflex/utils/build.py +2 -1
  230. reflex/utils/console.py +9 -17
  231. reflex/utils/exec.py +9 -11
  232. reflex/utils/format.py +21 -24
  233. reflex/utils/imports.py +4 -3
  234. reflex/utils/lazy_loader.py +3 -3
  235. reflex/utils/misc.py +2 -1
  236. reflex/utils/net.py +2 -2
  237. reflex/utils/path_ops.py +2 -1
  238. reflex/utils/prerequisites.py +67 -38
  239. reflex/utils/processes.py +4 -6
  240. reflex/utils/pyi_generator.py +46 -41
  241. reflex/utils/redir.py +1 -1
  242. reflex/utils/serializers.py +4 -4
  243. reflex/utils/telemetry.py +42 -4
  244. reflex/utils/types.py +16 -13
  245. reflex/vars/base.py +96 -109
  246. reflex/vars/datetime.py +2 -1
  247. reflex/vars/dep_tracking.py +19 -28
  248. reflex/vars/number.py +6 -7
  249. reflex/vars/object.py +5 -6
  250. reflex/vars/sequence.py +11 -11
  251. {reflex-0.7.13a2.dist-info → reflex-0.7.14a1.dist-info}/METADATA +1 -1
  252. reflex-0.7.14a1.dist-info/RECORD +407 -0
  253. reflex-0.7.13a2.dist-info/RECORD +0 -407
  254. {reflex-0.7.13a2.dist-info → reflex-0.7.14a1.dist-info}/WHEEL +0 -0
  255. {reflex-0.7.13a2.dist-info → reflex-0.7.14a1.dist-info}/entry_points.txt +0 -0
  256. {reflex-0.7.13a2.dist-info → reflex-0.7.14a1.dist-info}/licenses/LICENSE +0 -0
@@ -260,6 +260,5 @@ class Html(Div):
260
260
  Raises:
261
261
  ValueError: If children are not provided or more than one child is provided.
262
262
  """
263
- ...
264
263
 
265
264
  html = Html.create
@@ -47,9 +47,8 @@ class Match(MemoizationLeaf):
47
47
  cls._validate_return_types(match_cases)
48
48
 
49
49
  if default is None and isinstance(match_cases[0][-1], Var):
50
- raise ValueError(
51
- "For cases with return types as Vars, a default case must be provided"
52
- )
50
+ msg = "For cases with return types as Vars, a default case must be provided"
51
+ raise ValueError(msg)
53
52
 
54
53
  return cls._create_match_cond_var_or_component(
55
54
  match_cond_var, match_cases, default
@@ -71,7 +70,8 @@ class Match(MemoizationLeaf):
71
70
  match_cond_var = LiteralVar.create(cond)
72
71
 
73
72
  if match_cond_var is None:
74
- raise ValueError("The condition must be set")
73
+ msg = "The condition must be set"
74
+ raise ValueError(msg)
75
75
  return match_cond_var
76
76
 
77
77
  @classmethod
@@ -90,10 +90,12 @@ class Match(MemoizationLeaf):
90
90
  default = None
91
91
 
92
92
  if len([case for case in cases if not isinstance(case, tuple)]) > 1:
93
- raise ValueError("rx.match can only have one default case.")
93
+ msg = "rx.match can only have one default case."
94
+ raise ValueError(msg)
94
95
 
95
96
  if not cases:
96
- raise ValueError("rx.match should have at least one case.")
97
+ msg = "rx.match should have at least one case."
98
+ raise ValueError(msg)
97
99
 
98
100
  # Get the default case which should be the last non-tuple arg
99
101
  if not isinstance(cases[-1], tuple):
@@ -119,8 +121,7 @@ class Match(MemoizationLeaf):
119
121
  The case element Var.
120
122
  """
121
123
  _var_data = case_element._var_data if isinstance(case_element, Style) else None
122
- case_element = LiteralVar.create(case_element, _var_data=_var_data)
123
- return case_element
124
+ return LiteralVar.create(case_element, _var_data=_var_data)
124
125
 
125
126
  @classmethod
126
127
  def _process_match_cases(cls, cases: list) -> list[list[Var]]:
@@ -138,14 +139,12 @@ class Match(MemoizationLeaf):
138
139
  match_cases = []
139
140
  for case in cases:
140
141
  if not isinstance(case, tuple):
141
- raise ValueError(
142
- "rx.match should have tuples of cases and a default case as the last argument."
143
- )
142
+ msg = "rx.match should have tuples of cases and a default case as the last argument."
143
+ raise ValueError(msg)
144
144
  # There should be at least two elements in a case tuple(a condition and return value)
145
145
  if len(case) < 2:
146
- raise ValueError(
147
- "A case tuple should have at least a match case element and a return value."
148
- )
146
+ msg = "A case tuple should have at least a match case element and a return value."
147
+ raise ValueError(msg)
149
148
 
150
149
  case_list = []
151
150
  for element in case:
@@ -156,7 +155,8 @@ class Match(MemoizationLeaf):
156
155
  else element
157
156
  )
158
157
  if not isinstance(el, (Var, BaseComponent)):
159
- raise ValueError("Case element must be a var or component")
158
+ msg = "Case element must be a var or component"
159
+ raise ValueError(msg)
160
160
  case_list.append(el)
161
161
 
162
162
  match_cases.append(case_list)
@@ -183,11 +183,12 @@ class Match(MemoizationLeaf):
183
183
 
184
184
  for index, case in enumerate(match_cases):
185
185
  if not isinstance(case[-1], return_type):
186
- raise MatchTypeError(
186
+ msg = (
187
187
  f"Match cases should have the same return types. Case {index} with return "
188
188
  f"value `{case[-1]._js_expr if isinstance(case[-1], Var) else textwrap.shorten(str(case[-1]), width=250)}`"
189
189
  f" of type {type(case[-1])!r} is not {return_type}"
190
190
  )
191
+ raise MatchTypeError(msg)
191
192
 
192
193
  @classmethod
193
194
  def _create_match_cond_var_or_component(
@@ -226,7 +227,8 @@ class Match(MemoizationLeaf):
226
227
  if any(
227
228
  case for case in match_cases if not isinstance(case[-1], Var)
228
229
  ) or not isinstance(default, Var):
229
- raise ValueError("Return types of match cases should be Vars.")
230
+ msg = "Return types of match cases should be Vars."
231
+ raise ValueError(msg)
230
232
 
231
233
  return Var(
232
234
  _js_expr=format.format_match(
@@ -234,7 +234,6 @@ class StickyLogo(Svg):
234
234
  Returns:
235
235
  The simple Reflex logo SVG.
236
236
  """
237
- ...
238
237
 
239
238
  def add_style(self): ...
240
239
 
@@ -587,7 +586,6 @@ class StickyLabel(Text):
587
586
  Returns:
588
587
  The sticky label.
589
588
  """
590
- ...
591
589
 
592
590
  def add_style(self): ...
593
591
 
@@ -843,7 +841,6 @@ class StickyBadge(A):
843
841
  Returns:
844
842
  The sticky badge.
845
843
  """
846
- ...
847
844
 
848
845
  def add_style(self): ...
849
846
 
@@ -1100,6 +1097,5 @@ class StickyNamespace(ComponentNamespace):
1100
1097
  Returns:
1101
1098
  The sticky badge.
1102
1099
  """
1103
- ...
1104
1100
 
1105
1101
  sticky = StickyNamespace()
@@ -89,7 +89,6 @@ class UploadFilesProvider(Component):
89
89
  Returns:
90
90
  The component.
91
91
  """
92
- ...
93
92
 
94
93
  class GhostUpload(Fragment):
95
94
  @overload
@@ -143,7 +142,6 @@ class GhostUpload(Fragment):
143
142
  Returns:
144
143
  The component.
145
144
  """
146
- ...
147
145
 
148
146
  class Upload(MemoizationLeaf):
149
147
  is_used: ClassVar[bool] = False
@@ -219,7 +217,6 @@ class Upload(MemoizationLeaf):
219
217
  Returns:
220
218
  The upload component.
221
219
  """
222
- ...
223
220
 
224
221
  class StyledUpload(Upload):
225
222
  @overload
@@ -293,7 +290,6 @@ class StyledUpload(Upload):
293
290
  Returns:
294
291
  The styled upload component.
295
292
  """
296
- ...
297
293
 
298
294
  class UploadNamespace(ComponentNamespace):
299
295
  root = Upload.create
@@ -367,6 +363,5 @@ class UploadNamespace(ComponentNamespace):
367
363
  Returns:
368
364
  The styled upload component.
369
365
  """
370
- ...
371
366
 
372
367
  upload = UploadNamespace()
@@ -482,8 +482,7 @@ class CodeBlock(Component, MarkdownComponentMap):
482
482
 
483
483
  if copy_button:
484
484
  return Box.create(code_block, copy_button, position="relative")
485
- else:
486
- return code_block
485
+ return code_block
487
486
 
488
487
  def add_style(self):
489
488
  """Add style to the component."""
@@ -984,7 +984,6 @@ class CodeBlock(Component, MarkdownComponentMap):
984
984
  Returns:
985
985
  The text component.
986
986
  """
987
- ...
988
987
 
989
988
  def add_style(self): ...
990
989
  @classmethod
@@ -1625,6 +1624,5 @@ class CodeblockNamespace(ComponentNamespace):
1625
1624
  Returns:
1626
1625
  The text component.
1627
1626
  """
1628
- ...
1629
1627
 
1630
1628
  code_block = CodeblockNamespace()
@@ -383,9 +383,8 @@ class DataEditor(NoSSRComponent):
383
383
  # If rows is not provided, determine from data.
384
384
  if rows is None:
385
385
  if isinstance(data, Var) and not isinstance(data, ArrayVar):
386
- raise ValueError(
387
- "DataEditor data must be an ArrayVar if rows is not provided."
388
- )
386
+ msg = "DataEditor data must be an ArrayVar if rows is not provided."
387
+ raise ValueError(msg)
389
388
 
390
389
  props["rows"] = data.length() if isinstance(data, ArrayVar) else len(data)
391
390
 
@@ -393,13 +392,11 @@ class DataEditor(NoSSRComponent):
393
392
  if types.is_dataframe(type(data)) or (
394
393
  isinstance(data, Var) and types.is_dataframe(data._var_type)
395
394
  ):
396
- raise ValueError(
397
- "Cannot pass in both a pandas dataframe and columns to the data_editor component."
398
- )
399
- else:
400
- props["columns"] = [
401
- format.format_data_editor_column(col) for col in columns
402
- ]
395
+ msg = "Cannot pass in both a pandas dataframe and columns to the data_editor component."
396
+ raise ValueError(msg)
397
+ props["columns"] = [
398
+ format.format_data_editor_column(col) for col in columns
399
+ ]
403
400
 
404
401
  if "theme" in props:
405
402
  theme = props.get("theme")
@@ -274,7 +274,6 @@ class DataEditor(NoSSRComponent):
274
274
  Returns:
275
275
  The DataEditor component.&
276
276
  """
277
- ...
278
277
 
279
278
  @serializer
280
279
  def serialize_dataeditortheme(theme: DataEditorTheme): ...
@@ -2,11 +2,10 @@
2
2
 
3
3
  import reflex as rx
4
4
 
5
+ SVG_COLOR = rx.color_mode_cond("#110F1F", "white")
5
6
 
6
- def svg_logo(
7
- color: str | rx.Var[str] = rx.color_mode_cond("#110F1F", "white"),
8
- **props,
9
- ):
7
+
8
+ def svg_logo(color: str | rx.Var[str] = SVG_COLOR, **props):
10
9
  """A Reflex logo SVG.
11
10
 
12
11
  Args:
@@ -636,9 +636,8 @@ class ShikiCodeBlock(Component, MarkdownComponentMap):
636
636
  """
637
637
  imports = defaultdict(list)
638
638
  if not isinstance(self.transformers, LiteralVar):
639
- raise ValueError(
640
- f"transformers should be a LiteralVar type. Got {type(self.transformers)} instead."
641
- )
639
+ msg = f"transformers should be a LiteralVar type. Got {type(self.transformers)} instead."
640
+ raise ValueError(msg)
642
641
  for transformer in self.transformers._var_value:
643
642
  if isinstance(transformer, ShikiBaseTransformers):
644
643
  imports[transformer.library].extend(
@@ -663,9 +662,8 @@ class ShikiCodeBlock(Component, MarkdownComponentMap):
663
662
  ValueError: If a supplied function name is not valid str.
664
663
  """
665
664
  if any(not isinstance(fn_name, str) for fn_name in fns):
666
- raise ValueError(
667
- f"the function names should be str names of functions in the specified transformer: {library!r}"
668
- )
665
+ msg = f"the function names should be str names of functions in the specified transformer: {library!r}"
666
+ raise ValueError(msg)
669
667
  return ShikiBaseTransformers(
670
668
  library=library,
671
669
  fns=[FunctionStringVar.create(fn) for fn in fns], # pyright: ignore [reportCallIssue]
@@ -811,8 +809,7 @@ class ShikiHighLevelCodeBlock(ShikiCodeBlock):
811
809
  return ShikiCodeBlock.create(
812
810
  children[0], copy_button, position="relative", **props
813
811
  )
814
- else:
815
- return ShikiCodeBlock.create(children[0], **props)
812
+ return ShikiCodeBlock.create(children[0], **props)
816
813
 
817
814
  @staticmethod
818
815
  def _map_themes(theme: str) -> str:
@@ -829,9 +826,8 @@ class ShikiHighLevelCodeBlock(ShikiCodeBlock):
829
826
  @staticmethod
830
827
  def _strip_transformer_triggers(code: str | StringVar) -> StringVar | str:
831
828
  if not isinstance(code, (StringVar, str)):
832
- raise VarTypeError(
833
- f"code should be string literal or a StringVar type. Got {type(code)} instead."
834
- )
829
+ msg = f"code should be string literal or a StringVar type. Got {type(code)} instead."
830
+ raise VarTypeError(msg)
835
831
  regex_pattern = r"[\/#]+ *\[!code.*?\]"
836
832
 
837
833
  if isinstance(code, Var):
@@ -840,6 +836,7 @@ class ShikiHighLevelCodeBlock(ShikiCodeBlock):
840
836
  )
841
837
  if isinstance(code, str):
842
838
  return re.sub(regex_pattern, "", code)
839
+ return None
843
840
 
844
841
 
845
842
  class TransformerNamespace(ComponentNamespace):
@@ -962,7 +962,6 @@ class ShikiCodeBlock(Component, MarkdownComponentMap):
962
962
  Returns:
963
963
  The code block component.
964
964
  """
965
- ...
966
965
 
967
966
  def add_imports(self) -> dict[str, list[str]]: ...
968
967
  @classmethod
@@ -1585,7 +1584,6 @@ class ShikiHighLevelCodeBlock(ShikiCodeBlock):
1585
1584
  Returns:
1586
1585
  The code block component.
1587
1586
  """
1588
- ...
1589
1587
 
1590
1588
  class TransformerNamespace(ComponentNamespace):
1591
1589
  shikijs = ShikiJsTransformer
@@ -2207,6 +2205,5 @@ class CodeblockNamespace(ComponentNamespace):
2207
2205
  Returns:
2208
2206
  The code block component.
2209
2207
  """
2210
- ...
2211
2208
 
2212
2209
  code_block = CodeblockNamespace()
@@ -50,9 +50,8 @@ def bundle_library(component: Union["Component", str]):
50
50
  bundled_libraries.add(component)
51
51
  return
52
52
  if component.library is None:
53
- raise DynamicComponentMissingLibraryError(
54
- "Component must have a library to bundle."
55
- )
53
+ msg = "Component must have a library to bundle."
54
+ raise DynamicComponentMissingLibraryError(msg)
56
55
  bundled_libraries.add(format_library_name(component.library))
57
56
 
58
57
 
@@ -94,6 +94,7 @@ from .elements.media import Circle as Circle
94
94
  from .elements.media import Defs as Defs
95
95
  from .elements.media import Ellipse as Ellipse
96
96
  from .elements.media import Embed as Embed
97
+ from .elements.media import G as G
97
98
  from .elements.media import Iframe as Iframe
98
99
  from .elements.media import Img as Img
99
100
  from .elements.media import Line as Line
@@ -118,6 +119,7 @@ from .elements.media import circle as circle
118
119
  from .elements.media import defs as defs
119
120
  from .elements.media import ellipse as ellipse
120
121
  from .elements.media import embed as embed
122
+ from .elements.media import g as g
121
123
  from .elements.media import iframe as iframe
122
124
  from .elements.media import image as image
123
125
  from .elements.media import img as img
@@ -61,4 +61,3 @@ class Element(Component):
61
61
  Returns:
62
62
  The component.
63
63
  """
64
- ...
@@ -69,6 +69,7 @@ _MAPPING = {
69
69
  "text",
70
70
  "line",
71
71
  "circle",
72
+ "g",
72
73
  "ellipse",
73
74
  "rect",
74
75
  "polygon",
@@ -93,6 +93,7 @@ from .media import Circle as Circle
93
93
  from .media import Defs as Defs
94
94
  from .media import Ellipse as Ellipse
95
95
  from .media import Embed as Embed
96
+ from .media import G as G
96
97
  from .media import Iframe as Iframe
97
98
  from .media import Img as Img
98
99
  from .media import Line as Line
@@ -117,6 +118,7 @@ from .media import circle as circle
117
118
  from .media import defs as defs
118
119
  from .media import ellipse as ellipse
119
120
  from .media import embed as embed
121
+ from .media import g as g
120
122
  from .media import iframe as iframe
121
123
  from .media import image as image
122
124
  from .media import img as img
@@ -312,6 +314,7 @@ _MAPPING = {
312
314
  "text",
313
315
  "line",
314
316
  "circle",
317
+ "g",
315
318
  "ellipse",
316
319
  "rect",
317
320
  "polygon",
@@ -333,4 +333,3 @@ class BaseHTML(Element):
333
333
  Returns:
334
334
  The component.
335
335
  """
336
- ...
@@ -609,7 +609,7 @@ class Select(BaseHTML):
609
609
  required: Var[bool]
610
610
 
611
611
  # Number of visible options in a drop-down list
612
- size: Var[int]
612
+ size: Var[str | int]
613
613
 
614
614
  # Fired when the select value changes
615
615
  on_change: EventHandler[input_event]
@@ -746,9 +746,8 @@ class Textarea(BaseHTML):
746
746
  if enter_key_submit is not None:
747
747
  enter_key_submit = Var.create(enter_key_submit)
748
748
  if "on_key_down" in props:
749
- raise ValueError(
750
- "Cannot combine `enter_key_submit` with `on_key_down`.",
751
- )
749
+ msg = "Cannot combine `enter_key_submit` with `on_key_down`."
750
+ raise ValueError(msg)
752
751
  custom_attrs["on_key_down"] = Var(
753
752
  _js_expr=f"(e) => enterKeySubmitOnKeyDown(e, {enter_key_submit!s})",
754
753
  _var_data=VarData.merge(enter_key_submit._get_all_var_data()),
@@ -290,7 +290,6 @@ class Button(BaseHTML):
290
290
  Returns:
291
291
  The component.
292
292
  """
293
- ...
294
293
 
295
294
  class Datalist(BaseHTML):
296
295
  @overload
@@ -536,7 +535,6 @@ class Datalist(BaseHTML):
536
535
  Returns:
537
536
  The component.
538
537
  """
539
- ...
540
538
 
541
539
  class Fieldset(Element):
542
540
  @overload
@@ -594,7 +592,6 @@ class Fieldset(Element):
594
592
  Returns:
595
593
  The component.
596
594
  """
597
- ...
598
595
 
599
596
  def on_submit_event_spec() -> tuple[Var[dict[str, Any]]]: ...
600
597
  def on_submit_string_event_spec() -> tuple[Var[dict[str, str]]]: ...
@@ -867,7 +864,6 @@ class Form(BaseHTML):
867
864
  Returns:
868
865
  The form component.
869
866
  """
870
- ...
871
867
 
872
868
  def add_imports(self) -> ImportDict: ...
873
869
  def add_hooks(self) -> list[str]: ...
@@ -1259,7 +1255,6 @@ class BaseInput(BaseHTML):
1259
1255
  Returns:
1260
1256
  The component.
1261
1257
  """
1262
- ...
1263
1258
 
1264
1259
  class CheckboxInput(BaseInput):
1265
1260
  @overload
@@ -1627,7 +1622,6 @@ class CheckboxInput(BaseInput):
1627
1622
  Returns:
1628
1623
  The component.
1629
1624
  """
1630
- ...
1631
1625
 
1632
1626
  class ValueNumberInput(BaseInput):
1633
1627
  @overload
@@ -1995,7 +1989,6 @@ class ValueNumberInput(BaseInput):
1995
1989
  Returns:
1996
1990
  The component.
1997
1991
  """
1998
- ...
1999
1992
 
2000
1993
  class Input(BaseInput):
2001
1994
  @overload
@@ -2363,7 +2356,6 @@ class Input(BaseInput):
2363
2356
  Returns:
2364
2357
  The component.
2365
2358
  """
2366
- ...
2367
2359
 
2368
2360
  class Label(BaseHTML):
2369
2361
  @overload
@@ -2613,7 +2605,6 @@ class Label(BaseHTML):
2613
2605
  Returns:
2614
2606
  The component.
2615
2607
  """
2616
- ...
2617
2608
 
2618
2609
  class Legend(BaseHTML):
2619
2610
  @overload
@@ -2859,7 +2850,6 @@ class Legend(BaseHTML):
2859
2850
  Returns:
2860
2851
  The component.
2861
2852
  """
2862
- ...
2863
2853
 
2864
2854
  class Meter(BaseHTML):
2865
2855
  @overload
@@ -3119,7 +3109,6 @@ class Meter(BaseHTML):
3119
3109
  Returns:
3120
3110
  The component.
3121
3111
  """
3122
- ...
3123
3112
 
3124
3113
  class Optgroup(BaseHTML):
3125
3114
  @overload
@@ -3369,7 +3358,6 @@ class Optgroup(BaseHTML):
3369
3358
  Returns:
3370
3359
  The component.
3371
3360
  """
3372
- ...
3373
3361
 
3374
3362
  class Option(BaseHTML):
3375
3363
  @overload
@@ -3623,7 +3611,6 @@ class Option(BaseHTML):
3623
3611
  Returns:
3624
3612
  The component.
3625
3613
  """
3626
- ...
3627
3614
 
3628
3615
  class Output(BaseHTML):
3629
3616
  @overload
@@ -3875,7 +3862,6 @@ class Output(BaseHTML):
3875
3862
  Returns:
3876
3863
  The component.
3877
3864
  """
3878
- ...
3879
3865
 
3880
3866
  class Progress(BaseHTML):
3881
3867
  @overload
@@ -4127,7 +4113,6 @@ class Progress(BaseHTML):
4127
4113
  Returns:
4128
4114
  The component.
4129
4115
  """
4130
- ...
4131
4116
 
4132
4117
  class Select(BaseHTML):
4133
4118
  @overload
@@ -4142,7 +4127,7 @@ class Select(BaseHTML):
4142
4127
  multiple: Var[bool] | bool | None = None,
4143
4128
  name: Var[str] | str | None = None,
4144
4129
  required: Var[bool] | bool | None = None,
4145
- size: Var[int] | int | None = None,
4130
+ size: Var[int | str] | int | str | None = None,
4146
4131
  value: Var[str] | str | None = None,
4147
4132
  default_value: Var[str] | str | None = None,
4148
4133
  access_key: Var[str] | str | None = None,
@@ -4395,7 +4380,6 @@ class Select(BaseHTML):
4395
4380
  Returns:
4396
4381
  The component.
4397
4382
  """
4398
- ...
4399
4383
 
4400
4384
  AUTO_HEIGHT_JS = '\nconst autoHeightOnInput = (e, is_enabled) => {\n if (is_enabled) {\n const el = e.target;\n el.style.overflowY = "scroll";\n el.style.height = "auto";\n el.style.height = (e.target.scrollHeight) + "px";\n if (el.form && !el.form.data_resize_on_reset) {\n el.form.addEventListener("reset", () => window.setTimeout(() => autoHeightOnInput(e, is_enabled), 0))\n el.form.data_resize_on_reset = true;\n }\n }\n}\n'
4401
4385
  ENTER_KEY_SUBMIT_JS = "\nconst enterKeySubmitOnKeyDown = (e, is_enabled) => {\n if (is_enabled && e.which === 13 && !e.shiftKey) {\n e.preventDefault();\n if (!e.repeat) {\n if (e.target.form) {\n e.target.form.requestSubmit();\n }\n }\n }\n}\n"
@@ -4691,7 +4675,6 @@ class Textarea(BaseHTML):
4691
4675
  Raises:
4692
4676
  ValueError: when `enter_key_submit` is combined with `on_key_down`.
4693
4677
  """
4694
- ...
4695
4678
 
4696
4679
  button = Button.create
4697
4680
  datalist = Datalist.create