UNPKG

element-vir

Version:

Heroic. Reactive. Declarative. Type safe. Web components without compromise.

42 lines (41 loc) 2.3 kB
import { type CustomElementTagName } from './custom-tag-name.js'; import { type DeclarativeElementInit } from './declarative-element-init.js'; import { type DeclarativeElementDefinition } from './declarative-element.js'; import { type EventsInitMap } from './properties/element-events.js'; import { type PropertyInitMapBase } from './properties/element-properties.js'; import { type BaseStringName } from './properties/string-names.js'; /** * Verifies that the given `Inputs` type does not clash with built-in HTMLElement properties. This * is used within {@link defineElement}. * * @category Internal */ export type DeclarativeElementInputErrorParams<Inputs extends PropertyInitMapBase> = Extract<keyof Inputs, keyof HTMLElement> extends never ? [] : [ 'ERROR: Cannot define an element input property that clashes with native HTMLElement properties.' ]; /** * Defines an element with inputs. Note that this function must be called twice, due to TypeScript * type inference limitations. * * @category Element Definition * @example * * ```ts * import {defineElement, html} from 'element-vir'; * * const MyElement = defineElement<{username: string}>()({ * tagName: 'my-element', * render({inputs}) { * return html` * <p>hi: ${inputs.username}</p> * `; * }, * }); * ``` */ export declare function defineElement<Inputs extends PropertyInitMapBase = {}>( /** * These `errorParams` is present when there are problems with the `Inputs` type. If it is * present, the error should be fixed. This should always be empty. */ ...errorParams: DeclarativeElementInputErrorParams<Inputs>): <const TagName extends CustomElementTagName, State extends PropertyInitMapBase = {}, EventsInit extends EventsInitMap = {}, const HostClassKeys extends BaseStringName<NoInfer<TagName>> = `${NoInfer<TagName>}-`, const CssVarKeys extends BaseStringName<NoInfer<TagName>> = `${NoInfer<TagName>}-`, const SlotNames extends ReadonlyArray<string> = Readonly<[]>, const TestIds extends ReadonlyArray<string> = Readonly<[]>>(initInput: DeclarativeElementInit<TagName, Inputs, State, EventsInit, HostClassKeys, CssVarKeys, SlotNames, TestIds>) => DeclarativeElementDefinition<TagName, Inputs, State, EventsInit, HostClassKeys, CssVarKeys, SlotNames, TestIds>;