element-vir
Version:
Heroic. Reactive. Declarative. Type safe. Web components without compromise.
56 lines (55 loc) • 3.97 kB
TypeScript
import { type HtmlInterpolation } from '../template-transforms/vir-html/html-interpolation.js';
import { type TypedEvent } from '../typed-event/typed-event.js';
import { type CustomElementTagName } from './custom-tag-name.js';
import { type DeclarativeElement, type DeclarativeElementHost } from './declarative-element.js';
import { type BaseCssPropertyName } from './properties/css-properties.js';
import { type CssVars } from './properties/css-vars.js';
import { type EventDescriptorMap, type EventInitMapEventDetailExtractor, type EventsInitMap } from './properties/element-events.js';
import { type PropertyInitMapBase } from './properties/element-properties.js';
import { type SlotNameMap } from './slot-names.js';
/**
* Type for the `render` element definition method.
*
* @category Internal
*/
export type RenderCallback<TagName extends CustomElementTagName = any, Inputs extends PropertyInitMapBase = any, State extends PropertyInitMapBase = any, EventsInit extends EventsInitMap = any, HostClassKeys extends BaseCssPropertyName<TagName> = any, CssVarKeys extends BaseCssPropertyName<TagName> = any, SlotNames extends ReadonlyArray<string> = any> = (params: RenderParams<TagName, Inputs, State, EventsInit, HostClassKeys, CssVarKeys, SlotNames>) => HtmlInterpolation;
/**
* Type for the `init` and `cleanup` element definition methods.
*
* @category Internal
*/
export type InitCallback<TagName extends CustomElementTagName, Inputs extends PropertyInitMapBase, State extends PropertyInitMapBase, EventsInit extends EventsInitMap, HostClassKeys extends BaseCssPropertyName<TagName>, CssVarKeys extends BaseCssPropertyName<TagName>, SlotNames extends ReadonlyArray<string>> = (params: RenderParams<TagName, Inputs, State, EventsInit, HostClassKeys, CssVarKeys, SlotNames>) => undefined | void;
/**
* Type for the `updateState` render parameter.
*
* @category Internal
*/
export type UpdateStateCallback<State extends PropertyInitMapBase> = (newState: Partial<State>) => void;
/**
* The full parameters object passed to `render`, `init`, and `cleanup` element definition methods.
*
* @category Internal
*/
export type RenderParams<TagName extends CustomElementTagName, Inputs extends PropertyInitMapBase, State extends PropertyInitMapBase, EventsInit extends EventsInitMap, HostClassKeys extends BaseCssPropertyName<TagName>, CssVarKeys extends BaseCssPropertyName<TagName>, SlotNames extends ReadonlyArray<string>> = {
state: Readonly<State>;
cssVars: Readonly<CssVars<TagName, CssVarKeys>>;
updateState: UpdateStateCallback<State>;
events: EventDescriptorMap<TagName, EventsInit>;
host: DeclarativeElementHost<TagName, Inputs, State, EventsInit, HostClassKeys, CssVarKeys, SlotNames>;
slotNames: SlotNameMap<SlotNames>;
/** Dispatch an event from the current element. */
dispatch: <EventTypeName extends keyof EventsInit>(event: TypedEvent<EventTypeName extends string ? EventTypeName : never, EventInitMapEventDetailExtractor<EventTypeName, EventsInit>> | Event) => boolean;
inputs: Readonly<Inputs>;
};
/**
* This is used to create the parameters passed to the `render`, `init`, and `cleanup` element
* definition methods whenever they are called.
*
* @category Internal
*/
export declare function createRenderParams<TagName extends CustomElementTagName, Inputs extends PropertyInitMapBase, State extends PropertyInitMapBase, EventsInit extends EventsInitMap, HostClassKeys extends BaseCssPropertyName<TagName>, CssVarKeys extends BaseCssPropertyName<TagName>, SlotNames extends ReadonlyArray<string>>({ element, eventsMap, cssVars, slotNamesMap, }: {
element: DeclarativeElement<TagName, Inputs, State, EventsInit, HostClassKeys, CssVarKeys, SlotNames>;
eventsMap: EventDescriptorMap<TagName, EventsInit>;
cssVars: Readonly<CssVars<TagName, CssVarKeys>>;
slotNamesMap: SlotNameMap<SlotNames>;
}): RenderParams<TagName, Inputs, State, EventsInit, HostClassKeys, CssVarKeys, SlotNames>;