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
@@ -2,9 +2,10 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- import re
6
5
  from typing import Dict, Literal, Optional, Union
7
6
 
7
+ from typing_extensions import get_args
8
+
8
9
  from reflex.components.component import Component
9
10
  from reflex.components.core.cond import color_mode_cond
10
11
  from reflex.components.lucide.icon import Icon
@@ -12,6 +13,7 @@ from reflex.components.radix.themes.components.button import Button
12
13
  from reflex.components.radix.themes.layout.box import Box
13
14
  from reflex.constants.colors import Color
14
15
  from reflex.event import set_clipboard
16
+ from reflex.ivars.base import ImmutableVar, LiteralVar
15
17
  from reflex.style import Style
16
18
  from reflex.utils import format
17
19
  from reflex.utils.imports import ImportDict, ImportVar
@@ -349,6 +351,20 @@ LiteralCodeLanguage = Literal[
349
351
  ]
350
352
 
351
353
 
354
+ def replace_quotes_with_camel_case(value: str) -> str:
355
+ """Replaces quotes in the given string with camel case format.
356
+
357
+ Args:
358
+ value (str): The string to be processed.
359
+
360
+ Returns:
361
+ str: The processed string with quotes replaced by camel case.
362
+ """
363
+ for theme in get_args(LiteralCodeBlockTheme):
364
+ value = value.replace(f'"{theme}"', format.to_camel_case(theme))
365
+ return value
366
+
367
+
352
368
  class CodeBlock(Component):
353
369
  """A code block."""
354
370
 
@@ -389,32 +405,42 @@ class CodeBlock(Component):
389
405
  The import dict.
