reflex 0.6.8a1__py3-none-any.whl → 0.7.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 (248) hide show
  1. reflex/.templates/jinja/custom_components/pyproject.toml.jinja2 +1 -1
  2. reflex/.templates/jinja/web/pages/_app.js.jinja2 +7 -7
  3. reflex/.templates/jinja/web/pages/utils.js.jinja2 +3 -3
  4. reflex/.templates/web/components/reflex/radix_themes_color_mode_provider.js +1 -4
  5. reflex/.templates/web/utils/state.js +65 -36
  6. reflex/__init__.py +4 -17
  7. reflex/__init__.pyi +1 -2
  8. reflex/app.py +286 -135
  9. reflex/app_mixins/lifespan.py +9 -9
  10. reflex/app_mixins/middleware.py +6 -6
  11. reflex/app_module_for_backend.py +3 -7
  12. reflex/base.py +7 -7
  13. reflex/compiler/compiler.py +8 -0
  14. reflex/compiler/utils.py +57 -18
  15. reflex/components/base/app_wrap.pyi +16 -16
  16. reflex/components/base/bare.py +1 -1
  17. reflex/components/base/body.pyi +16 -16
  18. reflex/components/base/document.pyi +76 -76
  19. reflex/components/base/error_boundary.py +2 -1
  20. reflex/components/base/error_boundary.pyi +19 -22
  21. reflex/components/base/fragment.pyi +16 -16
  22. reflex/components/base/head.pyi +31 -31
  23. reflex/components/base/link.pyi +31 -31
  24. reflex/components/base/meta.py +2 -2
  25. reflex/components/base/meta.pyi +61 -61
  26. reflex/components/base/script.pyi +19 -19
  27. reflex/components/base/strict_mode.py +10 -0
  28. reflex/components/base/strict_mode.pyi +57 -0
  29. reflex/components/component.py +38 -77
  30. reflex/components/core/banner.py +159 -4
  31. reflex/components/core/banner.pyi +162 -76
  32. reflex/components/core/breakpoints.py +3 -1
  33. reflex/components/core/client_side_routing.py +1 -1
  34. reflex/components/core/client_side_routing.pyi +32 -32
  35. reflex/components/core/clipboard.pyi +17 -20
  36. reflex/components/core/cond.py +9 -10
  37. reflex/components/core/debounce.py +1 -1
  38. reflex/components/core/debounce.pyi +17 -17
  39. reflex/components/core/foreach.py +28 -3
  40. reflex/components/core/html.py +1 -1
  41. reflex/components/core/html.pyi +16 -16
  42. reflex/components/core/match.py +5 -5
  43. reflex/components/core/sticky.py +134 -0
  44. reflex/components/core/sticky.pyi +449 -0
  45. reflex/components/core/upload.py +2 -2
  46. reflex/components/core/upload.pyi +80 -88
  47. reflex/components/datadisplay/code.py +5 -14
  48. reflex/components/datadisplay/code.pyi +31 -31
  49. reflex/components/datadisplay/dataeditor.py +7 -4
  50. reflex/components/datadisplay/dataeditor.pyi +40 -54
  51. reflex/components/datadisplay/logo.py +13 -8
  52. reflex/components/datadisplay/shiki_code_block.py +14 -9
  53. reflex/components/datadisplay/shiki_code_block.pyi +46 -46
  54. reflex/components/dynamic.py +22 -3
  55. reflex/components/el/constants/reflex.py +1 -1
  56. reflex/components/el/element.py +1 -1
  57. reflex/components/el/element.pyi +16 -16
  58. reflex/components/el/elements/base.pyi +16 -16
  59. reflex/components/el/elements/forms.py +4 -4
  60. reflex/components/el/elements/forms.pyi +224 -258
  61. reflex/components/el/elements/inline.pyi +421 -421
  62. reflex/components/el/elements/media.pyi +376 -376
  63. reflex/components/el/elements/metadata.pyi +91 -91
  64. reflex/components/el/elements/other.pyi +106 -106
  65. reflex/components/el/elements/scripts.pyi +46 -46
  66. reflex/components/el/elements/sectioning.pyi +226 -226
  67. reflex/components/el/elements/tables.pyi +151 -151
  68. reflex/components/el/elements/typography.pyi +226 -226
  69. reflex/components/gridjs/datatable.pyi +31 -31
  70. reflex/components/lucide/icon.py +46 -8
  71. reflex/components/lucide/icon.pyi +85 -31
  72. reflex/components/markdown/markdown.py +10 -8
  73. reflex/components/markdown/markdown.pyi +16 -16
  74. reflex/components/moment/moment.py +2 -2
  75. reflex/components/moment/moment.pyi +17 -19
  76. reflex/components/next/base.pyi +16 -16
  77. reflex/components/next/image.py +16 -4
  78. reflex/components/next/image.pyi +22 -20
  79. reflex/components/next/link.py +1 -1
  80. reflex/components/next/link.pyi +16 -16
  81. reflex/components/next/video.pyi +16 -16
  82. reflex/components/plotly/__init__.py +29 -2
  83. reflex/components/plotly/plotly.py +240 -5
  84. reflex/components/plotly/plotly.pyi +799 -44
  85. reflex/components/props.py +3 -3
  86. reflex/components/radix/__init__.pyi +1 -1
  87. reflex/components/radix/primitives/accordion.py +9 -5
  88. reflex/components/radix/primitives/accordion.pyi +110 -108
  89. reflex/components/radix/primitives/base.pyi +31 -31
  90. reflex/components/radix/primitives/drawer.py +5 -2
  91. reflex/components/radix/primitives/drawer.pyi +179 -187
  92. reflex/components/radix/primitives/form.pyi +160 -172
  93. reflex/components/radix/primitives/progress.py +1 -1
  94. reflex/components/radix/primitives/progress.pyi +76 -76
  95. reflex/components/radix/primitives/slider.py +1 -1
  96. reflex/components/radix/primitives/slider.pyi +78 -82
  97. reflex/components/radix/themes/base.pyi +121 -121
  98. reflex/components/radix/themes/color_mode.py +11 -9
  99. reflex/components/radix/themes/color_mode.pyi +47 -49
  100. reflex/components/radix/themes/components/alert_dialog.py +3 -0
  101. reflex/components/radix/themes/components/alert_dialog.pyi +110 -112
  102. reflex/components/radix/themes/components/aspect_ratio.pyi +16 -16
  103. reflex/components/radix/themes/components/avatar.pyi +16 -16
  104. reflex/components/radix/themes/components/badge.pyi +16 -16
  105. reflex/components/radix/themes/components/button.pyi +16 -16
  106. reflex/components/radix/themes/components/callout.pyi +76 -76
  107. reflex/components/radix/themes/components/card.py +1 -1
  108. reflex/components/radix/themes/components/card.pyi +17 -17
  109. reflex/components/radix/themes/components/checkbox.pyi +49 -55
  110. reflex/components/radix/themes/components/checkbox_cards.pyi +31 -31
  111. reflex/components/radix/themes/components/checkbox_group.pyi +31 -31
  112. reflex/components/radix/themes/components/context_menu.py +5 -0
  113. reflex/components/radix/themes/components/context_menu.pyi +149 -155
  114. reflex/components/radix/themes/components/data_list.pyi +61 -61
  115. reflex/components/radix/themes/components/dialog.py +3 -0
  116. reflex/components/radix/themes/components/dialog.pyi +113 -117
  117. reflex/components/radix/themes/components/dropdown_menu.py +5 -0
  118. reflex/components/radix/themes/components/dropdown_menu.pyi +133 -137
  119. reflex/components/radix/themes/components/hover_card.py +3 -0
  120. reflex/components/radix/themes/components/hover_card.pyi +63 -67
  121. reflex/components/radix/themes/components/icon_button.py +2 -2
  122. reflex/components/radix/themes/components/icon_button.pyi +17 -16
  123. reflex/components/radix/themes/components/inset.pyi +16 -16
  124. reflex/components/radix/themes/components/popover.py +3 -0
  125. reflex/components/radix/themes/components/popover.pyi +68 -70
  126. reflex/components/radix/themes/components/progress.pyi +16 -16
  127. reflex/components/radix/themes/components/radio.pyi +16 -16
  128. reflex/components/radix/themes/components/radio_cards.py +2 -0
  129. reflex/components/radix/themes/components/radio_cards.pyi +32 -34
  130. reflex/components/radix/themes/components/radio_group.py +1 -1
  131. reflex/components/radix/themes/components/radio_group.pyi +62 -64
  132. reflex/components/radix/themes/components/scroll_area.pyi +16 -16
  133. reflex/components/radix/themes/components/segmented_control.pyi +32 -35
  134. reflex/components/radix/themes/components/select.py +4 -0
  135. reflex/components/radix/themes/components/select.pyi +145 -157
  136. reflex/components/radix/themes/components/separator.pyi +16 -16
  137. reflex/components/radix/themes/components/skeleton.py +3 -0
  138. reflex/components/radix/themes/components/skeleton.pyi +16 -16
  139. reflex/components/radix/themes/components/slider.pyi +22 -28
  140. reflex/components/radix/themes/components/spinner.pyi +16 -16
  141. reflex/components/radix/themes/components/switch.pyi +17 -19
  142. reflex/components/radix/themes/components/table.pyi +106 -106
  143. reflex/components/radix/themes/components/tabs.py +3 -0
  144. reflex/components/radix/themes/components/tabs.pyi +78 -82
  145. reflex/components/radix/themes/components/text_area.py +12 -0
  146. reflex/components/radix/themes/components/text_area.pyi +21 -33
  147. reflex/components/radix/themes/components/text_field.py +1 -1
  148. reflex/components/radix/themes/components/text_field.pyi +52 -80
  149. reflex/components/radix/themes/components/tooltip.py +6 -1
  150. reflex/components/radix/themes/components/tooltip.pyi +20 -21
  151. reflex/components/radix/themes/layout/__init__.pyi +1 -1
  152. reflex/components/radix/themes/layout/base.pyi +16 -16
  153. reflex/components/radix/themes/layout/box.pyi +16 -16
  154. reflex/components/radix/themes/layout/center.pyi +16 -16
  155. reflex/components/radix/themes/layout/container.pyi +16 -16
  156. reflex/components/radix/themes/layout/flex.pyi +16 -16
  157. reflex/components/radix/themes/layout/grid.pyi +16 -16
  158. reflex/components/radix/themes/layout/list.py +2 -2
  159. reflex/components/radix/themes/layout/list.pyi +76 -76
  160. reflex/components/radix/themes/layout/section.pyi +16 -16
  161. reflex/components/radix/themes/layout/spacer.pyi +16 -16
  162. reflex/components/radix/themes/layout/stack.py +2 -2
  163. reflex/components/radix/themes/layout/stack.pyi +46 -46
  164. reflex/components/radix/themes/typography/blockquote.pyi +16 -16
  165. reflex/components/radix/themes/typography/code.pyi +16 -16
  166. reflex/components/radix/themes/typography/heading.pyi +16 -16
  167. reflex/components/radix/themes/typography/link.py +1 -1
  168. reflex/components/radix/themes/typography/link.pyi +16 -16
  169. reflex/components/radix/themes/typography/text.py +2 -2
  170. reflex/components/radix/themes/typography/text.pyi +106 -106
  171. reflex/components/react_player/audio.pyi +33 -39
  172. reflex/components/react_player/react_player.py +1 -1
  173. reflex/components/react_player/react_player.pyi +32 -38
  174. reflex/components/react_player/video.pyi +33 -39
  175. reflex/components/recharts/__init__.py +2 -0
  176. reflex/components/recharts/__init__.pyi +2 -0
  177. reflex/components/recharts/cartesian.pyi +282 -282
  178. reflex/components/recharts/charts.py +15 -15
  179. reflex/components/recharts/charts.pyi +164 -164
  180. reflex/components/recharts/general.py +19 -4
  181. reflex/components/recharts/general.pyi +132 -81
  182. reflex/components/recharts/polar.py +2 -2
  183. reflex/components/recharts/polar.pyi +55 -55
  184. reflex/components/recharts/recharts.py +4 -4
  185. reflex/components/recharts/recharts.pyi +31 -31
  186. reflex/components/sonner/toast.py +15 -13
  187. reflex/components/sonner/toast.pyi +22 -22
  188. reflex/components/suneditor/editor.py +6 -4
  189. reflex/components/suneditor/editor.pyi +26 -40
  190. reflex/components/tags/iter_tag.py +3 -3
  191. reflex/components/tags/tag.py +25 -3
  192. reflex/config.py +48 -20
  193. reflex/constants/__init__.py +1 -0
  194. reflex/constants/base.py +4 -1
  195. reflex/constants/compiler.py +5 -2
  196. reflex/constants/config.py +8 -1
  197. reflex/constants/installer.py +9 -9
  198. reflex/constants/style.py +1 -1
  199. reflex/custom_components/custom_components.py +18 -10
  200. reflex/event.py +228 -233
  201. reflex/experimental/__init__.py +19 -11
  202. reflex/experimental/client_state.py +53 -28
  203. reflex/experimental/hooks.py +5 -5
  204. reflex/experimental/layout.py +8 -5
  205. reflex/experimental/layout.pyi +79 -83
  206. reflex/experimental/misc.py +3 -3
  207. reflex/istate/wrappers.py +1 -1
  208. reflex/middleware/hydrate_middleware.py +2 -2
  209. reflex/model.py +11 -6
  210. reflex/page.py +5 -5
  211. reflex/reflex.py +104 -26
  212. reflex/route.py +1 -1
  213. reflex/state.py +358 -401
  214. reflex/style.py +27 -3
  215. reflex/testing.py +34 -39
  216. reflex/utils/build.py +6 -2
  217. reflex/utils/codespaces.py +1 -4
  218. reflex/utils/compat.py +6 -5
  219. reflex/utils/console.py +71 -21
  220. reflex/utils/exceptions.py +89 -26
  221. reflex/utils/exec.py +69 -74
  222. reflex/utils/export.py +6 -1
  223. reflex/utils/format.py +8 -40
  224. reflex/utils/imports.py +5 -2
  225. reflex/utils/lazy_loader.py +7 -1
  226. reflex/utils/path_ops.py +74 -14
  227. reflex/utils/prerequisites.py +345 -68
  228. reflex/utils/processes.py +45 -32
  229. reflex/utils/pyi_generator.py +39 -33
  230. reflex/utils/registry.py +4 -4
  231. reflex/utils/serializers.py +1 -1
  232. reflex/utils/telemetry.py +5 -4
  233. reflex/utils/types.py +42 -18
  234. reflex/vars/base.py +695 -330
  235. reflex/vars/datetime.py +6 -7
  236. reflex/vars/dep_tracking.py +344 -0
  237. reflex/vars/function.py +11 -5
  238. reflex/vars/number.py +31 -43
  239. reflex/vars/object.py +74 -64
  240. reflex/vars/sequence.py +79 -67
  241. {reflex-0.6.8a1.dist-info → reflex-0.7.0.dist-info}/METADATA +7 -10
  242. reflex-0.7.0.dist-info/RECORD +401 -0
  243. {reflex-0.6.8a1.dist-info → reflex-0.7.0.dist-info}/WHEEL +1 -1
  244. reflex/experimental/assets.py +0 -37
  245. reflex/proxy.py +0 -119
  246. reflex-0.6.8a1.dist-info/RECORD +0 -398
  247. {reflex-0.6.8a1.dist-info → reflex-0.7.0.dist-info}/LICENSE +0 -0
  248. {reflex-0.6.8a1.dist-info → reflex-0.7.0.dist-info}/entry_points.txt +0 -0
