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, 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,31 @@ 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.
|
|
8
|
+
from reflex.components.base.fragment import Fragment
|
|
9
|
+
from reflex.components.component import (
|
|
10
|
+
Component,
|
|
11
|
+
ComponentNamespace,
|
|
12
|
+
MemoizationLeaf,
|
|
13
|
+
StatefulComponent,
|
|
14
|
+
)
|
|
9
15
|
from reflex.components.el.elements.forms import Input
|
|
10
16
|
from reflex.components.radix.themes.layout.box import Box
|
|
11
17
|
from reflex.config import environment
|
|
12
18
|
from reflex.constants import Dirs
|
|
19
|
+
from reflex.constants.compiler import Hooks, Imports
|
|
13
20
|
from reflex.event import (
|
|
14
21
|
CallableEventSpec,
|
|
15
22
|
EventChain,
|
|
16
23
|
EventHandler,
|
|
17
24
|
EventSpec,
|
|
18
25
|
call_event_fn,
|
|
19
|
-
call_script,
|
|
20
26
|
parse_args_spec,
|
|
27
|
+
run_script,
|
|
21
28
|
)
|
|
29
|
+
from reflex.utils import format
|
|
22
30
|
from reflex.utils.imports import ImportVar
|
|
23
31
|
from reflex.vars import VarData
|
|
24
|
-
from reflex.vars.base import CallableVar, LiteralVar, Var
|
|
32
|
+
from reflex.vars.base import CallableVar, LiteralVar, Var, get_unique_variable_name
|
|
25
33
|
from reflex.vars.sequence import LiteralStringVar
|
|
26
34
|
|
|
27
35
|
DEFAULT_UPLOAD_ID: str = "default"
|
|
@@ -99,8 +107,8 @@ def clear_selected_files(id_: str = DEFAULT_UPLOAD_ID) -> EventSpec:
|
|
|
99
107
|
"""
|
|
100
108
|
# UploadFilesProvider assigns a special function to clear selected files
|
|
101
109
|
# into the shared global refs object to make it accessible outside a React
|
|
102
|
-
# component via `
|
|
103
|
-
return
|
|
110
|
+
# component via `run_script` (otherwise backend could never clear files).
|
|
111
|
+
return run_script(f"refs['__clear_selected_files']({id_!r})")
|
|
104
112
|
|
|
105
113
|
|
|
106
114
|
def cancel_upload(upload_id: str) -> EventSpec:
|
|
@@ -112,7 +120,7 @@ def cancel_upload(upload_id: str) -> EventSpec:
|
|
|
112
120
|
Returns:
|
|
113
121
|
An event spec that cancels the upload when triggered.
|
|
114
122
|
"""
|
|
115
|
-
return
|
|
123
|
+
return run_script(
|
|
116
124
|
f"upload_controllers[{str(LiteralVar.create(upload_id))}]?.abort()"
|
|
117
125
|
)
|
|
118
126
|
|
|
@@ -125,7 +133,7 @@ def get_upload_dir() -> Path:
|
|
|
125
133
|
"""
|
|
126
134
|
Upload.is_used = True
|
|
127
135
|
|
|
128
|
-
uploaded_files_dir = environment.REFLEX_UPLOADED_FILES_DIR
|
|
136
|
+
uploaded_files_dir = environment.REFLEX_UPLOADED_FILES_DIR.get()
|
|
129
137
|
uploaded_files_dir.mkdir(parents=True, exist_ok=True)
|
|
130
138
|
return uploaded_files_dir
|
|
131
139
|
|
|
@@ -174,14 +182,19 @@ class UploadFilesProvider(Component):
|
|
|
174
182
|
tag = "UploadFilesProvider"
|
|
175
183
|
|
|
176
184
|
|
|
185
|
+
class GhostUpload(Fragment):
|
|
186
|
+
"""A ghost upload component."""
|
|
187
|
+
|
|
188
|
+
# Fired when files are dropped.
|
|
189
|
+
on_drop: EventHandler[_on_drop_spec]
|
|
190
|
+
|
|
191
|
+
|
|
177
192
|
class Upload(MemoizationLeaf):
|
|
178
193
|
"""A file upload component."""
|
|
179
194
|
|
|
180
195
|
library = "react-dropzone@14.2.10"
|
|
181
196
|
|
|
182
|
-
tag = "
|
|
183
|
-
|
|
184
|
-
is_default = True
|
|
197
|
+
tag = ""
|
|
185
198
|
|
|
186
199
|
# The list of accepted file types. This should be a dictionary of MIME types as keys and array of file formats as
|
|
187
200
|
# values.
|
|
@@ -201,7 +214,7 @@ class Upload(MemoizationLeaf):
|
|
|
201
214
|
min_size: Var[int]
|
|
202
215
|
|
|
203
216
|
# Whether to allow multiple files to be uploaded.
|
|
204
|
-
multiple: Var[bool]
|
|
217
|
+
multiple: Var[bool]
|
|
205
218
|
|
|
206
219
|
# Whether to disable click to upload.
|
|
207
220
|
no_click: Var[bool]
|
|
@@ -232,6 +245,8 @@ class Upload(MemoizationLeaf):
|
|
|
232
245
|
# Mark the Upload component as used in the app.
|
|
233
246
|
cls.is_used = True
|
|
234
247
|
|
|
248
|
+
props.setdefault("multiple", True)
|
|
249
|
+
|
|
235
250
|
# Apply the default classname
|
|
236
251
|
given_class_name = props.pop("class_name", [])
|
|
237
252
|
if isinstance(given_class_name, str):
|
|
@@ -243,17 +258,6 @@ class Upload(MemoizationLeaf):
|
|
|
243
258
|
upload_props = {
|
|
244
259
|
key: value for key, value in props.items() if key in supported_props
|
|
245
260
|
}
|
|
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
261
|
|
|
258
262
|
# Create the component.
|
|
259
263
|
upload_props["id"] = props.get("id", DEFAULT_UPLOAD_ID)
|
|
@@ -275,9 +279,72 @@ class Upload(MemoizationLeaf):
|
|
|
275
279
|
),
|
|
276
280
|
)
|
|
277
281
|
upload_props["on_drop"] = on_drop
|
|
282
|
+
|
|
283
|
+
input_props_unique_name = get_unique_variable_name()
|
|
284
|
+
root_props_unique_name = get_unique_variable_name()
|
|
285
|
+
|
|
286
|
+
event_var, callback_str = StatefulComponent._get_memoized_event_triggers(
|
|
287
|
+
GhostUpload.create(on_drop=upload_props["on_drop"])
|
|
288
|
+
)["on_drop"]
|
|
289
|
+
|
|
290
|
+
upload_props["on_drop"] = event_var
|
|
291
|
+
|
|
292
|
+
upload_props = {
|
|
293
|
+
format.to_camel_case(key): value for key, value in upload_props.items()
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
use_dropzone_arguments = {
|
|
297
|
+
"onDrop": event_var,
|
|
298
|
+
**upload_props,
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
left_side = f"const {{getRootProps: {root_props_unique_name}, getInputProps: {input_props_unique_name}}} "
|
|
302
|
+
right_side = f"useDropzone({str(Var.create(use_dropzone_arguments))})"
|
|
303
|
+
|
|
304
|
+
var_data = VarData.merge(
|
|
305
|
+
VarData(
|
|
306
|
+
imports=Imports.EVENTS,
|
|
307
|
+
hooks={Hooks.EVENTS: None},
|
|
308
|
+
),
|
|
309
|
+
event_var._get_all_var_data(),
|
|
310
|
+
VarData(
|
|
311
|
+
hooks={
|
|
312
|
+
callback_str: None,
|
|
313
|
+
f"{left_side} = {right_side};": None,
|
|
314
|
+
},
|
|
315
|
+
imports={
|
|
316
|
+
"react-dropzone": "useDropzone",
|
|
317
|
+
**Imports.EVENTS,
|
|
318
|
+
},
|
|
319
|
+
),
|
|
320
|
+
)
|
|
321
|
+
|
|
322
|
+
# The file input to use.
|
|
323
|
+
upload = Input.create(type="file")
|
|
324
|
+
upload.special_props = [
|
|
325
|
+
Var(
|
|
326
|
+
_js_expr=f"{{...{input_props_unique_name}()}}",
|
|
327
|
+
_var_type=None,
|
|
328
|
+
_var_data=var_data,
|
|
329
|
+
)
|
|
330
|
+
]
|
|
331
|
+
|
|
332
|
+
# The dropzone to use.
|
|
333
|
+
zone = Box.create(
|
|
334
|
+
upload,
|
|
335
|
+
*children,
|
|
336
|
+
**{k: v for k, v in props.items() if k not in supported_props},
|
|
337
|
+
)
|
|
338
|
+
zone.special_props = [
|
|
339
|
+
Var(
|
|
340
|
+
_js_expr=f"{{...{root_props_unique_name}()}}",
|
|
341
|
+
_var_type=None,
|
|
342
|
+
_var_data=var_data,
|
|
343
|
+
)
|
|
344
|
+
]
|
|
345
|
+
|
|
278
346
|
return super().create(
|
|
279
347
|
zone,
|
|
280
|
-
**upload_props,
|
|
281
348
|
)
|
|
282
349
|
|
|
283
350
|
@classmethod
|
|
@@ -295,11 +362,6 @@ class Upload(MemoizationLeaf):
|
|
|
295
362
|
return (arg_value[0], placeholder)
|
|
296
363
|
return arg_value
|
|
297
364
|
|
|
298
|
-
def _render(self):
|
|
299
|
-
out = super()._render()
|
|
300
|
-
out.args = ("getRootProps", "getInputProps")
|
|
301
|
-
return out
|
|
302
|
-
|
|
303
365
|
@staticmethod
|
|
304
366
|
def _get_app_wrap_components() -> dict[tuple[int, str], Component]:
|
|
305
367
|
return {
|