reflex 0.6.4a3__py3-none-any.whl → 0.6.5a1__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.
- 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 +82 -28
- reflex/components/core/upload.pyi +77 -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 +27 -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 +198 -35
- 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 +127 -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.4a3.dist-info → reflex-0.6.5a1.dist-info}/METADATA +3 -3
- reflex-0.6.5a1.dist-info/RECORD +394 -0
- reflex-0.6.4a3.dist-info/RECORD +0 -391
- {reflex-0.6.4a3.dist-info → reflex-0.6.5a1.dist-info}/LICENSE +0 -0
- {reflex-0.6.4a3.dist-info → reflex-0.6.5a1.dist-info}/WHEEL +0 -0
- {reflex-0.6.4a3.dist-info → reflex-0.6.5a1.dist-info}/entry_points.txt +0 -0
|
@@ -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
|
|
|
@@ -25,22 +25,22 @@ class ClientSideRouting(Component):
|
|
|
25
25
|
id: Optional[Any] = None,
|
|
26
26
|
class_name: Optional[Any] = None,
|
|
27
27
|
autofocus: Optional[bool] = None,
|
|
28
|
-
custom_attrs: Optional[Dict[str, Union[Var,
|
|
29
|
-
on_blur: Optional[EventType[[]]] = None,
|
|
30
|
-
on_click: Optional[EventType[[]]] = None,
|
|
31
|
-
on_context_menu: Optional[EventType[[]]] = None,
|
|
32
|
-
on_double_click: Optional[EventType[[]]] = None,
|
|
33
|
-
on_focus: Optional[EventType[[]]] = None,
|
|
34
|
-
on_mount: Optional[EventType[[]]] = None,
|
|
35
|
-
on_mouse_down: Optional[EventType[[]]] = None,
|
|
36
|
-
on_mouse_enter: Optional[EventType[[]]] = None,
|
|
37
|
-
on_mouse_leave: Optional[EventType[[]]] = None,
|
|
38
|
-
on_mouse_move: Optional[EventType[[]]] = None,
|
|
39
|
-
on_mouse_out: Optional[EventType[[]]] = None,
|
|
40
|
-
on_mouse_over: Optional[EventType[[]]] = None,
|
|
41
|
-
on_mouse_up: Optional[EventType[[]]] = None,
|
|
42
|
-
on_scroll: Optional[EventType[[]]] = None,
|
|
43
|
-
on_unmount: Optional[EventType[[]]] = None,
|
|
28
|
+
custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None,
|
|
29
|
+
on_blur: Optional[EventType[[], BASE_STATE]] = None,
|
|
30
|
+
on_click: Optional[EventType[[], BASE_STATE]] = None,
|
|
31
|
+
on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
|
|
32
|
+
on_double_click: Optional[EventType[[], BASE_STATE]] = None,
|
|
33
|
+
on_focus: Optional[EventType[[], BASE_STATE]] = None,
|
|
34
|
+
on_mount: Optional[EventType[[], BASE_STATE]] = None,
|
|
35
|
+
on_mouse_down: Optional[EventType[[], BASE_STATE]] = None,
|
|
36
|
+
on_mouse_enter: Optional[EventType[[], BASE_STATE]] = None,
|
|
37
|
+
on_mouse_leave: Optional[EventType[[], BASE_STATE]] = None,
|
|
38
|
+
on_mouse_move: Optional[EventType[[], BASE_STATE]] = None,
|
|
39
|
+
on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
|
|
40
|
+
on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
|
|
41
|
+
on_mouse_up: Optional[EventType[[], BASE_STATE]] = None,
|
|
42
|
+
on_scroll: Optional[EventType[[], BASE_STATE]] = None,
|
|
43
|
+
on_unmount: Optional[EventType[[], BASE_STATE]] = None,
|
|
44
44
|
**props,
|
|
45
45
|
) -> "ClientSideRouting":
|
|
46
46
|
"""Create the component.
|
|
@@ -74,22 +74,22 @@ class Default404Page(Component):
|
|
|
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
|
) -> "Default404Page":
|
|
95
95
|
"""Create the component.
|
|
@@ -6,7 +6,7 @@ from typing import Dict, List, Tuple, Union
|
|
|
6
6
|
|
|
7
7
|
from reflex.components.base.fragment import Fragment
|
|
8
8
|
from reflex.components.tags.tag import Tag
|
|
9
|
-
from reflex.event import EventChain, EventHandler,
|
|
9
|
+
from reflex.event import EventChain, EventHandler, passthrough_event_spec
|
|
10
10
|
from reflex.utils.format import format_prop, wrap
|
|
11
11
|
from reflex.utils.imports import ImportVar
|
|
12
12
|
from reflex.vars import get_unique_variable_name
|
|
@@ -20,7 +20,7 @@ class Clipboard(Fragment):
|
|
|
20
20
|
targets: Var[List[str]]
|
|
21
21
|
|
|
22
22
|
# Called when the user pastes data into the document. Data is a list of tuples of (mime_type, data). Binary types will be base64 encoded as a data uri.
|
|
23
|
-
on_paste: EventHandler[
|
|
23
|
+
on_paste: EventHandler[passthrough_event_spec(List[Tuple[str, str]])]
|
|
24
24
|
|
|
25
25
|
# Save the original event actions for the on_paste event.
|
|
26
26
|
on_paste_event_actions: Var[Dict[str, Union[bool, int]]]
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
from typing import Any, Dict, List, Optional, Union, overload
|
|
7
7
|
|
|
8
8
|
from reflex.components.base.fragment import Fragment
|
|
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 ImportVar
|
|
12
12
|
from reflex.vars.base import Var
|
|
@@ -26,23 +26,28 @@ class Clipboard(Fragment):
|
|
|
26
26
|
id: Optional[Any] = None,
|
|
27
27
|
class_name: Optional[Any] = None,
|
|
28
28
|
autofocus: Optional[bool] = None,
|
|
29
|
-
custom_attrs: Optional[Dict[str, Union[Var,
|
|
30
|
-
on_blur: Optional[EventType[[]]] = None,
|
|
31
|
-
on_click: Optional[EventType[[]]] = None,
|
|
32
|
-
on_context_menu: Optional[EventType[[]]] = None,
|
|
33
|
-
on_double_click: Optional[EventType[[]]] = None,
|
|
34
|
-
on_focus: Optional[EventType[[]]] = None,
|
|
35
|
-
on_mount: Optional[EventType[[]]] = None,
|
|
36
|
-
on_mouse_down: Optional[EventType[[]]] = None,
|
|
37
|
-
on_mouse_enter: Optional[EventType[[]]] = None,
|
|
38
|
-
on_mouse_leave: Optional[EventType[[]]] = None,
|
|
39
|
-
on_mouse_move: Optional[EventType[[]]] = None,
|
|
40
|
-
on_mouse_out: Optional[EventType[[]]] = None,
|
|
41
|
-
on_mouse_over: Optional[EventType[[]]] = None,
|
|
42
|
-
on_mouse_up: Optional[EventType[[]]] = None,
|
|
43
|
-
on_paste: Optional[
|
|
44
|
-
|
|
45
|
-
|
|
29
|
+
custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None,
|
|
30
|
+
on_blur: Optional[EventType[[], BASE_STATE]] = None,
|
|
31
|
+
on_click: Optional[EventType[[], BASE_STATE]] = None,
|
|
32
|
+
on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
|
|
33
|
+
on_double_click: Optional[EventType[[], BASE_STATE]] = None,
|
|
34
|
+
on_focus: Optional[EventType[[], BASE_STATE]] = None,
|
|
35
|
+
on_mount: Optional[EventType[[], BASE_STATE]] = None,
|
|
36
|
+
on_mouse_down: Optional[EventType[[], BASE_STATE]] = None,
|
|
37
|
+
on_mouse_enter: Optional[EventType[[], BASE_STATE]] = None,
|
|
38
|
+
on_mouse_leave: Optional[EventType[[], BASE_STATE]] = None,
|
|
39
|
+
on_mouse_move: Optional[EventType[[], BASE_STATE]] = None,
|
|
40
|
+
on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
|
|
41
|
+
on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
|
|
42
|
+
on_mouse_up: Optional[EventType[[], BASE_STATE]] = None,
|
|
43
|
+
on_paste: Optional[
|
|
44
|
+
Union[
|
|
45
|
+
EventType[[], BASE_STATE],
|
|
46
|
+
EventType[[list[tuple[str, str]]], BASE_STATE],
|
|
47
|
+
]
|
|
48
|
+
] = None,
|
|
49
|
+
on_scroll: Optional[EventType[[], BASE_STATE]] = None,
|
|
50
|
+
on_unmount: Optional[EventType[[], BASE_STATE]] = None,
|
|
46
51
|
**props,
|
|
47
52
|
) -> "Clipboard":
|
|
48
53
|
"""Create a Clipboard component.
|
|
@@ -50,6 +55,7 @@ class Clipboard(Fragment):
|
|
|
50
55
|
Args:
|
|
51
56
|
*children: The children of the component.
|
|
52
57
|
targets: The element ids to attach the event listener to. Defaults to all child components or the document.
|
|
58
|
+
on_paste: Called when the user pastes data into the document. Data is a list of tuples of (mime_type, data). Binary types will be base64 encoded as a data uri.
|
|
53
59
|
on_paste_event_actions: Save the original event actions for the on_paste event.
|
|
54
60
|
style: The style of the component.
|
|
55
61
|
key: A unique key for the component.
|
|
@@ -6,7 +6,7 @@ from typing import Any, Type, Union
|
|
|
6
6
|
|
|
7
7
|
from reflex.components.component import Component
|
|
8
8
|
from reflex.constants import EventTriggers
|
|
9
|
-
from reflex.event import EventHandler,
|
|
9
|
+
from reflex.event import EventHandler, no_args_event_spec
|
|
10
10
|
from reflex.vars import VarData
|
|
11
11
|
from reflex.vars.base import Var
|
|
12
12
|
|
|
@@ -46,7 +46,7 @@ class DebounceInput(Component):
|
|
|
46
46
|
element: Var[Type[Component]]
|
|
47
47
|
|
|
48
48
|
# Fired when the input value changes
|
|
49
|
-
on_change: EventHandler[
|
|
49
|
+
on_change: EventHandler[no_args_event_spec]
|
|
50
50
|
|
|
51
51
|
@classmethod
|
|
52
52
|
def create(cls, *children: Component, **props: Any) -> Component:
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
from typing import Any, Dict, Optional, Type, 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
|
|
|
@@ -30,23 +30,23 @@ class DebounceInput(Component):
|
|
|
30
30
|
id: Optional[Any] = None,
|
|
31
31
|
class_name: Optional[Any] = None,
|
|
32
32
|
autofocus: Optional[bool] = None,
|
|
33
|
-
custom_attrs: Optional[Dict[str, Union[Var,
|
|
34
|
-
on_blur: Optional[EventType[[]]] = None,
|
|
35
|
-
on_change: Optional[EventType[[]]] = None,
|
|
36
|
-
on_click: Optional[EventType[[]]] = None,
|
|
37
|
-
on_context_menu: Optional[EventType[[]]] = None,
|
|
38
|
-
on_double_click: Optional[EventType[[]]] = None,
|
|
39
|
-
on_focus: Optional[EventType[[]]] = None,
|
|
40
|
-
on_mount: Optional[EventType[[]]] = None,
|
|
41
|
-
on_mouse_down: Optional[EventType[[]]] = None,
|
|
42
|
-
on_mouse_enter: Optional[EventType[[]]] = None,
|
|
43
|
-
on_mouse_leave: Optional[EventType[[]]] = None,
|
|
44
|
-
on_mouse_move: Optional[EventType[[]]] = None,
|
|
45
|
-
on_mouse_out: Optional[EventType[[]]] = None,
|
|
46
|
-
on_mouse_over: Optional[EventType[[]]] = None,
|
|
47
|
-
on_mouse_up: Optional[EventType[[]]] = None,
|
|
48
|
-
on_scroll: Optional[EventType[[]]] = None,
|
|
49
|
-
on_unmount: Optional[EventType[[]]] = None,
|
|
33
|
+
custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None,
|
|
34
|
+
on_blur: Optional[EventType[[], BASE_STATE]] = None,
|
|
35
|
+
on_change: Optional[EventType[[], BASE_STATE]] = None,
|
|
36
|
+
on_click: Optional[EventType[[], BASE_STATE]] = None,
|
|
37
|
+
on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
|
|
38
|
+
on_double_click: Optional[EventType[[], BASE_STATE]] = None,
|
|
39
|
+
on_focus: Optional[EventType[[], BASE_STATE]] = None,
|
|
40
|
+
on_mount: Optional[EventType[[], BASE_STATE]] = None,
|
|
41
|
+
on_mouse_down: Optional[EventType[[], BASE_STATE]] = None,
|
|
42
|
+
on_mouse_enter: Optional[EventType[[], BASE_STATE]] = None,
|
|
43
|
+
on_mouse_leave: Optional[EventType[[], BASE_STATE]] = None,
|
|
44
|
+
on_mouse_move: Optional[EventType[[], BASE_STATE]] = None,
|
|
45
|
+
on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
|
|
46
|
+
on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
|
|
47
|
+
on_mouse_up: Optional[EventType[[], BASE_STATE]] = None,
|
|
48
|
+
on_scroll: Optional[EventType[[], BASE_STATE]] = None,
|
|
49
|
+
on_unmount: Optional[EventType[[], BASE_STATE]] = None,
|
|
50
50
|
**props,
|
|
51
51
|
) -> "DebounceInput":
|
|
52
52
|
"""Create a DebounceInput component.
|
reflex/components/core/html.pyi
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
from typing import Any, Dict, Optional, Union, overload
|
|
7
7
|
|
|
8
8
|
from reflex.components.el.elements.typography import Div
|
|
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
|
|
|
@@ -48,22 +48,22 @@ class Html(Div):
|
|
|
48
48
|
id: Optional[Any] = None,
|
|
49
49
|
class_name: Optional[Any] = None,
|
|
50
50
|
autofocus: Optional[bool] = None,
|
|
51
|
-
custom_attrs: Optional[Dict[str, Union[Var,
|
|
52
|
-
on_blur: Optional[EventType[[]]] = None,
|
|
53
|
-
on_click: Optional[EventType[[]]] = None,
|
|
54
|
-
on_context_menu: Optional[EventType[[]]] = None,
|
|
55
|
-
on_double_click: Optional[EventType[[]]] = None,
|
|
56
|
-
on_focus: Optional[EventType[[]]] = None,
|
|
57
|
-
on_mount: Optional[EventType[[]]] = None,
|
|
58
|
-
on_mouse_down: Optional[EventType[[]]] = None,
|
|
59
|
-
on_mouse_enter: Optional[EventType[[]]] = None,
|
|
60
|
-
on_mouse_leave: Optional[EventType[[]]] = None,
|
|
61
|
-
on_mouse_move: Optional[EventType[[]]] = None,
|
|
62
|
-
on_mouse_out: Optional[EventType[[]]] = None,
|
|
63
|
-
on_mouse_over: Optional[EventType[[]]] = None,
|
|
64
|
-
on_mouse_up: Optional[EventType[[]]] = None,
|
|
65
|
-
on_scroll: Optional[EventType[[]]] = None,
|
|
66
|
-
on_unmount: Optional[EventType[[]]] = None,
|
|
51
|
+
custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None,
|
|
52
|
+
on_blur: Optional[EventType[[], BASE_STATE]] = None,
|
|
53
|
+
on_click: Optional[EventType[[], BASE_STATE]] = None,
|
|
54
|
+
on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
|
|
55
|
+
on_double_click: Optional[EventType[[], BASE_STATE]] = None,
|
|
56
|
+
on_focus: Optional[EventType[[], BASE_STATE]] = None,
|
|
57
|
+
on_mount: Optional[EventType[[], BASE_STATE]] = None,
|
|
58
|
+
on_mouse_down: Optional[EventType[[], BASE_STATE]] = None,
|
|
59
|
+
on_mouse_enter: Optional[EventType[[], BASE_STATE]] = None,
|
|
60
|
+
on_mouse_leave: Optional[EventType[[], BASE_STATE]] = None,
|
|
61
|
+
on_mouse_move: Optional[EventType[[], BASE_STATE]] = None,
|
|
62
|
+
on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
|
|
63
|
+
on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
|
|
64
|
+
on_mouse_up: Optional[EventType[[], BASE_STATE]] = None,
|
|
65
|
+
on_scroll: Optional[EventType[[], BASE_STATE]] = None,
|
|
66
|
+
on_unmount: Optional[EventType[[], BASE_STATE]] = None,
|
|
67
67
|
**props,
|
|
68
68
|
) -> "Html":
|
|
69
69
|
"""Create a html component.
|
reflex/components/core/upload.py
CHANGED
|
@@ -5,23 +5,30 @@ from __future__ import annotations
|
|
|
5
5
|
from pathlib import Path
|
|
6
6
|
from typing import Any, Callable, ClassVar, Dict, List, Optional, Tuple
|
|
7
7
|
|
|
8
|
-
from reflex.components.component import
|
|
8
|
+
from reflex.components.component import (
|
|
9
|
+
Component,
|
|
10
|
+
ComponentNamespace,
|
|
11
|
+
MemoizationLeaf,
|
|
12
|
+
StatefulComponent,
|
|
13
|
+
)
|
|
9
14
|
from reflex.components.el.elements.forms import Input
|
|
10
15
|
from reflex.components.radix.themes.layout.box import Box
|
|
11
16
|
from reflex.config import environment
|
|
12
17
|
from reflex.constants import Dirs
|
|
18
|
+
from reflex.constants.compiler import Hooks, Imports
|
|
13
19
|
from reflex.event import (
|
|
14
20
|
CallableEventSpec,
|
|
15
21
|
EventChain,
|
|
16
22
|
EventHandler,
|
|
17
23
|
EventSpec,
|
|
18
24
|
call_event_fn,
|
|
19
|
-
call_script,
|
|
20
25
|
parse_args_spec,
|
|
26
|
+
run_script,
|
|
21
27
|
)
|
|
28
|
+
from reflex.utils import format
|
|
22
29
|
from reflex.utils.imports import ImportVar
|
|
23
30
|
from reflex.vars import VarData
|
|
24
|
-
from reflex.vars.base import CallableVar, LiteralVar, Var
|
|
31
|
+
from reflex.vars.base import CallableVar, LiteralVar, Var, get_unique_variable_name
|
|
25
32
|
from reflex.vars.sequence import LiteralStringVar
|
|
26
33
|
|
|
27
34
|
DEFAULT_UPLOAD_ID: str = "default"
|
|
@@ -99,8 +106,8 @@ def clear_selected_files(id_: str = DEFAULT_UPLOAD_ID) -> EventSpec:
|
|
|
99
106
|
"""
|
|
100
107
|
# UploadFilesProvider assigns a special function to clear selected files
|
|
101
108
|
# into the shared global refs object to make it accessible outside a React
|
|
102
|
-
# component via `
|
|
103
|
-
return
|
|
109
|
+
# component via `run_script` (otherwise backend could never clear files).
|
|
110
|
+
return run_script(f"refs['__clear_selected_files']({id_!r})")
|
|
104
111
|
|
|
105
112
|
|
|
106
113
|
def cancel_upload(upload_id: str) -> EventSpec:
|
|
@@ -112,7 +119,7 @@ def cancel_upload(upload_id: str) -> EventSpec:
|
|
|
112
119
|
Returns:
|
|
113
120
|
An event spec that cancels the upload when triggered.
|
|
114
121
|
"""
|
|
115
|
-
return
|
|
122
|
+
return run_script(
|
|
116
123
|
f"upload_controllers[{str(LiteralVar.create(upload_id))}]?.abort()"
|
|
117
124
|
)
|
|
118
125
|
|
|
@@ -125,7 +132,7 @@ def get_upload_dir() -> Path:
|
|
|
125
132
|
"""
|
|
126
133
|
Upload.is_used = True
|
|
127
134
|
|
|
128
|
-
uploaded_files_dir = environment.REFLEX_UPLOADED_FILES_DIR
|
|
135
|
+
uploaded_files_dir = environment.REFLEX_UPLOADED_FILES_DIR.get()
|
|
129
136
|
uploaded_files_dir.mkdir(parents=True, exist_ok=True)
|
|
130
137
|
return uploaded_files_dir
|
|
131
138
|
|
|
@@ -179,9 +186,7 @@ class Upload(MemoizationLeaf):
|
|
|
179
186
|
|
|
180
187
|
library = "react-dropzone@14.2.10"
|
|
181
188
|
|
|
182
|
-
tag = "
|
|
183
|
-
|
|
184
|
-
is_default = True
|
|
189
|
+
tag = ""
|
|
185
190
|
|
|
186
191
|
# The list of accepted file types. This should be a dictionary of MIME types as keys and array of file formats as
|
|
187
192
|
# values.
|
|
@@ -201,7 +206,7 @@ class Upload(MemoizationLeaf):
|
|
|
201
206
|
min_size: Var[int]
|
|
202
207
|
|
|
203
208
|
# Whether to allow multiple files to be uploaded.
|
|
204
|
-
multiple: Var[bool]
|
|
209
|
+
multiple: Var[bool]
|
|
205
210
|
|
|
206
211
|
# Whether to disable click to upload.
|
|
207
212
|
no_click: Var[bool]
|
|
@@ -232,6 +237,8 @@ class Upload(MemoizationLeaf):
|
|
|
232
237
|
# Mark the Upload component as used in the app.
|
|
233
238
|
cls.is_used = True
|
|
234
239
|
|
|
240
|
+
props.setdefault("multiple", True)
|
|
241
|
+
|
|
235
242
|
# Apply the default classname
|
|
236
243
|
given_class_name = props.pop("class_name", [])
|
|
237
244
|
if isinstance(given_class_name, str):
|
|
@@ -243,17 +250,6 @@ class Upload(MemoizationLeaf):
|
|
|
243
250
|
upload_props = {
|
|
244
251
|
key: value for key, value in props.items() if key in supported_props
|
|
245
252
|
}
|
|
246
|
-
# The file input to use.
|
|
247
|
-
upload = Input.create(type="file")
|
|
248
|
-
upload.special_props = [Var(_js_expr="{...getInputProps()}", _var_type=None)]
|
|
249
|
-
|
|
250
|
-
# The dropzone to use.
|
|
251
|
-
zone = Box.create(
|
|
252
|
-
upload,
|
|
253
|
-
*children,
|
|
254
|
-
**{k: v for k, v in props.items() if k not in supported_props},
|
|
255
|
-
)
|
|
256
|
-
zone.special_props = [Var(_js_expr="{...getRootProps()}", _var_type=None)]
|
|
257
253
|
|
|
258
254
|
# Create the component.
|
|
259
255
|
upload_props["id"] = props.get("id", DEFAULT_UPLOAD_ID)
|
|
@@ -275,9 +271,72 @@ class Upload(MemoizationLeaf):
|
|
|
275
271
|
),
|
|
276
272
|
)
|
|
277
273
|
upload_props["on_drop"] = on_drop
|
|
274
|
+
|
|
275
|
+
input_props_unique_name = get_unique_variable_name()
|
|
276
|
+
root_props_unique_name = get_unique_variable_name()
|
|
277
|
+
|
|
278
|
+
event_var, callback_str = StatefulComponent._get_memoized_event_triggers(
|
|
279
|
+
Box.create(on_click=upload_props["on_drop"]) # type: ignore
|
|
280
|
+
)["on_click"]
|
|
281
|
+
|
|
282
|
+
upload_props["on_drop"] = event_var
|
|
283
|
+
|
|
284
|
+
upload_props = {
|
|
285
|
+
format.to_camel_case(key): value for key, value in upload_props.items()
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
use_dropzone_arguments = {
|
|
289
|
+
"onDrop": event_var,
|
|
290
|
+
**upload_props,
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
left_side = f"const {{getRootProps: {root_props_unique_name}, getInputProps: {input_props_unique_name}}} "
|
|
294
|
+
right_side = f"useDropzone({str(Var.create(use_dropzone_arguments))})"
|
|
295
|
+
|
|
296
|
+
var_data = VarData.merge(
|
|
297
|
+
VarData(
|
|
298
|
+
imports=Imports.EVENTS,
|
|
299
|
+
hooks={Hooks.EVENTS: None},
|
|
300
|
+
),
|
|
301
|
+
event_var._get_all_var_data(),
|
|
302
|
+
VarData(
|
|
303
|
+
hooks={
|
|
304
|
+
callback_str: None,
|
|
305
|
+
f"{left_side} = {right_side};": None,
|
|
306
|
+
},
|
|
307
|
+
imports={
|
|
308
|
+
"react-dropzone": "useDropzone",
|
|
309
|
+
**Imports.EVENTS,
|
|
310
|
+
},
|
|
311
|
+
),
|
|
312
|
+
)
|
|
313
|
+
|
|
314
|
+
# The file input to use.
|
|
315
|
+
upload = Input.create(type="file")
|
|
316
|
+
upload.special_props = [
|
|
317
|
+
Var(
|
|
318
|
+
_js_expr=f"{{...{input_props_unique_name}()}}",
|
|
319
|
+
_var_type=None,
|
|
320
|
+
_var_data=var_data,
|
|
321
|
+
)
|
|
322
|
+
]
|
|
323
|
+
|
|
324
|
+
# The dropzone to use.
|
|
325
|
+
zone = Box.create(
|
|
326
|
+
upload,
|
|
327
|
+
*children,
|
|
328
|
+
**{k: v for k, v in props.items() if k not in supported_props},
|
|
329
|
+
)
|
|
330
|
+
zone.special_props = [
|
|
331
|
+
Var(
|
|
332
|
+
_js_expr=f"{{...{root_props_unique_name}()}}",
|
|
333
|
+
_var_type=None,
|
|
334
|
+
_var_data=var_data,
|
|
335
|
+
)
|
|
336
|
+
]
|
|
337
|
+
|
|
278
338
|
return super().create(
|
|
279
339
|
zone,
|
|
280
|
-
**upload_props,
|
|
281
340
|
)
|
|
282
341
|
|
|
283
342
|
@classmethod
|
|
@@ -295,11 +354,6 @@ class Upload(MemoizationLeaf):
|
|
|
295
354
|
return (arg_value[0], placeholder)
|
|
296
355
|
return arg_value
|
|
297
356
|
|
|
298
|
-
def _render(self):
|
|
299
|
-
out = super()._render()
|
|
300
|
-
out.args = ("getRootProps", "getInputProps")
|
|
301
|
-
return out
|
|
302
|
-
|
|
303
357
|
@staticmethod
|
|
304
358
|
def _get_app_wrap_components() -> dict[tuple[int, str], Component]:
|
|
305
359
|
return {
|