390
406
  """
391
407
  imports_: ImportDict = {}
392
- themes = re.findall(r"`(.*?)`", self.theme._var_name)
393
- if not themes:
394
- themes = [self.theme._var_name]
408
+
409
+ themeString = str(self.theme)
410
+
411
+ selected_themes = []
412
+
413
+ for possibleTheme in get_args(LiteralCodeBlockTheme):
414
+ if format.to_camel_case(possibleTheme) in themeString:
415
+ selected_themes.append(possibleTheme)
416
+ if possibleTheme in themeString:
417
+ selected_themes.append(possibleTheme)
418
+
419
+ selected_themes = sorted(set(map(self.convert_theme_name, selected_themes)))
395
420
 
396
421
  imports_.update(
397
422
  {
398
- f"react-syntax-highlighter/dist/cjs/styles/prism/{self.convert_theme_name(theme)}": [
423
+ f"react-syntax-highlighter/dist/cjs/styles/prism/{theme}": [
399
424
  ImportVar(
400
- tag=format.to_camel_case(self.convert_theme_name(theme)),
425
+ tag=format.to_camel_case(theme),
401
426
  is_default=True,
402
427
  install=False,
403
428
  )
404
429
  ]
405
- for theme in themes
430
+ for theme in selected_themes
406
431
  }
407
432
  )
408
433
 
409
434
  if (
410
435
  self.language is not None
411
- and self.language._var_name in LiteralCodeLanguage.__args__ # type: ignore
436
+ and (language_without_quotes := str(self.language).replace('"', ""))
437
+ in LiteralCodeLanguage.__args__ # type: ignore
412
438
  ):
413
439
  imports_[
414
- f"react-syntax-highlighter/dist/cjs/languages/prism/{self.language._var_name}"
440
+ f"react-syntax-highlighter/dist/cjs/languages/prism/{language_without_quotes}"
415
441
  ] = [
416
442
  ImportVar(
417
- tag=format.to_camel_case(self.language._var_name),
443
+ tag=format.to_camel_case(language_without_quotes),
418
444
  is_default=True,
419
445
  install=False,
420
446
  )
@@ -425,9 +451,10 @@ class CodeBlock(Component):
425
451
  def _get_custom_code(self) -> Optional[str]:
426
452
  if (
427
453
  self.language is not None
428
- and self.language._var_name in LiteralCodeLanguage.__args__ # type: ignore
454
+ and (language_without_quotes := str(self.language).replace('"', ""))
455
+ in LiteralCodeLanguage.__args__ # type: ignore
429
456
  ):
430
- return f"{self.alias}.registerLanguage('{self.language._var_name}', {format.to_camel_case(self.language._var_name)})"
457
+ return f"{self.alias}.registerLanguage('{language_without_quotes}', {format.to_camel_case(language_without_quotes)})"
431
458
 
432
459
  @classmethod
433
460
  def create(
@@ -453,11 +480,14 @@ class CodeBlock(Component):
453
480
 
454
481
  if "theme" not in props:
455
482
  # Default color scheme responds to global color mode.
456
- props["theme"] = color_mode_cond(light="one-light", dark="one-dark")
483
+ props["theme"] = color_mode_cond(
484
+ light=ImmutableVar.create_safe("oneLight"),
485
+ dark=ImmutableVar.create_safe("oneDark"),
486
+ )
457
487
 
458
488
  # react-syntax-highlighter doesnt have an explicit "light" or "dark" theme so we use one-light and one-dark
459
489
  # themes respectively to ensure code compatibility.
460
- if "theme" in props and not isinstance(props["theme"], Var):
490
+ if "theme" in props and not isinstance(props["theme"], ImmutableVar):
461
491
  props["theme"] = cls.convert_theme_name(props["theme"])
462
492
 
463
493
  if can_copy:
@@ -483,8 +513,8 @@ class CodeBlock(Component):
483
513
  # Carry the children (code) via props
484
514
  if children:
485
515
  props["code"] = children[0]
486
- if not isinstance(props["code"], Var):
487
- props["code"] = Var.create(props["code"], _var_is_string=True)
516
+ if not isinstance(props["code"], ImmutableVar):
517
+ props["code"] = LiteralVar.create(props["code"])
488
518
 
489
519
  # Create the component.
490
520
  code_block = super().create(
@@ -503,18 +533,15 @@ class CodeBlock(Component):
503
533
 
504
534
  def _render(self):
505
535
  out = super()._render()
506
- predicate, qmark, value = self.theme._var_name.partition("?")
507
- out.add_props(
508
- style=Var.create(
509
- format.to_camel_case(f"{predicate}{qmark}{value.replace('`', '')}"),
510
- _var_is_local=False,
511
- _var_is_string=False,
512
- )
513
- ).remove_props("theme", "code")
514
- if self.code is not None:
515
- out.special_props.add(
516
- Var.create_safe(f"children={str(self.code)}", _var_is_string=False)
517
- )
536
+
537
+ theme = self.theme.upcast()._replace(
538
+ _var_name=replace_quotes_with_camel_case(str(self.theme))
539
+ )
540
+
541
+ out.add_props(style=theme).remove_props("theme", "code").add_props(
542
+ children=self.code
543
+ )
544
+
518
545
  return out
519
546
 
520
547
  @staticmethod
@@ -8,9 +8,10 @@ from typing import Any, Callable, Dict, Literal, Optional, Union, overload
8
8
  from reflex.components.component import Component
9
9
  from reflex.constants.colors import Color
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.imports import ImportDict
13
- from reflex.vars import BaseVar, Var
14
+ from reflex.vars import Var
14
15
 
15
16
  LiteralCodeBlockTheme = Literal[
16
17
  "a11y-dark",
@@ -341,6 +342,8 @@ LiteralCodeLanguage = Literal[
341
342
  "zig",
342
343
  ]
343
344
 
345
+ def replace_quotes_with_camel_case(value: str) -> str: ...
346
+
344
347
  class CodeBlock(Component):
345
348
  def add_imports(self) -> ImportDict: ...
346
349
  @overload
@@ -1029,51 +1032,51 @@ class CodeBlock(Component):
1029
1032
  id: Optional[Any] = None,
1030
1033
  class_name: Optional[Any] = None,
1031
1034
  autofocus: Optional[bool] = None,
1032
- custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
1035
+ custom_attrs: Optional[Dict[str, Union[ImmutableVar, str]]] = None,
1033
1036
  on_blur: Optional[
1034
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
1037
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
1035
1038
  ] = None,
1036
1039
  on_click: Optional[
1037
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
1040
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
1038
1041
  ] = None,
1039
1042
  on_context_menu: Optional[
1040
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
1043
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
1041
1044
  ] = None,
1042
1045
  on_double_click: Optional[
1043
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
1046
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
1044
1047
  ] = None,
1045
1048
  on_focus: Optional[
1046
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
1049
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
1047
1050
  ] = None,
1048
1051
  on_mount: Optional[
1049
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
1052
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
1050
1053
  ] = None,
1051
1054
  on_mouse_down: Optional[
1052
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
1055
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
1053
1056
  ] = None,
1054
1057
  on_mouse_enter: Optional[
1055
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
1058
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
1056
1059
  ] = None,
1057
1060
  on_mouse_leave: Optional[
1058
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
1061
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
1059
1062
  ] = None,
1060
1063
  on_mouse_move: Optional[
1061
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
1064
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
1062
1065
  ] = None,
1063
1066
  on_mouse_out: Optional[
1064
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
1067
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
1065
1068
  ] = None,
1066
1069
  on_mouse_over: Optional[
1067
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
1070
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
1068
1071
  ] = None,
1069
1072
  on_mouse_up: Optional[
1070
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
1073
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
1071
1074
  ] = None,
1072
1075
  on_scroll: Optional[
1073
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
1076
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
1074
1077
  ] = None,
1075
1078
  on_unmount: Optional[
1076
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
1079
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
1077
1080
  ] = None,
1078
1081
  **props,
1079
1082
  ) -> "CodeBlock":
@@ -9,6 +9,8 @@ from reflex.base import Base
9
9
  from reflex.components.component import Component, NoSSRComponent
10
10
  from reflex.components.literals import LiteralRowMarker
11
11
  from reflex.event import EventHandler
12
+ from reflex.ivars.base import ImmutableVar
13
+ from reflex.ivars.sequence import ArrayVar
12
14
  from reflex.utils import console, format, types
13
15
  from reflex.utils.imports import ImportDict, ImportVar
14
16
  from reflex.utils.serializers import serializer
@@ -293,14 +295,12 @@ class DataEditor(NoSSRComponent):
293
295
 
294
296
  # Define the name of the getData callback associated with this component and assign to get_cell_content.
295
297
  data_callback = f"getData_{editor_id}"
296
- self.get_cell_content = Var.create(
297
- data_callback, _var_is_local=False, _var_is_string=False
298
- ) # type: ignore
298
+ self.get_cell_content = ImmutableVar.create(data_callback) # type: ignore
299
299
 
300
300
  code = [f"function {data_callback}([col, row])" "{"]
301
301
 
302
- columns_path = f"{self.columns._var_full_name}"
303
- data_path = f"{self.data._var_full_name}"
302
+ columns_path = str(self.columns)
303
+ data_path = str(self.data)
304
304
 
305
305
  code.extend(
306
306
  [
@@ -333,12 +333,18 @@ class DataEditor(NoSSRComponent):
333
333
 
334
334
  # If rows is not provided, determine from data.
335
335
  if rows is None:
336
- props["rows"] = data.length() if isinstance(data, Var) else len(data)
336
+ if isinstance(data, ImmutableVar) and not isinstance(data, ArrayVar):
337
+ raise ValueError(
338
+ "DataEditor data must be an ArrayVar if rows is not provided."
339
+ )
340
+ props["rows"] = (
341
+ data.length() if isinstance(data, ImmutableVar) else len(data)
342
+ )
337
343
 
338
- if not isinstance(columns, Var) and len(columns):
344
+ if not isinstance(columns, ImmutableVar) and len(columns):
339
345
  if (
340
346
  types.is_dataframe(type(data))
341
- or isinstance(data, Var)
347
+ or isinstance(data, ImmutableVar)
342
348
  and types.is_dataframe(data._var_type)
343
349
  ):
344
350
  raise ValueError(
@@ -403,9 +409,9 @@ def serialize_dataeditortheme(theme: DataEditorTheme):
403
409
  Returns:
404
410
  The serialized theme.
405
411
  """