@@ -192,7 +192,7 @@ class GhostUpload(Fragment):
192
192
  class Upload(MemoizationLeaf):
193
193
  """A file upload component."""
194
194
 
195
- library = "react-dropzone@14.2.10"
195
+ library = "react-dropzone@14.3.5"
196
196
 
197
197
  tag = ""
198
198
 
@@ -269,7 +269,7 @@ class Upload(MemoizationLeaf):
269
269
  on_drop = upload_props["on_drop"]
270
270
  if isinstance(on_drop, Callable):
271
271
  # Call the lambda to get the event chain.
272
- on_drop = call_event_fn(on_drop, _on_drop_spec) # type: ignore
272
+ on_drop = call_event_fn(on_drop, _on_drop_spec)
273
273
  if isinstance(on_drop, EventSpec):
274
274
  # Update the provided args for direct use with on_drop.
275
275
  on_drop = on_drop.with_args(
@@ -9,7 +9,7 @@ from typing import Any, ClassVar, Dict, List, Optional, Union, overload
9
9
  from reflex.components.base.fragment import Fragment
10
10
  from reflex.components.component import Component, ComponentNamespace, MemoizationLeaf
11
11
  from reflex.constants import Dirs
12
- from reflex.event import BASE_STATE, CallableEventSpec, EventSpec, EventType
12
+ from reflex.event import CallableEventSpec, EventSpec, EventType
13
13
  from reflex.style import Style
14
14
  from reflex.utils.imports import ImportVar
15
15
  from reflex.vars import VarData
@@ -51,21 +51,21 @@ class UploadFilesProvider(Component):
51
51
  class_name: Optional[Any] = None,
52
52
  autofocus: Optional[bool] = None,
53
53
  custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None,
54
- on_blur: Optional[EventType[[], BASE_STATE]] = None,
55
- on_click: Optional[EventType[[], BASE_STATE]] = None,
56
- on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
57
- on_double_click: Optional[EventType[[], BASE_STATE]] = None,
58
- on_focus: Optional[EventType[[], BASE_STATE]] = None,
59
- on_mount: Optional[EventType[[], BASE_STATE]] = None,
60
- on_mouse_down: Optional[EventType[[], BASE_STATE]] = None,
61
- on_mouse_enter: Optional[EventType[[], BASE_STATE]] = None,
62
- on_mouse_leave: Optional[EventType[[], BASE_STATE]] = None,
63
- on_mouse_move: Optional[EventType[[], BASE_STATE]] = None,
64
- on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
65
- on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
66
- on_mouse_up: Optional[EventType[[], BASE_STATE]] = None,
67
- on_scroll: Optional[EventType[[], BASE_STATE]] = None,
68
- on_unmount: Optional[EventType[[], BASE_STATE]] = None,
54
+ on_blur: Optional[EventType[()]] = None,
55
+ on_click: Optional[EventType[()]] = None,
56
+ on_context_menu: Optional[EventType[()]] = None,
57
+ on_double_click: Optional[EventType[()]] = None,
58
+ on_focus: Optional[EventType[()]] = None,
59
+ on_mount: Optional[EventType[()]] = None,
60
+ on_mouse_down: Optional[EventType[()]] = None,
61
+ on_mouse_enter: Optional[EventType[()]] = None,
62
+ on_mouse_leave: Optional[EventType[()]] = None,
63
+ on_mouse_move: Optional[EventType[()]] = None,
64
+ on_mouse_out: Optional[EventType[()]] = None,
65
+ on_mouse_over: Optional[EventType[()]] = None,
66
+ on_mouse_up: Optional[EventType[()]] = None,
67
+ on_scroll: Optional[EventType[()]] = None,
68
+ on_unmount: Optional[EventType[()]] = None,
69
69
  **props,
70
70
  ) -> "UploadFilesProvider":
