reflex 0.7.13a2__py3-none-any.whl → 0.7.14a2__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 +49 -41
  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 +14 -15
  53. reflex/components/el/elements/forms.pyi +15 -32
  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 +2 -4
  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 +20 -2
  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.14a2.dist-info}/METADATA +1 -1
  252. reflex-0.7.14a2.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.14a2.dist-info}/WHEEL +0 -0
  255. {reflex-0.7.13a2.dist-info → reflex-0.7.14a2.dist-info}/entry_points.txt +0 -0
  256. {reflex-0.7.13a2.dist-info → reflex-0.7.14a2.dist-info}/licenses/LICENSE +0 -0
@@ -71,7 +71,6 @@ class ChartBase(RechartsCharts):
71
71
  Returns:
72
72
  The chart component wrapped in a responsive container.
73
73
  """
74
- ...
75
74
 
76
75
  class CategoricalChartBase(ChartBase):
77
76
  @overload
@@ -149,7 +148,6 @@ class CategoricalChartBase(ChartBase):
149
148
  Returns:
150
149
  The chart component wrapped in a responsive container.
151
150
  """
152
- ...
153
151
 
154
152
  class AreaChart(CategoricalChartBase):
155
153
  @overload
@@ -232,7 +230,6 @@ class AreaChart(CategoricalChartBase):
232
230
  Returns:
233
231
  The chart component wrapped in a responsive container.
234
232
  """
235
- ...
236
233
 
237
234
  class BarChart(CategoricalChartBase):
238
235
  @overload
@@ -320,7 +317,6 @@ class BarChart(CategoricalChartBase):
320
317
  Returns:
321
318
  The chart component wrapped in a responsive container.
322
319
  """
323
- ...
324
320
 
325
321
  class LineChart(CategoricalChartBase):
326
322
  @overload
@@ -398,7 +394,6 @@ class LineChart(CategoricalChartBase):
398
394
  Returns:
399
395
  The chart component wrapped in a responsive container.
400
396
  """
401
- ...
402
397
 
403
398
  class ComposedChart(CategoricalChartBase):
404
399
  @overload
@@ -489,7 +484,6 @@ class ComposedChart(CategoricalChartBase):
489
484
  Returns:
490
485
  The chart component wrapped in a responsive container.
491
486
  """
492
- ...
493
487
 
494
488
  class PieChart(ChartBase):
495
489
  @overload
@@ -555,7 +549,6 @@ class PieChart(ChartBase):
555
549
  Returns:
556
550
  The chart component wrapped in a responsive container.
557
551
  """
558
- ...
559
552
 
560
553
  class RadarChart(ChartBase):
561
554
  def get_event_triggers(self) -> dict[str, Var | Any]: ...
@@ -619,7 +612,6 @@ class RadarChart(ChartBase):
619
612
  Returns:
620
613
  The chart component wrapped in a responsive container.
621
614
  """
622
- ...
623
615
 
624
616
  class RadialBarChart(ChartBase):
625
617
  @overload
@@ -701,7 +693,6 @@ class RadialBarChart(ChartBase):
701
693
  Returns:
702
694
  The chart component wrapped in a responsive container.
703
695
  """
704
- ...
705
696
 
706
697
  class ScatterChart(ChartBase):
707
698
  def get_event_triggers(self) -> dict[str, Var | Any]: ...
@@ -757,7 +748,6 @@ class ScatterChart(ChartBase):
757
748
  Returns:
758
749
  The chart component wrapped in a responsive container.
759
750
  """
760
- ...
761
751
 
762
752
  class FunnelChart(ChartBase):
763
753
  @overload
@@ -823,7 +813,6 @@ class FunnelChart(ChartBase):
823
813
  Returns:
824
814
  The chart component wrapped in a responsive container.
825
815
  """
826
- ...
827
816
 
828
817
  class Treemap(RechartsCharts):
829
818
  @overload
@@ -903,7 +892,6 @@ class Treemap(RechartsCharts):
903
892
  Returns:
904
893
  The Treemap component wrapped in a responsive container.
905
894
  """
