import type { EventCallback } from "./events.ts"; import type { ReadableBox } from "../box/box-extras.svelte.ts"; /** * Composes event handlers into a single function that can be called with an event. * If the previous handler cancels the event using `event.preventDefault()`, the handlers * that follow will not be called. */ export function composeHandlers( ...handlers: Array | ReadableBox> | undefined> ): (e: E) => void { return function (this: T, e: E) { for (const handler of handlers) { if (!handler) continue; if (e.defaultPrevented) return; if (typeof handler === "function") { handler.call(this, e); } else { handler.current?.call(this, e); } } }; }