71
71
  """Create the component.
@@ -97,24 +97,22 @@ class GhostUpload(Fragment):
97
97
  class_name: Optional[Any] = None,
98
98
  autofocus: Optional[bool] = None,
99
99
  custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None,
100
- on_blur: Optional[EventType[[], BASE_STATE]] = None,
101
- on_click: Optional[EventType[[], BASE_STATE]] = None,
102
- on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
103
- on_double_click: Optional[EventType[[], BASE_STATE]] = None,
104
- on_drop: Optional[
105
- Union[EventType[[], BASE_STATE], EventType[[Any], BASE_STATE]]
106
- ] = None,
107
- on_focus: Optional[EventType[[], BASE_STATE]] = None,
108
- on_mount: Optional[EventType[[], BASE_STATE]] = None,
109
- on_mouse_down: Optional[EventType[[], BASE_STATE]] = None,
110
- on_mouse_enter: Optional[EventType[[], BASE_STATE]] = None,
111
- on_mouse_leave: Optional[EventType[[], BASE_STATE]] = None,
112
- on_mouse_move: Optional[EventType[[], BASE_STATE]] = None,
113
- on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
114
- on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
115
- on_mouse_up: Optional[EventType[[], BASE_STATE]] = None,
116
- on_scroll: Optional[EventType[[], BASE_STATE]] = None,
117
- on_unmount: Optional[EventType[[], BASE_STATE]] = None,
100
+ on_blur: Optional[EventType[()]] = None,
101
+ on_click: Optional[EventType[()]] = None,
102
+ on_context_menu: Optional[EventType[()]] = None,
103
+ on_double_click: Optional[EventType[()]] = None,
104
+ on_drop: Optional[Union[EventType[()], EventType[Any]]] = None,
105
+ on_focus: Optional[EventType[()]] = None,
106
+ on_mount: Optional[EventType[()]] = None,
107
+ on_mouse_down: Optional[EventType[()]] = None,
108
+ on_mouse_enter: Optional[EventType[()]] = None,
109
+ on_mouse_leave: Optional[EventType[()]] = None,
110
+ on_mouse_move: Optional[EventType[()]] = None,
111
+ on_mouse_out: Optional[EventType[()]] = None,
112
+ on_mouse_over: Optional[EventType[()]] = None,
113
+ on_mouse_up: Optional[EventType[()]] = None,
114
+ on_scroll: Optional[EventType[()]] = None,
115
+ on_unmount: Optional[EventType[()]] = None,
118
116
  **props,
119
117
  ) -> "GhostUpload":
120
118
  """Create the component.
