reflex 0.5.10a3__py3-none-any.whl → 0.6.0__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 (303) hide show
  1. reflex/.templates/jinja/custom_components/pyproject.toml.jinja2 +2 -2
  2. reflex/.templates/jinja/web/pages/_app.js.jinja2 +1 -1
  3. reflex/.templates/jinja/web/pages/utils.js.jinja2 +4 -4
  4. reflex/.templates/jinja/web/utils/context.js.jinja2 +1 -1
  5. reflex/.templates/jinja/web/utils/theme.js.jinja2 +1 -1
  6. reflex/.templates/web/utils/state.js +3 -1
  7. reflex/__init__.py +10 -3
  8. reflex/__init__.pyi +3 -2
  9. reflex/app.py +47 -11
  10. reflex/app_module_for_backend.py +1 -1
  11. reflex/base.py +3 -2
  12. reflex/compiler/compiler.py +5 -5
  13. reflex/compiler/utils.py +5 -3
  14. reflex/components/base/app_wrap.py +2 -4
  15. reflex/components/base/app_wrap.pyi +16 -26
  16. reflex/components/base/bare.py +6 -4
  17. reflex/components/base/body.pyi +16 -26
  18. reflex/components/base/document.pyi +76 -126
  19. reflex/components/base/error_boundary.py +9 -8
  20. reflex/components/base/error_boundary.pyi +18 -30
  21. reflex/components/base/fragment.pyi +16 -26
  22. reflex/components/base/head.pyi +31 -51
  23. reflex/components/base/link.py +1 -1
  24. reflex/components/base/link.pyi +31 -51
  25. reflex/components/base/meta.pyi +61 -101
  26. reflex/components/base/script.py +2 -2
  27. reflex/components/base/script.pyi +20 -36
  28. reflex/components/component.py +107 -130
  29. reflex/components/core/banner.py +61 -66
  30. reflex/components/core/banner.pyi +129 -230
  31. reflex/components/core/client_side_routing.py +2 -2
  32. reflex/components/core/client_side_routing.pyi +31 -51
  33. reflex/components/core/clipboard.py +4 -3
  34. reflex/components/core/clipboard.pyi +19 -31
  35. reflex/components/core/cond.py +21 -44
  36. reflex/components/core/debounce.py +7 -9
  37. reflex/components/core/debounce.pyi +19 -31
  38. reflex/components/core/foreach.py +4 -14
  39. reflex/components/core/html.py +1 -1
  40. reflex/components/core/html.pyi +34 -44
  41. reflex/components/core/match.py +36 -43
  42. reflex/components/core/upload.py +27 -26
  43. reflex/components/core/upload.pyi +81 -116
  44. reflex/components/datadisplay/code.py +55 -29
  45. reflex/components/datadisplay/code.pyi +303 -410
  46. reflex/components/datadisplay/dataeditor.py +13 -9
  47. reflex/components/datadisplay/dataeditor.pyi +39 -51
  48. reflex/components/el/__init__.py +0 -1
  49. reflex/components/el/__init__.pyi +0 -11
  50. reflex/components/el/element.pyi +16 -26
  51. reflex/components/el/elements/__init__.py +1 -7
  52. reflex/components/el/elements/__init__.pyi +1 -15
  53. reflex/components/el/elements/base.py +1 -1
  54. reflex/components/el/elements/base.pyi +33 -43
  55. reflex/components/el/elements/forms.py +26 -33
  56. reflex/components/el/elements/forms.pyi +542 -694
  57. reflex/components/el/elements/inline.py +1 -1
  58. reflex/components/el/elements/inline.pyi +909 -1189
  59. reflex/components/el/elements/media.py +1 -22
  60. reflex/components/el/elements/media.pyi +765 -975
  61. reflex/components/el/elements/metadata.py +3 -5
  62. reflex/components/el/elements/metadata.pyi +175 -235
  63. reflex/components/el/elements/other.py +1 -1
  64. reflex/components/el/elements/other.pyi +228 -298
  65. reflex/components/el/elements/scripts.py +1 -1
  66. reflex/components/el/elements/scripts.pyi +106 -136
  67. reflex/components/el/elements/sectioning.py +0 -2
  68. reflex/components/el/elements/sectioning.pyi +481 -631
  69. reflex/components/el/elements/tables.py +1 -1
  70. reflex/components/el/elements/tables.pyi +341 -441
  71. reflex/components/el/elements/typography.py +1 -1
  72. reflex/components/el/elements/typography.pyi +491 -641
  73. reflex/components/gridjs/datatable.py +9 -13
  74. reflex/components/gridjs/datatable.pyi +33 -53
  75. reflex/components/lucide/icon.py +3 -127
  76. reflex/components/lucide/icon.pyi +31 -160
  77. reflex/components/markdown/markdown.py +32 -42
  78. reflex/components/markdown/markdown.pyi +28 -41
  79. reflex/components/moment/moment.py +13 -12
  80. reflex/components/moment/moment.pyi +22 -33
  81. reflex/components/next/base.pyi +16 -26
  82. reflex/components/next/image.py +1 -5
  83. reflex/components/next/image.pyi +21 -35
  84. reflex/components/next/link.py +1 -1
  85. reflex/components/next/link.pyi +16 -26
  86. reflex/components/next/video.py +1 -1
  87. reflex/components/next/video.pyi +16 -26
  88. reflex/components/plotly/plotly.py +17 -30
  89. reflex/components/plotly/plotly.pyi +38 -52
  90. reflex/components/props.py +21 -10
  91. reflex/components/radix/__init__.pyi +2 -1
  92. reflex/components/radix/primitives/accordion.py +6 -7
  93. reflex/components/radix/primitives/accordion.pyi +415 -485
  94. reflex/components/radix/primitives/base.py +1 -1
  95. reflex/components/radix/primitives/base.pyi +31 -51
  96. reflex/components/radix/primitives/drawer.py +1 -1
  97. reflex/components/radix/primitives/drawer.pyi +162 -262
  98. reflex/components/radix/primitives/form.py +1 -1
  99. reflex/components/radix/primitives/form.pyi +247 -353
  100. reflex/components/radix/primitives/progress.py +1 -1
  101. reflex/components/radix/primitives/progress.pyi +226 -276
  102. reflex/components/radix/primitives/slider.py +1 -1
  103. reflex/components/radix/primitives/slider.pyi +82 -132
  104. reflex/components/radix/themes/base.py +8 -25
  105. reflex/components/radix/themes/base.pyi +171 -242
  106. reflex/components/radix/themes/color_mode.py +11 -20
  107. reflex/components/radix/themes/color_mode.pyi +198 -231
  108. reflex/components/radix/themes/components/__init__.pyi +1 -0
  109. reflex/components/radix/themes/components/alert_dialog.py +1 -1
  110. reflex/components/radix/themes/components/alert_dialog.pyi +129 -199
  111. reflex/components/radix/themes/components/aspect_ratio.py +1 -1
  112. reflex/components/radix/themes/components/aspect_ratio.pyi +16 -26
  113. reflex/components/radix/themes/components/avatar.py +1 -1
  114. reflex/components/radix/themes/components/avatar.pyi +69 -79
  115. reflex/components/radix/themes/components/badge.py +1 -1
  116. reflex/components/radix/themes/components/badge.pyi +87 -97
  117. reflex/components/radix/themes/components/button.py +1 -1
  118. reflex/components/radix/themes/components/button.pyi +97 -107
  119. reflex/components/radix/themes/components/callout.py +1 -1
  120. reflex/components/radix/themes/components/callout.pyi +317 -367
  121. reflex/components/radix/themes/components/card.py +1 -1
  122. reflex/components/radix/themes/components/card.pyi +37 -47
  123. reflex/components/radix/themes/components/checkbox.py +2 -4
  124. reflex/components/radix/themes/components/checkbox.pyi +205 -241
  125. reflex/components/radix/themes/components/checkbox_cards.py +1 -1
  126. reflex/components/radix/themes/components/checkbox_cards.pyi +92 -112
  127. reflex/components/radix/themes/components/checkbox_group.py +1 -1
  128. reflex/components/radix/themes/components/checkbox_group.pyi +84 -104
  129. reflex/components/radix/themes/components/context_menu.py +1 -1
  130. reflex/components/radix/themes/components/context_menu.pyi +230 -310
  131. reflex/components/radix/themes/components/data_list.py +6 -1
  132. reflex/components/radix/themes/components/data_list.pyi +131 -166
  133. reflex/components/radix/themes/components/dialog.py +1 -1
  134. reflex/components/radix/themes/components/dialog.pyi +132 -202
  135. reflex/components/radix/themes/components/dropdown_menu.py +1 -1
  136. reflex/components/radix/themes/components/dropdown_menu.pyi +241 -323
  137. reflex/components/radix/themes/components/hover_card.py +1 -1
  138. reflex/components/radix/themes/components/hover_card.pyi +86 -126
  139. reflex/components/radix/themes/components/icon_button.py +1 -1
  140. reflex/components/radix/themes/components/icon_button.pyi +97 -107
  141. reflex/components/radix/themes/components/inset.py +1 -1
  142. reflex/components/radix/themes/components/inset.pyi +46 -56
  143. reflex/components/radix/themes/components/popover.py +1 -1
  144. reflex/components/radix/themes/components/popover.pyi +91 -131
  145. reflex/components/radix/themes/components/progress.py +1 -1
  146. reflex/components/radix/themes/components/progress.pyi +70 -80
  147. reflex/components/radix/themes/components/radio.py +1 -1
  148. reflex/components/radix/themes/components/radio.pyi +68 -78
  149. reflex/components/radix/themes/components/radio_cards.py +1 -1
  150. reflex/components/radix/themes/components/radio_cards.pyi +96 -116
  151. reflex/components/radix/themes/components/radio_group.py +32 -31
  152. reflex/components/radix/themes/components/radio_group.pyi +230 -266
  153. reflex/components/radix/themes/components/scroll_area.py +1 -1
  154. reflex/components/radix/themes/components/scroll_area.pyi +20 -30
  155. reflex/components/radix/themes/components/segmented_control.py +1 -1
  156. reflex/components/radix/themes/components/segmented_control.pyi +88 -110
  157. reflex/components/radix/themes/components/select.py +1 -1
  158. reflex/components/radix/themes/components/select.pyi +365 -461
  159. reflex/components/radix/themes/components/separator.py +2 -4
  160. reflex/components/radix/themes/components/separator.pyi +68 -78
  161. reflex/components/radix/themes/components/skeleton.py +1 -1
  162. reflex/components/radix/themes/components/skeleton.pyi +22 -32
  163. reflex/components/radix/themes/components/slider.py +1 -1
  164. reflex/components/radix/themes/components/slider.pyi +74 -86
  165. reflex/components/radix/themes/components/spinner.py +1 -1
  166. reflex/components/radix/themes/components/spinner.pyi +18 -28
  167. reflex/components/radix/themes/components/switch.py +1 -1
  168. reflex/components/radix/themes/components/switch.pyi +70 -82
  169. reflex/components/radix/themes/components/table.py +1 -1
  170. reflex/components/radix/themes/components/table.pyi +254 -324
  171. reflex/components/radix/themes/components/tabs.py +1 -1
  172. reflex/components/radix/themes/components/tabs.pyi +134 -188
  173. reflex/components/radix/themes/components/text_area.py +1 -1
  174. reflex/components/radix/themes/components/text_area.pyi +95 -109
  175. reflex/components/radix/themes/components/text_field.py +1 -80
  176. reflex/components/radix/themes/components/text_field.pyi +245 -290
  177. reflex/components/radix/themes/components/tooltip.py +1 -1
  178. reflex/components/radix/themes/components/tooltip.pyi +25 -35
  179. reflex/components/radix/themes/layout/__init__.pyi +1 -0
  180. reflex/components/radix/themes/layout/base.py +1 -1
  181. reflex/components/radix/themes/layout/base.pyi +55 -65
  182. reflex/components/radix/themes/layout/box.pyi +33 -43
  183. reflex/components/radix/themes/layout/center.pyi +55 -65
  184. reflex/components/radix/themes/layout/container.py +2 -4
  185. reflex/components/radix/themes/layout/container.pyi +35 -45
  186. reflex/components/radix/themes/layout/flex.py +1 -1
  187. reflex/components/radix/themes/layout/flex.pyi +55 -65
  188. reflex/components/radix/themes/layout/grid.py +1 -1
  189. reflex/components/radix/themes/layout/grid.pyi +63 -73
  190. reflex/components/radix/themes/layout/list.py +1 -1
  191. reflex/components/radix/themes/layout/list.pyi +188 -238
  192. reflex/components/radix/themes/layout/section.py +2 -4
  193. reflex/components/radix/themes/layout/section.pyi +35 -45
  194. reflex/components/radix/themes/layout/spacer.pyi +55 -65
  195. reflex/components/radix/themes/layout/stack.py +1 -1
  196. reflex/components/radix/themes/layout/stack.pyi +125 -155
  197. reflex/components/radix/themes/typography/blockquote.py +1 -1
  198. reflex/components/radix/themes/typography/blockquote.pyi +88 -98
  199. reflex/components/radix/themes/typography/code.py +1 -1
  200. reflex/components/radix/themes/typography/code.pyi +89 -99
  201. reflex/components/radix/themes/typography/heading.py +1 -1
  202. reflex/components/radix/themes/typography/heading.pyi +95 -105
  203. reflex/components/radix/themes/typography/link.py +1 -1
  204. reflex/components/radix/themes/typography/link.pyi +101 -111
  205. reflex/components/radix/themes/typography/text.py +1 -1
  206. reflex/components/radix/themes/typography/text.pyi +494 -564
  207. reflex/components/react_player/audio.pyi +32 -58
  208. reflex/components/react_player/react_player.py +1 -1
  209. reflex/components/react_player/react_player.pyi +32 -58
  210. reflex/components/react_player/video.pyi +32 -58
  211. reflex/components/recharts/cartesian.py +22 -19
  212. reflex/components/recharts/cartesian.pyi +658 -840
  213. reflex/components/recharts/charts.py +3 -3
  214. reflex/components/recharts/charts.pyi +238 -342
  215. reflex/components/recharts/general.py +8 -8
  216. reflex/components/recharts/general.pyi +175 -225
  217. reflex/components/recharts/polar.py +11 -11
  218. reflex/components/recharts/polar.pyi +135 -171
  219. reflex/components/recharts/recharts.pyi +31 -51
  220. reflex/components/sonner/toast.py +27 -31
  221. reflex/components/sonner/toast.pyi +36 -45
  222. reflex/components/suneditor/editor.py +1 -1
  223. reflex/components/suneditor/editor.pyi +54 -76
  224. reflex/components/tags/cond_tag.py +6 -4
  225. reflex/components/tags/iter_tag.py +37 -25
  226. reflex/components/tags/match_tag.py +6 -4
  227. reflex/components/tags/tag.py +43 -28
  228. reflex/constants/base.py +3 -1
  229. reflex/constants/event.py +1 -0
  230. reflex/custom_components/custom_components.py +3 -1
  231. reflex/event.py +166 -108
  232. reflex/experimental/__init__.py +25 -6
  233. reflex/experimental/client_state.py +34 -57
  234. reflex/experimental/hooks.py +12 -17
  235. reflex/experimental/layout.py +4 -4
  236. reflex/experimental/layout.pyi +130 -180
  237. reflex/middleware/hydrate_middleware.py +2 -0
  238. reflex/middleware/middleware.py +3 -3
  239. reflex/model.py +22 -0
  240. reflex/reflex.py +4 -0
  241. reflex/state.py +491 -110
  242. reflex/style.py +56 -39
  243. reflex/testing.py +8 -3
  244. reflex/utils/exceptions.py +32 -0
  245. reflex/utils/exec.py +0 -14
  246. reflex/utils/format.py +80 -209
  247. reflex/utils/imports.py +16 -73
  248. reflex/utils/net.py +43 -0
  249. reflex/utils/path_ops.py +13 -1
  250. reflex/utils/prerequisites.py +81 -41
  251. reflex/utils/pyi_generator.py +12 -6
  252. reflex/utils/serializers.py +13 -41
  253. reflex/utils/telemetry.py +3 -2
  254. reflex/utils/types.py +47 -7
  255. reflex/{experimental/vars → vars}/__init__.py +6 -3
  256. reflex/vars/base.py +2563 -0
  257. reflex/vars/function.py +196 -0
  258. reflex/vars/number.py +1158 -0
  259. reflex/vars/object.py +562 -0
  260. reflex/vars/sequence.py +1604 -0
  261. {reflex-0.5.10a3.dist-info → reflex-0.6.0.dist-info}/METADATA +6 -9
  262. reflex-0.6.0.dist-info/RECORD +382 -0
  263. reflex/.templates/apps/demo/.gitignore +0 -4
  264. reflex/.templates/apps/demo/assets/favicon.ico +0 -0
  265. reflex/.templates/apps/demo/assets/github.svg +0 -10
  266. reflex/.templates/apps/demo/assets/icon.svg +0 -37
  267. reflex/.templates/apps/demo/assets/logo.svg +0 -68
  268. reflex/.templates/apps/demo/assets/paneleft.svg +0 -13
  269. reflex/.templates/apps/demo/code/__init__.py +0 -1
  270. reflex/.templates/apps/demo/code/demo.py +0 -127
  271. reflex/.templates/apps/demo/code/pages/__init__.py +0 -7
  272. reflex/.templates/apps/demo/code/pages/chatapp.py +0 -31
  273. reflex/.templates/apps/demo/code/pages/datatable.py +0 -360
  274. reflex/.templates/apps/demo/code/pages/forms.py +0 -257
  275. reflex/.templates/apps/demo/code/pages/graphing.py +0 -253
  276. reflex/.templates/apps/demo/code/pages/home.py +0 -56
  277. reflex/.templates/apps/demo/code/sidebar.py +0 -178
  278. reflex/.templates/apps/demo/code/state.py +0 -22
  279. reflex/.templates/apps/demo/code/states/form_state.py +0 -40
  280. reflex/.templates/apps/demo/code/states/pie_state.py +0 -47
  281. reflex/.templates/apps/demo/code/styles.py +0 -68
  282. reflex/.templates/apps/demo/code/webui/__init__.py +0 -0
  283. reflex/.templates/apps/demo/code/webui/components/__init__.py +0 -4
  284. reflex/.templates/apps/demo/code/webui/components/chat.py +0 -118
  285. reflex/.templates/apps/demo/code/webui/components/loading_icon.py +0 -19
  286. reflex/.templates/apps/demo/code/webui/components/modal.py +0 -56
  287. reflex/.templates/apps/demo/code/webui/components/navbar.py +0 -70
  288. reflex/.templates/apps/demo/code/webui/components/sidebar.py +0 -66
  289. reflex/.templates/apps/demo/code/webui/state.py +0 -146
  290. reflex/.templates/apps/demo/code/webui/styles.py +0 -88
  291. reflex/.templates/web/components/reflex/chakra_color_mode_provider.js +0 -36
  292. reflex/experimental/vars/base.py +0 -583
  293. reflex/experimental/vars/function.py +0 -290
  294. reflex/experimental/vars/number.py +0 -1458
  295. reflex/experimental/vars/object.py +0 -804
  296. reflex/experimental/vars/sequence.py +0 -1764
  297. reflex/utils/watch.py +0 -96
  298. reflex/vars.py +0 -2604
  299. reflex/vars.pyi +0 -218
  300. reflex-0.5.10a3.dist-info/RECORD +0 -413
  301. {reflex-0.5.10a3.dist-info → reflex-0.6.0.dist-info}/LICENSE +0 -0
  302. {reflex-0.5.10a3.dist-info → reflex-0.6.0.dist-info}/WHEEL +0 -0
  303. {reflex-0.5.10a3.dist-info → reflex-0.6.0.dist-info}/entry_points.txt +0 -0
