from typing import Callable
import solara
show_dialog = solara.reactive(False)
@solara.component_vue("hotkey.vue")
def HotKeyRaw(
key: str,
ctrl: bool = False,
shift: bool = False,
meta: bool = False,
prevent_default: bool = False,
event_pressed: Callable[[], None] = None,
): ...
@solara.component
def HotKey(
key: str,
ctrl: bool = False,
shift: bool = False,
meta: bool = False,
prevent_default: bool = False,
on_press: Callable[[], None] = None
):
# no args for the on_press
HotKeyRaw(key=key,
ctrl=ctrl,
shift=shift,
meta=meta,
prevent_default=prevent_default,
event_pressed=lambda *ignore: on_press())
@solara.component
def Page():
with solara.Card("Hotkey demo"):
solara.InputText("No focus")
solara.InputText("No focus")
solara.Button("Show dialog (press o to open)", on_click=lambda: show_dialog.set(True))
with solara.v.Dialog(
v_model=show_dialog.value,
on_v_model=show_dialog.set,
persistent=True,
max_width="500px",
):
with solara.v.Sheet(class_="pa-4") as sheet:
solara.InputText("No focus")
solara.InputText("No focus")
close = solara.Button("Close (press enter)", on_click=lambda: show_dialog.set(False))
def close_dialog_on_q(widget, event, data):
print("event", event)
# if event.key == "Escape":
show_dialog.set(False)
HotKey(key="q", ctrl=True, on_press=lambda: show_dialog.set(False))
HotKey(key="o", on_press=lambda: show_dialog.set(True))
HotKey(key="Enter", on_press=lambda: show_dialog.set(False))
HotKey(key="Escape", on_press=lambda: show_dialog.set(False))