906
- ...
907
895
 
908
896
  area_chart = AreaChart.create
909
897
  bar_chart = BarChart.create
@@ -78,7 +78,6 @@ class ResponsiveContainer(Recharts, MemoizationLeaf):
78
78
  Returns:
79
79
  The memoization leaf
80
80
  """
81
- ...
82
81
 
83
82
  class Legend(Recharts):
84
83
  @overload
@@ -192,7 +191,6 @@ class Legend(Recharts):
192
191
  Returns:
193
192
  The component.
194
193
  """
195
- ...
196
194
 
197
195
  class GraphingTooltip(Recharts):
198
196
  @overload
@@ -280,7 +278,6 @@ class GraphingTooltip(Recharts):
280
278
  Returns:
281
279
  The component.
282
280
  """
283
- ...
284
281
 
285
282
  class Label(Recharts):
286
283
  @overload
@@ -382,7 +379,6 @@ class Label(Recharts):
382
379
  Returns:
383
380
  The component.
384
381
  """
385
- ...
386
382
 
387
383
  class LabelList(Recharts):
388
384
  @overload
@@ -486,7 +482,6 @@ class LabelList(Recharts):
486
482
  Returns:
487
483
  The component.
488
484
  """
489
- ...
490
485
 
491
486
  class Cell(Recharts):
492
487
  @overload
@@ -542,7 +537,6 @@ class Cell(Recharts):
542
537
  Returns:
543
538
  The component.
544
539
  """
545
- ...
546
540
 
547
541
  responsive_container = ResponsiveContainer.create
548
542
  legend = Legend.create
@@ -11,6 +11,7 @@ from reflex.event import EventHandler, no_args_event_spec
11
11
  from reflex.vars.base import LiteralVar, Var
12
12
 
13
13
  from .recharts import (
14
+ ACTIVE_DOT_TYPE,
14
15
  LiteralAnimationEasing,
15
16
  LiteralGridType,
16
17
  LiteralLegendType,
@@ -65,10 +66,10 @@ class Pie(Recharts):
65
66
  legend_type: Var[LiteralLegendType]
66
67
 
67
68
  # If false set, labels will not be drawn. If true set, labels will be drawn which have the props calculated internally. Default: False
68
- label: Var[bool] = Var.create(False)
69
+ label: Var[bool | dict[str, Any]] = Var.create(False)
69
70
 
70
71
  # If false set, label lines will not be drawn. If true set, label lines will be drawn which have the props calculated internally. Default: False
71
- label_line: Var[bool]
72
+ label_line: Var[bool | dict[str, Any]]
72
73
 
73
74
  # Valid children components
74
75
  _valid_children: ClassVar[list[str]] = ["Cell", "LabelList", "Bare"]
@@ -126,7 +127,7 @@ class Radar(Recharts):
126
127
  points: Var[Sequence[dict[str, Any]]]
127
128
 
128
129
  # If false set, dots will not be drawn. Default: True
129
- dot: Var[bool]
130
+ dot: Var[ACTIVE_DOT_TYPE]
130
131
 
131
132
  # Stoke color. Default: rx.color("accent", 9)
132
133
  stroke: Var[str | Color] = LiteralVar.create(Color("accent", 9))
@@ -141,7 +142,7 @@ class Radar(Recharts):
141
142
  legend_type: Var[LiteralLegendType]
142
143
 
143
144
  # If false set, labels will not be drawn. Default: True
144
- label: Var[bool]
145
+ label: Var[bool | dict[str, Any]]
145
146
 
146
147
  # If set false, animation of polygon will be disabled. Default: True in CSR, and False in SSR
147
148
  is_animation_active: Var[bool]
@@ -60,8 +60,8 @@ class Pie(Recharts):
60
60
  ]
61
61
  ]
62
62
  | None = None,
