reflex 0.5.10a3__py3-none-any.whl → 0.6.0a1__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 (237) hide show
  1. reflex/.templates/jinja/web/pages/utils.js.jinja2 +4 -4
  2. reflex/.templates/jinja/web/utils/context.js.jinja2 +1 -1
  3. reflex/.templates/jinja/web/utils/theme.js.jinja2 +1 -1
  4. reflex/__init__.py +3 -2
  5. reflex/__init__.pyi +2 -2
  6. reflex/app.py +43 -9
  7. reflex/base.py +3 -2
  8. reflex/compiler/compiler.py +6 -6
  9. reflex/compiler/utils.py +5 -3
  10. reflex/components/base/app_wrap.py +2 -4
  11. reflex/components/base/app_wrap.pyi +17 -17
  12. reflex/components/base/bare.py +7 -4
  13. reflex/components/base/body.pyi +17 -17
  14. reflex/components/base/document.pyi +81 -81
  15. reflex/components/base/error_boundary.py +10 -8
  16. reflex/components/base/error_boundary.pyi +20 -19
  17. reflex/components/base/fragment.pyi +17 -17
  18. reflex/components/base/head.pyi +33 -33
  19. reflex/components/base/link.pyi +34 -33
  20. reflex/components/base/meta.pyi +65 -65
  21. reflex/components/base/script.py +2 -1
  22. reflex/components/base/script.pyi +21 -20
  23. reflex/components/component.py +116 -145
  24. reflex/components/core/banner.py +59 -60
  25. reflex/components/core/banner.pyi +86 -150
  26. reflex/components/core/client_side_routing.py +2 -1
  27. reflex/components/core/client_side_routing.pyi +34 -33
  28. reflex/components/core/clipboard.py +2 -2
  29. reflex/components/core/clipboard.pyi +19 -18
  30. reflex/components/core/cond.py +21 -44
  31. reflex/components/core/debounce.py +6 -8
  32. reflex/components/core/debounce.pyi +19 -18
  33. reflex/components/core/foreach.py +5 -14
  34. reflex/components/core/html.pyi +18 -17
  35. reflex/components/core/match.py +36 -43
  36. reflex/components/core/upload.py +32 -25
  37. reflex/components/core/upload.pyi +84 -73
  38. reflex/components/datadisplay/code.py +55 -28
  39. reflex/components/datadisplay/code.pyi +20 -17
  40. reflex/components/datadisplay/dataeditor.py +17 -11
  41. reflex/components/datadisplay/dataeditor.pyi +34 -33
  42. reflex/components/el/__init__.py +0 -1
  43. reflex/components/el/__init__.pyi +0 -11
  44. reflex/components/el/element.pyi +17 -17
  45. reflex/components/el/elements/__init__.py +1 -7
  46. reflex/components/el/elements/__init__.pyi +1 -15
  47. reflex/components/el/elements/base.pyi +18 -17
  48. reflex/components/el/elements/forms.py +24 -31
  49. reflex/components/el/elements/forms.pyi +237 -236
  50. reflex/components/el/elements/inline.pyi +450 -449
  51. reflex/components/el/elements/media.py +0 -21
  52. reflex/components/el/elements/media.pyi +338 -337
  53. reflex/components/el/elements/metadata.py +3 -2
  54. reflex/components/el/elements/metadata.pyi +98 -97
  55. reflex/components/el/elements/other.pyi +114 -113
  56. reflex/components/el/elements/scripts.pyi +50 -49
  57. reflex/components/el/elements/sectioning.pyi +242 -241
  58. reflex/components/el/elements/tables.pyi +162 -161
  59. reflex/components/el/elements/typography.pyi +242 -241
  60. reflex/components/gridjs/datatable.py +13 -14
  61. reflex/components/gridjs/datatable.pyi +34 -33
  62. reflex/components/lucide/icon.py +2 -126
  63. reflex/components/lucide/icon.pyi +34 -142
  64. reflex/components/markdown/markdown.py +30 -35
  65. reflex/components/markdown/markdown.pyi +29 -32
  66. reflex/components/moment/moment.pyi +19 -18
  67. reflex/components/next/base.pyi +17 -17
  68. reflex/components/next/image.py +0 -4
  69. reflex/components/next/image.pyi +20 -19
  70. reflex/components/next/link.pyi +18 -17
  71. reflex/components/next/video.pyi +18 -17
  72. reflex/components/plotly/plotly.py +16 -28
  73. reflex/components/plotly/plotly.pyi +36 -35
  74. reflex/components/props.py +21 -10
  75. reflex/components/radix/__init__.pyi +1 -1
  76. reflex/components/radix/primitives/__init__.pyi +0 -1
  77. reflex/components/radix/primitives/accordion.py +7 -8
  78. reflex/components/radix/primitives/accordion.pyi +117 -116
  79. reflex/components/radix/primitives/base.pyi +34 -33
  80. reflex/components/radix/primitives/drawer.pyi +169 -168
  81. reflex/components/radix/primitives/form.pyi +168 -167
  82. reflex/components/radix/primitives/progress.pyi +82 -81
  83. reflex/components/radix/primitives/slider.pyi +84 -83
  84. reflex/components/radix/themes/base.py +8 -4
  85. reflex/components/radix/themes/base.pyi +114 -113
  86. reflex/components/radix/themes/color_mode.py +12 -21
  87. reflex/components/radix/themes/color_mode.pyi +67 -67
  88. reflex/components/radix/themes/components/__init__.pyi +1 -0
  89. reflex/components/radix/themes/components/alert_dialog.pyi +118 -117
  90. reflex/components/radix/themes/components/aspect_ratio.pyi +18 -17
  91. reflex/components/radix/themes/components/avatar.pyi +18 -17
  92. reflex/components/radix/themes/components/badge.pyi +18 -17
  93. reflex/components/radix/themes/components/button.pyi +18 -17
  94. reflex/components/radix/themes/components/callout.pyi +82 -81
  95. reflex/components/radix/themes/components/card.pyi +18 -17
  96. reflex/components/radix/themes/components/checkbox.py +2 -3
  97. reflex/components/radix/themes/components/checkbox.pyi +53 -52
  98. reflex/components/radix/themes/components/checkbox_cards.pyi +34 -33
  99. reflex/components/radix/themes/components/checkbox_group.pyi +34 -33
  100. reflex/components/radix/themes/components/context_menu.pyi +140 -139
  101. reflex/components/radix/themes/components/data_list.py +5 -0
  102. reflex/components/radix/themes/components/data_list.pyi +71 -65
  103. reflex/components/radix/themes/components/dialog.pyi +121 -120
  104. reflex/components/radix/themes/components/dropdown_menu.pyi +142 -141
  105. reflex/components/radix/themes/components/hover_card.pyi +68 -67
  106. reflex/components/radix/themes/components/icon_button.py +2 -1
  107. reflex/components/radix/themes/components/icon_button.pyi +18 -17
  108. reflex/components/radix/themes/components/inset.pyi +18 -17
  109. reflex/components/radix/themes/components/popover.pyi +73 -72
  110. reflex/components/radix/themes/components/progress.pyi +18 -17
  111. reflex/components/radix/themes/components/radio.pyi +18 -17
  112. reflex/components/radix/themes/components/radio_cards.pyi +35 -34
  113. reflex/components/radix/themes/components/radio_group.py +35 -31
  114. reflex/components/radix/themes/components/radio_group.pyi +73 -66
  115. reflex/components/radix/themes/components/scroll_area.pyi +18 -17
  116. reflex/components/radix/themes/components/segmented_control.pyi +35 -34
  117. reflex/components/radix/themes/components/select.py +2 -1
  118. reflex/components/radix/themes/components/select.pyi +155 -154
  119. reflex/components/radix/themes/components/separator.py +2 -3
  120. reflex/components/radix/themes/components/separator.pyi +18 -17
  121. reflex/components/radix/themes/components/skeleton.pyi +18 -17
  122. reflex/components/radix/themes/components/slider.py +2 -1
  123. reflex/components/radix/themes/components/slider.pyi +20 -19
  124. reflex/components/radix/themes/components/spinner.pyi +18 -17
  125. reflex/components/radix/themes/components/switch.pyi +19 -18
  126. reflex/components/radix/themes/components/table.pyi +114 -113
  127. reflex/components/radix/themes/components/tabs.pyi +84 -83
  128. reflex/components/radix/themes/components/text_area.pyi +21 -20
  129. reflex/components/radix/themes/components/text_field.py +0 -79
  130. reflex/components/radix/themes/components/text_field.pyi +57 -63
  131. reflex/components/radix/themes/components/tooltip.pyi +21 -20
  132. reflex/components/radix/themes/layout/base.pyi +18 -17
  133. reflex/components/radix/themes/layout/box.pyi +18 -17
  134. reflex/components/radix/themes/layout/center.pyi +18 -17
  135. reflex/components/radix/themes/layout/container.py +2 -3
  136. reflex/components/radix/themes/layout/container.pyi +18 -17
  137. reflex/components/radix/themes/layout/flex.pyi +18 -17
  138. reflex/components/radix/themes/layout/grid.pyi +18 -17
  139. reflex/components/radix/themes/layout/list.py +5 -4
  140. reflex/components/radix/themes/layout/list.pyi +86 -85
  141. reflex/components/radix/themes/layout/section.py +2 -3
  142. reflex/components/radix/themes/layout/section.pyi +18 -17
  143. reflex/components/radix/themes/layout/spacer.pyi +18 -17
  144. reflex/components/radix/themes/layout/stack.pyi +50 -49
  145. reflex/components/radix/themes/typography/blockquote.pyi +18 -17
  146. reflex/components/radix/themes/typography/code.pyi +18 -17
  147. reflex/components/radix/themes/typography/heading.pyi +18 -17
  148. reflex/components/radix/themes/typography/link.pyi +18 -17
  149. reflex/components/radix/themes/typography/text.pyi +114 -113
  150. reflex/components/react_player/audio.pyi +34 -33
  151. reflex/components/react_player/react_player.pyi +34 -33
  152. reflex/components/react_player/video.pyi +34 -33
  153. reflex/components/recharts/cartesian.py +23 -19
  154. reflex/components/recharts/cartesian.pyi +297 -296
  155. reflex/components/recharts/charts.py +6 -5
  156. reflex/components/recharts/charts.pyi +179 -178
  157. reflex/components/recharts/general.py +8 -7
  158. reflex/components/recharts/general.pyi +82 -81
  159. reflex/components/recharts/polar.py +14 -13
  160. reflex/components/recharts/polar.pyi +76 -75
  161. reflex/components/recharts/recharts.pyi +33 -33
  162. reflex/components/sonner/toast.py +30 -33
  163. reflex/components/sonner/toast.pyi +27 -25
  164. reflex/components/suneditor/editor.py +2 -1
  165. reflex/components/suneditor/editor.pyi +27 -26
  166. reflex/components/tags/iter_tag.py +16 -16
  167. reflex/components/tags/tag.py +8 -10
  168. reflex/constants/base.py +3 -1
  169. reflex/constants/event.py +1 -0
  170. reflex/event.py +89 -79
  171. reflex/experimental/__init__.py +25 -6
  172. reflex/experimental/client_state.py +34 -58
  173. reflex/experimental/hooks.py +13 -18
  174. reflex/experimental/layout.py +5 -5
  175. reflex/experimental/layout.pyi +84 -83
  176. reflex/{experimental/vars → ivars}/__init__.py +0 -1
  177. reflex/ivars/base.py +2180 -0
  178. reflex/ivars/function.py +200 -0
  179. reflex/ivars/number.py +1137 -0
  180. reflex/ivars/object.py +564 -0
  181. reflex/ivars/sequence.py +1601 -0
  182. reflex/model.py +22 -0
  183. reflex/reflex.py +4 -0
  184. reflex/state.py +388 -73
  185. reflex/style.py +52 -34
  186. reflex/testing.py +8 -3
  187. reflex/utils/exceptions.py +12 -0
  188. reflex/utils/exec.py +0 -14
  189. reflex/utils/format.py +74 -223
  190. reflex/utils/net.py +43 -0
  191. reflex/utils/path_ops.py +13 -1
  192. reflex/utils/prerequisites.py +46 -26
  193. reflex/utils/pyi_generator.py +5 -4
  194. reflex/utils/serializers.py +13 -31
  195. reflex/utils/types.py +44 -9
  196. reflex/vars.py +127 -2230
  197. {reflex-0.5.10a3.dist-info → reflex-0.6.0a1.dist-info}/METADATA +4 -6
  198. reflex-0.6.0a1.dist-info/RECORD +384 -0
  199. reflex/.templates/apps/demo/.gitignore +0 -4
  200. reflex/.templates/apps/demo/assets/favicon.ico +0 -0
  201. reflex/.templates/apps/demo/assets/github.svg +0 -10
  202. reflex/.templates/apps/demo/assets/icon.svg +0 -37
  203. reflex/.templates/apps/demo/assets/logo.svg +0 -68
  204. reflex/.templates/apps/demo/assets/paneleft.svg +0 -13
  205. reflex/.templates/apps/demo/code/__init__.py +0 -1
  206. reflex/.templates/apps/demo/code/demo.py +0 -127
  207. reflex/.templates/apps/demo/code/pages/__init__.py +0 -7
  208. reflex/.templates/apps/demo/code/pages/chatapp.py +0 -31
  209. reflex/.templates/apps/demo/code/pages/datatable.py +0 -360
  210. reflex/.templates/apps/demo/code/pages/forms.py +0 -257
  211. reflex/.templates/apps/demo/code/pages/graphing.py +0 -253
  212. reflex/.templates/apps/demo/code/pages/home.py +0 -56
  213. reflex/.templates/apps/demo/code/sidebar.py +0 -178
  214. reflex/.templates/apps/demo/code/state.py +0 -22
  215. reflex/.templates/apps/demo/code/states/form_state.py +0 -40
  216. reflex/.templates/apps/demo/code/states/pie_state.py +0 -47
  217. reflex/.templates/apps/demo/code/styles.py +0 -68
  218. reflex/.templates/apps/demo/code/webui/__init__.py +0 -0
  219. reflex/.templates/apps/demo/code/webui/components/__init__.py +0 -4
  220. reflex/.templates/apps/demo/code/webui/components/chat.py +0 -118
  221. reflex/.templates/apps/demo/code/webui/components/loading_icon.py +0 -19
  222. reflex/.templates/apps/demo/code/webui/components/modal.py +0 -56
  223. reflex/.templates/apps/demo/code/webui/components/navbar.py +0 -70
  224. reflex/.templates/apps/demo/code/webui/components/sidebar.py +0 -66
  225. reflex/.templates/apps/demo/code/webui/state.py +0 -146
  226. reflex/.templates/apps/demo/code/webui/styles.py +0 -88
  227. reflex/experimental/vars/base.py +0 -583
  228. reflex/experimental/vars/function.py +0 -290
  229. reflex/experimental/vars/number.py +0 -1458
  230. reflex/experimental/vars/object.py +0 -804
  231. reflex/experimental/vars/sequence.py +0 -1764
  232. reflex/utils/watch.py +0 -96
  233. reflex/vars.pyi +0 -218
  234. reflex-0.5.10a3.dist-info/RECORD +0 -413
  235. {reflex-0.5.10a3.dist-info → reflex-0.6.0a1.dist-info}/LICENSE +0 -0
  236. {reflex-0.5.10a3.dist-info → reflex-0.6.0a1.dist-info}/WHEEL +0 -0
  237. {reflex-0.5.10a3.dist-info → reflex-0.6.0a1.dist-info}/entry_points.txt +0 -0