@@ -7,27 +7,38 @@ from pathlib import Path
7
7
  from typing import Any, Callable, ClassVar, Dict, List, Optional, Union, overload
8
8
 
9
9
  from reflex.components.component import Component, ComponentNamespace, MemoizationLeaf
10
+ from reflex.constants import Dirs
10
11
  from reflex.event import (
11
12
  CallableEventSpec,
12
13
  EventHandler,
13
14
  EventSpec,
14
15
  )
15
16
  from reflex.style import Style
16
- from reflex.vars import BaseVar, CallableVar, Var, VarData
17
+ from reflex.utils.imports import ImportVar
18
+ from reflex.vars import VarData
19
+ from reflex.vars.base import CallableVar, Var
17
20
 
18
21
  DEFAULT_UPLOAD_ID: str
19
22
  upload_files_context_var_data: VarData
20
23
 
21
24
  @CallableVar
22
- def upload_file(id_: str = DEFAULT_UPLOAD_ID) -> BaseVar: ...
25
+ def upload_file(id_: str = DEFAULT_UPLOAD_ID) -> Var: ...
23
26
  @CallableVar
24
- def selected_files(id_: str = DEFAULT_UPLOAD_ID) -> BaseVar: ...
27
+ def selected_files(id_: str = DEFAULT_UPLOAD_ID) -> Var: ...
25
28
  @CallableEventSpec