@@ -158,24 +156,22 @@ class Upload(MemoizationLeaf):
158
156
  class_name: Optional[Any] = None,
159
157
  autofocus: Optional[bool] = None,
160
158
  custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None,
161
- on_blur: Optional[EventType[[], BASE_STATE]] = None,
162
- on_click: Optional[EventType[[], BASE_STATE]] = None,
163
- on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
164
- on_double_click: Optional[EventType[[], BASE_STATE]] = None,
165
- on_drop: Optional[
166
- Union[EventType[[], BASE_STATE], EventType[[Any], BASE_STATE]]
167
- ] = None,
168
- on_focus: Optional[EventType[[], BASE_STATE]] = None,
169
- on_mount: Optional[EventType[[], BASE_STATE]] = None,
170
- on_mouse_down: Optional[EventType[[], BASE_STATE]] = None,
171
- on_mouse_enter: Optional[EventType[[], BASE_STATE]] = None,
172
- on_mouse_leave: Optional[EventType[[], BASE_STATE]] = None,
173
- on_mouse_move: Optional[EventType[[], BASE_STATE]] = None,
174
- on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
175
- on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
176
- on_mouse_up: Optional[EventType[[], BASE_STATE]] = None,
177
- on_scroll: Optional[EventType[[], BASE_STATE]] = None,
178
- on_unmount: Optional[EventType[[], BASE_STATE]] = None,
159
+ on_blur: Optional[EventType[()]] = None,
160
+ on_click: Optional[EventType[()]] = None,
161
+ on_context_menu: Optional[EventType[()]] = None,
162
+ on_double_click: Optional[EventType[()]] = None,
163
+ on_drop: Optional[Union[EventType[()], EventType[Any]]] = None,
164
+ on_focus: Optional[EventType[()]] = None,
165
+ on_mount: Optional[EventType[()]] = None,
166
+ on_mouse_down: Optional[EventType[()]] = None,
167
+ on_mouse_enter: Optional[EventType[()]] = None,
168
+ on_mouse_leave: Optional[EventType[()]] = None,
169
+ on_mouse_move: Optional[EventType[()]] = None,
170
+ on_mouse_out: Optional[EventType[()]] = None,
171
+ on_mouse_over: Optional[EventType[()]] = None,
172
+ on_mouse_up: Optional[EventType[()]] = None,
173
+ on_scroll: Optional[EventType[()]] = None,
174
+ on_unmount: Optional[EventType[()]] = None,
179
175
  **props,
