import { type MaybePromise } from '@augment-vir/common'; import { type DirectiveResult } from '../../lit-exports/all-lit-exports.js'; import { type DefinedTypedEvent, type TypedEvent } from '../../typed-event/typed-event.js'; /** We don't care at all what this returns, just allow anything! */ type ListenCallbackReturn = MaybePromise; /** * Listen to events. These can be native DOM events (use a string for the inputType argument) or * typed events (pass in a return value from {@link defineTypedEvent}). * * @category Directives * @example * * ```ts * import {html, defineElement, listen} from 'element-vir'; * * const MyElement = defineElement()({ * tagName: 'my-element', * render() { * return html` *
{ * console.log('clicked!'); * })} * > * Some div *
* <${MyOtherElement} * ${listen(MyOtherElement.events.someEvent, (event) => { * console.log('event value', event.detail); * })} * > * `; * }, * }); * ``` */ export declare function listen( /** * Needs to come either from a declarative element (like MyDeclarativeElement.events.eventName), * from a typed event created via the {@link defineTypedEvent} function, or be the name of a * built-in event (like `'click'`). */ eventType: DefinedTypedEvent, /** * The callback to fire when an event is caught. Assuming the {@link defineTypedEvent} input is * properly typed, the event given to this callback will also be typed. */ listener: (event: TypedEvent) => ListenCallbackReturn): DirectiveResult; /** * Listen to events. These can be native DOM events (use a string for the inputType argument) or * typed events (pass in a return value from {@link defineTypedEvent}). * * @category Directives * @example * * ```ts * import {html, defineElement, listen} from 'element-vir'; * * const MyElement = defineElement()({ * tagName: 'my-element', * render() { * return html` *
{ * console.log('clicked!'); * })} * > * Some div *
* <${MyOtherElement} * ${listen(MyOtherElement.events.someEvent, (event) => { * console.log('event value', event.detail); * })} * > * `; * }, * }); * ``` */ export declare function listen( /** * Needs to come either from a declarative element (like MyDeclarativeElement.events.eventName), * from a typed event created via the {@link defineTypedEvent} function, or be the name of a * built-in event (like `'click'`). */ eventType: NativeElementEventNameGeneric, /** * The callback to fire when an event is caught. Assuming the {@link defineTypedEvent} input is * properly typed, the event given to this callback will also be typed. */ listener: (event: HTMLElementEventMap[NativeElementEventNameGeneric]) => ListenCallbackReturn): DirectiveResult; export {};