mirror of
https://github.com/zoriya/v10.git
synced 2026-08-16 02:45:09 +00:00
29 lines
807 B
JavaScript
29 lines
807 B
JavaScript
//#region src/dom/event.ts
|
|
/** Resolve the deepest event target, preferring composedPath for shadow DOM. */
|
|
function resolveEventTarget(event) {
|
|
const path = event.composedPath();
|
|
return path.length > 0 ? path[0] : event.target;
|
|
}
|
|
function onEvent(target, type, options) {
|
|
return new Promise((resolve, reject) => {
|
|
const handleAbort = () => {
|
|
reject(options?.signal?.reason ?? "Aborted");
|
|
};
|
|
if (options?.signal?.aborted) {
|
|
handleAbort();
|
|
return;
|
|
}
|
|
options?.signal?.addEventListener("abort", handleAbort, { once: true });
|
|
target.addEventListener(type, (event) => {
|
|
options?.signal?.removeEventListener("abort", handleAbort);
|
|
resolve(event);
|
|
}, {
|
|
...options,
|
|
once: true
|
|
});
|
|
});
|
|
}
|
|
//#endregion
|
|
export { onEvent, resolveEventTarget };
|
|
|
|
//# sourceMappingURL=event.js.map
|