63
- label: Var[bool] | bool | None = None,
64
- label_line: Var[bool] | bool | None = None,
63
+ label: Var[bool | dict[str, Any]] | bool | dict[str, Any] | None = None,
64
+ label_line: Var[bool | dict[str, Any]] | bool | dict[str, Any] | None = None,
65
65
  stroke: Color | Var[Color | str] | str | None = None,
66
66
  fill: Color | Var[Color | str] | str | None = None,
67
67
  is_animation_active: Var[bool] | bool | None = None,
@@ -131,7 +131,6 @@ class Pie(Recharts):
131
131
  Returns:
132
132
  The component.
133
133
  """
134
- ...
135
134
 
136
135
  class Radar(Recharts):
137
136
  def get_event_triggers(self) -> dict[str, Var | Any]: ...
@@ -142,7 +141,7 @@ class Radar(Recharts):
142
141
  *children,
143
142
  data_key: Var[int | str] | int | str | None = None,
144
143
  points: Sequence[dict[str, Any]] | Var[Sequence[dict[str, Any]]] | None = None,
145
- dot: Var[bool] | bool | None = None,
144
+ dot: Var[bool | dict[str, Any]] | bool | dict[str, Any] | None = None,
146
145
  stroke: Color | Var[Color | str] | str | None = None,
147
146
  fill: Color | Var[Color | str] | str | None = None,
148
147
  fill_opacity: Var[float] | float | None = None,
@@ -175,7 +174,7 @@ class Radar(Recharts):
175
174
  ]
176
175
  ]
177
176
  | None = None,
178
- label: Var[bool] | bool | None = None,
177
+ label: Var[bool | dict[str, Any]] | bool | dict[str, Any] | None = None,
179
178
  is_animation_active: Var[bool] | bool | None = None,
180
179
  animation_begin: Var[int] | int | None = None,
181
180
  animation_duration: Var[int] | int | None = None,
@@ -227,7 +226,6 @@ class Radar(Recharts):
227
226
  Returns:
228
227
  The component.
229
228
  """
230
- ...
231
229
 
232
230
  class RadialBar(Recharts):
233
231
  def get_event_triggers(self) -> dict[str, Var | Any]: ...
@@ -325,7 +323,6 @@ class RadialBar(Recharts):
325
323
  Returns:
326
324
  The component.
327
325
  """
328
- ...
329
326
 
330
327
  class PolarAngleAxis(Recharts):
331
328
  @overload
@@ -411,7 +408,6 @@ class PolarAngleAxis(Recharts):
411
408
  Returns:
412
409
  The component.
413
410
  """
414
- ...
415
411
 
416
412
  class PolarGrid(Recharts):
417
413
  @overload
@@ -481,7 +477,6 @@ class PolarGrid(Recharts):
481
477
  Returns:
482
478
  The component.
483
479
  """
484
- ...
485
480
 
486
481
  class PolarRadiusAxis(Recharts):
487
482
  def get_event_triggers(self) -> dict[str, Var | Any]: ...
@@ -591,7 +586,6 @@ class PolarRadiusAxis(Recharts):
591
586
  Returns:
592
587
  The component.
593
588
  """
594
- ...
595
589
 
596
590
  pie = Pie.create
597
591
  radar = Radar.create
@@ -1,6 +1,6 @@
1
1
  """A component that wraps a recharts lib."""
2
2
 
3
- from typing import Literal
3
+ from typing import Any, Literal
4
4
 
5
5
  from reflex.components.component import Component, MemoizationLeaf, NoSSRComponent
6
6
 
@@ -73,25 +73,25 @@ LiteralPosition = Literal[
73
73
  "center",
74
74
  ]
75
75
  LiteralIconType = Literal[
76
- "line",
77
- "plainline",
78
- "square",
79
- "rect",
80
76
  "circle",
81
77
  "cross",
82
78
  "diamond",
79
+ "line",
80
+ "plainline",
81
+ "rect",
82
+ "square",
83
83
  "star",
84
84
  "triangle",
85
85
  "wye",
86
86
  ]