406
- return format.json_dumps(
407
- {format.to_camel_case(k): v for k, v in theme.__dict__.items() if v is not None}
408
- )
412
+ return {
413
+ format.to_camel_case(k): v for k, v in theme.__dict__.items() if v is not None
414
+ }
409
415
 
410
416
 
411
417
  data_editor = DataEditor.create
@@ -9,10 +9,11 @@ from typing import Any, Callable, Dict, List, Literal, Optional, Union, overload
9
9
  from reflex.base import Base
10
10
  from reflex.components.component import NoSSRComponent
11
11
  from reflex.event import EventHandler, EventSpec
12
+ from reflex.ivars.base import ImmutableVar
12
13
  from reflex.style import Style
13
14
  from reflex.utils.imports import ImportDict
14
15
  from reflex.utils.serializers import serializer
15
- from reflex.vars import BaseVar, Var
16
+ from reflex.vars import Var
16
17
 
17
18
  class GridColumnIcons(Enum):
18
19
  Array = "array"
@@ -134,99 +135,99 @@ class DataEditor(NoSSRComponent):
134
135
  id: Optional[Any] = None,
135
136
  class_name: Optional[Any] = None,
136
137
  autofocus: Optional[bool] = None,
137
- custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
138
+ custom_attrs: Optional[Dict[str, Union[ImmutableVar, str]]] = None,
138
139
  on_blur: Optional[
139
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
140
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
140
141
  ] = None,
