@threlte/extras
Version:
Utilities, abstractions and plugins for your Threlte apps
48 lines (47 loc) • 1.6 kB
TypeScript
export declare class KeyState {
/** Whether the key is currently held down */
pressed: boolean;
/** Whether the key was first pressed this frame */
justPressed: boolean;
/** Whether the key was released this frame */
justReleased: boolean;
}
export interface UseKeyboardOptions {
/**
* The target element to listen for keyboard events on.
* @default window
*/
target?: EventTarget;
/**
* Listen during the capture phase instead of the bubble phase. Use this
* when keyboard input must run before descendants can stop propagation.
* @default false
*/
capture?: boolean;
}
type KeyboardEventType = 'keydown' | 'keyup';
type KeyboardEventHandler = (event: KeyboardEvent) => void;
export declare const useKeyboard: (optionsFn?: () => UseKeyboardOptions) => {
/**
* The internal task, exposed for ordering other tasks relative to
* keyboard processing via `useTask('myTask', fn, { after: keyboard.task })`.
*/
task: import("@threlte/core").Task;
/**
* Get the state of a key by its `KeyboardEvent.key` value
* (e.g. `'w'`, `'Space'`, `'ArrowUp'`, `'Shift'`).
* Matching is case-insensitive.
*/
key: (key: string) => KeyState;
/**
* Register an event listener. Returns a cleanup function.
*
* ```ts
* const off = keyboard.on('keydown', (e) => console.log(e.key))
* // later: off()
* ```
*/
on: (event: KeyboardEventType, fn: KeyboardEventHandler) => () => void;
};
export type UseKeyboardReturn = ReturnType<typeof useKeyboard>;
export {};