@@ -7,8 +7,9 @@ from typing import Any, Callable, Dict, Optional, Union, overload
7
7
 
8
8
  from reflex.components.component import Component
9
9
  from reflex.event import EventHandler, EventSpec
10
+ from reflex.ivars.base import ImmutableVar
10
11
  from reflex.style import Style
11
- from reflex.vars import BaseVar, Var
12
+ from reflex.vars import Var
12
13
 
13
14
  from .base import NextComponent
14
15
 
@@ -25,51 +26,51 @@ class Video(NextComponent):
25
26
  id: Optional[Any] = None,
26
27
  class_name: Optional[Any] = None,
27
28
  autofocus: Optional[bool] = None,
28
- custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
29
+ custom_attrs: Optional[Dict[str, Union[ImmutableVar, str]]] = None,
29
30
  on_blur: Optional[
30
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
31
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
31
32
  ] = None,
32
33
  on_click: Optional[
33
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
34
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
34
35
  ] = None,
35
36
  on_context_menu: Optional[
36
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
37
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
37
38
  ] = None,
38
39
  on_double_click: Optional[
39
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
40
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
40
41
  ] = None,
41
42
  on_focus: Optional[
42
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
43
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
43
44
  ] = None,
44
45
  on_mount: Optional[
45
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
46
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
46
47
  ] = None,