180
176
  ) -> "Upload":
181
177
  """Create an upload component.
@@ -226,24 +222,22 @@ class StyledUpload(Upload):
226
222
  class_name: Optional[Any] = None,
227
223
  autofocus: Optional[bool] = None,
228
224
  custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None,
229
- on_blur: Optional[EventType[[], BASE_STATE]] = None,
230
- on_click: Optional[EventType[[], BASE_STATE]] = None,
231
- on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
232
- on_double_click: Optional[EventType[[], BASE_STATE]] = None,
233
- on_drop: Optional[
234
- Union[EventType[[], BASE_STATE], EventType[[Any], BASE_STATE]]
235
- ] = None,
236
- on_focus: Optional[EventType[[], BASE_STATE]] = None,
237
- on_mount: Optional[EventType[[], BASE_STATE]] = None,
238
- on_mouse_down: Optional[EventType[[], BASE_STATE]] = None,
239
- on_mouse_enter: Optional[EventType[[], BASE_STATE]] = None,
240
- on_mouse_leave: Optional[EventType[[], BASE_STATE]] = None,
241
- on_mouse_move: Optional[EventType[[], BASE_STATE]] = None,
242
- on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
243
- on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
244
- on_mouse_up: Optional[EventType[[], BASE_STATE]] = None,
245
- on_scroll: Optional[EventType[[], BASE_STATE]] = None,
246
- on_unmount: Optional[EventType[[], BASE_STATE]] = None,
225
+ on_blur: Optional[EventType[()]] = None,
226
+ on_click: Optional[EventType[()]] = None,
227
+ on_context_menu: Optional[EventType[()]] = None,
228
+ on_double_click: Optional[EventType[()]] = None,
229
+ on_drop: Optional[Union[EventType[()], EventType[Any]]] = None,
230
+ on_focus: Optional[EventType[()]] = None,
231
+ on_mount: Optional[EventType[()]] = None,
232
+ on_mouse_down: Optional[EventType[()]] = None,
233
+ on_mouse_enter: Optional[EventType[()]] = None,
234
+ on_mouse_leave: Optional[EventType[()]] = None,
235
+ on_mouse_move: Optional[EventType[()]] = None,
236
+ on_mouse_out: Optional[EventType[()]] = None,
237
+ on_mouse_over: Optional[EventType[()]] = None,
238
+ on_mouse_up: Optional[EventType[()]] = None,
239
+ on_scroll: Optional[EventType[()]] = None,
240
+ on_unmount: Optional[EventType[()]] = None,
247
241
  **props,
248
242
  ) -> "StyledUpload":
249
243
  """Create the styled upload component.
@@ -294,24 +288,22 @@ class UploadNamespace(ComponentNamespace):
294
288
  class_name: Optional[Any] = None,
295
289
  autofocus: Optional[bool] = None,
296
290
  custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None,
297
- on_blur: Optional[EventType[[], BASE_STATE]] = None,
298
- on_click: Optional[EventType[[], BASE_STATE]] = None,
299
- on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
300
- on_double_click: Optional[EventType[[], BASE_STATE]] = None,
301
- on_drop: Optional[
302
- Union[EventType[[], BASE_STATE], EventType[[Any], BASE_STATE]]
303
- ] = None,
304
- on_focus: Optional[EventType[[], BASE_STATE]] = None,
305
- on_mount: Optional[EventType[[], BASE_STATE]] = None,
306
- on_mouse_down: Optional[EventType[[], BASE_STATE]] = None,
307
- on_mouse_enter: Optional[EventType[[], BASE_STATE]] = None,
308
- on_mouse_leave: Optional[EventType[[], BASE_STATE]] = None,
309
- on_mouse_move: Optional[EventType[[], BASE_STATE]] = None,
310
- on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
311
- on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
312
- on_mouse_up: Optional[EventType[[], BASE_STATE]] = None,
313
- on_scroll: Optional[EventType[[], BASE_STATE]] = None,
314
- on_unmount: Optional[EventType[[], BASE_STATE]] = None,
291
+ on_blur: Optional[EventType[()]] = None,
292
+ on_click: Optional[EventType[()]] = None,
293
+ on_context_menu: Optional[EventType[()]] = None,
294
+ on_double_click: Optional[EventType[()]] = None,
295
+ on_drop: Optional[Union[EventType[()], EventType[Any]]] = None,
296
+ on_focus: Optional[EventType[()]] = None,
297
+ on_mount: Optional[EventType[()]] = None,
298
+ on_mouse_down: Optional[EventType[()]] = None,
299
+ on_mouse_enter: Optional[EventType[()]] = None,
300
+ on_mouse_leave: Optional[EventType[()]] = None,
301
+ on_mouse_move: Optional[EventType[()]] = None,
302
+ on_mouse_out: Optional[EventType[()]] = None,
303
+ on_mouse_over: Optional[EventType[()]] = None,
304
+ on_mouse_up: Optional[EventType[()]] = None,
305
+ on_scroll: Optional[EventType[()]] = None,
306
+ on_unmount: Optional[EventType[()]] = None,
315
307
  **props,
316
308
  ) -> "StyledUpload":
