import type { DetailOf, EventKeys, Prefix, StringOf } from 'everyday-types' import { bool, Fluent, toFluent } from 'to-fluent' export class DispatchOptions implements CustomEventInit { bubbles = bool cancelable = bool composed = bool } export type Dispatch = T & Fluent> const dispatchEvent = (el: any, nameOrEvent: any, detail: any, init: any, options: any) => el.dispatchEvent( nameOrEvent instanceof Event ? nameOrEvent : new CustomEvent(nameOrEvent, { detail, ...init, ...options }) ) export const dispatch = toFluent( DispatchOptions, options => (>( el: T, nameOrEvent: StringOf | Event, detail?: DetailOf>, init?: CustomEventInit, ) => dispatchEvent(el, nameOrEvent, detail, init, options)) ) export const dispatchBind = (el: T) => toFluent( DispatchOptions, options => (>( nameOrEvent: StringOf | Event, detail?: DetailOf>, init?: CustomEventInit, ) => dispatchEvent(el, nameOrEvent, detail, init, options)) )