{"version":3,"file":"keyboard.mjs","sources":["../../../../../src/gestures/press/utils/keyboard.ts"],"sourcesContent":["import { isPressing } from \"./state\"\n\n/**\n * Filter out events that are not \"Enter\" keys.\n */\nfunction filterEvents(callback: (event: KeyboardEvent) => void) {\n    return (event: KeyboardEvent) => {\n        if (event.key !== \"Enter\") return\n        callback(event)\n    }\n}\n\nfunction firePointerEvent(target: EventTarget, type: \"down\" | \"up\" | \"cancel\") {\n    target.dispatchEvent(\n        new PointerEvent(\"pointer\" + type, { isPrimary: true, bubbles: true })\n    )\n}\n\nexport const enableKeyboardPress = (\n    element: HTMLElement,\n    eventOptions: AddEventListenerOptions\n) => {\n    /**\n     * Listeners are scoped to this focus and all released on blur, rather\n     * than added per Enter press, so they can't accumulate and fire\n     * duplicate pointerup/pointercancel events. See #3935.\n     */\n    let isKeyPressing = false\n\n    const handleKeydown = filterEvents(() => {\n        if (isPressing.has(element)) return\n        isKeyPressing = true\n        firePointerEvent(element, \"down\")\n    })\n\n    const handleKeyup = filterEvents(() => {\n        if (!isKeyPressing) return\n        isKeyPressing = false\n        firePointerEvent(element, \"up\")\n    })\n\n    element.addEventListener(\"keydown\", handleKeydown, eventOptions)\n    element.addEventListener(\"keyup\", handleKeyup, eventOptions)\n\n    /**\n     * On blur, remove the key listeners and cancel any keyboard press.\n     */\n    element.addEventListener(\n        \"blur\",\n        () => {\n            element.removeEventListener(\"keydown\", handleKeydown)\n            element.removeEventListener(\"keyup\", handleKeyup)\n            if (isKeyPressing) firePointerEvent(element, \"cancel\")\n        },\n        { ...eventOptions, once: true }\n    )\n}\n"],"names":[],"mappings":";;AAEA;;AAEG;AACH,SAAS,YAAY,CAAC,QAAwC,EAAA;IAC1D,OAAO,CAAC,KAAoB,KAAI;AAC5B,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO;YAAE;QAC3B,QAAQ,CAAC,KAAK,CAAC;AACnB,IAAA,CAAC;AACL;AAEA,SAAS,gBAAgB,CAAC,MAAmB,EAAE,IAA8B,EAAA;IACzE,MAAM,CAAC,aAAa,CAChB,IAAI,YAAY,CAAC,SAAS,GAAG,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CACzE;AACL;MAEa,mBAAmB,GAAG,CAC/B,OAAoB,EACpB,YAAqC,KACrC;AACA;;;;AAIG;IACH,IAAI,aAAa,GAAG,KAAK;AAEzB,IAAA,MAAM,aAAa,GAAG,YAAY,CAAC,MAAK;AACpC,QAAA,IAAI,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE;QAC7B,aAAa,GAAG,IAAI;AACpB,QAAA,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC;AACrC,IAAA,CAAC,CAAC;AAEF,IAAA,MAAM,WAAW,GAAG,YAAY,CAAC,MAAK;AAClC,QAAA,IAAI,CAAC,aAAa;YAAE;QACpB,aAAa,GAAG,KAAK;AACrB,QAAA,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC;AACnC,IAAA,CAAC,CAAC;IAEF,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,EAAE,YAAY,CAAC;IAChE,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,CAAC;AAE5D;;AAEG;AACH,IAAA,OAAO,CAAC,gBAAgB,CACpB,MAAM,EACN,MAAK;AACD,QAAA,OAAO,CAAC,mBAAmB,CAAC,SAAS,EAAE,aAAa,CAAC;AACrD,QAAA,OAAO,CAAC,mBAAmB,CAAC,OAAO,EAAE,WAAW,CAAC;AACjD,QAAA,IAAI,aAAa;AAAE,YAAA,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC1D,CAAC,EACD,EAAE,GAAG,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,CAClC;AACL;;;;"}