element-vir
Version:
Heroic. Reactive. Declarative. Type safe. Web components without compromise.
57 lines (56 loc) • 4.28 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 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 BaseStringName, type SlotNamesMap, type StringNameMap } from './properties/string-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 BaseStringName<TagName> = any, CssVarKeys extends BaseStringName<TagName> = any, SlotNames extends ReadonlyArray<string> = any, TestIds extends ReadonlyArray<string> = any> = (params: RenderParams<TagName, Inputs, State, EventsInit, HostClassKeys, CssVarKeys, SlotNames, TestIds>) => 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 BaseStringName<TagName>, CssVarKeys extends BaseStringName<TagName>, SlotNames extends ReadonlyArray<string>, TestIds extends ReadonlyArray<string>> = (params: RenderParams<TagName, Inputs, State, EventsInit, HostClassKeys, CssVarKeys, SlotNames, TestIds>) => 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 BaseStringName<TagName>, CssVarKeys extends BaseStringName<TagName>, SlotNames extends ReadonlyArray<string>, TestIds 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, TestIds>;
slotNames: SlotNamesMap<TagName, SlotNames>;
testIds: Readonly<StringNameMap<TagName, 'test-id', TestIds>>;
/** 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 BaseStringName<TagName>, CssVarKeys extends BaseStringName<TagName>, SlotNames extends ReadonlyArray<string>, TestIds extends ReadonlyArray<string>>({ element, eventsMap, cssVars, slotNamesMap, testIdsMap, }: {
element: DeclarativeElement<TagName, Inputs, State, EventsInit, HostClassKeys, CssVarKeys, SlotNames, TestIds>;
eventsMap: EventDescriptorMap<TagName, EventsInit>;
cssVars: Readonly<CssVars<TagName, CssVarKeys>>;
slotNamesMap: SlotNamesMap<TagName, SlotNames>;
testIdsMap: Readonly<StringNameMap<TagName, 'test-id', TestIds>>;
}): RenderParams<TagName, Inputs, State, EventsInit, HostClassKeys, CssVarKeys, SlotNames, TestIds>;