26
29
  def clear_selected_files(id_: str = DEFAULT_UPLOAD_ID) -> EventSpec: ...
27
30
  def cancel_upload(upload_id: str) -> EventSpec: ...
28
31
  def get_upload_dir() -> Path: ...
29
32
 
30
- uploaded_files_url_prefix: Var
33
+ uploaded_files_url_prefix = Var(
34
+ _js_expr="getBackendURL(env.UPLOAD)",
35
+ _var_data=VarData(
36
+ imports={
37
+ f"/{Dirs.STATE_PATH}": "getBackendURL",
38
+ "/env.json": ImportVar(tag="env", is_default=True),
39
+ }
40
+ ),
41
+ ).to(str)
31
42
 
32
43
  def get_upload_url(file_path: str) -> Var[str]: ...
33
44
 
@@ -43,50 +54,40 @@ class UploadFilesProvider(Component):
43
54
  class_name: Optional[Any] = None,
44
55
  autofocus: Optional[bool] = None,
45
56
  custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
46
- on_blur: Optional[
47
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
48
- ] = None,
49
- on_click: Optional[
50
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
51
- ] = None,
57
+ on_blur: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
58
+ on_click: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
52
59
  on_context_menu: Optional[
53
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
60
+ Union[EventHandler, EventSpec, list, Callable, Var]
54
61
  ] = None,
