reflex 0.7.1a4__py3-none-any.whl → 0.7.2a1__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/utils/context.js.jinja2 +8 -8
- reflex/.templates/web/components/reflex/radix_themes_color_mode_provider.js +3 -3
- reflex/admin.py +1 -2
- reflex/app.py +46 -49
- reflex/app_mixins/lifespan.py +2 -2
- reflex/app_mixins/middleware.py +1 -2
- reflex/assets.py +1 -2
- reflex/base.py +2 -2
- reflex/compiler/compiler.py +51 -16
- reflex/compiler/utils.py +4 -13
- reflex/components/base/app_wrap.pyi +7 -7
- reflex/components/base/bare.py +3 -3
- reflex/components/base/body.pyi +7 -7
- reflex/components/base/document.py +1 -3
- reflex/components/base/document.pyi +32 -32
- reflex/components/base/error_boundary.py +2 -4
- reflex/components/base/error_boundary.pyi +11 -13
- reflex/components/base/fragment.pyi +7 -7
- reflex/components/base/head.pyi +13 -13
- reflex/components/base/link.pyi +22 -22
- reflex/components/base/meta.py +5 -7
- reflex/components/base/meta.pyi +40 -40
- reflex/components/base/script.pyi +11 -14
- reflex/components/base/strict_mode.pyi +7 -7
- reflex/components/component.py +188 -113
- reflex/components/core/auto_scroll.py +8 -1
- reflex/components/core/auto_scroll.pyi +183 -210
- reflex/components/core/banner.py +2 -4
- reflex/components/core/banner.pyi +390 -444
- reflex/components/core/breakpoints.py +5 -5
- reflex/components/core/client_side_routing.pyi +14 -14
- reflex/components/core/clipboard.py +4 -4
- reflex/components/core/clipboard.pyi +12 -14
- reflex/components/core/cond.py +17 -25
- reflex/components/core/debounce.py +3 -3
- reflex/components/core/debounce.pyi +14 -14
- reflex/components/core/foreach.py +7 -2
- reflex/components/core/html.py +1 -3
- reflex/components/core/html.pyi +184 -213
- reflex/components/core/match.py +15 -19
- reflex/components/core/sticky.pyi +930 -1078
- reflex/components/core/upload.py +4 -4
- reflex/components/core/upload.pyi +62 -62
- reflex/components/datadisplay/code.py +6 -6
- reflex/components/datadisplay/code.pyi +1159 -1165
- reflex/components/datadisplay/dataeditor.py +49 -49
- reflex/components/datadisplay/dataeditor.pyi +95 -123
- reflex/components/datadisplay/logo.py +1 -3
- reflex/components/datadisplay/shiki_code_block.py +8 -10
- reflex/components/datadisplay/shiki_code_block.pyi +1678 -1720
- reflex/components/el/element.pyi +7 -7
- reflex/components/el/elements/base.pyi +183 -210
- reflex/components/el/elements/forms.py +23 -23
- reflex/components/el/elements/forms.pyi +2571 -2933
- reflex/components/el/elements/inline.py +4 -4
- reflex/components/el/elements/inline.pyi +5191 -5953
- reflex/components/el/elements/media.py +47 -47
- reflex/components/el/elements/media.pyi +4802 -5500
- reflex/components/el/elements/metadata.py +1 -3
- reflex/components/el/elements/metadata.pyi +782 -896
- reflex/components/el/elements/other.pyi +1278 -1467
- reflex/components/el/elements/scripts.pyi +580 -667
- reflex/components/el/elements/sectioning.pyi +2761 -3166
- reflex/components/el/elements/tables.pyi +1840 -2119
- reflex/components/el/elements/typography.pyi +2772 -3179
- reflex/components/gridjs/datatable.py +7 -7
- reflex/components/gridjs/datatable.pyi +19 -19
- reflex/components/lucide/icon.pyi +21 -21
- reflex/components/markdown/markdown.py +2 -2
- reflex/components/markdown/markdown.pyi +9 -9
- reflex/components/moment/moment.py +11 -12
- reflex/components/moment/moment.pyi +44 -47
- reflex/components/next/base.pyi +7 -7
- reflex/components/next/image.py +3 -3
- reflex/components/next/image.pyi +19 -21
- reflex/components/next/link.pyi +9 -9
- reflex/components/next/video.py +1 -3
- reflex/components/next/video.pyi +9 -9
- reflex/components/plotly/plotly.py +22 -45
- reflex/components/plotly/plotly.pyi +164 -164
- reflex/components/radix/primitives/accordion.py +14 -14
- reflex/components/radix/primitives/accordion.pyi +439 -487
- reflex/components/radix/primitives/base.py +1 -3
- reflex/components/radix/primitives/base.pyi +15 -15
- reflex/components/radix/primitives/drawer.py +3 -3
- reflex/components/radix/primitives/drawer.pyi +110 -116
- reflex/components/radix/primitives/form.py +1 -1
- reflex/components/radix/primitives/form.pyi +668 -752
- reflex/components/radix/primitives/progress.py +6 -6
- reflex/components/radix/primitives/progress.pyi +225 -243
- reflex/components/radix/primitives/slider.py +6 -6
- reflex/components/radix/primitives/slider.pyi +52 -55
- reflex/components/radix/themes/base.py +3 -6
- reflex/components/radix/themes/base.pyi +197 -303
- reflex/components/radix/themes/color_mode.py +5 -5
- reflex/components/radix/themes/color_mode.pyi +366 -436
- reflex/components/radix/themes/components/alert_dialog.pyi +229 -262
- reflex/components/radix/themes/components/aspect_ratio.py +1 -3
- reflex/components/radix/themes/components/aspect_ratio.pyi +8 -8
- reflex/components/radix/themes/components/avatar.pyi +79 -94
- reflex/components/radix/themes/components/badge.pyi +252 -295
- reflex/components/radix/themes/components/button.pyi +269 -314
- reflex/components/radix/themes/components/callout.py +2 -2
- reflex/components/radix/themes/components/callout.pyi +1116 -1290
- reflex/components/radix/themes/components/card.pyi +194 -229
- reflex/components/radix/themes/components/checkbox.pyi +243 -278
- reflex/components/radix/themes/components/checkbox_cards.py +3 -7
- reflex/components/radix/themes/components/checkbox_cards.pyi +101 -135
- reflex/components/radix/themes/components/checkbox_group.py +2 -2
- reflex/components/radix/themes/components/checkbox_group.pyi +83 -96
- reflex/components/radix/themes/components/context_menu.py +18 -15
- reflex/components/radix/themes/components/context_menu.pyi +408 -458
- reflex/components/radix/themes/components/data_list.pyi +122 -147
- reflex/components/radix/themes/components/dialog.pyi +231 -264
- reflex/components/radix/themes/components/dropdown_menu.py +16 -13
- reflex/components/radix/themes/components/dropdown_menu.pyi +223 -246
- reflex/components/radix/themes/components/hover_card.py +2 -2
- reflex/components/radix/themes/components/hover_card.pyi +237 -282
- reflex/components/radix/themes/components/icon_button.pyi +269 -314
- reflex/components/radix/themes/components/inset.py +8 -8
- reflex/components/radix/themes/components/inset.pyi +232 -292
- reflex/components/radix/themes/components/popover.py +2 -2
- reflex/components/radix/themes/components/popover.pyi +229 -271
- reflex/components/radix/themes/components/progress.pyi +80 -96
- reflex/components/radix/themes/components/radio.pyi +73 -86
- reflex/components/radix/themes/components/radio_cards.py +4 -8
- reflex/components/radix/themes/components/radio_cards.pyi +117 -154
- reflex/components/radix/themes/components/radio_group.py +3 -3
- reflex/components/radix/themes/components/radio_group.pyi +250 -291
- reflex/components/radix/themes/components/scroll_area.pyi +14 -20
- reflex/components/radix/themes/components/segmented_control.py +6 -6
- reflex/components/radix/themes/components/segmented_control.pyi +89 -108
- reflex/components/radix/themes/components/select.py +7 -7
- reflex/components/radix/themes/components/select.pyi +376 -444
- reflex/components/radix/themes/components/separator.pyi +79 -93
- reflex/components/radix/themes/components/skeleton.pyi +32 -26
- reflex/components/radix/themes/components/slider.py +8 -8
- reflex/components/radix/themes/components/slider.pyi +99 -122
- reflex/components/radix/themes/components/spinner.pyi +12 -19
- reflex/components/radix/themes/components/switch.pyi +84 -99
- reflex/components/radix/themes/components/table.py +9 -9
- reflex/components/radix/themes/components/table.pyi +1440 -1794
- reflex/components/radix/themes/components/tabs.py +4 -4
- reflex/components/radix/themes/components/tabs.pyi +120 -132
- reflex/components/radix/themes/components/text_area.pyi +281 -331
- reflex/components/radix/themes/components/text_field.py +2 -2
- reflex/components/radix/themes/components/text_field.pyi +639 -734
- reflex/components/radix/themes/components/tooltip.py +6 -6
- reflex/components/radix/themes/components/tooltip.pyi +34 -43
- reflex/components/radix/themes/layout/base.pyi +85 -182
- reflex/components/radix/themes/layout/box.pyi +183 -210
- reflex/components/radix/themes/layout/center.pyi +225 -286
- reflex/components/radix/themes/layout/container.pyi +191 -224
- reflex/components/radix/themes/layout/flex.py +2 -2
- reflex/components/radix/themes/layout/flex.pyi +225 -286
- reflex/components/radix/themes/layout/grid.py +2 -2
- reflex/components/radix/themes/layout/grid.pyi +245 -315
- reflex/components/radix/themes/layout/list.py +2 -2
- reflex/components/radix/themes/layout/list.pyi +712 -815
- reflex/components/radix/themes/layout/section.pyi +187 -221
- reflex/components/radix/themes/layout/spacer.pyi +225 -286
- reflex/components/radix/themes/layout/stack.pyi +625 -768
- reflex/components/radix/themes/typography/blockquote.pyi +257 -299
- reflex/components/radix/themes/typography/code.pyi +259 -304
- reflex/components/radix/themes/typography/heading.pyi +272 -324
- reflex/components/radix/themes/typography/link.pyi +302 -358
- reflex/components/radix/themes/typography/text.pyi +1669 -1945
- reflex/components/react_player/audio.pyi +20 -22
- reflex/components/react_player/react_player.pyi +19 -19
- reflex/components/react_player/video.pyi +20 -22
- reflex/components/recharts/cartesian.py +100 -97
- reflex/components/recharts/cartesian.pyi +891 -1007
- reflex/components/recharts/charts.py +42 -42
- reflex/components/recharts/charts.pyi +212 -249
- reflex/components/recharts/general.py +22 -21
- reflex/components/recharts/general.pyi +198 -223
- reflex/components/recharts/polar.py +42 -45
- reflex/components/recharts/polar.pyi +254 -288
- reflex/components/recharts/recharts.pyi +13 -13
- reflex/components/sonner/toast.py +20 -20
- reflex/components/sonner/toast.pyi +58 -61
- reflex/components/suneditor/editor.py +9 -9
- reflex/components/suneditor/editor.pyi +78 -83
- reflex/components/tags/cond_tag.py +2 -2
- reflex/components/tags/iter_tag.py +10 -14
- reflex/components/tags/match_tag.py +2 -2
- reflex/components/tags/tag.py +10 -10
- reflex/config.py +36 -35
- reflex/constants/__init__.py +56 -53
- reflex/custom_components/custom_components.py +6 -7
- reflex/event.py +38 -42
- reflex/experimental/client_state.py +2 -4
- reflex/experimental/layout.py +2 -2
- reflex/experimental/layout.pyi +579 -663
- reflex/istate/data.py +4 -5
- reflex/middleware/hydrate_middleware.py +2 -2
- reflex/middleware/middleware.py +2 -2
- reflex/model.py +3 -5
- reflex/page.py +2 -2
- reflex/reflex.py +9 -10
- reflex/state.py +77 -49
- reflex/style.py +9 -3
- reflex/testing.py +21 -24
- reflex/utils/console.py +1 -1
- reflex/utils/decorator.py +26 -1
- reflex/utils/exec.py +6 -11
- reflex/utils/export.py +2 -3
- reflex/utils/format.py +4 -4
- reflex/utils/imports.py +12 -12
- reflex/utils/prerequisites.py +35 -84
- reflex/utils/processes.py +5 -5
- reflex/utils/pyi_generator.py +33 -22
- reflex/utils/serializers.py +60 -15
- reflex/utils/types.py +237 -56
- reflex/vars/base.py +122 -72
- reflex/vars/datetime.py +2 -2
- reflex/vars/function.py +52 -55
- reflex/vars/number.py +59 -5
- reflex/vars/object.py +57 -26
- reflex/vars/sequence.py +983 -958
- {reflex-0.7.1a4.dist-info → reflex-0.7.2a1.dist-info}/METADATA +3 -6
- reflex-0.7.2a1.dist-info/RECORD +405 -0
- {reflex-0.7.1a4.dist-info → reflex-0.7.2a1.dist-info}/WHEEL +1 -1
- reflex-0.7.1a4.dist-info/RECORD +0 -405
- {reflex-0.7.1a4.dist-info → reflex-0.7.2a1.dist-info}/LICENSE +0 -0
- {reflex-0.7.1a4.dist-info → reflex-0.7.2a1.dist-info}/entry_points.txt +0 -0
reflex/event.py
CHANGED
|
@@ -13,17 +13,13 @@ from typing import (
|
|
|
13
13
|
Annotated,
|
|
14
14
|
Any,
|
|
15
15
|
Callable,
|
|
16
|
-
Dict,
|
|
17
16
|
Generic,
|
|
18
17
|
List,
|
|
19
|
-
Optional,
|
|
20
18
|
Protocol,
|
|
21
19
|
Sequence,
|
|
22
|
-
Tuple,
|
|
23
20
|
Type,
|
|
24
21
|
TypedDict,
|
|
25
22
|
TypeVar,
|
|
26
|
-
Union,
|
|
27
23
|
get_args,
|
|
28
24
|
get_origin,
|
|
29
25
|
get_type_hints,
|
|
@@ -70,10 +66,10 @@ class Event:
|
|
|
70
66
|
name: str
|
|
71
67
|
|
|
72
68
|
# The routing data where event occurred
|
|
73
|
-
router_data:
|
|
69
|
+
router_data: dict[str, Any] = dataclasses.field(default_factory=dict)
|
|
74
70
|
|
|
75
71
|
# The event payload.
|
|
76
|
-
payload:
|
|
72
|
+
payload: dict[str, Any] = dataclasses.field(default_factory=dict)
|
|
77
73
|
|
|
78
74
|
@property
|
|
79
75
|
def substate_token(self) -> str:
|
|
@@ -99,7 +95,7 @@ class EventActionsMixin:
|
|
|
99
95
|
"""Mixin for DOM event actions."""
|
|
100
96
|
|
|
101
97
|
# Whether to `preventDefault` or `stopPropagation` on the event.
|
|
102
|
-
event_actions:
|
|
98
|
+
event_actions: dict[str, bool | int] = dataclasses.field(default_factory=dict)
|
|
103
99
|
|
|
104
100
|
@property
|
|
105
101
|
def stop_propagation(self) -> Self:
|
|
@@ -261,14 +257,14 @@ class EventSpec(EventActionsMixin):
|
|
|
261
257
|
client_handler_name: str = dataclasses.field(default="")
|
|
262
258
|
|
|
263
259
|
# The arguments to pass to the function.
|
|
264
|
-
args:
|
|
260
|
+
args: tuple[tuple[Var, Var], ...] = dataclasses.field(default_factory=tuple)
|
|
265
261
|
|
|
266
262
|
def __init__(
|
|
267
263
|
self,
|
|
268
264
|
handler: EventHandler,
|
|
269
|
-
event_actions:
|
|
265
|
+
event_actions: dict[str, bool | int] | None = None,
|
|
270
266
|
client_handler_name: str = "",
|
|
271
|
-
args:
|
|
267
|
+
args: tuple[tuple[Var, Var], ...] = (),
|
|
272
268
|
):
|
|
273
269
|
"""Initialize an EventSpec.
|
|
274
270
|
|
|
@@ -285,7 +281,7 @@ class EventSpec(EventActionsMixin):
|
|
|
285
281
|
object.__setattr__(self, "client_handler_name", client_handler_name)
|
|
286
282
|
object.__setattr__(self, "args", args or ())
|
|
287
283
|
|
|
288
|
-
def with_args(self, args:
|
|
284
|
+
def with_args(self, args: tuple[tuple[Var, Var], ...]) -> EventSpec:
|
|
289
285
|
"""Copy the event spec, with updated args.
|
|
290
286
|
|
|
291
287
|
Args:
|
|
@@ -343,7 +339,7 @@ class CallableEventSpec(EventSpec):
|
|
|
343
339
|
API with functions that return a family of EventSpec.
|
|
344
340
|
"""
|
|
345
341
|
|
|
346
|
-
fn:
|
|
342
|
+
fn: Callable[..., EventSpec] | None = None
|
|
347
343
|
|
|
348
344
|
def __init__(self, fn: Callable[..., EventSpec] | None = None, **kwargs):
|
|
349
345
|
"""Initialize a CallableEventSpec.
|
|
@@ -392,24 +388,22 @@ class CallableEventSpec(EventSpec):
|
|
|
392
388
|
class EventChain(EventActionsMixin):
|
|
393
389
|
"""Container for a chain of events that will be executed in order."""
|
|
394
390
|
|
|
395
|
-
events: Sequence[
|
|
391
|
+
events: Sequence[EventSpec | EventVar | EventCallback] = dataclasses.field(
|
|
396
392
|
default_factory=list
|
|
397
393
|
)
|
|
398
394
|
|
|
399
|
-
args_spec:
|
|
400
|
-
default=None
|
|
401
|
-
)
|
|
395
|
+
args_spec: Callable | Sequence[Callable] | None = dataclasses.field(default=None)
|
|
402
396
|
|
|
403
|
-
invocation:
|
|
397
|
+
invocation: Var | None = dataclasses.field(default=None)
|
|
404
398
|
|
|
405
399
|
@classmethod
|
|
406
400
|
def create(
|
|
407
401
|
cls,
|
|
408
402
|
value: EventType,
|
|
409
403
|
args_spec: ArgsSpec | Sequence[ArgsSpec],
|
|
410
|
-
key:
|
|
404
|
+
key: str | None = None,
|
|
411
405
|
**event_chain_kwargs,
|
|
412
|
-
) ->
|
|
406
|
+
) -> EventChain | Var:
|
|
413
407
|
"""Create an event chain from a variety of input types.
|
|
414
408
|
|
|
415
409
|
Args:
|
|
@@ -451,7 +445,7 @@ class EventChain(EventActionsMixin):
|
|
|
451
445
|
|
|
452
446
|
# If the input is a list of event handlers, create an event chain.
|
|
453
447
|
if isinstance(value, List):
|
|
454
|
-
events:
|
|
448
|
+
events: list[EventSpec | EventVar] = []
|
|
455
449
|
for v in value:
|
|
456
450
|
if isinstance(v, (EventHandler, EventSpec)):
|
|
457
451
|
# Call the event handler to get the event.
|
|
@@ -532,7 +526,7 @@ class JavasciptKeyboardEvent:
|
|
|
532
526
|
shiftKey: bool = False # noqa: N815
|
|
533
527
|
|
|
534
528
|
|
|
535
|
-
def input_event(e: ObjectVar[JavascriptInputEvent]) ->
|
|
529
|
+
def input_event(e: ObjectVar[JavascriptInputEvent]) -> tuple[Var[str]]:
|
|
536
530
|
"""Get the value from an input event.
|
|
537
531
|
|
|
538
532
|
Args:
|
|
@@ -555,7 +549,7 @@ class KeyInputInfo(TypedDict):
|
|
|
555
549
|
|
|
556
550
|
def key_event(
|
|
557
551
|
e: ObjectVar[JavasciptKeyboardEvent],
|
|
558
|
-
) ->
|
|
552
|
+
) -> tuple[Var[str], Var[KeyInputInfo]]:
|
|
559
553
|
"""Get the key from a keyboard event.
|
|
560
554
|
|
|
561
555
|
Args:
|
|
@@ -577,7 +571,7 @@ def key_event(
|
|
|
577
571
|
)
|
|
578
572
|
|
|
579
573
|
|
|
580
|
-
def no_args_event_spec() ->
|
|
574
|
+
def no_args_event_spec() -> tuple[()]:
|
|
581
575
|
"""Empty event handler.
|
|
582
576
|
|
|
583
577
|
Returns:
|
|
@@ -598,7 +592,7 @@ U = TypeVar("U")
|
|
|
598
592
|
class IdentityEventReturn(Generic[T], Protocol):
|
|
599
593
|
"""Protocol for an identity event return."""
|
|
600
594
|
|
|
601
|
-
def __call__(self, *values: Var[T]) ->
|
|
595
|
+
def __call__(self, *values: Var[T]) -> tuple[Var[T], ...]:
|
|
602
596
|
"""Return the input values.
|
|
603
597
|
|
|
604
598
|
Args:
|
|
@@ -613,13 +607,13 @@ class IdentityEventReturn(Generic[T], Protocol):
|
|
|
613
607
|
@overload
|
|
614
608
|
def passthrough_event_spec( # pyright: ignore [reportOverlappingOverload]
|
|
615
609
|
event_type: Type[T], /
|
|
616
|
-
) -> Callable[[Var[T]],
|
|
610
|
+
) -> Callable[[Var[T]], tuple[Var[T]]]: ...
|
|
617
611
|
|
|
618
612
|
|
|
619
613
|
@overload
|
|
620
614
|
def passthrough_event_spec(
|
|
621
615
|
event_type_1: Type[T], event_type2: Type[U], /
|
|
622
|
-
) -> Callable[[Var[T], Var[U]],
|
|
616
|
+
) -> Callable[[Var[T], Var[U]], tuple[Var[T], Var[U]]]: ...
|
|
623
617
|
|
|
624
618
|
|
|
625
619
|
@overload
|
|
@@ -636,11 +630,11 @@ def passthrough_event_spec(*event_types: Type[T]) -> IdentityEventReturn[T]: #
|
|
|
636
630
|
A function that returns the input event as output.
|
|
637
631
|
"""
|
|
638
632
|
|
|
639
|
-
def inner(*values: Var[T]) ->
|
|
633
|
+
def inner(*values: Var[T]) -> tuple[Var[T], ...]:
|
|
640
634
|
return values
|
|
641
635
|
|
|
642
636
|
inner_type = tuple(Var[event_type] for event_type in event_types)
|
|
643
|
-
return_annotation =
|
|
637
|
+
return_annotation = tuple[inner_type]
|
|
644
638
|
|
|
645
639
|
inner.__signature__ = inspect.signature(inner).replace( # pyright: ignore [reportFunctionMemberAccess]
|
|
646
640
|
parameters=[
|
|
@@ -667,11 +661,11 @@ def passthrough_event_spec(*event_types: Type[T]) -> IdentityEventReturn[T]: #
|
|
|
667
661
|
class FileUpload:
|
|
668
662
|
"""Class to represent a file upload."""
|
|
669
663
|
|
|
670
|
-
upload_id:
|
|
671
|
-
on_upload_progress:
|
|
664
|
+
upload_id: str | None = None
|
|
665
|
+
on_upload_progress: EventHandler | Callable | None = None
|
|
672
666
|
|
|
673
667
|
@staticmethod
|
|
674
|
-
def on_upload_progress_args_spec(_prog: Var[
|
|
668
|
+
def on_upload_progress_args_spec(_prog: Var[dict[str, int | float | bool]]):
|
|
675
669
|
"""Args spec for on_upload_progress event handler.
|
|
676
670
|
|
|
677
671
|
Returns:
|
|
@@ -702,7 +696,7 @@ class FileUpload:
|
|
|
702
696
|
Var(_js_expr="files"),
|
|
703
697
|
Var(
|
|
704
698
|
_js_expr="filesById",
|
|
705
|
-
_var_type=
|
|
699
|
+
_var_type=dict[str, Any],
|
|
706
700
|
_var_data=VarData.merge(upload_files_context_var_data),
|
|
707
701
|
).to(ObjectVar)[LiteralVar.create(upload_id)],
|
|
708
702
|
),
|
|
@@ -982,7 +976,7 @@ def remove_session_storage(key: str) -> EventSpec:
|
|
|
982
976
|
)
|
|
983
977
|
|
|
984
978
|
|
|
985
|
-
def set_clipboard(content:
|
|
979
|
+
def set_clipboard(content: str | Var[str]) -> EventSpec:
|
|
986
980
|
"""Set the text in content in the clipboard.
|
|
987
981
|
|
|
988
982
|
Args:
|
|
@@ -1002,7 +996,7 @@ def set_clipboard(content: Union[str, Var[str]]) -> EventSpec:
|
|
|
1002
996
|
|
|
1003
997
|
def download(
|
|
1004
998
|
url: str | Var | None = None,
|
|
1005
|
-
filename:
|
|
999
|
+
filename: str | Var | None = None,
|
|
1006
1000
|
data: str | bytes | Var | None = None,
|
|
1007
1001
|
) -> EventSpec:
|
|
1008
1002
|
"""Download the file at a given path or with the specified data.
|
|
@@ -1203,7 +1197,7 @@ def get_hydrate_event(state: BaseState) -> str:
|
|
|
1203
1197
|
def call_event_handler(
|
|
1204
1198
|
event_callback: EventHandler | EventSpec,
|
|
1205
1199
|
event_spec: ArgsSpec | Sequence[ArgsSpec],
|
|
1206
|
-
key:
|
|
1200
|
+
key: str | None = None,
|
|
1207
1201
|
) -> EventSpec:
|
|
1208
1202
|
"""Call an event handler to get the event spec.
|
|
1209
1203
|
|
|
@@ -1281,7 +1275,9 @@ def call_event_handler(
|
|
|
1281
1275
|
]
|
|
1282
1276
|
|
|
1283
1277
|
# check that args of event handler are matching the spec if type hints are provided
|
|
1284
|
-
for i, arg in enumerate(
|
|
1278
|
+
for i, arg in enumerate(
|
|
1279
|
+
event_callback_spec.args[1 : len(args_types_without_vars) + 1]
|
|
1280
|
+
):
|
|
1285
1281
|
if arg not in type_hints_of_provided_callback:
|
|
1286
1282
|
continue
|
|
1287
1283
|
|
|
@@ -1452,7 +1448,7 @@ def check_fn_match_arg_spec(
|
|
|
1452
1448
|
def call_event_fn(
|
|
1453
1449
|
fn: Callable,
|
|
1454
1450
|
arg_spec: ArgsSpec | Sequence[ArgsSpec],
|
|
1455
|
-
key:
|
|
1451
|
+
key: str | None = None,
|
|
1456
1452
|
) -> list[EventSpec] | Var:
|
|
1457
1453
|
"""Call a function to a list of event specs.
|
|
1458
1454
|
|
|
@@ -1885,7 +1881,7 @@ LAMBDA_OR_STATE = TypeAliasType(
|
|
|
1885
1881
|
type_params=(ARGS,),
|
|
1886
1882
|
)
|
|
1887
1883
|
|
|
1888
|
-
ItemOrList = V |
|
|
1884
|
+
ItemOrList = V | list[V]
|
|
1889
1885
|
|
|
1890
1886
|
BASIC_EVENT_TYPES = TypeAliasType(
|
|
1891
1887
|
"BASIC_EVENT_TYPES", EventSpec | EventHandler | Var[Any], type_params=()
|
|
@@ -1946,10 +1942,10 @@ class EventNamespace(types.SimpleNamespace):
|
|
|
1946
1942
|
func: Callable[[BASE_STATE, Unpack[P]], Any] | None = None,
|
|
1947
1943
|
*,
|
|
1948
1944
|
background: bool | None = None,
|
|
1949
|
-
) ->
|
|
1950
|
-
EventCallback[Unpack[P]]
|
|
1951
|
-
Callable[[Callable[[BASE_STATE, Unpack[P]], Any]], EventCallback[Unpack[P]]]
|
|
1952
|
-
|
|
1945
|
+
) -> (
|
|
1946
|
+
EventCallback[Unpack[P]]
|
|
1947
|
+
| Callable[[Callable[[BASE_STATE, Unpack[P]], Any]], EventCallback[Unpack[P]]]
|
|
1948
|
+
):
|
|
1953
1949
|
"""Wrap a function to be used as an event.
|
|
1954
1950
|
|
|
1955
1951
|
Args:
|
|
@@ -4,7 +4,7 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
import dataclasses
|
|
6
6
|
import re
|
|
7
|
-
from typing import Any, Callable
|
|
7
|
+
from typing import Any, Callable
|
|
8
8
|
|
|
9
9
|
from reflex import constants
|
|
10
10
|
from reflex.event import EventChain, EventHandler, EventSpec, run_script
|
|
@@ -253,9 +253,7 @@ class ClientStateVar(Var):
|
|
|
253
253
|
"""
|
|
254
254
|
return self.set_value()
|
|
255
255
|
|
|
256
|
-
def retrieve(
|
|
257
|
-
self, callback: Union[EventHandler, Callable, None] = None
|
|
258
|
-
) -> EventSpec:
|
|
256
|
+
def retrieve(self, callback: EventHandler | Callable | None = None) -> EventSpec:
|
|
259
257
|
"""Pass the value of the client state variable to a backend EventHandler.
|
|
260
258
|
|
|
261
259
|
The event handler must `yield` or `return` the EventSpec to trigger the event.
|
reflex/experimental/layout.py
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
-
from typing import Any
|
|
5
|
+
from typing import Any
|
|
6
6
|
|
|
7
7
|
from reflex import color, cond
|
|
8
8
|
from reflex.components.base.fragment import Fragment
|
|
@@ -64,7 +64,7 @@ class Sidebar(Box, MemoizationLeaf):
|
|
|
64
64
|
}
|
|
65
65
|
)
|
|
66
66
|
|
|
67
|
-
def add_hooks(self) ->
|
|
67
|
+
def add_hooks(self) -> list[Var]:
|
|
68
68
|
"""Get the hooks to render.
|
|
69
69
|
|
|
70
70
|
Returns:
|