317
309
  """Create the styled upload component.
@@ -14,7 +14,7 @@ from reflex.components.radix.themes.layout.box import Box
14
14
  from reflex.constants.colors import Color
15
15
  from reflex.event import set_clipboard
16
16
  from reflex.style import Style
17
- from reflex.utils import console, format
17
+ from reflex.utils import format
18
18
  from reflex.utils.imports import ImportVar
19
19
  from reflex.vars.base import LiteralVar, Var, VarData
20
20
 
@@ -382,7 +382,7 @@ for theme_name in dir(Theme):
382
382
  class CodeBlock(Component, MarkdownComponentMap):
383
383
  """A code block."""
384
384
 
385
- library = "react-syntax-highlighter@15.6.0"
385
+ library = "react-syntax-highlighter@15.6.1"
386
386
 
387
387
  tag = "PrismAsyncLight"
388
388
 
@@ -438,6 +438,8 @@ class CodeBlock(Component, MarkdownComponentMap):
438
438
  can_copy = props.pop("can_copy", False)
439
439
  copy_button = props.pop("copy_button", None)
440
440
 
441
+ # react-syntax-highlighter doesn't have an explicit "light" or "dark" theme so we use one-light and one-dark
442
+ # themes respectively to ensure code compatibility.
441
443
  if "theme" not in props:
442
444
  # Default color scheme responds to global color mode.
443
445
  props["theme"] = color_mode_cond(
@@ -445,20 +447,9 @@ class CodeBlock(Component, MarkdownComponentMap):
445
447
  dark=Theme.one_dark,
446
448
  )
447
449
 
448
- # react-syntax-highlighter doesn't have an explicit "light" or "dark" theme so we use one-light and one-dark
449
- # themes respectively to ensure code compatibility.
450
- if "theme" in props and not isinstance(props["theme"], Var):
451
- props["theme"] = getattr(Theme, format.to_snake_case(props["theme"])) # type: ignore
452
- console.deprecate(
453
- feature_name="theme prop as string",
454
- reason="Use code_block.themes instead.",
455
- deprecation_version="0.6.0",
456
- removal_version="0.7.0",
457
- )
458
-
459
450
  if can_copy:
460
451
  code = children[0]
461
- copy_button = ( # type: ignore
452
+ copy_button = (
462
453
  copy_button
463
454
  if copy_button is not None
464
455
  else Button.create(
@@ -9,7 +9,7 @@ from typing import Any, ClassVar, Dict, Literal, Optional, Union, overload
9
9
  from reflex.components.component import Component, ComponentNamespace
10
10
  from reflex.components.markdown.markdown import MarkdownComponentMap
11
11
  from reflex.constants.colors import Color
12
- from reflex.event import BASE_STATE, EventType
12
+ from reflex.event import EventType
13
13
  from reflex.style import Style
14
14
  from reflex.vars.base import Var
15
15
 
@@ -938,21 +938,21 @@ class CodeBlock(Component, MarkdownComponentMap):
938
938
  class_name: Optional[Any] = None,
939
939
  autofocus: Optional[bool] = None,
940
940
  custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None,
941
- on_blur: Optional[EventType[[], BASE_STATE]] = None,
942
- on_click: Optional[EventType[[], BASE_STATE]] = None,
943
- on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
944
- on_double_click: Optional[EventType[[], BASE_STATE]] = None,
945
- on_focus: Optional[EventType[[], BASE_STATE]] = None,
946
- on_mount: Optional[EventType[[], BASE_STATE]] = None,
947
- on_mouse_down: Optional[EventType[[], BASE_STATE]] = None,
948
- on_mouse_enter: Optional[EventType[[], BASE_STATE]] = None,
949
- on_mouse_leave: Optional[EventType[[], BASE_STATE]] = None,
950
- on_mouse_move: Optional[EventType[[], BASE_STATE]] = None,
951
- on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
952
- on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
953
- on_mouse_up: Optional[EventType[[], BASE_STATE]] = None,
954
- on_scroll: Optional[EventType[[], BASE_STATE]] = None,
955
- on_unmount: Optional[EventType[[], BASE_STATE]] = None,
941
+ on_blur: Optional[EventType[()]] = None,
942
+ on_click: Optional[EventType[()]] = None,
943
+ on_context_menu: Optional[EventType[()]] = None,
944
+ on_double_click: Optional[EventType[()]] = None,
945
+ on_focus: Optional[EventType[()]] = None,
946
+ on_mount: Optional[EventType[()]] = None,
947
+ on_mouse_down: Optional[EventType[()]] = None,
948
+ on_mouse_enter: Optional[EventType[()]] = None,
949
+ on_mouse_leave: Optional[EventType[()]] = None,
950
+ on_mouse_move: Optional[EventType[()]] = None,
951
+ on_mouse_out: Optional[EventType[()]] = None,
952
+ on_mouse_over: Optional[EventType[()]] = None,
953
+ on_mouse_up: Optional[EventType[()]] = None,
954
+ on_scroll: Optional[EventType[()]] = None,
955
+ on_unmount: Optional[EventType[()]] = None,
956
956
  **props,
957
957
  ) -> "CodeBlock":
958
958
  """Create a text component.
@@ -1576,21 +1576,21 @@ class CodeblockNamespace(ComponentNamespace):
1576
1576
  class_name: Optional[Any] = None,
1577
1577
  autofocus: Optional[bool] = None,
1578
1578
  custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None,
1579
- on_blur: Optional[EventType[[], BASE_STATE]] = None,
1580
- on_click: Optional[EventType[[], BASE_STATE]] = None,
1581
- on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
1582
- on_double_click: Optional[EventType[[], BASE_STATE]] = None,
1583
- on_focus: Optional[EventType[[], BASE_STATE]] = None,
1584
- on_mount: Optional[EventType[[], BASE_STATE]] = None,
1585
- on_mouse_down: Optional[EventType[[], BASE_STATE]] = None,
1586
- on_mouse_enter: Optional[EventType[[], BASE_STATE]] = None,
1587
- on_mouse_leave: Optional[EventType[[], BASE_STATE]] = None,
1588
- on_mouse_move: Optional[EventType[[], BASE_STATE]] = None,
1589
- on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
1590
- on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
1591
- on_mouse_up: Optional[EventType[[], BASE_STATE]] = None,
1592
- on_scroll: Optional[EventType[[], BASE_STATE]] = None,
1593
- on_unmount: Optional[EventType[[], BASE_STATE]] = None,
1579
+ on_blur: Optional[EventType[()]] = None,
1580
+ on_click: Optional[EventType[()]] = None,
1581
+ on_context_menu: Optional[EventType[()]] = None,
1582
+ on_double_click: Optional[EventType[()]] = None,
1583
+ on_focus: Optional[EventType[()]] = None,
1584
+ on_mount: Optional[EventType[()]] = None,
1585
+ on_mouse_down: Optional[EventType[()]] = None,
1586
+ on_mouse_enter: Optional[EventType[()]] = None,
1587
+ on_mouse_leave: Optional[EventType[()]] = None,
1588
+ on_mouse_move: Optional[EventType[()]] = None,
1589
+ on_mouse_out: Optional[EventType[()]] = None,
1590
+ on_mouse_over: Optional[EventType[()]] = None,
1591
+ on_mouse_up: Optional[EventType[()]] = None,
1592
+ on_scroll: Optional[EventType[()]] = None,
1593
+ on_unmount: Optional[EventType[()]] = None,
1594
1594
  **props,