47
48
  on_mouse_down: Optional[
48
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
49
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
49
50
  ] = None,
50
51
  on_mouse_enter: Optional[
51
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
52
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
52
53
  ] = None,
53
54
  on_mouse_leave: Optional[
54
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
55
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
55
56
  ] = None,
56
57
  on_mouse_move: Optional[
57
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
58
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
58
59
  ] = None,
59
60
  on_mouse_out: Optional[
60
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
61
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
61
62
  ] = None,
62
63
  on_mouse_over: Optional[
63
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
64
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
64
65
  ] = None,
65
66
  on_mouse_up: Optional[
66
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
67
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
67
68
  ] = None,
68
69
  on_scroll: Optional[
69
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
70
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
70
71
  ] = None,
71
72
  on_unmount: Optional[
72
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
73
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
73
74
  ] = None,
74
75
  **props,
75
76
  ) -> "Video":
@@ -8,6 +8,7 @@ from reflex.base import Base
8
8
  from reflex.components.component import Component, NoSSRComponent
9
9
  from reflex.components.core.cond import color_mode_cond
10
10
  from reflex.event import EventHandler
11
+ from reflex.ivars.base import ImmutableVar, LiteralVar
11
12
  from reflex.utils import console
12
13
  from reflex.vars import Var
13
14
 