55
62
  on_double_click: Optional[
56
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
57
- ] = None,
58
- on_focus: Optional[
59
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
60
- ] = None,
61
- on_mount: Optional[
62
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
63
+ Union[EventHandler, EventSpec, list, Callable, Var]
63
64
  ] = None,
65
+ on_focus: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
66
+ on_mount: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
64
67
  on_mouse_down: Optional[
65
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
68
+ Union[EventHandler, EventSpec, list, Callable, Var]
66
69
  ] = None,
67
70
  on_mouse_enter: Optional[
68
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
71
+ Union[EventHandler, EventSpec, list, Callable, Var]
69
72
  ] = None,
70
73
  on_mouse_leave: Optional[
71
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
74
+ Union[EventHandler, EventSpec, list, Callable, Var]
72
75
  ] = None,
73
76
  on_mouse_move: Optional[
74
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
77
+ Union[EventHandler, EventSpec, list, Callable, Var]
75
78
  ] = None,
76
79
  on_mouse_out: Optional[
77
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
80
+ Union[EventHandler, EventSpec, list, Callable, Var]
78
81
  ] = None,
79
82
  on_mouse_over: Optional[
80
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
83
+ Union[EventHandler, EventSpec, list, Callable, Var]
81
84
  ] = None,
82
85
  on_mouse_up: Optional[
83
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
84
- ] = None,
85
- on_scroll: Optional[
86
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
86
+ Union[EventHandler, EventSpec, list, Callable, Var]
87
87
  ] = None,
