import { type DefinedTypedEvent, type DefineEvent, type TypedEvent } from '../../typed-event/typed-event.js'; import { type CustomElementTagName } from '../custom-tag-name.js'; /** * Base type for defining element events inside of an element definition. * * @category Internal */ export type EventsInitMap = Record>; /** * Used to define element events, with a type. * * @category Element Definition * @example * * ```ts * import {html, defineElement, defineElementEvent, listen} from 'element-vir'; * * const MyElement = defineElement()({ * tagName: 'my-element', * events: { * myOutput: defineElementEvent(), * }, * render({events, dispatch}) { * return html` *
{ * dispatch(new events.myOutput(1)); * })} * > * Some div *
* `; * }, * }); * ``` */ export declare function defineElementEvent(): DefineEvent; /** * Extracts the detail type of the given event name from the given event init map. * * @category Internal */ export type EventInitMapEventDetailExtractor = EventsInitGeneric[EventTypeNameGeneric] extends DefineEvent ? Detail : never; /** * Maps the given element tag name and map of event names to their run-time event type strings. * * @category Internal */ export type EventDescriptorMap = { [CurrentEventTypeName in keyof EventsInitGeneric]: DefinedTypedEvent>; }; /** * Extract the event detail type from a {@link TypedEvent}, {@link DefinedTypedEvent}, or * `CustomEvent. * * @category Internal */ export type EventDetail | DefinedTypedEvent | CustomEvent> = ElementEvent extends TypedEvent ? Detail : ElementEvent extends DefinedTypedEvent ? Detail : ElementEvent extends CustomEvent ? Detail : 'TYPE ERROR: failed to extract event detail type'; /** * Maps an element definition initialization's tag name and event map to a map of ready-to-construct * event classes. This also verifies that the input event init map has valid keys. * * @category Internal */ export declare function createEventDescriptorMap(tagName: CustomElementTagName, eventsInit: EventsInitGeneric | undefined): EventDescriptorMap;