@@ -30,7 +31,7 @@ def _event_data_signature(e0: Var) -> List[Any]:
30
31
  Returns:
31
32
  The event key extracted from the event data (if defined).
32
33
  """
33
- return [Var.create_safe(f"{e0}?.event", _var_is_string=False)]
34
+ return [ImmutableVar.create_safe(f"{e0}?.event")]
34
35
 
35
36
 
36
37
  def _event_points_data_signature(e0: Var) -> List[Any]:
@@ -43,11 +44,8 @@ def _event_points_data_signature(e0: Var) -> List[Any]:
43
44
  The event data and the extracted points.
44
45
  """
45
46
  return [
46
- Var.create_safe(f"{e0}?.event", _var_is_string=False),
47
- Var.create_safe(
48
- f"extractPoints({e0}?.points)",
49
- _var_is_string=False,
50
- ),
47
+ ImmutableVar.create_safe(f"{e0}?.event"),
48
+ ImmutableVar.create_safe(f"extractPoints({e0}?.points)"),
51
49
  ]
52
50
 
53
51
 
@@ -116,7 +114,7 @@ class Plotly(NoSSRComponent):
116
114
  config: Var[Dict]
117
115
 
118
116
  # If true, the graph will resize when the window is resized.
119
- use_resize_handler: Var[bool] = Var.create_safe(True)
117
+ use_resize_handler: Var[bool] = LiteralVar.create(True)
120
118
 