87
87
  LiteralLegendType = Literal[
88
- "line",
89
- "plainline",
90
- "square",
91
- "rect",
92
88
  "circle",
93
89
  "cross",
94
90
  "diamond",
91
+ "line",
92
+ "plainline",
93
+ "rect",
94
+ "square",
95
95
  "star",
96
96
  "triangle",
97
97
  "wye",
@@ -103,7 +103,7 @@ LiteralStackOffset = Literal["expand", "none", "wiggle", "silhouette"]
103
103
  LiteralBarChartStackOffset = Literal["expand", "none", "wiggle", "silhouette", "sign"]
104
104
  LiteralComposedChartBaseValue = Literal["dataMin", "dataMax", "auto"]
105
105
  LiteralAxisType = Literal["number", "category"]
106
- LiteralAreaType = Literal[
106
+ LiteralCurveType = Literal[
107
107
  "basis",
108
108
  "basisClosed",
109
109
  "basisOpen",
@@ -126,3 +126,5 @@ LiteralIntervalAxis = Literal[
126
126
  "preserveStart", "preserveEnd", "preserveStartEnd", "equidistantPreserveStart"
127
127
  ]
128
128
  LiteralSyncMethod = Literal["index", "value"]
129
+
130
+ ACTIVE_DOT_TYPE = bool | dict[str, Any]
@@ -61,7 +61,6 @@ class Recharts(Component):
61
61
  Returns:
62
62
  The component.
63
63
  """
64
- ...
65
64
 
66
65
  class RechartsCharts(NoSSRComponent, MemoizationLeaf):
67
66
  @overload
@@ -113,7 +112,6 @@ class RechartsCharts(NoSSRComponent, MemoizationLeaf):
113
112
  Returns:
114
113
  The memoization leaf
115
114
  """
116
- ...
117
115
 
118
116
  LiteralAnimationEasing = Literal["ease", "ease-in", "ease-out", "ease-in-out", "linear"]
119
117
  LiteralIfOverflow = Literal["discard", "hidden", "visible", "extendDomain"]
@@ -168,25 +166,25 @@ LiteralPosition = Literal[
168
166
  "center",
169
167
  ]
170
168
  LiteralIconType = Literal[
171
- "line",
172
- "plainline",
173
- "square",
174
- "rect",
175
169
  "circle",
176
170
  "cross",
177
171
  "diamond",
172
+ "line",
173
+ "plainline",
174
+ "rect",
175
+ "square",
178
176
  "star",
179
177
  "triangle",
180
178
  "wye",
181
179
  ]
182
180
  LiteralLegendType = Literal[
183
- "line",
184
- "plainline",
185
- "square",
186
- "rect",
187
181
  "circle",
188
182
  "cross",
189
183
  "diamond",
184
+ "line",
185
+ "plainline",
186
+ "rect",
187
+ "square",
190
188
  "star",
191
189
  "triangle",
192
190
  "wye",
@@ -198,7 +196,7 @@ LiteralStackOffset = Literal["expand", "none", "wiggle", "silhouette"]
198
196
  LiteralBarChartStackOffset = Literal["expand", "none", "wiggle", "silhouette", "sign"]
199
197
  LiteralComposedChartBaseValue = Literal["dataMin", "dataMax", "auto"]
200
198
  LiteralAxisType = Literal["number", "category"]
201
- LiteralAreaType = Literal[
199
+ LiteralCurveType = Literal[
202
200
  "basis",
203
201
  "basisClosed",
204
202
  "basisOpen",
@@ -221,3 +219,4 @@ LiteralIntervalAxis = Literal[
221
219
  "preserveStart", "preserveEnd", "preserveStartEnd", "equidistantPreserveStart"
222
220
  ]
223
221
  LiteralSyncMethod = Literal["index", "value"]
222
+ ACTIVE_DOT_TYPE = bool | dict[str, Any]
@@ -147,7 +147,6 @@ class ToastProps(PropsBase, NoExtrasAllowedProps):
147
147
  Returns:
148
148
  The object as a dictionary with ToastAction fields intact.
149
149
  """
150
- kwargs.setdefault("exclude_none", True)
151
150
  d = super().dict(*args, **kwargs)
152
151
  # Keep these fields as ToastAction so they can be serialized specially
153
152
  if "action" in d:
@@ -266,7 +265,8 @@ class Toaster(Component):
266
265
  props.setdefault("title", message)
267
266
  message = ""
268
267
  elif message == "" and "title" not in props and "description" not in props:
269
- raise ValueError("Toast message or title or description must be provided.")
268
+ msg = "Toast message or title or description must be provided."
269
+ raise ValueError(msg)
270
270
 
271
271
  if props:
272
272
  args = LiteralVar.create(ToastProps(component_name="rx.toast", **props)) # pyright: ignore [reportCallIssue]
@@ -177,7 +177,6 @@ class Toaster(Component):
177
177
  Returns:
178
178
  The toaster component.
179
179
  """
180
- ...
181
180
 
182
181
  class ToastNamespace(ComponentNamespace):
183
182
  provider = staticmethod(Toaster.create)
@@ -210,6 +209,5 @@ class ToastNamespace(ComponentNamespace):
210
209
  Returns:
211
210
  The toast event.
212
211
  """
213
- ...
214
212
 
215
213
  toast = ToastNamespace()
@@ -259,7 +259,8 @@ class Editor(NoSSRComponent):
259
259
  """
260
260
  if set_options is not None:
261
261
  if isinstance(set_options, Var):
262
- raise ValueError("EditorOptions cannot be a state Var")
262
+ msg = "EditorOptions cannot be a state Var"
263
+ raise ValueError(msg)
263
264
  props["set_options"] = {
264
265
  to_camel_case(k): v
265
266
  for k, v in set_options.dict().items()
@@ -197,4 +197,3 @@ class Editor(NoSSRComponent):
197
197
  Raises:
198
198
  ValueError: If set_options is a state Var.
199
199
  """
200
- ...
@@ -121,7 +121,8 @@ class IterTag(Tag):
121
121
  else:
122
122
  # If the render function takes the index as an argument.
123
123
  if len(args) != 2:
124
- raise ValueError("The render function must take 2 arguments.")
124
+ msg = "The render function must take 2 arguments."
125
+ raise ValueError(msg)
125
126
  component = self.render_fn(arg, index)
126
127
 
127
128
  # Nested foreach components or cond must be wrapped in fragments.
@@ -131,7 +132,8 @@ class IterTag(Tag):
131
132
  component = _into_component_once(component)
132
133
 
133
134
  if component is None:
134
- raise ValueError("The render function must return a component.")
135
+ msg = "The render function must return a component."
136
+ raise ValueError(msg)
135
137
 
136
138
  # Set the component key.
137
139
  if component.key is None:
reflex/config.py CHANGED
@@ -69,9 +69,27 @@ def _load_dotenv_from_str(env_files: str) -> None:
69
69
  load_dotenv(env_file_path, override=True)
70
70
 
71
71
 
72
+ def _load_dotenv_from_env():
73
+ """Load environment variables from paths specified in REFLEX_ENV_FILE."""
74
+ show_deprecation = False
75
+ env_env_file = os.environ.get("REFLEX_ENV_FILE")
76
+ if not env_env_file:
77
+ env_env_file = os.environ.get("ENV_FILE")
78
+ if env_env_file:
79
+ show_deprecation = True
80
+ if show_deprecation:
81
+ console.deprecate(
82
+ "Usage of deprecated ENV_FILE env var detected.",
83
+ reason="Prefer `REFLEX_` prefix when setting env vars.",
84
+ deprecation_version="0.7.13",
85
+ removal_version="0.8.0",
86
+ )
87
+ if env_env_file:
88
+ _load_dotenv_from_str(env_env_file)
89
+
90
+
72
91
  # Load the env files at import time if they are set in the ENV_FILE environment variable.
73
- if env_files := os.getenv("ENV_FILE"):
74
- _load_dotenv_from_str(env_files)
92
+ _load_dotenv_from_env()
75
93
 
76
94
 
77
95
  class DBConfig(Base):
@@ -196,12 +214,10 @@ def get_default_value_for_field(field: dataclasses.Field) -> Any:
196
214
  """
197
215
  if field.default != dataclasses.MISSING:
198
216
  return field.default
199
- elif field.default_factory != dataclasses.MISSING:
217
+ if field.default_factory != dataclasses.MISSING:
200
218
  return field.default_factory()
201
- else:
202
- raise ValueError(
203
- f"Missing value for environment variable {field.name} and no default value found"
204
- )
219
+ msg = f"Missing value for environment variable {field.name} and no default value found"
220
+ raise ValueError(msg)
205
221
 
206
222
 
207
223
  # TODO: Change all interpret_.* signatures to value: str, field: dataclasses.Field once we migrate rx.Config to dataclasses
@@ -223,9 +239,10 @@ def interpret_boolean_env(value: str, field_name: str) -> bool:
223
239
 
224
240
  if value.lower() in true_values:
225
241
  return True
226
- elif value.lower() in false_values:
242
+ if value.lower() in false_values:
227
243
  return False
228
- raise EnvironmentVarValueError(f"Invalid boolean value: {value} for {field_name}")
244
+ msg = f"Invalid boolean value: {value} for {field_name}"
245
+ raise EnvironmentVarValueError(msg)
229
246
 
230
247
 
231
248
  def interpret_int_env(value: str, field_name: str) -> int:
@@ -244,9 +261,8 @@ def interpret_int_env(value: str, field_name: str) -> int:
244
261
  try:
245
262
  return int(value)
246
263
  except ValueError as ve:
247
- raise EnvironmentVarValueError(
248
- f"Invalid integer value: {value} for {field_name}"
249
- ) from ve
264
+ msg = f"Invalid integer value: {value} for {field_name}"
265
+ raise EnvironmentVarValueError(msg) from ve
250
266
 
251
267
 
252
268
  def interpret_existing_path_env(value: str, field_name: str) -> ExistingPath:
@@ -264,7 +280,8 @@ def interpret_existing_path_env(value: str, field_name: str) -> ExistingPath:
264
280
  """
265
281
  path = Path(value)
266
282
  if not path.exists():
267
- raise EnvironmentVarValueError(f"Path does not exist: {path} for {field_name}")
283
+ msg = f"Path does not exist: {path} for {field_name}"
284
+ raise EnvironmentVarValueError(msg)
268
285
  return path
269
286
 
270
287
 
@@ -298,9 +315,8 @@ def interpret_enum_env(value: str, field_type: GenericType, field_name: str) ->
298
315
  try:
299
316
  return field_type(value)
300
317
  except ValueError as ve:
301
- raise EnvironmentVarValueError(
302
- f"Invalid enum value: {value} for {field_name}"
303
- ) from ve
318
+ msg = f"Invalid enum value: {value} for {field_name}"
319
+ raise EnvironmentVarValueError(msg) from ve
304
320
 
305
321
 
306
322
  def interpret_env_var_value(
@@ -322,21 +338,20 @@ def interpret_env_var_value(
322
338
  field_type = value_inside_optional(field_type)
323
339
 
324
340
  if is_union(field_type):
325
- raise ValueError(
326
- f"Union types are not supported for environment variables: {field_name}."
327
- )
341
+ msg = f"Union types are not supported for environment variables: {field_name}."
342
+ raise ValueError(msg)
328
343
 
329
344
  if field_type is bool:
330
345
  return interpret_boolean_env(value, field_name)
331
- elif field_type is str:
346
+ if field_type is str:
332
347
  return value
333
- elif field_type is int:
348
+ if field_type is int:
334
349
  return interpret_int_env(value, field_name)
335
- elif field_type is Path:
350
+ if field_type is Path:
336
351
  return interpret_path_env(value, field_name)
337
- elif field_type is ExistingPath:
352
+ if field_type is ExistingPath:
338
353
  return interpret_existing_path_env(value, field_name)
339
- elif get_origin(field_type) is list:
354
+ if get_origin(field_type) is list:
340
355
  return [
341
356
  interpret_env_var_value(
342
357
  v,
@@ -345,13 +360,11 @@ def interpret_env_var_value(
345
360
  )
346
361
  for i, v in enumerate(value.split(":"))
347
362
  ]
348
- elif inspect.isclass(field_type) and issubclass(field_type, enum.Enum):
363
+ if inspect.isclass(field_type) and issubclass(field_type, enum.Enum):
349
364
  return interpret_enum_env(value, field_type, field_name)
350
365
 
351
- else:
352
- raise ValueError(
353
- f"Invalid type for environment variable {field_name}: {field_type}. This is probably an issue in Reflex."
354
- )
366
+ msg = f"Invalid type for environment variable {field_name}: {field_type}. This is probably an issue in Reflex."
367
+ raise ValueError(msg)
355
368
 
356
369
 
357
370
  T = TypeVar("T")
@@ -964,9 +977,8 @@ If you are not using tailwind, set `tailwind` to `None` in rxconfig.py.""",
964
977
  self.state_manager_mode == constants.StateManagerMode.REDIS
965
978
  and not self.redis_url
966
979
  ):
967
- raise ConfigError(
968
- f"{self._prefixes[0]}REDIS_URL is required when using the redis state manager."
969
- )
980
+ msg = f"{self._prefixes[0]}REDIS_URL is required when using the redis state manager."
981
+ raise ConfigError(msg)
970
982
 
971
983
  @property
972
984
  def app_module(self) -> ModuleType | None:
@@ -988,9 +1000,9 @@ If you are not using tailwind, set `tailwind` to `None` in rxconfig.py.""",
988
1000
  Returns:
989
1001
  The module name.
990
1002
  """
991
- if self.app_module is not None:
992
- return self.app_module.__name__
993
- return ".".join([self.app_name, self.app_name])
1003
+ if self.app_module_import is not None:
1004
+ return self.app_module_import
1005
+ return self.app_name + "." + self.app_name
994
1006
 
995
1007
  def update_from_env(self) -> dict[str, Any]:
996
1008
  """Update the config values based on set environment variables.
reflex/constants/base.py CHANGED
@@ -33,11 +33,11 @@ class Dirs(SimpleNamespace):
33
33
  # The name of the utils file.
34
34
  UTILS = "utils"
35
35
  # The name of the state file.
36
- STATE_PATH = "/".join([UTILS, "state"])
36
+ STATE_PATH = UTILS + "/state"
37
37
  # The name of the components file.
38
- COMPONENTS_PATH = "/".join([UTILS, "components"])
38
+ COMPONENTS_PATH = UTILS + "/components"
39
39
  # The name of the contexts file.
40
- CONTEXTS_PATH = "/".join([UTILS, "context"])
40
+ CONTEXTS_PATH = UTILS + "/context"
41
41
  # The name of the output static directory.
42
42
  STATIC = "_static"
43
43
  # The name of the public html directory served at "/"
@@ -176,6 +176,13 @@ DATA_DASH = "data-"
176
176
  ARIA_UNDERSCORE = "aria_"
177
177
  ARIA_DASH = "aria-"
178
178
 
179
+ SPECIAL_ATTRS = (
180
+ DATA_UNDERSCORE,
181
+ DATA_DASH,
182
+ ARIA_UNDERSCORE,
183
+ ARIA_DASH,
184
+ )
185
+
179
186
 
180
187
  class SpecialAttributes(enum.Enum):
181
188
  """Special attributes for components.
@@ -194,9 +201,4 @@ class SpecialAttributes(enum.Enum):
194
201
  Returns:
195
202
  True if the attribute is special.
196
203
  """
197
- return (
198
- attr.startswith(DATA_UNDERSCORE)
199
- or attr.startswith(DATA_DASH)
200
- or attr.startswith(ARIA_UNDERSCORE)
201
- or attr.startswith(ARIA_DASH)
202
- )
204
+ return attr.startswith(SPECIAL_ATTRS)