88
+ on_scroll: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
88
89
  on_unmount: Optional[
89
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
90
+ Union[EventHandler, EventSpec, list, Callable, Var]
90
91
  ] = None,
91
92
  **props,
92
93
  ) -> "UploadFilesProvider":
@@ -115,7 +116,7 @@ class Upload(MemoizationLeaf):
115
116
  def create( # type: ignore
116
117
  cls,
117
118
  *children,
118
- accept: Optional[Union[Var[Optional[Dict[str, List]]], Dict[str, List]]] = None,
119
+ accept: Optional[Union[Dict[str, List], Var[Optional[Dict[str, List]]]]] = None,
119
120
  disabled: Optional[Union[Var[bool], bool]] = None,
120
121
  max_files: Optional[Union[Var[int], int]] = None,
121
122
  max_size: Optional[Union[Var[int], int]] = None,
@@ -130,53 +131,41 @@ class Upload(MemoizationLeaf):
130
131
  class_name: Optional[Any] = None,
131
132
  autofocus: Optional[bool] = None,
132
133
  custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
133
- on_blur: Optional[
134
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
135
- ] = None,
136
- on_click: Optional[
137
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
138
- ] = None,
134
+ on_blur: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
135
+ on_click: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
139
136
  on_context_menu: Optional[
140
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
137
+ Union[EventHandler, EventSpec, list, Callable, Var]
141
138
  ] = None,
142
139
  on_double_click: Optional[
143
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
144
- ] = None,
145
- on_drop: Optional[
146
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
147
- ] = None,
148
- on_focus: Optional[
149
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
150
- ] = None,
151
- on_mount: Optional[
152
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
140
+ Union[EventHandler, EventSpec, list, Callable, Var]
153
141
  ] = None,
142
+ on_drop: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
143
+ on_focus: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
144
+ on_mount: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
154
145
  on_mouse_down: Optional[
155
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
146
+ Union[EventHandler, EventSpec, list, Callable, Var]
156
147
  ] = None,
157
148
  on_mouse_enter: Optional[
158
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
149
+ Union[EventHandler, EventSpec, list, Callable, Var]
159
150
  ] = None,
160
151
  on_mouse_leave: Optional[
161
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
152
+ Union[EventHandler, EventSpec, list, Callable, Var]
162
153
  ] = None,
163
154
  on_mouse_move: Optional[
164
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
155
+ Union[EventHandler, EventSpec, list, Callable, Var]
165
156
  ] = None,
166
157
  on_mouse_out: Optional[
167
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
158
+ Union[EventHandler, EventSpec, list, Callable, Var]
168
159
  ] = None,
169
160
  on_mouse_over: Optional[
170
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
161
+ Union[EventHandler, EventSpec, list, Callable, Var]
171
162
  ] = None,
172
163
  on_mouse_up: Optional[
173
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
174
- ] = None,
175
- on_scroll: Optional[
176
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
164
+ Union[EventHandler, EventSpec, list, Callable, Var]
177
165
  ] = None,
166
+ on_scroll: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
178
167
  on_unmount: Optional[
179
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
168
+ Union[EventHandler, EventSpec, list, Callable, Var]
180
169
  ] = None,
181
170
  **props,
182
171
  ) -> "Upload":
