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.
- reflex/.templates/jinja/custom_components/pyproject.toml.jinja2 +1 -1
- reflex/.templates/jinja/web/pages/_app.js.jinja2 +7 -7
- reflex/.templates/jinja/web/pages/utils.js.jinja2 +3 -3
- reflex/.templates/web/components/reflex/radix_themes_color_mode_provider.js +1 -4
- reflex/.templates/web/utils/state.js +65 -36
- reflex/__init__.py +4 -17
- reflex/__init__.pyi +1 -2
- reflex/app.py +286 -135
- reflex/app_mixins/lifespan.py +9 -9
- reflex/app_mixins/middleware.py +6 -6
- reflex/app_module_for_backend.py +3 -7
- reflex/base.py +7 -7
- reflex/compiler/compiler.py +8 -0
- reflex/compiler/utils.py +57 -18
- reflex/components/base/app_wrap.pyi +16 -16
- reflex/components/base/bare.py +1 -1
- reflex/components/base/body.pyi +16 -16
- reflex/components/base/document.pyi +76 -76
- reflex/components/base/error_boundary.py +2 -1
- reflex/components/base/error_boundary.pyi +19 -22
- reflex/components/base/fragment.pyi +16 -16
- reflex/components/base/head.pyi +31 -31
- reflex/components/base/link.pyi +31 -31
- reflex/components/base/meta.py +2 -2
- reflex/components/base/meta.pyi +61 -61
- reflex/components/base/script.pyi +19 -19
- reflex/components/base/strict_mode.py +10 -0
- reflex/components/base/strict_mode.pyi +57 -0
- reflex/components/component.py +38 -77
- reflex/components/core/banner.py +159 -4
- reflex/components/core/banner.pyi +162 -76
- reflex/components/core/breakpoints.py +3 -1
- reflex/components/core/client_side_routing.py +1 -1
- reflex/components/core/client_side_routing.pyi +32 -32
- reflex/components/core/clipboard.pyi +17 -20
- reflex/components/core/cond.py +9 -10
- reflex/components/core/debounce.py +1 -1
- reflex/components/core/debounce.pyi +17 -17
- reflex/components/core/foreach.py +28 -3
- reflex/components/core/html.py +1 -1
- reflex/components/core/html.pyi +16 -16
- reflex/components/core/match.py +5 -5
- reflex/components/core/sticky.py +134 -0
- reflex/components/core/sticky.pyi +449 -0
- reflex/components/core/upload.py +2 -2
- reflex/components/core/upload.pyi +80 -88
- reflex/components/datadisplay/code.py +5 -14
- reflex/components/datadisplay/code.pyi +31 -31
- reflex/components/datadisplay/dataeditor.py +7 -4
- reflex/components/datadisplay/dataeditor.pyi +40 -54
- reflex/components/datadisplay/logo.py +13 -8
- reflex/components/datadisplay/shiki_code_block.py +14 -9
- reflex/components/datadisplay/shiki_code_block.pyi +46 -46
- reflex/components/dynamic.py +22 -3
- reflex/components/el/constants/reflex.py +1 -1
- reflex/components/el/element.py +1 -1
- reflex/components/el/element.pyi +16 -16
- reflex/components/el/elements/base.pyi +16 -16
- reflex/components/el/elements/forms.py +4 -4
- reflex/components/el/elements/forms.pyi +224 -258
- reflex/components/el/elements/inline.pyi +421 -421
- reflex/components/el/elements/media.pyi +376 -376
- reflex/components/el/elements/metadata.pyi +91 -91
- reflex/components/el/elements/other.pyi +106 -106
- reflex/components/el/elements/scripts.pyi +46 -46
- reflex/components/el/elements/sectioning.pyi +226 -226
- reflex/components/el/elements/tables.pyi +151 -151
- reflex/components/el/elements/typography.pyi +226 -226
- reflex/components/gridjs/datatable.pyi +31 -31
- reflex/components/lucide/icon.py +46 -8
- reflex/components/lucide/icon.pyi +85 -31
- reflex/components/markdown/markdown.py +10 -8
- reflex/components/markdown/markdown.pyi +16 -16
- reflex/components/moment/moment.py +2 -2
- reflex/components/moment/moment.pyi +17 -19
- reflex/components/next/base.pyi +16 -16
- reflex/components/next/image.py +16 -4
- reflex/components/next/image.pyi +22 -20
- reflex/components/next/link.py +1 -1
- reflex/components/next/link.pyi +16 -16
- reflex/components/next/video.pyi +16 -16
- reflex/components/plotly/__init__.py +29 -2
- reflex/components/plotly/plotly.py +240 -5
- reflex/components/plotly/plotly.pyi +799 -44
- reflex/components/props.py +3 -3
- reflex/components/radix/__init__.pyi +1 -1
- reflex/components/radix/primitives/accordion.py +9 -5
- reflex/components/radix/primitives/accordion.pyi +110 -108
- reflex/components/radix/primitives/base.pyi +31 -31
- reflex/components/radix/primitives/drawer.py +5 -2
- reflex/components/radix/primitives/drawer.pyi +179 -187
- reflex/components/radix/primitives/form.pyi +160 -172
- reflex/components/radix/primitives/progress.py +1 -1
- reflex/components/radix/primitives/progress.pyi +76 -76
- reflex/components/radix/primitives/slider.py +1 -1
- reflex/components/radix/primitives/slider.pyi +78 -82
- reflex/components/radix/themes/base.pyi +121 -121
- reflex/components/radix/themes/color_mode.py +11 -9
- reflex/components/radix/themes/color_mode.pyi +47 -49
- reflex/components/radix/themes/components/alert_dialog.py +3 -0
- reflex/components/radix/themes/components/alert_dialog.pyi +110 -112
- reflex/components/radix/themes/components/aspect_ratio.pyi +16 -16
- reflex/components/radix/themes/components/avatar.pyi +16 -16
- reflex/components/radix/themes/components/badge.pyi +16 -16
- reflex/components/radix/themes/components/button.pyi +16 -16
- reflex/components/radix/themes/components/callout.pyi +76 -76
- reflex/components/radix/themes/components/card.py +1 -1
- reflex/components/radix/themes/components/card.pyi +17 -17
- reflex/components/radix/themes/components/checkbox.pyi +49 -55
- reflex/components/radix/themes/components/checkbox_cards.pyi +31 -31
- reflex/components/radix/themes/components/checkbox_group.pyi +31 -31
- reflex/components/radix/themes/components/context_menu.py +5 -0
- reflex/components/radix/themes/components/context_menu.pyi +149 -155
- reflex/components/radix/themes/components/data_list.pyi +61 -61
- reflex/components/radix/themes/components/dialog.py +3 -0
- reflex/components/radix/themes/components/dialog.pyi +113 -117
- reflex/components/radix/themes/components/dropdown_menu.py +5 -0
- reflex/components/radix/themes/components/dropdown_menu.pyi +133 -137
- reflex/components/radix/themes/components/hover_card.py +3 -0
- reflex/components/radix/themes/components/hover_card.pyi +63 -67
- reflex/components/radix/themes/components/icon_button.py +2 -2
- reflex/components/radix/themes/components/icon_button.pyi +17 -16
- reflex/components/radix/themes/components/inset.pyi +16 -16
- reflex/components/radix/themes/components/popover.py +3 -0
- reflex/components/radix/themes/components/popover.pyi +68 -70
- reflex/components/radix/themes/components/progress.pyi +16 -16
- reflex/components/radix/themes/components/radio.pyi +16 -16
- reflex/components/radix/themes/components/radio_cards.py +2 -0
- reflex/components/radix/themes/components/radio_cards.pyi +32 -34
- reflex/components/radix/themes/components/radio_group.py +1 -1
- reflex/components/radix/themes/components/radio_group.pyi +62 -64
- reflex/components/radix/themes/components/scroll_area.pyi +16 -16
- reflex/components/radix/themes/components/segmented_control.pyi +32 -35
- reflex/components/radix/themes/components/select.py +4 -0
- reflex/components/radix/themes/components/select.pyi +145 -157
- reflex/components/radix/themes/components/separator.pyi +16 -16
- reflex/components/radix/themes/components/skeleton.py +3 -0
- reflex/components/radix/themes/components/skeleton.pyi +16 -16
- reflex/components/radix/themes/components/slider.pyi +22 -28
- reflex/components/radix/themes/components/spinner.pyi +16 -16
- reflex/components/radix/themes/components/switch.pyi +17 -19
- reflex/components/radix/themes/components/table.pyi +106 -106
- reflex/components/radix/themes/components/tabs.py +3 -0
- reflex/components/radix/themes/components/tabs.pyi +78 -82
- reflex/components/radix/themes/components/text_area.py +12 -0
- reflex/components/radix/themes/components/text_area.pyi +21 -33
- reflex/components/radix/themes/components/text_field.py +1 -1
- reflex/components/radix/themes/components/text_field.pyi +52 -80
- reflex/components/radix/themes/components/tooltip.py +6 -1
- reflex/components/radix/themes/components/tooltip.pyi +20 -21
- reflex/components/radix/themes/layout/__init__.pyi +1 -1
- reflex/components/radix/themes/layout/base.pyi +16 -16
- reflex/components/radix/themes/layout/box.pyi +16 -16
- reflex/components/radix/themes/layout/center.pyi +16 -16
- reflex/components/radix/themes/layout/container.pyi +16 -16
- reflex/components/radix/themes/layout/flex.pyi +16 -16
- reflex/components/radix/themes/layout/grid.pyi +16 -16
- reflex/components/radix/themes/layout/list.py +2 -2
- reflex/components/radix/themes/layout/list.pyi +76 -76
- reflex/components/radix/themes/layout/section.pyi +16 -16
- reflex/components/radix/themes/layout/spacer.pyi +16 -16
- reflex/components/radix/themes/layout/stack.py +2 -2
- reflex/components/radix/themes/layout/stack.pyi +46 -46
- reflex/components/radix/themes/typography/blockquote.pyi +16 -16
- reflex/components/radix/themes/typography/code.pyi +16 -16
- reflex/components/radix/themes/typography/heading.pyi +16 -16
- reflex/components/radix/themes/typography/link.py +1 -1
- reflex/components/radix/themes/typography/link.pyi +16 -16
- reflex/components/radix/themes/typography/text.py +2 -2
- reflex/components/radix/themes/typography/text.pyi +106 -106
- reflex/components/react_player/audio.pyi +33 -39
- reflex/components/react_player/react_player.py +1 -1
- reflex/components/react_player/react_player.pyi +32 -38
- reflex/components/react_player/video.pyi +33 -39
- reflex/components/recharts/__init__.py +2 -0
- reflex/components/recharts/__init__.pyi +2 -0
- reflex/components/recharts/cartesian.pyi +282 -282
- reflex/components/recharts/charts.py +15 -15
- reflex/components/recharts/charts.pyi +164 -164
- reflex/components/recharts/general.py +19 -4
- reflex/components/recharts/general.pyi +132 -81
- reflex/components/recharts/polar.py +2 -2
- reflex/components/recharts/polar.pyi +55 -55
- reflex/components/recharts/recharts.py +4 -4
- reflex/components/recharts/recharts.pyi +31 -31
- reflex/components/sonner/toast.py +15 -13
- reflex/components/sonner/toast.pyi +22 -22
- reflex/components/suneditor/editor.py +6 -4
- reflex/components/suneditor/editor.pyi +26 -40
- reflex/components/tags/iter_tag.py +3 -3
- reflex/components/tags/tag.py +25 -3
- reflex/config.py +48 -20
- reflex/constants/__init__.py +1 -0
- reflex/constants/base.py +4 -1
- reflex/constants/compiler.py +5 -2
- reflex/constants/config.py +8 -1
- reflex/constants/installer.py +9 -9
- reflex/constants/style.py +1 -1
- reflex/custom_components/custom_components.py +18 -10
- reflex/event.py +228 -233
- reflex/experimental/__init__.py +19 -11
- reflex/experimental/client_state.py +53 -28
- reflex/experimental/hooks.py +5 -5
- reflex/experimental/layout.py +8 -5
- reflex/experimental/layout.pyi +79 -83
- reflex/experimental/misc.py +3 -3
- reflex/istate/wrappers.py +1 -1
- reflex/middleware/hydrate_middleware.py +2 -2
- reflex/model.py +11 -6
- reflex/page.py +5 -5
- reflex/reflex.py +104 -26
- reflex/route.py +1 -1
- reflex/state.py +358 -401
- reflex/style.py +27 -3
- reflex/testing.py +34 -39
- reflex/utils/build.py +6 -2
- reflex/utils/codespaces.py +1 -4
- reflex/utils/compat.py +6 -5
- reflex/utils/console.py +71 -21
- reflex/utils/exceptions.py +89 -26
- reflex/utils/exec.py +69 -74
- reflex/utils/export.py +6 -1
- reflex/utils/format.py +8 -40
- reflex/utils/imports.py +5 -2
- reflex/utils/lazy_loader.py +7 -1
- reflex/utils/path_ops.py +74 -14
- reflex/utils/prerequisites.py +345 -68
- reflex/utils/processes.py +45 -32
- reflex/utils/pyi_generator.py +39 -33
- reflex/utils/registry.py +4 -4
- reflex/utils/serializers.py +1 -1
- reflex/utils/telemetry.py +5 -4
- reflex/utils/types.py +42 -18
- reflex/vars/base.py +695 -330
- reflex/vars/datetime.py +6 -7
- reflex/vars/dep_tracking.py +344 -0
- reflex/vars/function.py +11 -5
- reflex/vars/number.py +31 -43
- reflex/vars/object.py +74 -64
- reflex/vars/sequence.py +79 -67
- {reflex-0.6.8a1.dist-info → reflex-0.7.0.dist-info}/METADATA +7 -10
- reflex-0.7.0.dist-info/RECORD +401 -0
- {reflex-0.6.8a1.dist-info → reflex-0.7.0.dist-info}/WHEEL +1 -1
- reflex/experimental/assets.py +0 -37
- reflex/proxy.py +0 -119
- reflex-0.6.8a1.dist-info/RECORD +0 -398
- {reflex-0.6.8a1.dist-info → reflex-0.7.0.dist-info}/LICENSE +0 -0
- {reflex-0.6.8a1.dist-info → reflex-0.7.0.dist-info}/entry_points.txt +0 -0
reflex/components/core/upload.py
CHANGED
|
@@ -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.
|
|
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)
|
|
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
|
|
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[
|
|
55
|
-
on_click: Optional[EventType[
|
|
56
|
-
on_context_menu: Optional[EventType[
|
|
57
|
-
on_double_click: Optional[EventType[
|
|
58
|
-
on_focus: Optional[EventType[
|
|
59
|
-
on_mount: Optional[EventType[
|
|
60
|
-
on_mouse_down: Optional[EventType[
|
|
61
|
-
on_mouse_enter: Optional[EventType[
|
|
62
|
-
on_mouse_leave: Optional[EventType[
|
|
63
|
-
on_mouse_move: Optional[EventType[
|
|
64
|
-
on_mouse_out: Optional[EventType[
|
|
65
|
-
on_mouse_over: Optional[EventType[
|
|
66
|
-
on_mouse_up: Optional[EventType[
|
|
67
|
-
on_scroll: Optional[EventType[
|
|
68
|
-
on_unmount: Optional[EventType[
|
|
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[
|
|
101
|
-
on_click: Optional[EventType[
|
|
102
|
-
on_context_menu: Optional[EventType[
|
|
103
|
-
on_double_click: Optional[EventType[
|
|
104
|
-
on_drop: Optional[
|
|
105
|
-
|
|
106
|
-
] = None,
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
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[
|
|
162
|
-
on_click: Optional[EventType[
|
|
163
|
-
on_context_menu: Optional[EventType[
|
|
164
|
-
on_double_click: Optional[EventType[
|
|
165
|
-
on_drop: Optional[
|
|
166
|
-
|
|
167
|
-
] = None,
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
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[
|
|
230
|
-
on_click: Optional[EventType[
|
|
231
|
-
on_context_menu: Optional[EventType[
|
|
232
|
-
on_double_click: Optional[EventType[
|
|
233
|
-
on_drop: Optional[
|
|
234
|
-
|
|
235
|
-
] = None,
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
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[
|
|
298
|
-
on_click: Optional[EventType[
|
|
299
|
-
on_context_menu: Optional[EventType[
|
|
300
|
-
on_double_click: Optional[EventType[
|
|
301
|
-
on_drop: Optional[
|
|
302
|
-
|
|
303
|
-
] = None,
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
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
|
|
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.
|
|
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 = (
|
|
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
|
|
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[
|
|
942
|
-
on_click: Optional[EventType[
|
|
943
|
-
on_context_menu: Optional[EventType[
|
|
944
|
-
on_double_click: Optional[EventType[
|
|
945
|
-
on_focus: Optional[EventType[
|
|
946
|
-
on_mount: Optional[EventType[
|
|
947
|
-
on_mouse_down: Optional[EventType[
|
|
948
|
-
on_mouse_enter: Optional[EventType[
|
|
949
|
-
on_mouse_leave: Optional[EventType[
|
|
950
|
-
on_mouse_move: Optional[EventType[
|
|
951
|
-
on_mouse_out: Optional[EventType[
|
|
952
|
-
on_mouse_over: Optional[EventType[
|
|
953
|
-
on_mouse_up: Optional[EventType[
|
|
954
|
-
on_scroll: Optional[EventType[
|
|
955
|
-
on_unmount: Optional[EventType[
|
|
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[
|
|
1580
|
-
on_click: Optional[EventType[
|
|
1581
|
-
on_context_menu: Optional[EventType[
|
|
1582
|
-
on_double_click: Optional[EventType[
|
|
1583
|
-
on_focus: Optional[EventType[
|
|
1584
|
-
on_mount: Optional[EventType[
|
|
1585
|
-
on_mouse_down: Optional[EventType[
|
|
1586
|
-
on_mouse_enter: Optional[EventType[
|
|
1587
|
-
on_mouse_leave: Optional[EventType[
|
|
1588
|
-
on_mouse_move: Optional[EventType[
|
|
1589
|
-
on_mouse_out: Optional[EventType[
|
|
1590
|
-
on_mouse_over: Optional[EventType[
|
|
1591
|
-
on_mouse_up: Optional[EventType[
|
|
1592
|
-
on_scroll: Optional[EventType[
|
|
1593
|
-
on_unmount: Optional[EventType[
|
|
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)
|
|
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
|
-
|
|
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
|
|
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[
|
|
186
|
+
on_blur: Optional[EventType[()]] = None,
|
|
187
187
|
on_cell_activated: Optional[
|
|
188
|
-
Union[EventType[
|
|
188
|
+
Union[EventType[()], EventType[tuple[int, int]]]
|
|
189
189
|
] = None,
|
|
190
190
|
on_cell_clicked: Optional[
|
|
191
|
-
Union[EventType[
|
|
191
|
+
Union[EventType[()], EventType[tuple[int, int]]]
|
|
192
192
|
] = None,
|
|
193
193
|
on_cell_context_menu: Optional[
|
|
194
|
-
Union[EventType[
|
|
194
|
+
Union[EventType[()], EventType[tuple[int, int]]]
|
|
195
195
|
] = None,
|
|
196
196
|
on_cell_edited: Optional[
|
|
197
197
|
Union[
|
|
198
|
-
EventType[
|
|
199
|
-
EventType[
|
|
200
|
-
EventType[
|
|
198
|
+
EventType[()],
|
|
199
|
+
EventType[tuple[int, int]],
|
|
200
|
+
EventType[tuple[int, int], GridCell],
|
|
201
201
|
]
|
|
202
202
|
] = None,
|
|
203
|
-
on_click: Optional[EventType[
|
|
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[
|
|
212
|
-
on_delete: Optional[
|
|
213
|
-
|
|
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[
|
|
219
|
-
EventType[
|
|
220
|
-
EventType[
|
|
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[
|
|
217
|
+
on_focus: Optional[EventType[()]] = None,
|
|
224
218
|
on_group_header_clicked: Optional[
|
|
225
219
|
Union[
|
|
226
|
-
EventType[
|
|
227
|
-
EventType[
|
|
228
|
-
EventType[
|
|
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[
|
|
234
|
-
EventType[
|
|
235
|
-
EventType[
|
|
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[
|
|
236
|
+
Union[EventType[()], EventType[tuple[int, int]]]
|
|
247
237
|
] = None,
|
|
248
238
|
on_header_context_menu: Optional[
|
|
249
|
-
Union[EventType[
|
|
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[
|
|
245
|
+
Union[EventType[()], EventType[tuple[int, int]]]
|
|
260
246
|
] = None,
|
|
261
|
-
on_mount: Optional[EventType[
|
|
262
|
-
on_mouse_down: Optional[EventType[
|
|
263
|
-
on_mouse_enter: Optional[EventType[
|
|
264
|
-
on_mouse_leave: Optional[EventType[
|
|
265
|
-
on_mouse_move: Optional[EventType[
|
|
266
|
-
on_mouse_out: Optional[EventType[
|
|
267
|
-
on_mouse_over: Optional[EventType[
|
|
268
|
-
on_mouse_up: Optional[EventType[
|
|
269
|
-
on_row_appended: Optional[EventType[
|
|
270
|
-
on_scroll: Optional[EventType[
|
|
271
|
-
on_selection_cleared: Optional[EventType[
|
|
272
|
-
on_unmount: Optional[EventType[
|
|
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(
|
|
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
|
-
|
|
35
|
-
|
|
36
|
-
|
|
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
|
|