1595
1595
  ) -> "CodeBlock":
1596
1596
  """Create a text component.
@@ -165,7 +165,7 @@ class DataEditor(NoSSRComponent):
165
165
 
166
166
  tag = "DataEditor"
167
167
  is_default = True
168
- library: str = "@glideapps/glide-data-grid@^6.0.3"
168
+ library: str | None = "@glideapps/glide-data-grid@^6.0.3"
169
169
  lib_dependencies: List[str] = [
170
170
  "lodash@^4.17.21",
171
171
  "react-responsive-carousel@^3.2.7",
@@ -321,6 +321,8 @@ class DataEditor(NoSSRComponent):
321
321
  Returns:
322
322
  The import dict.
323
323
  """
324
+ if self.library is None:
325
+ return {}
324
326
  return {
325
327
  "": f"{format.format_library_name(self.library)}/dist/index.css",
326
328
  self.library: "GridCellKind",
@@ -343,9 +345,9 @@ class DataEditor(NoSSRComponent):
343
345
  data_callback = self.get_cell_content._js_expr
344
346
  else:
345
347
  data_callback = f"getData_{editor_id}"
346
- self.get_cell_content = Var(_js_expr=data_callback) # type: ignore
348
+ self.get_cell_content = Var(_js_expr=data_callback)
347
349
 
348
- code = [f"function {data_callback}([col, row])" "{"]
350
+ code = [f"function {data_callback}([col, row]){{"]
349
351
 
350
352
  columns_path = str(self.columns)
351
353
  data_path = str(self.data)
@@ -385,7 +387,8 @@ class DataEditor(NoSSRComponent):
385
387
  raise ValueError(
386
388
  "DataEditor data must be an ArrayVar if rows is not provided."
387
389
  )
388
- props["rows"] = data.length() if isinstance(data, Var) else len(data)
390
+
391
+ props["rows"] = data.length() if isinstance(data, ArrayVar) else len(data)
389
392
 
390
393
  if not isinstance(columns, Var) and len(columns):
391
394
  if types.is_dataframe(type(data)) or (
@@ -10,7 +10,7 @@ from typing_extensions import TypedDict
10
10
 
11
11
  from reflex.base import Base
12
12
  from reflex.components.component import NoSSRComponent
13
- from reflex.event import BASE_STATE, EventType
13
+ from reflex.event import EventType
14
14
  from reflex.style import Style
15
15
  from reflex.utils.imports import ImportDict
16
16
  from reflex.utils.serializers import serializer
@@ -183,93 +183,79 @@ class DataEditor(NoSSRComponent):
183
183
  class_name: Optional[Any] = None,
184
184
  autofocus: Optional[bool] = None,
185
185
  custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None,
186
- on_blur: Optional[EventType[[], BASE_STATE]] = None,
186
+ on_blur: Optional[EventType[()]] = None,
187
187
  on_cell_activated: Optional[
188
- Union[EventType[[], BASE_STATE], EventType[[tuple[int, int]], BASE_STATE]]
188
+ Union[EventType[()], EventType[tuple[int, int]]]
189
189
  ] = None,
190
190
  on_cell_clicked: Optional[
191
- Union[EventType[[], BASE_STATE], EventType[[tuple[int, int]], BASE_STATE]]
191
+ Union[EventType[()], EventType[tuple[int, int]]]
192
192
  ] = None,
193
193
  on_cell_context_menu: Optional[
194
- Union[EventType[[], BASE_STATE], EventType[[tuple[int, int]], BASE_STATE]]
194
+ Union[EventType[()], EventType[tuple[int, int]]]
195
195
  ] = None,
196
196
  on_cell_edited: Optional[
197
197
  Union[
198
- EventType[[], BASE_STATE],
199
- EventType[[tuple[int, int]], BASE_STATE],
200
- EventType[[tuple[int, int], GridCell], BASE_STATE],
198
+ EventType[()],
199
+ EventType[tuple[int, int]],
200
+ EventType[tuple[int, int], GridCell],
201
201
  ]
202
202
  ] = None,
203
- on_click: Optional[EventType[[], BASE_STATE]] = None,
203
+ on_click: Optional[EventType[()]] = None,
204
204
  on_column_resize: Optional[
205
- Union[
206
- EventType[[], BASE_STATE],
207
- EventType[[GridColumn], BASE_STATE],
208
- EventType[[GridColumn, int], BASE_STATE],
209
- ]
205
+ Union[EventType[()], EventType[GridColumn], EventType[GridColumn, int]]
210
206
  ] = None,
211
- on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
212
- on_delete: Optional[
213
- Union[EventType[[], BASE_STATE], EventType[[GridSelection], BASE_STATE]]
214
- ] = None,
215
- on_double_click: Optional[EventType[[], BASE_STATE]] = None,
207
+ on_context_menu: Optional[EventType[()]] = None,
208
+ on_delete: Optional[Union[EventType[()], EventType[GridSelection]]] = None,
209
+ on_double_click: Optional[EventType[()]] = None,
216
210
  on_finished_editing: Optional[
217
211
  Union[
218
- EventType[[], BASE_STATE],
219
- EventType[[Union[GridCell, None]], BASE_STATE],
220
- EventType[[Union[GridCell, None], tuple[int, int]], BASE_STATE],
212
+ EventType[()],
213
+ EventType[Union[GridCell, None]],
214
+ EventType[Union[GridCell, None], tuple[int, int]],
221
215
  ]
222
216
  ] = None,
223
- on_focus: Optional[EventType[[], BASE_STATE]] = None,
217
+ on_focus: Optional[EventType[()]] = None,
224
218
  on_group_header_clicked: Optional[
225
219
  Union[
226
- EventType[[], BASE_STATE],
227
- EventType[[tuple[int, int]], BASE_STATE],
228
- EventType[[tuple[int, int], GridCell], BASE_STATE],
220
+ EventType[()],
221
+ EventType[tuple[int, int]],
222
+ EventType[tuple[int, int], GridCell],
229
223
  ]
230
224
  ] = None,
231
225
  on_group_header_context_menu: Optional[
232
226
  Union[
233
- EventType[[], BASE_STATE],
234
- EventType[[int], BASE_STATE],
235
- EventType[[int, GroupHeaderClickedEventArgs], BASE_STATE],
227
+ EventType[()],
228
+ EventType[int],
229
+ EventType[int, GroupHeaderClickedEventArgs],
236
230
  ]
237
231
  ] = None,
238
232
  on_group_header_renamed: Optional[
239
- Union[
240
- EventType[[], BASE_STATE],
241
- EventType[[str], BASE_STATE],
242
- EventType[[str, str], BASE_STATE],
243
- ]
233
+ Union[EventType[()], EventType[str], EventType[str, str]]
244
234
  ] = None,
245
235
  on_header_clicked: Optional[
246
- Union[EventType[[], BASE_STATE], EventType[[tuple[int, int]], BASE_STATE]]
236
+ Union[EventType[()], EventType[tuple[int, int]]]
247
237
  ] = None,
248
238
  on_header_context_menu: Optional[
249
- Union[EventType[[], BASE_STATE], EventType[[tuple[int, int]], BASE_STATE]]
239
+ Union[EventType[()], EventType[tuple[int, int]]]
250
240
  ] = None,
251
241
  on_header_menu_click: Optional[
252
- Union[
253
- EventType[[], BASE_STATE],
254
- EventType[[int], BASE_STATE],
255
- EventType[[int, Rectangle], BASE_STATE],
256
- ]
242
+ Union[EventType[()], EventType[int], EventType[int, Rectangle]]
257
243
  ] = None,
258
244
  on_item_hovered: Optional[
259
- Union[EventType[[], BASE_STATE], EventType[[tuple[int, int]], BASE_STATE]]
245
+ Union[EventType[()], EventType[tuple[int, int]]]
260
246
  ] = None,
261
- on_mount: Optional[EventType[[], BASE_STATE]] = None,
262
- on_mouse_down: Optional[EventType[[], BASE_STATE]] = None,
263
- on_mouse_enter: Optional[EventType[[], BASE_STATE]] = None,
264
- on_mouse_leave: Optional[EventType[[], BASE_STATE]] = None,
265
- on_mouse_move: Optional[EventType[[], BASE_STATE]] = None,
266
- on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
267
- on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
268
- on_mouse_up: Optional[EventType[[], BASE_STATE]] = None,
269
- on_row_appended: Optional[EventType[[], BASE_STATE]] = None,
270
- on_scroll: Optional[EventType[[], BASE_STATE]] = None,
271
- on_selection_cleared: Optional[EventType[[], BASE_STATE]] = None,
272
- on_unmount: Optional[EventType[[], BASE_STATE]] = None,
247
+ on_mount: Optional[EventType[()]] = None,
248
+ on_mouse_down: Optional[EventType[()]] = None,
249
+ on_mouse_enter: Optional[EventType[()]] = None,
250
+ on_mouse_leave: Optional[EventType[()]] = None,
251
+ on_mouse_move: Optional[EventType[()]] = None,
252
+ on_mouse_out: Optional[EventType[()]] = None,
253
+ on_mouse_over: Optional[EventType[()]] = None,
254
+ on_mouse_up: Optional[EventType[()]] = None,
255
+ on_row_appended: Optional[EventType[()]] = None,
256
+ on_scroll: Optional[EventType[()]] = None,
257
+ on_selection_cleared: Optional[EventType[()]] = None,
258
+ on_unmount: Optional[EventType[()]] = None,
273
259
  **props,
274
260
  ) -> "DataEditor":
275
261
  """Create the DataEditor component.
@@ -5,20 +5,22 @@ from typing import Union
5
5
  import reflex as rx
6
6
 
7
7
 
8
- def svg_logo(color: Union[str, rx.Var[str]] = rx.color_mode_cond("#110F1F", "white")):
8
+ def svg_logo(
9
+ color: Union[str, rx.Var[str]] = rx.color_mode_cond("#110F1F", "white"),
10
+ **props,
11
+ ):
9
12
  """A Reflex logo SVG.
10
13
 
11
14
  Args:
12
15
  color: The color of the logo.
16
+ props: Extra props to pass to the svg component.
13
17
 
14
18
  Returns:
15
19
  The Reflex logo SVG.
16
20
  """
17
21
 
18
- def logo_path(d):
19
- return rx.el.svg.path(
20
- d=d,
21
- )
22
+ def logo_path(d: str):
23
+ return rx.el.svg.path(d=d)
22
24
 
23
25
  paths = [
24
26
  "M0 11.5999V0.399902H8.96V4.8799H6.72V2.6399H2.24V4.8799H6.72V7.1199H2.24V11.5999H0ZM6.72 11.5999V7.1199H8.96V11.5999H6.72Z",
@@ -31,11 +33,14 @@ def svg_logo(color: Union[str, rx.Var[str]] = rx.color_mode_cond("#110F1F", "whi
31
33
 
32
34
  return rx.el.svg(
33
35
  *[logo_path(d) for d in paths],
34
- width="56",
35
- height="12",
36
- viewBox="0 0 56 12",
36
+ rx.el.title("Reflex"),
37
+ aria_label="Reflex",
38
+ role="img",
39
+ width=props.pop("width", "56"),
40
+ height=props.pop("height", "12"),
37
41
  fill=color,
38
42
  xmlns="http://www.w3.org/2000/svg",
43
+ **props,
39
44
  )
40
45
 
41
46