@@ -212,7 +201,7 @@ class StyledUpload(Upload):
212
201
  def create( # type: ignore
213
202
  cls,
214
203
  *children,
215
- accept: Optional[Union[Var[Optional[Dict[str, List]]], Dict[str, List]]] = None,
204
+ accept: Optional[Union[Dict[str, List], Var[Optional[Dict[str, List]]]]] = None,
216
205
  disabled: Optional[Union[Var[bool], bool]] = None,
217
206
  max_files: Optional[Union[Var[int], int]] = None,
218
207
  max_size: Optional[Union[Var[int], int]] = None,
@@ -227,53 +216,41 @@ class StyledUpload(Upload):
227
216
  class_name: Optional[Any] = None,
228
217
  autofocus: Optional[bool] = None,
229
218
  custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
230
- on_blur: Optional[
231
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
232
- ] = None,
233
- on_click: Optional[
234
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
235
- ] = None,
219
+ on_blur: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
220
+ on_click: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
236
221
  on_context_menu: Optional[
237
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
222
+ Union[EventHandler, EventSpec, list, Callable, Var]
238
223
  ] = None,
239
224
  on_double_click: Optional[
240
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
241
- ] = None,
242
- on_drop: Optional[
243
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
244
- ] = None,
245
- on_focus: Optional[
246
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
247
- ] = None,
248
- on_mount: Optional[
249
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
225
+ Union[EventHandler, EventSpec, list, Callable, Var]
250
226
  ] = None,
227
+ on_drop: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
228
+ on_focus: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
229
+ on_mount: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
251
230
  on_mouse_down: Optional[
252
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
231
+ Union[EventHandler, EventSpec, list, Callable, Var]
253
232
  ] = None,
254
233
  on_mouse_enter: Optional[
255
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
234
+ Union[EventHandler, EventSpec, list, Callable, Var]
256
235
  ] = None,
257
236
  on_mouse_leave: Optional[
258
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
237
+ Union[EventHandler, EventSpec, list, Callable, Var]
259
238
  ] = None,
260
239
  on_mouse_move: Optional[
261
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
240
+ Union[EventHandler, EventSpec, list, Callable, Var]
262
241
  ] = None,
263
242
  on_mouse_out: Optional[
264
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
243
+ Union[EventHandler, EventSpec, list, Callable, Var]
265
244
  ] = None,
266
245
  on_mouse_over: Optional[
267
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
246
+ Union[EventHandler, EventSpec, list, Callable, Var]
268
247
  ] = None,
269
248
  on_mouse_up: Optional[
270
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
271
- ] = None,
272
- on_scroll: Optional[
273
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
249
+ Union[EventHandler, EventSpec, list, Callable, Var]
274
250
  ] = None,
251
+ on_scroll: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
275
252
  on_unmount: Optional[
276
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
253
+ Union[EventHandler, EventSpec, list, Callable, Var]
277
254
  ] = None,
278
255
  **props,
279
256
  ) -> "StyledUpload":
