/** * A Keyboard device bound to an Element. Allows you to detect the state of the key presses. Note * that the Keyboard object must be attached to an Element before it can detect any key presses. * * @category Input */ export class Keyboard extends EventHandler { /** * Fired when a key is pressed. The handler is passed a {@link KeyboardEvent}. * * @event * @example * const onKeyDown = (e) => { * if (e.key === pc.KEY_SPACE) { * // space key pressed * } * e.event.preventDefault(); // Use original browser event to prevent browser action. * }; * * app.keyboard.on("keydown", onKeyDown, this); */ static EVENT_KEYDOWN: string; /** * Fired when a key is released. The handler is passed a {@link KeyboardEvent}. * * @event * @example * const onKeyUp = (e) => { * if (e.key === pc.KEY_SPACE) { * // space key released * } * e.event.preventDefault(); // Use original browser event to prevent browser action. * }; * * app.keyboard.on("keyup", onKeyUp, this); */ static EVENT_KEYUP: string; /** * Create a new Keyboard instance. * * @param {Element|Window} [element] - Element to attach Keyboard to. Note that elements like * <div> can't accept focus by default. To use keyboard events on an element like this it * must have a value of 'tabindex' e.g. tabindex="0". See * [here](https://www.w3.org/WAI/GL/WCAG20/WD-WCAG20-TECHS/SCR29.html) for more details. * @param {object} [options] - Optional options object. * @param {boolean} [options.preventDefault] - Call preventDefault() in key event handlers. * This stops the default action of the event occurring. e.g. Ctrl+T will not open a new * browser tab. * @param {boolean} [options.stopPropagation] - Call stopPropagation() in key event handlers. * This stops the event bubbling up the DOM so no parent handlers will be notified of the * event. * @example * // attach keyboard listeners to the window * const keyboard = new pc.Keyboard(window); */ constructor(element?: Element | Window, options?: { preventDefault?: boolean; stopPropagation?: boolean; }); /** @private */ private _element; /** @private */ private _keymap; /** @private */ private _lastmap; _keyDownHandler: any; _keyUpHandler: any; _keyPressHandler: any; _visibilityChangeHandler: any; _windowBlurHandler: any; preventDefault: boolean; stopPropagation: boolean; /** * Attach the keyboard event handlers to an Element. * * @param {Element|Window} element - The element to listen for keyboard events on. */ attach(element: Element | Window): void; /** * Detach the keyboard event handlers from the element it is attached to. */ detach(): void; /** * Convert a key code into a key identifier. * * @param {number} keyCode - The key code. * @returns {string} The key identifier. * @private */ private toKeyIdentifier; /** * Process the browser keydown event. * * @param {globalThis.KeyboardEvent} event - The browser keyboard event. * @private */ private _handleKeyDown; /** * Process the browser keyup event. * * @param {globalThis.KeyboardEvent} event - The browser keyboard event. * @private */ private _handleKeyUp; /** * Process the browser keypress event. * * @param {globalThis.KeyboardEvent} event - The browser keyboard event. * @private */ private _handleKeyPress; /** * Handle the browser visibilitychange event. * * @private */ private _handleVisibilityChange; /** * Handle the browser blur event. * * @private */ private _handleWindowBlur; /** * Called once per frame to update internal state. * * @ignore */ update(): void; /** * Return true if the key is currently down. * * @param {number} key - The keyCode of the key to test. See the KEY_* constants. * @returns {boolean} True if the key was pressed, false if not. */ isPressed(key: number): boolean; /** * Returns true if the key was pressed since the last update. * * @param {number} key - The keyCode of the key to test. See the KEY_* constants. * @returns {boolean} True if the key was pressed. */ wasPressed(key: number): boolean; /** * Returns true if the key was released since the last update. * * @param {number} key - The keyCode of the key to test. See the KEY_* constants. * @returns {boolean} True if the key was pressed. */ wasReleased(key: number): boolean; } import { EventHandler } from '../../core/event-handler.js';