141
142
  on_cell_activated: Optional[
142
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
143
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
143
144
  ] = None,
144
145
  on_cell_clicked: Optional[
145
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
146
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
146
147
  ] = None,
147
148
  on_cell_context_menu: Optional[
148
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
149
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
149
150
  ] = None,
150
151
  on_cell_edited: Optional[
151
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
152
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
152
153
  ] = None,
153
154
  on_click: Optional[
154
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
155
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
155
156
  ] = None,
156
157
  on_column_resize: Optional[
157
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
158
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
158
159
  ] = None,
159
160
  on_context_menu: Optional[
160
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
161
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
161
162
  ] = None,
162
163
  on_delete: Optional[
163
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
164
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
164
165
  ] = None,
165
166
  on_double_click: Optional[
166
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
167
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
167
168
  ] = None,
168
169
  on_finished_editing: Optional[
169
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
170
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
170
171
  ] = None,
171
172
  on_focus: Optional[
172
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
173
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
173
174
  ] = None,
174
175
  on_group_header_clicked: Optional[
175
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
176
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
176
177
  ] = None,
177
178
  on_group_header_context_menu: Optional[
178
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
179
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
179
180
  ] = None,
180
181
  on_group_header_renamed: Optional[
181
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
182
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
182
183
  ] = None,
183
184
  on_header_clicked: Optional[
184
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
185
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
185
186
  ] = None,
186
187
  on_header_context_menu: Optional[
187
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
188
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
188
189
  ] = None,
189
190
  on_header_menu_click: Optional[
190
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
191
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
191
192
  ] = None,
192
193
  on_item_hovered: Optional[
193
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
194
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
194
195
  ] = None,
195
196
  on_mount: Optional[
196
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
197
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
197
198
  ] = None,
198
199
  on_mouse_down: Optional[
199
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
200
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
200
201
  ] = None,
201
202
  on_mouse_enter: Optional[
202
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
203
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
203
204
  ] = None,
204
205
  on_mouse_leave: Optional[
205
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
206
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
206
207
  ] = None,
207
208
  on_mouse_move: Optional[
208
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
209
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
209
210
  ] = None,
210
211
  on_mouse_out: Optional[
211
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
212
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
212
213
  ] = None,
213
214
  on_mouse_over: Optional[
214
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
215
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
215
216
  ] = None,
216
217
  on_mouse_up: Optional[
217
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
218
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
218
219
  ] = None,
219
220
  on_row_appended: Optional[
220
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
221
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
221
222
  ] = None,
222
223
  on_scroll: Optional[
223
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
224
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
224
225
  ] = None,
225
226
  on_selection_cleared: Optional[
226
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
227
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
227
228
  ] = None,
228
229
  on_unmount: Optional[
229
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
230
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
230
231
  ] = None,
231
232
  **props,
232
233
  ) -> "DataEditor":
@@ -10,7 +10,6 @@ _SUBMODULES: set[str] = {"elements"}
10
10
  _SUBMOD_ATTRS: dict[str, list[str]] = {
11
11
  f"elements.{k}": v for k, v in elements._MAPPING.items()
12
12
  }
13
- _PYRIGHT_IGNORE_IMPORTS = elements._PYRIGHT_IGNORE_IMPORTS
14
13
 
