import { DeepMaybeObservable, Fn } from '@usels/core'; import { ConfigurableWindow } from '../../shared/configurable.mjs'; import '@legendapp/state'; type KeyPredicate = (event: KeyboardEvent) => boolean; type KeyFilter = true | string | string[] | KeyPredicate; type KeyStrokeEventName = "keydown" | "keypress" | "keyup"; interface UseOnKeyStrokeOptions extends ConfigurableWindow { /** * Event name to listen for. * @default "keydown" */ eventName?: KeyStrokeEventName; /** * Event target. * @default window */ target?: EventTarget | null; /** * Use passive event listener. * @default false */ passive?: boolean; /** * Ignore repeated events when a key is held down. * @default false */ dedupe?: boolean; } type UseOnKeyStrokeReturn = Fn; /** * Framework-agnostic keyboard key stroke listener with key filtering. * * @param key - Key filter (string, string[], predicate, or `true` for all) * @param handler - Callback fired when a matching key event occurs * @param options - Configuration options * @returns A stop function that removes the event listener */ declare function createOnKeyStroke(key: KeyFilter, handler: (event: KeyboardEvent) => void, options?: DeepMaybeObservable): UseOnKeyStrokeReturn; /** * Framework-agnostic keyboard key stroke listener for all keys. * * @param handler - Callback fired on every key event * @param options - Configuration options * @returns A stop function that removes the event listener */ declare function createOnKeyStroke(handler: (event: KeyboardEvent) => void, options?: DeepMaybeObservable): UseOnKeyStrokeReturn; /** * Listen for `keydown` events with key filtering. */ declare function createOnKeyDown(key: KeyFilter, handler: (event: KeyboardEvent) => void, options?: Omit): UseOnKeyStrokeReturn; /** * Listen for `keypress` events with key filtering. */ declare function createOnKeyPressed(key: KeyFilter, handler: (event: KeyboardEvent) => void, options?: Omit): UseOnKeyStrokeReturn; /** * Listen for `keyup` events with key filtering. */ declare function createOnKeyUp(key: KeyFilter, handler: (event: KeyboardEvent) => void, options?: Omit): UseOnKeyStrokeReturn; export { type KeyFilter, type KeyPredicate, type KeyStrokeEventName, type UseOnKeyStrokeOptions, type UseOnKeyStrokeReturn, createOnKeyDown, createOnKeyPressed, createOnKeyStroke, createOnKeyUp };