@@ -309,7 +286,7 @@ class UploadNamespace(ComponentNamespace):
309
286
  @staticmethod
310
287
  def __call__(
311
288
  *children,
312
- accept: Optional[Union[Var[Optional[Dict[str, List]]], Dict[str, List]]] = None,
289
+ accept: Optional[Union[Dict[str, List], Var[Optional[Dict[str, List]]]]] = None,
313
290
  disabled: Optional[Union[Var[bool], bool]] = None,
314
291
  max_files: Optional[Union[Var[int], int]] = None,
315
292
  max_size: Optional[Union[Var[int], int]] = None,
@@ -324,53 +301,41 @@ class UploadNamespace(ComponentNamespace):
324
301
  class_name: Optional[Any] = None,
325
302
  autofocus: Optional[bool] = None,
326
303
  custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
327
- on_blur: Optional[
328
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
329
- ] = None,
330
- on_click: Optional[
331
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
332
- ] = None,
304
+ on_blur: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
305
+ on_click: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
333
306
  on_context_menu: Optional[
334
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
307
+ Union[EventHandler, EventSpec, list, Callable, Var]
335
308
  ] = None,
336
309
  on_double_click: Optional[
337
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
338
- ] = None,
339
- on_drop: Optional[
340
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
341
- ] = None,
342
- on_focus: Optional[
343
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
344
- ] = None,
345
- on_mount: Optional[
346
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
310
+ Union[EventHandler, EventSpec, list, Callable, Var]
347
311
  ] = None,
312
+ on_drop: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
313
+ on_focus: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
314
+ on_mount: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
348
315
  on_mouse_down: Optional[
349
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
316
+ Union[EventHandler, EventSpec, list, Callable, Var]
350
317
  ] = None,
351
318
  on_mouse_enter: Optional[
352
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
319
+ Union[EventHandler, EventSpec, list, Callable, Var]
353
320
  ] = None,
354
321
  on_mouse_leave: Optional[
355
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
322
+ Union[EventHandler, EventSpec, list, Callable, Var]
356
323
  ] = None,
357
324
  on_mouse_move: Optional[
358
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
325
+ Union[EventHandler, EventSpec, list, Callable, Var]
359
326
  ] = None,
360
327
  on_mouse_out: Optional[
361
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
328
+ Union[EventHandler, EventSpec, list, Callable, Var]
362
329
  ] = None,
363
330
  on_mouse_over: Optional[
364
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
331
+ Union[EventHandler, EventSpec, list, Callable, Var]
365
332
  ] = None,
366
333
  on_mouse_up: Optional[
367
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
368
- ] = None,
369
- on_scroll: Optional[
370
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
334
+ Union[EventHandler, EventSpec, list, Callable, Var]
371
335
  ] = None,
336
+ on_scroll: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
372
337
  on_unmount: Optional[
373
- Union[EventHandler, EventSpec, list, Callable, BaseVar]
338
+ Union[EventHandler, EventSpec, list, Callable, Var]
374
339
  ] = None,
375
340
  **props,
376
341
  ) -> "StyledUpload":
@@ -2,8 +2,9 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- import re
6
- from typing import Dict, Literal, Optional, Union
5
+ from typing import Any, Dict, Literal, Optional, Union
6
+
7
+ from typing_extensions import get_args
7
8
 
8
9
  from reflex.components.component import Component
9
10
  from reflex.components.core.cond import color_mode_cond
@@ -15,7 +16,7 @@ from reflex.event import set_clipboard
15
16
  from reflex.style import Style
16
17
  from reflex.utils import format
17
18
  from reflex.utils.imports import ImportDict, ImportVar
18
- from reflex.vars import Var
19
+ from reflex.vars.base import LiteralVar, Var
19
20
 