15
14
  __getattr__, __dir__, __all__ = lazy_loader.attach(
16
15
  __name__,
@@ -3,7 +3,6 @@
3
3
  # This file was generated by `reflex/utils/pyi_generator.py`!
4
4
  # ------------------------------------------------------
5
5
 
6
- from . import elements
7
6
  from .elements.forms import Button as Button
8
7
  from .elements.forms import Fieldset as Fieldset
9
8
  from .elements.forms import Form as Form
@@ -88,36 +87,28 @@ from .elements.inline import u as u
88
87
  from .elements.inline import wbr as wbr
89
88
  from .elements.media import Area as Area
90
89
  from .elements.media import Audio as Audio
91
- from .elements.media import Defs as Defs
92
90
  from .elements.media import Embed as Embed
93
91
  from .elements.media import Iframe as Iframe
94
92
  from .elements.media import Img as Img
95
- from .elements.media import LinearGradient as LinearGradient
96
93
  from .elements.media import Map as Map
97
94
  from .elements.media import Object as Object
98
- from .elements.media import Path as Path
99
95
  from .elements.media import Picture as Picture
100
96
  from .elements.media import Portal as Portal
101
97
  from .elements.media import Source as Source
102
- from .elements.media import Stop as Stop
103
98
  from .elements.media import Svg as Svg
104
99
  from .elements.media import Track as Track
105
100
  from .elements.media import Video as Video
106
101
  from .elements.media import area as area
107
102
  from .elements.media import audio as audio
108
- from .elements.media import defs as defs # type: ignore
109
103
  from .elements.media import embed as embed
110
104
  from .elements.media import iframe as iframe
111
105
  from .elements.media import image as image
112
106
  from .elements.media import img as img
113
- from .elements.media import lineargradient as lineargradient # type: ignore
114
107
  from .elements.media import map as map
115
108
  from .elements.media import object as object
116
- from .elements.media import path as path # type: ignore
117
109
  from .elements.media import picture as picture
118
110
  from .elements.media import portal as portal
119
111
  from .elements.media import source as source
120
- from .elements.media import stop as stop # type: ignore
121
112
  from .elements.media import svg as svg
122
113
  from .elements.media import track as track
123
114
  from .elements.media import video as video
@@ -231,5 +222,3 @@ from .elements.typography import ol as ol
231
222
  from .elements.typography import p as p
232
223
  from .elements.typography import pre as pre
233
224
  from .elements.typography import ul as ul
234
-
235
- _PYRIGHT_IGNORE_IMPORTS = elements._PYRIGHT_IGNORE_IMPORTS
@@ -7,8 +7,8 @@ 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
12
 
13
13
  class Element(Component):
14
14
  @overload
@@ -21,51 +21,51 @@ class Element(Component):
21
21
  id: Optional[Any] = None,
22
22
  class_name: Optional[Any] = None,
23
23
  autofocus: Optional[bool] = None,
24
- custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
24
+ custom_attrs: Optional[Dict[str, Union[ImmutableVar, str]]] = None,
25
25
  on_blur: Optional[
26
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
26
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
27
27
  ] = None,
28
28
  on_click: Optional[
29
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
29
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
30
30
  ] = None,
31
31
  on_context_menu: Optional[
32
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
32
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
33
33
  ] = None,
34
34
  on_double_click: Optional[
35
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
35
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
36
36
  ] = None,
37
37
  on_focus: Optional[
38
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
38
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
39
39
  ] = None,
40
40
  on_mount: Optional[
41
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
41
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
42
42
  ] = None,
43
43
  on_mouse_down: Optional[
44
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
44
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
45
45
  ] = None,
46
46
  on_mouse_enter: Optional[
47
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
47
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
48
48
  ] = None,
49
49
  on_mouse_leave: Optional[
50
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
50
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
51
51
  ] = None,
52
52
  on_mouse_move: Optional[
53
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
53
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
54
54
  ] = None,
55
55
  on_mouse_out: Optional[
56
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
56
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
57
57
  ] = None,
58
58
  on_mouse_over: Optional[
59
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
59
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
60
60
  ] = None,
61
61
  on_mouse_up: Optional[
62
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
62
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
63
63
  ] = None,
64
64
  on_scroll: Optional[
65
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
65
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
66
66
  ] = None,
67
67
  on_unmount: Optional[
68
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
68
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
69
69
  ] = None,
70
70
  **props,
71
71
  ) -> "Element":
@@ -65,11 +65,6 @@ _MAPPING = {
65
65
  "portal",
66
66
  "source",
67
67
  "svg",
68
- "defs",
69
- "lineargradient",
70
- "LinearGradient",
71
- "stop",
72
- "path",
73
68
  ],
74
69
  "metadata": [
75
70
  "base",
@@ -130,13 +125,12 @@ _MAPPING = {
130
125
  }
131
126
 
132
127
 
133
- EXCLUDE = ["del_", "Del", "image", "lineargradient", "LinearGradient"]
128
+ EXCLUDE = ["del_", "Del", "image"]
134
129
  for _, v in _MAPPING.items():
135
130
  v.extend([mod.capitalize() for mod in v if mod not in EXCLUDE])
136
131
 
137
132
  _SUBMOD_ATTRS: dict[str, list[str]] = _MAPPING
138
133
 
139
- _PYRIGHT_IGNORE_IMPORTS = ["stop", "lineargradient", "path", "defs"]
140
134
  __getattr__, __dir__, __all__ = lazy_loader.attach(
141
135
  __name__,
142
136
  submod_attrs=_SUBMOD_ATTRS,