121
119
  # Fired after the plot is redrawn.
122
120
  on_after_plot: EventHandler[_passthrough_signature]
@@ -242,10 +240,10 @@ const extractPoints = (points) => {
242
240
  from plotly.io import templates
243
241
 
244
242
  responsive_template = color_mode_cond(
245
- light=Var.create_safe(templates["plotly"]).to(dict),
246
- dark=Var.create_safe(templates["plotly_dark"]).to(dict),
243
+ light=LiteralVar.create(templates["plotly"]),
244
+ dark=LiteralVar.create(templates["plotly_dark"]),
247
245
  )
248
- if isinstance(responsive_template, Var):
246
+ if isinstance(responsive_template, ImmutableVar):
249
247
  # Mark the conditional Var as a Template to avoid type mismatch
250
248
  responsive_template = responsive_template.to(Template)
251
249
  props.setdefault("template", responsive_template)
@@ -257,36 +255,26 @@ const extractPoints = (points) => {
257
255
 
258
256
  def _render(self):
259
257
  tag = super()._render()
260
- figure = self.data.to(dict)
258
+ figure = self.data.upcast().to(dict)
261
259
  merge_dicts = [] # Data will be merged and spread from these dict Vars
262
260
  if self.layout is not None:
263
261
  # Why is this not a literal dict? Great question... it didn't work
264
262
  # reliably because of how _var_name_unwrapped strips the outer curly
265
263
  # brackets if any of the contained Vars depend on state.
266
- layout_dict = Var.create_safe(
267
- f"{{'layout': {self.layout.to(dict)._var_name_unwrapped}}}"
268
- ).to(dict)
264
+ layout_dict = LiteralVar.create({"layout": self.layout})
269
265
  merge_dicts.append(layout_dict)
270
266
  if self.template is not None:
271
- template_dict = Var.create_safe(
272
- {"layout": {"template": self.template.to(dict)}}
273
- )
274
- template_dict._var_data = None # To avoid stripping outer curly brackets
275
- merge_dicts.append(template_dict)
267
+ template_dict = LiteralVar.create({"layout": {"template": self.template}})
268
+ merge_dicts.append(template_dict.without_data())
276
269
  if merge_dicts:
277
270
  tag.special_props.add(
278
271
  # Merge all dictionaries and spread the result over props.
279
- Var.create_safe(
280
- f"{{...mergician({figure._var_name_unwrapped},"
281
- f"{','.join(md._var_name_unwrapped for md in merge_dicts)})}}",
282
- _var_is_string=False,
272
+ ImmutableVar.create_safe(
273
+ f"{{...mergician({str(figure)},"
274
+ f"{','.join(str(md) for md in merge_dicts)})}}",
283
275
  ),
284
276
  )
285
277
  else:
286
278
  # Spread the figure dict over props, nothing to merge.
287
- tag.special_props.add(
288
- Var.create_safe(
289
- f"{{...{figure._var_name_unwrapped}}}", _var_is_string=False
290
- )
291
- )
279
+ tag.special_props.add(ImmutableVar.create_safe(f"{{...{str(figure)}}}"))
292
280
  return tag
@@ -8,9 +8,10 @@ from typing import Any, Callable, Dict, Optional, Union, overload
8
8
  from reflex.base import Base
9
9
  from reflex.components.component import NoSSRComponent
10
10
  from reflex.event import EventHandler, EventSpec
11
+ from reflex.ivars.base import ImmutableVar
11
12
  from reflex.style import Style
12
13
  from reflex.utils import console
13
- from reflex.vars import BaseVar, Var
14
+ from reflex.vars import Var
14
15
 
15
16
  try:
16
17
  from plotly.graph_objects import Figure, layout
@@ -44,105 +45,105 @@ class Plotly(NoSSRComponent):
44
45
  id: Optional[Any] = None,
45
46
  class_name: Optional[Any] = None,
46
47
  autofocus: Optional[bool] = None,
47
- custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
48
+ custom_attrs: Optional[Dict[str, Union[ImmutableVar, str]]] = None,
48
49
  on_after_plot: Optional[
49
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
50
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
50
51
  ] = None,
51
52
  on_animated: Optional[
52
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
53
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
53
54
  ] = None,
54
55
  on_animating_frame: Optional[
55
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
56
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
56
57
  ] = None,
57
58
  on_animation_interrupted: Optional[
58
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
59
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
59
60
  ] = None,
60
61
  on_autosize: Optional[
61
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
62
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
62
63
  ] = None,
63
64
  on_before_hover: Optional[
64
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
65
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
65
66
  ] = None,
66
67
  on_blur: Optional[
67
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
68
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
68
69
  ] = None,
69
70
  on_button_clicked: Optional[
70
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
71
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
71
72
  ] = None,
72
73
  on_click: Optional[
73
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
74
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
74
75
  ] = None,
75
76
  on_context_menu: Optional[
76
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
77
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
77
78
  ] = None,
78
79
  on_deselect: Optional[
79
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
80
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
80
81
  ] = None,
81
82
  on_double_click: Optional[
82
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
83
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
83
84
  ] = None,
84
85
  on_focus: Optional[
85
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
86
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
86
87
  ] = None,
87
88
  on_hover: Optional[
88
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
89
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
89
90
  ] = None,
90
91
  on_mount: Optional[
91
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
92
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
92
93
  ] = None,
93
94
  on_mouse_down: Optional[
94
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
95
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
95
96
  ] = None,
96
97
  on_mouse_enter: Optional[
97
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
98
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
98
99
  ] = None,
99
100
  on_mouse_leave: Optional[
100
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
101
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
101
102
  ] = None,
102
103
  on_mouse_move: Optional[
103
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
104
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
104
105
  ] = None,
105
106
  on_mouse_out: Optional[
106
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
107
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
107
108
  ] = None,
108
109
  on_mouse_over: Optional[
109
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
110
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
110
111
  ] = None,
111
112
  on_mouse_up: Optional[
112
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
113
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
113
114
  ] = None,
114
115
  on_redraw: Optional[
115
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
116
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
116
117
  ] = None,
117
118
  on_relayout: Optional[
118
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
119
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
119
120
  ] = None,
120
121
  on_relayouting: Optional[
121
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
122
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
122
123
  ] = None,
123
124
  on_restyle: Optional[
124
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
125
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
125
126
  ] = None,
126
127
  on_scroll: Optional[
127
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
128
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
128
129
  ] = None,
129
130
  on_selected: Optional[
130
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
131
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
131
132
  ] = None,
132
133
  on_selecting: Optional[
133
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
134
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
134
135
  ] = None,
135
136
  on_transition_interrupted: Optional[
136
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
137
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
137
138
  ] = None,
138
139
  on_transitioning: Optional[
139
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
140
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
140
141
  ] = None,
141
142
  on_unhover: Optional[
142
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
143
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
143
144
  ] = None,
144
145
  on_unmount: Optional[
145
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
146
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
146
147
  ] = None,
147
148
  **props,
148
149
  ) -> "Plotly":
@@ -3,8 +3,8 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  from reflex.base import Base
6
+ from reflex.ivars.object import LiteralObjectVar
6
7
  from reflex.utils import format
7
- from reflex.utils.serializers import serialize
8
8
 
9
9
 
10
10
  class PropsBase(Base):
@@ -20,12 +20,23 @@ class PropsBase(Base):
20
20
  Returns:
21
21
  The object as a Javascript Object literal.
22
22
  """
23
- return format.unwrap_vars(
24
- self.__config__.json_dumps(
25
- {
26
- format.to_camel_case(key): value
27
- for key, value in self.dict().items()
28
- },
29
- default=serialize,
30
- )
31
- )
23
+ return LiteralObjectVar.create(
24
+ {format.to_camel_case(key): value for key, value in self.dict().items()}
25
+ ).json()
26
+
27
+ def dict(self, *args, **kwargs):
28
+ """Convert the object to a dictionary.
29
+
30
+ Keys will be converted to camelCase.
31
+
32
+ Args:
33
+ *args: Arguments to pass to the parent class.
34
+ **kwargs: Keyword arguments to pass to the parent class.
35
+
36
+ Returns:
37
+ The object as a dictionary.
38
+ """
39
+ return {
40
+ format.to_camel_case(key): value
41
+ for key, value in super().dict(*args, **kwargs).items()
42
+ }
@@ -8,7 +8,6 @@ from . import themes as themes
8
8
  from .primitives.accordion import accordion as accordion
9
9
  from .primitives.drawer import drawer as drawer
10
10
  from .primitives.form import form as form
11
- from .primitives.progress import progress as progress
12
11
  from .themes.base import theme as theme
13
12
  from .themes.base import theme_panel as theme_panel
14
13
  from .themes.color_mode import color_mode as color_mode
@@ -31,6 +30,7 @@ from .themes.components.hover_card import hover_card as hover_card
31
30
  from .themes.components.icon_button import icon_button as icon_button
32
31
  from .themes.components.inset import inset as inset
33
32
  from .themes.components.popover import popover as popover
33
+ from .themes.components.progress import progress as progress
34
34
  from .themes.components.radio_cards import radio_cards as radio_cards
35
35
  from .themes.components.radio_group import radio as radio
36
36
  from .themes.components.radio_group import radio_group as radio_group
@@ -6,4 +6,3 @@
6
6
  from .accordion import accordion as accordion
7
7
  from .drawer import drawer as drawer
8
8
  from .form import form as form
9
- from .progress import progress as progress
@@ -11,6 +11,7 @@ from reflex.components.lucide.icon import Icon
11
11
  from reflex.components.radix.primitives.base import RadixPrimitiveComponent
12
12
  from reflex.components.radix.themes.base import LiteralAccentColor, LiteralRadius
13
13
  from reflex.event import EventHandler
14
+ from reflex.ivars.base import ImmutableVar, LiteralVar
14
15
  from reflex.style import Style
15
16
  from reflex.vars import Var, get_uuid_string_var
16
17
 
@@ -102,10 +103,10 @@ class AccordionRoot(AccordionComponent):
102
103
  radius: Var[LiteralRadius]
103
104
 
104
105
  # The time in milliseconds to animate open and close
105
- duration: Var[int] = Var.create_safe(DEFAULT_ANIMATION_DURATION)
106
+ duration: Var[int] = LiteralVar.create(DEFAULT_ANIMATION_DURATION)
106
107
 
107
108
  # The easing function to use for the animation.
108
- easing: Var[str] = Var.create_safe(DEFAULT_ANIMATION_EASING, _var_is_string=True)
109
+ easing: Var[str] = LiteralVar.create(DEFAULT_ANIMATION_EASING)
109
110
 
110
111
  # Whether to show divider lines between items.
111
112
  show_dividers: Var[bool]
@@ -192,8 +193,8 @@ class AccordionItem(AccordionComponent):
192
193
  def create(
193
194
  cls,
194
195
  *children,
195
- header: Optional[Component | Var] = None,
196
- content: Optional[Component | Var] = None,
196
+ header: Optional[Component | ImmutableVar] = None,
197
+ content: Optional[Component | ImmutableVar] = None,
197
198
  **props,
198
199
  ) -> Component:
199
200
  """Create an accordion item.
@@ -464,14 +465,12 @@ to {
464
465
  Returns:
465
466
  The style of the component.
466
467
  """
467
- slideDown = Var.create(
468
+ slideDown = LiteralVar.create(
468
469
  f"${{slideDown}} var(--animation-duration) var(--animation-easing)",
469
- _var_is_string=True,
470
470
  )
471
471
 
472
- slideUp = Var.create(
472
+ slideUp = LiteralVar.create(
473
473
  f"${{slideUp}} var(--animation-duration) var(--animation-easing)",
474
- _var_is_string=True,
475
474
  )
476
475
 
477
476
  return {