import { type NonEmptyString } from '../util/type.js'; /** * A custom event with strict types for details and the event's `type` property. * * @category Internal */ export declare class TypedEvent extends CustomEvent { readonly _type: EventTypeNameGeneric; get type(): EventTypeNameGeneric; constructor(type: EventTypeNameGeneric | { type: EventTypeNameGeneric; }, value: EventDetailGeneric); } /** * A function that defines a typed event, used for defining element events in an element's * definition. * * @category Internal */ export type DefineEvent = (eventType: NonEmptyString) => DefinedTypedEvent; /** * A concrete typed event definition. * * @category Internal */ export type DefinedTypedEvent = (new (eventValue: EventDetailGeneric) => TypedEvent) & { type: EventTypeNameGeneric; }; /** * Define a stand-alone typed event that can be emitted and listened to inside of HTML templates. * * Make sure to use currying and call this function twice! (This is required by TypeScript's type * parameter inference system.) * * @category Element Definition * @example * * ```ts * import {defineTypedEvent} from 'element-vir'; * * const myCustomEvent = defineTypedEvent()('my-custom-event'); * * const myCustomEvent2 = defineTypedEvent()( * // the event's `.type` string * 'my-custom-event2', * ); * ``` */ export declare function defineTypedEvent(): < /** * EventTypeNameGeneric is used for the event type property but not for the event value * type... so it's named "name" instead of "type" cause type is overloaded here. */ EventTypeNameGeneric extends string>(eventType: NonEmptyString) => DefinedTypedEvent;