/** Dispatch a `CustomEvent` from `el`. It bubbles by default so an ancestor can catch it. */ export function dispatch( el: HTMLElement, name: string, detail: T, init: Omit, 'detail'> = {}, ): void { el.dispatchEvent(new CustomEvent(name, { bubbles: true, ...init, detail })); }