reflex 0.6.4a2__py3-none-any.whl → 0.6.5__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/web/pages/custom_component.js.jinja2 +0 -14
- reflex/.templates/jinja/web/pages/utils.js.jinja2 +4 -8
- reflex/.templates/web/components/shiki/code.js +16 -11
- reflex/.templates/web/utils/state.js +29 -21
- reflex/__init__.py +4 -0
- reflex/__init__.pyi +4 -0
- reflex/app.py +148 -154
- reflex/app_mixins/lifespan.py +5 -1
- reflex/app_mixins/middleware.py +3 -1
- reflex/app_mixins/mixin.py +3 -2
- reflex/base.py +2 -4
- reflex/compiler/compiler.py +111 -37
- reflex/components/base/app_wrap.pyi +17 -17
- reflex/components/base/bare.py +72 -3
- reflex/components/base/body.pyi +17 -17
- reflex/components/base/document.pyi +81 -81
- reflex/components/base/error_boundary.pyi +25 -18
- reflex/components/base/fragment.pyi +17 -17
- reflex/components/base/head.pyi +33 -33
- reflex/components/base/link.pyi +33 -33
- reflex/components/base/meta.pyi +65 -65
- reflex/components/base/script.py +4 -4
- reflex/components/base/script.pyi +23 -20
- reflex/components/component.py +250 -31
- reflex/components/core/banner.py +1 -1
- reflex/components/core/banner.pyi +81 -81
- reflex/components/core/client_side_routing.pyi +33 -33
- reflex/components/core/clipboard.py +2 -2
- reflex/components/core/clipboard.pyi +24 -18
- reflex/components/core/debounce.py +2 -2
- reflex/components/core/debounce.pyi +18 -18
- reflex/components/core/html.pyi +17 -17
- reflex/components/core/upload.py +90 -28
- reflex/components/core/upload.pyi +128 -72
- reflex/components/datadisplay/code.py +55 -40
- reflex/components/datadisplay/code.pyi +46 -44
- reflex/components/datadisplay/dataeditor.py +21 -20
- reflex/components/datadisplay/dataeditor.pyi +103 -35
- reflex/components/datadisplay/shiki_code_block.py +60 -27
- reflex/components/datadisplay/shiki_code_block.pyi +86 -65
- reflex/components/dynamic.py +9 -5
- reflex/components/el/element.pyi +17 -17
- reflex/components/el/elements/base.pyi +17 -17
- reflex/components/el/elements/forms.py +12 -3
- reflex/components/el/elements/forms.pyi +293 -233
- reflex/components/el/elements/inline.pyi +449 -449
- reflex/components/el/elements/media.pyi +401 -401
- reflex/components/el/elements/metadata.pyi +97 -97
- reflex/components/el/elements/other.pyi +113 -113
- reflex/components/el/elements/scripts.pyi +49 -49
- reflex/components/el/elements/sectioning.pyi +241 -241
- reflex/components/el/elements/tables.pyi +161 -161
- reflex/components/el/elements/typography.pyi +241 -241
- reflex/components/gridjs/datatable.pyi +33 -33
- reflex/components/lucide/icon.py +1 -1
- reflex/components/lucide/icon.pyi +33 -33
- reflex/components/markdown/markdown.py +180 -49
- reflex/components/markdown/markdown.pyi +36 -19
- reflex/components/moment/moment.py +17 -21
- reflex/components/moment/moment.pyi +26 -21
- reflex/components/next/base.pyi +17 -17
- reflex/components/next/image.py +3 -3
- reflex/components/next/image.pyi +21 -19
- reflex/components/next/link.pyi +17 -17
- reflex/components/next/video.pyi +17 -17
- reflex/components/plotly/plotly.py +79 -78
- reflex/components/plotly/plotly.pyi +91 -41
- reflex/components/props.py +34 -0
- reflex/components/radix/primitives/accordion.py +15 -8
- reflex/components/radix/primitives/accordion.pyi +121 -118
- reflex/components/radix/primitives/base.pyi +33 -33
- reflex/components/radix/primitives/drawer.py +41 -20
- reflex/components/radix/primitives/drawer.pyi +279 -190
- reflex/components/radix/primitives/form.py +2 -2
- reflex/components/radix/primitives/form.pyi +200 -167
- reflex/components/radix/primitives/progress.pyi +81 -81
- reflex/components/radix/primitives/slider.pyi +89 -83
- reflex/components/radix/themes/base.py +30 -1
- reflex/components/radix/themes/base.pyi +286 -113
- reflex/components/radix/themes/color_mode.py +17 -9
- reflex/components/radix/themes/color_mode.pyi +68 -56
- reflex/components/radix/themes/components/alert_dialog.py +8 -5
- reflex/components/radix/themes/components/alert_dialog.pyi +125 -117
- reflex/components/radix/themes/components/aspect_ratio.pyi +17 -17
- reflex/components/radix/themes/components/avatar.py +1 -5
- reflex/components/radix/themes/components/avatar.pyi +17 -17
- reflex/components/radix/themes/components/badge.py +1 -5
- reflex/components/radix/themes/components/badge.pyi +17 -17
- reflex/components/radix/themes/components/button.pyi +18 -21
- reflex/components/radix/themes/components/callout.py +1 -4
- reflex/components/radix/themes/components/callout.pyi +81 -81
- reflex/components/radix/themes/components/card.py +1 -3
- reflex/components/radix/themes/components/card.pyi +17 -17
- reflex/components/radix/themes/components/checkbox.py +4 -8
- reflex/components/radix/themes/components/checkbox.pyi +61 -52
- reflex/components/radix/themes/components/checkbox_cards.pyi +33 -33
- reflex/components/radix/themes/components/checkbox_group.pyi +33 -33
- reflex/components/radix/themes/components/context_menu.py +121 -28
- reflex/components/radix/themes/components/context_menu.pyi +250 -147
- reflex/components/radix/themes/components/data_list.pyi +65 -65
- reflex/components/radix/themes/components/dialog.py +11 -11
- reflex/components/radix/themes/components/dialog.pyi +135 -120
- reflex/components/radix/themes/components/dropdown_menu.py +14 -25
- reflex/components/radix/themes/components/dropdown_menu.pyi +157 -145
- reflex/components/radix/themes/components/hover_card.py +19 -7
- reflex/components/radix/themes/components/hover_card.pyi +102 -67
- reflex/components/radix/themes/components/icon_button.pyi +18 -21
- reflex/components/radix/themes/components/inset.py +1 -3
- reflex/components/radix/themes/components/inset.pyi +17 -17
- reflex/components/radix/themes/components/popover.py +22 -13
- reflex/components/radix/themes/components/popover.pyi +98 -72
- reflex/components/radix/themes/components/progress.pyi +17 -17
- reflex/components/radix/themes/components/radio.pyi +17 -17
- reflex/components/radix/themes/components/radio_cards.py +2 -2
- reflex/components/radix/themes/components/radio_cards.pyi +37 -34
- reflex/components/radix/themes/components/radio_group.py +3 -7
- reflex/components/radix/themes/components/radio_group.pyi +69 -66
- reflex/components/radix/themes/components/scroll_area.py +1 -3
- reflex/components/radix/themes/components/scroll_area.pyi +17 -17
- reflex/components/radix/themes/components/segmented_control.pyi +37 -34
- reflex/components/radix/themes/components/select.py +7 -11
- reflex/components/radix/themes/components/select.pyi +175 -154
- reflex/components/radix/themes/components/separator.py +1 -4
- reflex/components/radix/themes/components/separator.pyi +17 -17
- reflex/components/radix/themes/components/skeleton.pyi +17 -17
- reflex/components/radix/themes/components/slider.py +12 -21
- reflex/components/radix/themes/components/slider.pyi +47 -25
- reflex/components/radix/themes/components/spinner.py +1 -4
- reflex/components/radix/themes/components/spinner.pyi +17 -17
- reflex/components/radix/themes/components/switch.py +3 -6
- reflex/components/radix/themes/components/switch.pyi +21 -18
- reflex/components/radix/themes/components/table.py +21 -5
- reflex/components/radix/themes/components/table.pyi +392 -116
- reflex/components/radix/themes/components/tabs.py +3 -6
- reflex/components/radix/themes/components/tabs.pyi +89 -83
- reflex/components/radix/themes/components/text_area.py +1 -5
- reflex/components/radix/themes/components/text_area.pyi +43 -20
- reflex/components/radix/themes/components/text_field.py +1 -5
- reflex/components/radix/themes/components/text_field.pyi +101 -55
- reflex/components/radix/themes/components/tooltip.py +5 -7
- reflex/components/radix/themes/components/tooltip.pyi +25 -22
- reflex/components/radix/themes/layout/base.py +2 -27
- reflex/components/radix/themes/layout/base.pyi +82 -82
- reflex/components/radix/themes/layout/box.pyi +17 -17
- reflex/components/radix/themes/layout/center.pyi +17 -17
- reflex/components/radix/themes/layout/container.pyi +17 -17
- reflex/components/radix/themes/layout/flex.py +1 -6
- reflex/components/radix/themes/layout/flex.pyi +17 -17
- reflex/components/radix/themes/layout/grid.py +1 -6
- reflex/components/radix/themes/layout/grid.pyi +17 -17
- reflex/components/radix/themes/layout/list.py +20 -15
- reflex/components/radix/themes/layout/list.pyi +175 -92
- reflex/components/radix/themes/layout/section.pyi +17 -17
- reflex/components/radix/themes/layout/spacer.pyi +17 -17
- reflex/components/radix/themes/layout/stack.py +6 -6
- reflex/components/radix/themes/layout/stack.pyi +91 -62
- reflex/components/radix/themes/typography/blockquote.py +2 -8
- reflex/components/radix/themes/typography/blockquote.pyi +17 -17
- reflex/components/radix/themes/typography/code.py +4 -10
- reflex/components/radix/themes/typography/code.pyi +19 -18
- reflex/components/radix/themes/typography/heading.py +4 -11
- reflex/components/radix/themes/typography/heading.pyi +19 -18
- reflex/components/radix/themes/typography/link.py +4 -10
- reflex/components/radix/themes/typography/link.pyi +19 -18
- reflex/components/radix/themes/typography/text.py +4 -11
- reflex/components/radix/themes/typography/text.pyi +115 -114
- reflex/components/react_player/audio.pyi +58 -33
- reflex/components/react_player/react_player.py +17 -17
- reflex/components/react_player/react_player.pyi +55 -33
- reflex/components/react_player/video.pyi +58 -33
- reflex/components/recharts/cartesian.py +45 -45
- reflex/components/recharts/cartesian.pyi +389 -304
- reflex/components/recharts/charts.py +22 -22
- reflex/components/recharts/charts.pyi +226 -179
- reflex/components/recharts/general.py +26 -27
- reflex/components/recharts/general.pyi +106 -99
- reflex/components/recharts/polar.py +33 -33
- reflex/components/recharts/polar.pyi +70 -64
- reflex/components/recharts/recharts.pyi +33 -33
- reflex/components/sonner/toast.py +9 -36
- reflex/components/sonner/toast.pyi +20 -24
- reflex/components/suneditor/editor.py +8 -8
- reflex/components/suneditor/editor.pyi +50 -25
- reflex/components/tags/iter_tag.py +1 -10
- reflex/components/tags/tag.py +1 -4
- reflex/config.py +252 -41
- reflex/constants/__init__.py +4 -16
- reflex/constants/base.py +7 -14
- reflex/constants/colors.py +0 -1
- reflex/constants/installer.py +12 -7
- reflex/constants/state.py +4 -0
- reflex/custom_components/custom_components.py +6 -6
- reflex/event.py +486 -241
- reflex/experimental/client_state.py +9 -9
- reflex/experimental/layout.py +2 -2
- reflex/experimental/layout.pyi +95 -87
- reflex/experimental/misc.py +1 -1
- reflex/istate/__init__.py +1 -0
- reflex/istate/proxy.py +33 -0
- reflex/istate/wrappers.py +27 -0
- reflex/model.py +7 -7
- reflex/page.py +2 -1
- reflex/reflex.py +142 -8
- reflex/state.py +133 -46
- reflex/testing.py +9 -7
- reflex/utils/console.py +0 -1
- reflex/utils/exceptions.py +31 -3
- reflex/utils/exec.py +33 -14
- reflex/utils/format.py +15 -12
- reflex/utils/net.py +1 -1
- reflex/utils/path_ops.py +2 -2
- reflex/utils/prerequisites.py +82 -46
- reflex/utils/pyi_generator.py +63 -20
- reflex/utils/registry.py +1 -1
- reflex/utils/serializers.py +75 -36
- reflex/utils/telemetry.py +3 -2
- reflex/utils/types.py +125 -10
- reflex/vars/base.py +131 -119
- reflex/vars/function.py +59 -12
- reflex/vars/number.py +3 -1
- reflex/vars/object.py +30 -24
- reflex/vars/sequence.py +7 -7
- {reflex-0.6.4a2.dist-info → reflex-0.6.5.dist-info}/METADATA +3 -3
- reflex-0.6.5.dist-info/RECORD +394 -0
- reflex-0.6.4a2.dist-info/RECORD +0 -391
- {reflex-0.6.4a2.dist-info → reflex-0.6.5.dist-info}/LICENSE +0 -0
- {reflex-0.6.4a2.dist-info → reflex-0.6.5.dist-info}/WHEEL +0 -0
- {reflex-0.6.4a2.dist-info → reflex-0.6.5.dist-info}/entry_points.txt +0 -0
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
from typing import Any, Dict, List, Optional, Union, overload
|
|
7
7
|
|
|
8
8
|
from reflex.components.component import Component
|
|
9
|
-
from reflex.event import EventType
|
|
9
|
+
from reflex.event import BASE_STATE, EventType
|
|
10
10
|
from reflex.style import Style
|
|
11
11
|
from reflex.utils.imports import ImportDict
|
|
12
12
|
from reflex.vars.base import Var
|
|
@@ -22,22 +22,22 @@ class Gridjs(Component):
|
|
|
22
22
|
id: Optional[Any] = None,
|
|
23
23
|
class_name: Optional[Any] = None,
|
|
24
24
|
autofocus: Optional[bool] = None,
|
|
25
|
-
custom_attrs: Optional[Dict[str, Union[Var,
|
|
26
|
-
on_blur: Optional[EventType[[]]] = None,
|
|
27
|
-
on_click: Optional[EventType[[]]] = None,
|
|
28
|
-
on_context_menu: Optional[EventType[[]]] = None,
|
|
29
|
-
on_double_click: Optional[EventType[[]]] = None,
|
|
30
|
-
on_focus: Optional[EventType[[]]] = None,
|
|
31
|
-
on_mount: Optional[EventType[[]]] = None,
|
|
32
|
-
on_mouse_down: Optional[EventType[[]]] = None,
|
|
33
|
-
on_mouse_enter: Optional[EventType[[]]] = None,
|
|
34
|
-
on_mouse_leave: Optional[EventType[[]]] = None,
|
|
35
|
-
on_mouse_move: Optional[EventType[[]]] = None,
|
|
36
|
-
on_mouse_out: Optional[EventType[[]]] = None,
|
|
37
|
-
on_mouse_over: Optional[EventType[[]]] = None,
|
|
38
|
-
on_mouse_up: Optional[EventType[[]]] = None,
|
|
39
|
-
on_scroll: Optional[EventType[[]]] = None,
|
|
40
|
-
on_unmount: Optional[EventType[[]]] = None,
|
|
25
|
+
custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None,
|
|
26
|
+
on_blur: Optional[EventType[[], BASE_STATE]] = None,
|
|
27
|
+
on_click: Optional[EventType[[], BASE_STATE]] = None,
|
|
28
|
+
on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
|
|
29
|
+
on_double_click: Optional[EventType[[], BASE_STATE]] = None,
|
|
30
|
+
on_focus: Optional[EventType[[], BASE_STATE]] = None,
|
|
31
|
+
on_mount: Optional[EventType[[], BASE_STATE]] = None,
|
|
32
|
+
on_mouse_down: Optional[EventType[[], BASE_STATE]] = None,
|
|
33
|
+
on_mouse_enter: Optional[EventType[[], BASE_STATE]] = None,
|
|
34
|
+
on_mouse_leave: Optional[EventType[[], BASE_STATE]] = None,
|
|
35
|
+
on_mouse_move: Optional[EventType[[], BASE_STATE]] = None,
|
|
36
|
+
on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
|
|
37
|
+
on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
|
|
38
|
+
on_mouse_up: Optional[EventType[[], BASE_STATE]] = None,
|
|
39
|
+
on_scroll: Optional[EventType[[], BASE_STATE]] = None,
|
|
40
|
+
on_unmount: Optional[EventType[[], BASE_STATE]] = None,
|
|
41
41
|
**props,
|
|
42
42
|
) -> "Gridjs":
|
|
43
43
|
"""Create the component.
|
|
@@ -74,22 +74,22 @@ class DataTable(Gridjs):
|
|
|
74
74
|
id: Optional[Any] = None,
|
|
75
75
|
class_name: Optional[Any] = None,
|
|
76
76
|
autofocus: Optional[bool] = None,
|
|
77
|
-
custom_attrs: Optional[Dict[str, Union[Var,
|
|
78
|
-
on_blur: Optional[EventType[[]]] = None,
|
|
79
|
-
on_click: Optional[EventType[[]]] = None,
|
|
80
|
-
on_context_menu: Optional[EventType[[]]] = None,
|
|
81
|
-
on_double_click: Optional[EventType[[]]] = None,
|
|
82
|
-
on_focus: Optional[EventType[[]]] = None,
|
|
83
|
-
on_mount: Optional[EventType[[]]] = None,
|
|
84
|
-
on_mouse_down: Optional[EventType[[]]] = None,
|
|
85
|
-
on_mouse_enter: Optional[EventType[[]]] = None,
|
|
86
|
-
on_mouse_leave: Optional[EventType[[]]] = None,
|
|
87
|
-
on_mouse_move: Optional[EventType[[]]] = None,
|
|
88
|
-
on_mouse_out: Optional[EventType[[]]] = None,
|
|
89
|
-
on_mouse_over: Optional[EventType[[]]] = None,
|
|
90
|
-
on_mouse_up: Optional[EventType[[]]] = None,
|
|
91
|
-
on_scroll: Optional[EventType[[]]] = None,
|
|
92
|
-
on_unmount: Optional[EventType[[]]] = None,
|
|
77
|
+
custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None,
|
|
78
|
+
on_blur: Optional[EventType[[], BASE_STATE]] = None,
|
|
79
|
+
on_click: Optional[EventType[[], BASE_STATE]] = None,
|
|
80
|
+
on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
|
|
81
|
+
on_double_click: Optional[EventType[[], BASE_STATE]] = None,
|
|
82
|
+
on_focus: Optional[EventType[[], BASE_STATE]] = None,
|
|
83
|
+
on_mount: Optional[EventType[[], BASE_STATE]] = None,
|
|
84
|
+
on_mouse_down: Optional[EventType[[], BASE_STATE]] = None,
|
|
85
|
+
on_mouse_enter: Optional[EventType[[], BASE_STATE]] = None,
|
|
86
|
+
on_mouse_leave: Optional[EventType[[], BASE_STATE]] = None,
|
|
87
|
+
on_mouse_move: Optional[EventType[[], BASE_STATE]] = None,
|
|
88
|
+
on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
|
|
89
|
+
on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
|
|
90
|
+
on_mouse_up: Optional[EventType[[], BASE_STATE]] = None,
|
|
91
|
+
on_scroll: Optional[EventType[[], BASE_STATE]] = None,
|
|
92
|
+
on_unmount: Optional[EventType[[], BASE_STATE]] = None,
|
|
93
93
|
**props,
|
|
94
94
|
) -> "DataTable":
|
|
95
95
|
"""Create a datatable component.
|
reflex/components/lucide/icon.py
CHANGED
|
@@ -58,7 +58,7 @@ class Icon(LucideIconComponent):
|
|
|
58
58
|
|
|
59
59
|
props["tag"] = format.to_title_case(format.to_snake_case(props["tag"])) + "Icon"
|
|
60
60
|
props["alias"] = f"Lucide{props['tag']}"
|
|
61
|
-
props.setdefault("color",
|
|
61
|
+
props.setdefault("color", "var(--current-color)")
|
|
62
62
|
return super().create(*children, **props)
|
|
63
63
|
|
|
64
64
|
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
from typing import Any, Dict, Optional, Union, overload
|
|
7
7
|
|
|
8
8
|
from reflex.components.component import Component
|
|
9
|
-
from reflex.event import EventType
|
|
9
|
+
from reflex.event import BASE_STATE, EventType
|
|
10
10
|
from reflex.style import Style
|
|
11
11
|
from reflex.vars.base import Var
|
|
12
12
|
|
|
@@ -21,22 +21,22 @@ class LucideIconComponent(Component):
|
|
|
21
21
|
id: Optional[Any] = None,
|
|
22
22
|
class_name: Optional[Any] = None,
|
|
23
23
|
autofocus: Optional[bool] = None,
|
|
24
|
-
custom_attrs: Optional[Dict[str, Union[Var,
|
|
25
|
-
on_blur: Optional[EventType[[]]] = None,
|
|
26
|
-
on_click: Optional[EventType[[]]] = None,
|
|
27
|
-
on_context_menu: Optional[EventType[[]]] = None,
|
|
28
|
-
on_double_click: Optional[EventType[[]]] = None,
|
|
29
|
-
on_focus: Optional[EventType[[]]] = None,
|
|
30
|
-
on_mount: Optional[EventType[[]]] = None,
|
|
31
|
-
on_mouse_down: Optional[EventType[[]]] = None,
|
|
32
|
-
on_mouse_enter: Optional[EventType[[]]] = None,
|
|
33
|
-
on_mouse_leave: Optional[EventType[[]]] = None,
|
|
34
|
-
on_mouse_move: Optional[EventType[[]]] = None,
|
|
35
|
-
on_mouse_out: Optional[EventType[[]]] = None,
|
|
36
|
-
on_mouse_over: Optional[EventType[[]]] = None,
|
|
37
|
-
on_mouse_up: Optional[EventType[[]]] = None,
|
|
38
|
-
on_scroll: Optional[EventType[[]]] = None,
|
|
39
|
-
on_unmount: Optional[EventType[[]]] = None,
|
|
24
|
+
custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None,
|
|
25
|
+
on_blur: Optional[EventType[[], BASE_STATE]] = None,
|
|
26
|
+
on_click: Optional[EventType[[], BASE_STATE]] = None,
|
|
27
|
+
on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
|
|
28
|
+
on_double_click: Optional[EventType[[], BASE_STATE]] = None,
|
|
29
|
+
on_focus: Optional[EventType[[], BASE_STATE]] = None,
|
|
30
|
+
on_mount: Optional[EventType[[], BASE_STATE]] = None,
|
|
31
|
+
on_mouse_down: Optional[EventType[[], BASE_STATE]] = None,
|
|
32
|
+
on_mouse_enter: Optional[EventType[[], BASE_STATE]] = None,
|
|
33
|
+
on_mouse_leave: Optional[EventType[[], BASE_STATE]] = None,
|
|
34
|
+
on_mouse_move: Optional[EventType[[], BASE_STATE]] = None,
|
|
35
|
+
on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
|
|
36
|
+
on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
|
|
37
|
+
on_mouse_up: Optional[EventType[[], BASE_STATE]] = None,
|
|
38
|
+
on_scroll: Optional[EventType[[], BASE_STATE]] = None,
|
|
39
|
+
on_unmount: Optional[EventType[[], BASE_STATE]] = None,
|
|
40
40
|
**props,
|
|
41
41
|
) -> "LucideIconComponent":
|
|
42
42
|
"""Create the component.
|
|
@@ -68,22 +68,22 @@ class Icon(LucideIconComponent):
|
|
|
68
68
|
id: Optional[Any] = None,
|
|
69
69
|
class_name: Optional[Any] = None,
|
|
70
70
|
autofocus: Optional[bool] = None,
|
|
71
|
-
custom_attrs: Optional[Dict[str, Union[Var,
|
|
72
|
-
on_blur: Optional[EventType[[]]] = None,
|
|
73
|
-
on_click: Optional[EventType[[]]] = None,
|
|
74
|
-
on_context_menu: Optional[EventType[[]]] = None,
|
|
75
|
-
on_double_click: Optional[EventType[[]]] = None,
|
|
76
|
-
on_focus: Optional[EventType[[]]] = None,
|
|
77
|
-
on_mount: Optional[EventType[[]]] = None,
|
|
78
|
-
on_mouse_down: Optional[EventType[[]]] = None,
|
|
79
|
-
on_mouse_enter: Optional[EventType[[]]] = None,
|
|
80
|
-
on_mouse_leave: Optional[EventType[[]]] = None,
|
|
81
|
-
on_mouse_move: Optional[EventType[[]]] = None,
|
|
82
|
-
on_mouse_out: Optional[EventType[[]]] = None,
|
|
83
|
-
on_mouse_over: Optional[EventType[[]]] = None,
|
|
84
|
-
on_mouse_up: Optional[EventType[[]]] = None,
|
|
85
|
-
on_scroll: Optional[EventType[[]]] = None,
|
|
86
|
-
on_unmount: Optional[EventType[[]]] = None,
|
|
71
|
+
custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None,
|
|
72
|
+
on_blur: Optional[EventType[[], BASE_STATE]] = None,
|
|
73
|
+
on_click: Optional[EventType[[], BASE_STATE]] = None,
|
|
74
|
+
on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
|
|
75
|
+
on_double_click: Optional[EventType[[], BASE_STATE]] = None,
|
|
76
|
+
on_focus: Optional[EventType[[], BASE_STATE]] = None,
|
|
77
|
+
on_mount: Optional[EventType[[], BASE_STATE]] = None,
|
|
78
|
+
on_mouse_down: Optional[EventType[[], BASE_STATE]] = None,
|
|
79
|
+
on_mouse_enter: Optional[EventType[[], BASE_STATE]] = None,
|
|
80
|
+
on_mouse_leave: Optional[EventType[[], BASE_STATE]] = None,
|
|
81
|
+
on_mouse_move: Optional[EventType[[], BASE_STATE]] = None,
|
|
82
|
+
on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
|
|
83
|
+
on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
|
|
84
|
+
on_mouse_up: Optional[EventType[[], BASE_STATE]] = None,
|
|
85
|
+
on_scroll: Optional[EventType[[], BASE_STATE]] = None,
|
|
86
|
+
on_unmount: Optional[EventType[[], BASE_STATE]] = None,
|
|
87
87
|
**props,
|
|
88
88
|
) -> "Icon":
|
|
89
89
|
"""Initialize the Icon component.
|
|
@@ -2,25 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
+
import dataclasses
|
|
5
6
|
import textwrap
|
|
6
7
|
from functools import lru_cache
|
|
7
8
|
from hashlib import md5
|
|
8
|
-
from typing import Any, Callable, Dict, Union
|
|
9
|
+
from typing import Any, Callable, Dict, Sequence, Union
|
|
9
10
|
|
|
10
11
|
from reflex.components.component import Component, CustomComponent
|
|
11
|
-
from reflex.components.radix.themes.layout.list import (
|
|
12
|
-
ListItem,
|
|
13
|
-
OrderedList,
|
|
14
|
-
UnorderedList,
|
|
15
|
-
)
|
|
16
|
-
from reflex.components.radix.themes.typography.heading import Heading
|
|
17
|
-
from reflex.components.radix.themes.typography.link import Link
|
|
18
|
-
from reflex.components.radix.themes.typography.text import Text
|
|
19
12
|
from reflex.components.tags.tag import Tag
|
|
20
13
|
from reflex.utils import types
|
|
21
14
|
from reflex.utils.imports import ImportDict, ImportVar
|
|
22
15
|
from reflex.vars.base import LiteralVar, Var
|
|
23
|
-
from reflex.vars.function import ARRAY_ISARRAY
|
|
16
|
+
from reflex.vars.function import ARRAY_ISARRAY, ArgsFunctionOperation, DestructuredArg
|
|
24
17
|
from reflex.vars.number import ternary_operation
|
|
25
18
|
|
|
26
19
|
# Special vars used in the component map.
|
|
@@ -28,6 +21,7 @@ _CHILDREN = Var(_js_expr="children", _var_type=str)
|
|
|
28
21
|
_PROPS = Var(_js_expr="...props")
|
|
29
22
|
_PROPS_IN_TAG = Var(_js_expr="{...props}")
|
|
30
23
|
_MOCK_ARG = Var(_js_expr="", _var_type=str)
|
|
24
|
+
_LANGUAGE = Var(_js_expr="_language", _var_type=str)
|
|
31
25
|
|
|
32
26
|
# Special remark plugins.
|
|
33
27
|
_REMARK_MATH = Var(_js_expr="remarkMath")
|
|
@@ -53,7 +47,15 @@ def get_base_component_map() -> dict[str, Callable]:
|
|
|
53
47
|
The base component map.
|
|
54
48
|
"""
|
|
55
49
|
from reflex.components.datadisplay.code import CodeBlock
|
|
50
|
+
from reflex.components.radix.themes.layout.list import (
|
|
51
|
+
ListItem,
|
|
52
|
+
OrderedList,
|
|
53
|
+
UnorderedList,
|
|
54
|
+
)
|
|
56
55
|
from reflex.components.radix.themes.typography.code import Code
|
|
56
|
+
from reflex.components.radix.themes.typography.heading import Heading
|
|
57
|
+
from reflex.components.radix.themes.typography.link import Link
|
|
58
|
+
from reflex.components.radix.themes.typography.text import Text
|
|
57
59
|
|
|
58
60
|
return {
|
|
59
61
|
"h1": lambda value: Heading.create(value, as_="h1", size="6", margin_y="0.5em"),
|
|
@@ -74,6 +76,67 @@ def get_base_component_map() -> dict[str, Callable]:
|
|
|
74
76
|
}
|
|
75
77
|
|
|
76
78
|
|
|
79
|
+
@dataclasses.dataclass()
|
|
80
|
+
class MarkdownComponentMap:
|
|
81
|
+
"""Mixin class for handling custom component maps in Markdown components."""
|
|
82
|
+
|
|
83
|
+
_explicit_return: bool = dataclasses.field(default=False)
|
|
84
|
+
|
|
85
|
+
@classmethod
|
|
86
|
+
def get_component_map_custom_code(cls) -> str:
|
|
87
|
+
"""Get the custom code for the component map.
|
|
88
|
+
|
|
89
|
+
Returns:
|
|
90
|
+
The custom code for the component map.
|
|
91
|
+
"""
|
|
92
|
+
return ""
|
|
93
|
+
|
|
94
|
+
@classmethod
|
|
95
|
+
def create_map_fn_var(
|
|
96
|
+
cls,
|
|
97
|
+
fn_body: Var | None = None,
|
|
98
|
+
fn_args: Sequence[str] | None = None,
|
|
99
|
+
explicit_return: bool | None = None,
|
|
100
|
+
) -> Var:
|
|
101
|
+
"""Create a function Var for the component map.
|
|
102
|
+
|
|
103
|
+
Args:
|
|
104
|
+
fn_body: The formatted component as a string.
|
|
105
|
+
fn_args: The function arguments.
|
|
106
|
+
explicit_return: Whether to use explicit return syntax.
|
|
107
|
+
|
|
108
|
+
Returns:
|
|
109
|
+
The function Var for the component map.
|
|
110
|
+
"""
|
|
111
|
+
fn_args = fn_args or cls.get_fn_args()
|
|
112
|
+
fn_body = fn_body if fn_body is not None else cls.get_fn_body()
|
|
113
|
+
explicit_return = explicit_return or cls._explicit_return
|
|
114
|
+
|
|
115
|
+
return ArgsFunctionOperation.create(
|
|
116
|
+
args_names=(DestructuredArg(fields=tuple(fn_args)),),
|
|
117
|
+
return_expr=fn_body,
|
|
118
|
+
explicit_return=explicit_return,
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
@classmethod
|
|
122
|
+
def get_fn_args(cls) -> Sequence[str]:
|
|
123
|
+
"""Get the function arguments for the component map.
|
|
124
|
+
|
|
125
|
+
Returns:
|
|
126
|
+
The function arguments as a list of strings.
|
|
127
|
+
"""
|
|
128
|
+
return ["node", _CHILDREN._js_expr, _PROPS._js_expr]
|
|
129
|
+
|
|
130
|
+
@classmethod
|
|
131
|
+
def get_fn_body(cls) -> Var:
|
|
132
|
+
"""Get the function body for the component map.
|
|
133
|
+
|
|
134
|
+
Returns:
|
|
135
|
+
The function body as a string.
|
|
136
|
+
"""
|
|
137
|
+
return Var(_js_expr="undefined", _var_type=None)
|
|
138
|
+
|
|
139
|
+
|
|
77
140
|
class Markdown(Component):
|
|
78
141
|
"""A markdown component."""
|
|
79
142
|
|
|
@@ -153,9 +216,6 @@ class Markdown(Component):
|
|
|
153
216
|
Returns:
|
|
154
217
|
The imports for the markdown component.
|
|
155
218
|
"""
|
|
156
|
-
from reflex.components.datadisplay.code import CodeBlock, Theme
|
|
157
|
-
from reflex.components.radix.themes.typography.code import Code
|
|
158
|
-
|
|
159
219
|
return [
|
|
160
220
|
{
|
|
161
221
|
"": "katex/dist/katex.min.css",
|
|
@@ -179,10 +239,71 @@ class Markdown(Component):
|
|
|
179
239
|
component(_MOCK_ARG)._get_all_imports() # type: ignore
|
|
180
240
|
for component in self.component_map.values()
|
|
181
241
|
],
|
|
182
|
-
CodeBlock.create(theme=Theme.light)._get_imports(),
|
|
183
|
-
Code.create()._get_imports(),
|
|
184
242
|
]
|
|
185
243
|
|
|
244
|
+
def _get_tag_map_fn_var(self, tag: str) -> Var:
|
|
245
|
+
return self._get_map_fn_var_from_children(self.get_component(tag), tag)
|
|
246
|
+
|
|
247
|
+
def format_component_map(self) -> dict[str, Var]:
|
|
248
|
+
"""Format the component map for rendering.
|
|
249
|
+
|
|
250
|
+
Returns:
|
|
251
|
+
The formatted component map.
|
|
252
|
+
"""
|
|
253
|
+
components = {
|
|
254
|
+
tag: self._get_tag_map_fn_var(tag)
|
|
255
|
+
for tag in self.component_map
|
|
256
|
+
if tag not in ("code", "codeblock")
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
# Separate out inline code and code blocks.
|
|
260
|
+
components["code"] = self._get_inline_code_fn_var()
|
|
261
|
+
|
|
262
|
+
return components
|
|
263
|
+
|
|
264
|
+
def _get_inline_code_fn_var(self) -> Var:
|
|
265
|
+
"""Get the function variable for inline code.
|
|
266
|
+
|
|
267
|
+
This function creates a Var that represents a function to handle
|
|
268
|
+
both inline code and code blocks in markdown.
|
|
269
|
+
|
|
270
|
+
Returns:
|
|
271
|
+
The Var for inline code.
|
|
272
|
+
"""
|
|
273
|
+
# Get any custom code from the codeblock and code components.
|
|
274
|
+
custom_code_list = self._get_map_fn_custom_code_from_children(
|
|
275
|
+
self.get_component("codeblock")
|
|
276
|
+
)
|
|
277
|
+
custom_code_list.extend(
|
|
278
|
+
self._get_map_fn_custom_code_from_children(self.get_component("code"))
|
|
279
|
+
)
|
|
280
|
+
|
|
281
|
+
codeblock_custom_code = "\n".join(custom_code_list)
|
|
282
|
+
|
|
283
|
+
# Format the code to handle inline and block code.
|
|
284
|
+
formatted_code = f"""
|
|
285
|
+
const match = (className || '').match(/language-(?<lang>.*)/);
|
|
286
|
+
const {str(_LANGUAGE)} = match ? match[1] : '';
|
|
287
|
+
{codeblock_custom_code};
|
|
288
|
+
return inline ? (
|
|
289
|
+
{self.format_component("code")}
|
|
290
|
+
) : (
|
|
291
|
+
{self.format_component("codeblock", language=_LANGUAGE)}
|
|
292
|
+
);
|
|
293
|
+
""".replace("\n", " ")
|
|
294
|
+
|
|
295
|
+
return MarkdownComponentMap.create_map_fn_var(
|
|
296
|
+
fn_args=(
|
|
297
|
+
"node",
|
|
298
|
+
"inline",
|
|
299
|
+
"className",
|
|
300
|
+
_CHILDREN._js_expr,
|
|
301
|
+
_PROPS._js_expr,
|
|
302
|
+
),
|
|
303
|
+
fn_body=Var(_js_expr=formatted_code),
|
|
304
|
+
explicit_return=True,
|
|
305
|
+
)
|
|
306
|
+
|
|
186
307
|
def get_component(self, tag: str, **props) -> Component:
|
|
187
308
|
"""Get the component for a tag and props.
|
|
188
309
|
|
|
@@ -239,43 +360,53 @@ class Markdown(Component):
|
|
|
239
360
|
"""
|
|
240
361
|
return str(self.get_component(tag, **props)).replace("\n", "")
|
|
241
362
|
|
|
242
|
-
def
|
|
243
|
-
"""
|
|
363
|
+
def _get_map_fn_var_from_children(self, component: Component, tag: str) -> Var:
|
|
364
|
+
"""Create a function Var for the component map for the specified tag.
|
|
365
|
+
|
|
366
|
+
Args:
|
|
367
|
+
component: The component to check for custom code.
|
|
368
|
+
tag: The tag of the component.
|
|
244
369
|
|
|
245
370
|
Returns:
|
|
246
|
-
The
|
|
371
|
+
The function Var for the component map.
|
|
247
372
|
"""
|
|
248
|
-
|
|
249
|
-
tag
|
|
250
|
-
_js_expr=f"(({{node, {_CHILDREN._js_expr}, {_PROPS._js_expr}}}) => ({self.format_component(tag)}))"
|
|
251
|
-
)
|
|
252
|
-
for tag in self.component_map
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
# Separate out inline code and code blocks.
|
|
256
|
-
components["code"] = Var(
|
|
257
|
-
_js_expr=f"""(({{node, inline, className, {_CHILDREN._js_expr}, {_PROPS._js_expr}}}) => {{
|
|
258
|
-
const match = (className || '').match(/language-(?<lang>.*)/);
|
|
259
|
-
const language = match ? match[1] : '';
|
|
260
|
-
if (language) {{
|
|
261
|
-
(async () => {{
|
|
262
|
-
try {{
|
|
263
|
-
const module = await import(`react-syntax-highlighter/dist/cjs/languages/prism/${{language}}`);
|
|
264
|
-
SyntaxHighlighter.registerLanguage(language, module.default);
|
|
265
|
-
}} catch (error) {{
|
|
266
|
-
console.error(`Error importing language module for ${{language}}:`, error);
|
|
267
|
-
}}
|
|
268
|
-
}})();
|
|
269
|
-
}}
|
|
270
|
-
return inline ? (
|
|
271
|
-
{self.format_component("code")}
|
|
272
|
-
) : (
|
|
273
|
-
{self.format_component("codeblock", language=Var(_js_expr="language", _var_type=str))}
|
|
274
|
-
);
|
|
275
|
-
}})""".replace("\n", " ")
|
|
373
|
+
formatted_component = Var(
|
|
374
|
+
_js_expr=f"({self.format_component(tag)})", _var_type=str
|
|
276
375
|
)
|
|
376
|
+
if isinstance(component, MarkdownComponentMap):
|
|
377
|
+
return component.create_map_fn_var(fn_body=formatted_component)
|
|
277
378
|
|
|
278
|
-
|
|
379
|
+
# fallback to the default fn Var creation if the component is not a MarkdownComponentMap.
|
|
380
|
+
return MarkdownComponentMap.create_map_fn_var(fn_body=formatted_component)
|
|
381
|
+
|
|
382
|
+
def _get_map_fn_custom_code_from_children(self, component) -> list[str]:
|
|
383
|
+
"""Recursively get markdown custom code from children components.
|
|
384
|
+
|
|
385
|
+
Args:
|
|
386
|
+
component: The component to check for custom code.
|
|
387
|
+
|
|
388
|
+
Returns:
|
|
389
|
+
A list of markdown custom code strings.
|
|
390
|
+
"""
|
|
391
|
+
custom_code_list = []
|
|
392
|
+
if isinstance(component, MarkdownComponentMap):
|
|
393
|
+
custom_code_list.append(component.get_component_map_custom_code())
|
|
394
|
+
|
|
395
|
+
# If the component is a custom component(rx.memo), obtain the underlining
|
|
396
|
+
# component and get the custom code from the children.
|
|
397
|
+
if isinstance(component, CustomComponent):
|
|
398
|
+
custom_code_list.extend(
|
|
399
|
+
self._get_map_fn_custom_code_from_children(
|
|
400
|
+
component.component_fn(*component.get_prop_vars())
|
|
401
|
+
)
|
|
402
|
+
)
|
|
403
|
+
elif isinstance(component, Component):
|
|
404
|
+
for child in component.children:
|
|
405
|
+
custom_code_list.extend(
|
|
406
|
+
self._get_map_fn_custom_code_from_children(child)
|
|
407
|
+
)
|
|
408
|
+
|
|
409
|
+
return custom_code_list
|
|
279
410
|
|
|
280
411
|
@staticmethod
|
|
281
412
|
def _component_map_hash(component_map) -> str:
|
|
@@ -288,12 +419,12 @@ class Markdown(Component):
|
|
|
288
419
|
return f"ComponentMap_{self.component_map_hash}"
|
|
289
420
|
|
|
290
421
|
def _get_custom_code(self) -> str | None:
|
|
291
|
-
hooks =
|
|
422
|
+
hooks = {}
|
|
292
423
|
for _component in self.component_map.values():
|
|
293
424
|
comp = _component(_MOCK_ARG)
|
|
294
425
|
hooks.update(comp._get_all_hooks_internal())
|
|
295
426
|
hooks.update(comp._get_all_hooks())
|
|
296
|
-
formatted_hooks = "\n".join(hooks)
|
|
427
|
+
formatted_hooks = "\n".join(hooks.keys())
|
|
297
428
|
return f"""
|
|
298
429
|
function {self._get_component_map_name()} () {{
|
|
299
430
|
{formatted_hooks}
|
|
@@ -3,11 +3,12 @@
|
|
|
3
3
|
# ------------------- DO NOT EDIT ----------------------
|
|
4
4
|
# This file was generated by `reflex/utils/pyi_generator.py`!
|
|
5
5
|
# ------------------------------------------------------
|
|
6
|
+
import dataclasses
|
|
6
7
|
from functools import lru_cache
|
|
7
|
-
from typing import Any, Callable, Dict, Optional, Union, overload
|
|
8
|
+
from typing import Any, Callable, Dict, Optional, Sequence, Union, overload
|
|
8
9
|
|
|
9
10
|
from reflex.components.component import Component
|
|
10
|
-
from reflex.event import EventType
|
|
11
|
+
from reflex.event import BASE_STATE, EventType
|
|
11
12
|
from reflex.style import Style
|
|
12
13
|
from reflex.utils.imports import ImportDict
|
|
13
14
|
from reflex.vars.base import LiteralVar, Var
|
|
@@ -16,6 +17,7 @@ _CHILDREN = Var(_js_expr="children", _var_type=str)
|
|
|
16
17
|
_PROPS = Var(_js_expr="...props")
|
|
17
18
|
_PROPS_IN_TAG = Var(_js_expr="{...props}")
|
|
18
19
|
_MOCK_ARG = Var(_js_expr="", _var_type=str)
|
|
20
|
+
_LANGUAGE = Var(_js_expr="_language", _var_type=str)
|
|
19
21
|
_REMARK_MATH = Var(_js_expr="remarkMath")
|
|
20
22
|
_REMARK_GFM = Var(_js_expr="remarkGfm")
|
|
21
23
|
_REMARK_UNWRAP_IMAGES = Var(_js_expr="remarkUnwrapImages")
|
|
@@ -27,6 +29,21 @@ NO_PROPS_TAGS = ("ul", "ol", "li")
|
|
|
27
29
|
|
|
28
30
|
@lru_cache
|
|
29
31
|
def get_base_component_map() -> dict[str, Callable]: ...
|
|
32
|
+
@dataclasses.dataclass()
|
|
33
|
+
class MarkdownComponentMap:
|
|
34
|
+
@classmethod
|
|
35
|
+
def get_component_map_custom_code(cls) -> str: ...
|
|
36
|
+
@classmethod
|
|
37
|
+
def create_map_fn_var(
|
|
38
|
+
cls,
|
|
39
|
+
fn_body: Var | None = None,
|
|
40
|
+
fn_args: Sequence[str] | None = None,
|
|
41
|
+
explicit_return: bool | None = None,
|
|
42
|
+
) -> Var: ...
|
|
43
|
+
@classmethod
|
|
44
|
+
def get_fn_args(cls) -> Sequence[str]: ...
|
|
45
|
+
@classmethod
|
|
46
|
+
def get_fn_body(cls) -> Var: ...
|
|
30
47
|
|
|
31
48
|
class Markdown(Component):
|
|
32
49
|
@overload
|
|
@@ -41,22 +58,22 @@ class Markdown(Component):
|
|
|
41
58
|
id: Optional[Any] = None,
|
|
42
59
|
class_name: Optional[Any] = None,
|
|
43
60
|
autofocus: Optional[bool] = None,
|
|
44
|
-
custom_attrs: Optional[Dict[str, Union[Var,
|
|
45
|
-
on_blur: Optional[EventType[[]]] = None,
|
|
46
|
-
on_click: Optional[EventType[[]]] = None,
|
|
47
|
-
on_context_menu: Optional[EventType[[]]] = None,
|
|
48
|
-
on_double_click: Optional[EventType[[]]] = None,
|
|
49
|
-
on_focus: Optional[EventType[[]]] = None,
|
|
50
|
-
on_mount: Optional[EventType[[]]] = None,
|
|
51
|
-
on_mouse_down: Optional[EventType[[]]] = None,
|
|
52
|
-
on_mouse_enter: Optional[EventType[[]]] = None,
|
|
53
|
-
on_mouse_leave: Optional[EventType[[]]] = None,
|
|
54
|
-
on_mouse_move: Optional[EventType[[]]] = None,
|
|
55
|
-
on_mouse_out: Optional[EventType[[]]] = None,
|
|
56
|
-
on_mouse_over: Optional[EventType[[]]] = None,
|
|
57
|
-
on_mouse_up: Optional[EventType[[]]] = None,
|
|
58
|
-
on_scroll: Optional[EventType[[]]] = None,
|
|
59
|
-
on_unmount: Optional[EventType[[]]] = None,
|
|
61
|
+
custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None,
|
|
62
|
+
on_blur: Optional[EventType[[], BASE_STATE]] = None,
|
|
63
|
+
on_click: Optional[EventType[[], BASE_STATE]] = None,
|
|
64
|
+
on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
|
|
65
|
+
on_double_click: Optional[EventType[[], BASE_STATE]] = None,
|
|
66
|
+
on_focus: Optional[EventType[[], BASE_STATE]] = None,
|
|
67
|
+
on_mount: Optional[EventType[[], BASE_STATE]] = None,
|
|
68
|
+
on_mouse_down: Optional[EventType[[], BASE_STATE]] = None,
|
|
69
|
+
on_mouse_enter: Optional[EventType[[], BASE_STATE]] = None,
|
|
70
|
+
on_mouse_leave: Optional[EventType[[], BASE_STATE]] = None,
|
|
71
|
+
on_mouse_move: Optional[EventType[[], BASE_STATE]] = None,
|
|
72
|
+
on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
|
|
73
|
+
on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
|
|
74
|
+
on_mouse_up: Optional[EventType[[], BASE_STATE]] = None,
|
|
75
|
+
on_scroll: Optional[EventType[[], BASE_STATE]] = None,
|
|
76
|
+
on_unmount: Optional[EventType[[], BASE_STATE]] = None,
|
|
60
77
|
**props,
|
|
61
78
|
) -> "Markdown":
|
|
62
79
|
"""Create a markdown component.
|
|
@@ -82,6 +99,6 @@ class Markdown(Component):
|
|
|
82
99
|
...
|
|
83
100
|
|
|
84
101
|
def add_imports(self) -> ImportDict | list[ImportDict]: ...
|
|
102
|
+
def format_component_map(self) -> dict[str, Var]: ...
|
|
85
103
|
def get_component(self, tag: str, **props) -> Component: ...
|
|
86
104
|
def format_component(self, tag: str, **props) -> str: ...
|
|
87
|
-
def format_component_map(self) -> dict[str, Var]: ...
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
import dataclasses
|
|
4
4
|
from typing import List, Optional
|
|
5
5
|
|
|
6
|
-
from reflex.components.component import
|
|
7
|
-
from reflex.event import EventHandler,
|
|
6
|
+
from reflex.components.component import NoSSRComponent
|
|
7
|
+
from reflex.event import EventHandler, passthrough_event_spec
|
|
8
8
|
from reflex.utils.imports import ImportDict
|
|
9
|
-
from reflex.vars.base import Var
|
|
9
|
+
from reflex.vars.base import LiteralVar, Var
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
@dataclasses.dataclass(frozen=True)
|
|
@@ -92,8 +92,11 @@ class Moment(NoSSRComponent):
|
|
|
92
92
|
# Display the date in the given timezone.
|
|
93
93
|
tz: Var[str]
|
|
94
94
|
|
|
95
|
+
# The locale to use when rendering.
|
|
96
|
+
locale: Var[str]
|
|
97
|
+
|
|
95
98
|
# Fires when the date changes.
|
|
96
|
-
on_change: EventHandler[
|
|
99
|
+
on_change: EventHandler[passthrough_event_spec(str)]
|
|
97
100
|
|
|
98
101
|
def add_imports(self) -> ImportDict:
|
|
99
102
|
"""Add the imports for the Moment component.
|
|
@@ -101,22 +104,15 @@ class Moment(NoSSRComponent):
|
|
|
101
104
|
Returns:
|
|
102
105
|
The import dict for the component.
|
|
103
106
|
"""
|
|
107
|
+
imports = {}
|
|
108
|
+
|
|
109
|
+
if isinstance(self.locale, LiteralVar):
|
|
110
|
+
imports[""] = f"moment/locale/{self.locale._var_value}"
|
|
111
|
+
elif self.locale is not None:
|
|
112
|
+
# If the user is using a variable for the locale, we can't know the
|
|
113
|
+
# value at compile time so import all locales available.
|
|
114
|
+
imports[""] = "moment/min/locales"
|
|
104
115
|
if self.tz is not None:
|
|
105
|
-
|
|
106
|
-
return {}
|
|
107
|
-
|
|
108
|
-
@classmethod
|
|
109
|
-
def create(cls, *children, **props) -> Component:
|
|
110
|
-
"""Create a Moment component.
|
|
111
|
-
|
|
112
|
-
Args:
|
|
113
|
-
*children: The children of the component.
|
|
114
|
-
**props: The properties of the component.
|
|
116
|
+
imports["moment-timezone"] = ""
|
|
115
117
|
|
|
116
|
-
|
|
117
|
-
The Moment Component.
|
|
118
|
-
"""
|
|
119
|
-
comp = super().create(*children, **props)
|
|
120
|
-
if "tz" in props:
|
|
121
|
-
comp.lib_dependencies.append("moment-timezone")
|
|
122
|
-
return comp
|
|
118
|
+
return imports
|