diff --git a/reflex/event.py b/reflex/event.py index 381ac7514..4539854f4 100644 --- a/reflex/event.py +++ b/reflex/event.py @@ -25,7 +25,7 @@ from typing import ( overload, ) -from typing_extensions import ParamSpec, Protocol, get_args, get_origin +from typing_extensions import ParamSpec, Protocol, TypedDict, get_args, get_origin from reflex import constants from reflex.constants.state import FRONTEND_EVENT_STATE @@ -440,6 +440,10 @@ class JavasciptKeyboardEvent: """Interface for a Javascript KeyboardEvent https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent.""" key: str = "" + altKey: bool = False + ctrlKey: bool = False + metaKey: bool = False + shiftKey: bool = False def input_event(e: Var[JavascriptInputEvent]) -> Tuple[Var[str]]: @@ -454,7 +458,16 @@ def input_event(e: Var[JavascriptInputEvent]) -> Tuple[Var[str]]: return (e.target.value,) -def key_event(e: Var[JavasciptKeyboardEvent]) -> Tuple[Var[str]]: +class KeyInputInfo(TypedDict): + """Information about a key input event.""" + + alt_key: bool + ctrl_key: bool + meta_key: bool + shift_key: bool + + +def key_event(e: Var[JavasciptKeyboardEvent]) -> Tuple[Var[str], Var[KeyInputInfo]]: """Get the key from a keyboard event. Args: @@ -463,7 +476,17 @@ def key_event(e: Var[JavasciptKeyboardEvent]) -> Tuple[Var[str]]: Returns: The key from the keyboard event. """ - return (e.key,) + return ( + e.key, + Var.create( + { + "alt_key": e.altKey, + "ctrl_key": e.ctrlKey, + "meta_key": e.metaKey, + "shift_key": e.shiftKey, + }, + ), + ) def empty_event() -> Tuple[()]: