| 1234567891011121314151617181920212223242526272829303132333435363738 |
- import { isPressing } from './state.mjs';
- /**
- * Filter out events that are not "Enter" keys.
- */
- function filterEvents(callback) {
- return (event) => {
- if (event.key !== "Enter")
- return;
- callback(event);
- };
- }
- function firePointerEvent(target, type) {
- target.dispatchEvent(new PointerEvent("pointer" + type, { isPrimary: true, bubbles: true }));
- }
- const enableKeyboardPress = (focusEvent, eventOptions) => {
- const element = focusEvent.currentTarget;
- if (!element)
- return;
- const handleKeydown = filterEvents(() => {
- if (isPressing.has(element))
- return;
- firePointerEvent(element, "down");
- const handleKeyup = filterEvents(() => {
- firePointerEvent(element, "up");
- });
- const handleBlur = () => firePointerEvent(element, "cancel");
- element.addEventListener("keyup", handleKeyup, eventOptions);
- element.addEventListener("blur", handleBlur, eventOptions);
- });
- element.addEventListener("keydown", handleKeydown, eventOptions);
- /**
- * Add an event listener that fires on blur to remove the keydown events.
- */
- element.addEventListener("blur", () => element.removeEventListener("keydown", handleKeydown), eventOptions);
- };
- export { enableKeyboardPress };
|