20
21
  LiteralCodeBlockTheme = Literal[
21
22
  "a11y-dark",
@@ -349,6 +350,20 @@ LiteralCodeLanguage = Literal[
349
350
  ]
350
351
 
351
352
 
353
+ def replace_quotes_with_camel_case(value: str) -> str:
354
+ """Replaces quotes in the given string with camel case format.
355
+
356
+ Args:
357
+ value (str): The string to be processed.
358
+
359
+ Returns:
360
+ str: The processed string with quotes replaced by camel case.
361
+ """
362
+ for theme in get_args(LiteralCodeBlockTheme):
363
+ value = value.replace(f'"{theme}"', format.to_camel_case(theme))
364
+ return value
365
+
366
+
352
367
  class CodeBlock(Component):
353
368
  """A code block."""
354
369
 
@@ -359,7 +374,7 @@ class CodeBlock(Component):
359
374
  alias = "SyntaxHighlighter"
360
375
 
361
376
  # The theme to use ("light" or "dark").
362
- theme: Var[LiteralCodeBlockTheme] = "one-light" # type: ignore
377
+ theme: Var[Any] = "one-light" # type: ignore
363
378
 
364
379
  # The language to use.
365
380
  language: Var[LiteralCodeLanguage] = "python" # type: ignore
@@ -389,32 +404,42 @@ class CodeBlock(Component):
389
404
  The import dict.
390
405
  """
391
406
  imports_: ImportDict = {}
392
- themes = re.findall(r"`(.*?)`", self.theme._var_name)
393
- if not themes:
394
- themes = [self.theme._var_name]
407
+
408
+ themeString = str(self.theme)
409
+
410
+ selected_themes = []
411
+
412
+ for possibleTheme in get_args(LiteralCodeBlockTheme):
413
+ if format.to_camel_case(possibleTheme) in themeString:
414
+ selected_themes.append(possibleTheme)
415
+ if possibleTheme in themeString:
416
+ selected_themes.append(possibleTheme)
417
+
418
+ selected_themes = sorted(set(map(self.convert_theme_name, selected_themes)))
395
419
 
396
420
  imports_.update(
397
421
  {
398
- f"react-syntax-highlighter/dist/cjs/styles/prism/{self.convert_theme_name(theme)}": [
422
+ f"react-syntax-highlighter/dist/cjs/styles/prism/{theme}": [
399
423
  ImportVar(
400
- tag=format.to_camel_case(self.convert_theme_name(theme)),
424
+ tag=format.to_camel_case(theme),
401
425
  is_default=True,
402
426
  install=False,
403
427
  )
404
428
  ]
405
- for theme in themes
429
+ for theme in selected_themes
406
430
  }
407
431
  )
408
432
 
409
433
  if (
410
434
  self.language is not None
411
- and self.language._var_name in LiteralCodeLanguage.__args__ # type: ignore
435
+ and (language_without_quotes := str(self.language).replace('"', ""))
436
+ in LiteralCodeLanguage.__args__ # type: ignore
412
437
  ):
413
438
  imports_[
414
- f"react-syntax-highlighter/dist/cjs/languages/prism/{self.language._var_name}"
439
+ f"react-syntax-highlighter/dist/cjs/languages/prism/{language_without_quotes}"
415
440
  ] = [
416
441
  ImportVar(
417
- tag=format.to_camel_case(self.language._var_name),
442
+ tag=format.to_camel_case(language_without_quotes),
418
443
  is_default=True,
419
444
  install=False,
420
445
  )
@@ -425,9 +450,10 @@ class CodeBlock(Component):
425
450
  def _get_custom_code(self) -> Optional[str]:
426
451
  if (
427
452
  self.language is not None
428
- and self.language._var_name in LiteralCodeLanguage.__args__ # type: ignore
453
+ and (language_without_quotes := str(self.language).replace('"', ""))
454
+ in LiteralCodeLanguage.__args__ # type: ignore
429
455
  ):
430
- return f"{self.alias}.registerLanguage('{self.language._var_name}', {format.to_camel_case(self.language._var_name)})"
456
+ return f"{self.alias}.registerLanguage('{language_without_quotes}', {format.to_camel_case(language_without_quotes)})"
431
457
 
432
458
  @classmethod
433
459
  def create(
@@ -453,7 +479,10 @@ class CodeBlock(Component):
453
479
 
454
480
  if "theme" not in props:
455
481
  # Default color scheme responds to global color mode.
456
- props["theme"] = color_mode_cond(light="one-light", dark="one-dark")
482
+ props["theme"] = color_mode_cond(
483
+ light=Var(_js_expr="oneLight"),
484
+ dark=Var(_js_expr="oneDark"),
485
+ )
457
486
 
458
487
  # react-syntax-highlighter doesnt have an explicit "light" or "dark" theme so we use one-light and one-dark
459
488
  # themes respectively to ensure code compatibility.
@@ -484,7 +513,7 @@ class CodeBlock(Component):
484
513
  if children:
485
514
  props["code"] = children[0]
486
515
  if not isinstance(props["code"], Var):
487
- props["code"] = Var.create(props["code"], _var_is_string=True)
516
+ props["code"] = LiteralVar.create(props["code"])
488
517
 
489
518
  # Create the component.
490
519
  code_block = super().create(
@@ -503,18 +532,15 @@ class CodeBlock(Component):
503
532
 
504
533
  def _render(self):
505
534
  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
- )
535
+
536
+ theme = self.theme._replace(
537
+ _js_expr=replace_quotes_with_camel_case(str(self.theme))
538
+ )
539
+
540
+ out.add_props(style=theme).remove_props("theme", "code").add_props(
541
+ children=self.code
542
+ )
543
+
518
544
  return out
519
545
 
520
546
  @staticmethod