UNPKG

element-vir

Version:

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

49 lines (48 loc) 2.46 kB
import { type ArrayElement } from '@augment-vir/common'; import { type CustomElementTagName } from '../custom-tag-name.js'; /** * Base requirement for all string names with the element tag name prepended. * * @category Internal */ export type BaseStringName<ElementTagName extends CustomElementTagName> = `${ElementTagName}-${string}`; /** * Asserts that all the given string names for the given element are valid. * * @category Internal */ export declare function assertValidStringNames(elementTagName: CustomElementTagName, stringNames: ReadonlyArray<string>): void; /** * Type safe mapping of string names to themself with the element tag name inserted. * * @category Internal */ export type StringNameMap<ElementTagName extends CustomElementTagName, NameType extends string, StringNames extends ReadonlyArray<string>> = Readonly<{ [StringName in ArrayElement<StringNames>]: `${ElementTagName}-${NameType}-${StringName}`; }>; /** * Converts an array of string names into a `StringNameMap`. * * @category Internal */ export declare function createStringNameMap<ElementTagName extends CustomElementTagName, NameType extends string, StringNames extends ReadonlyArray<string>>(elementTagName: ElementTagName, nameType: NameType, stringNames: StringNames | undefined): StringNameMap<ElementTagName, NameType, StringNames>; /** * Map of slot names to their runtime values. Slot names that already start with the element's tag * name are kept as-is; legacy slot names without the tag-name prefix are auto-rewritten at runtime * to `${ElementTagName}-slot-${Name}` and this type reflects that. * * @category Internal */ export type SlotNamesMap<ElementTagName extends string, SlotNames extends ReadonlyArray<string>> = Readonly<{ [Name in ArrayElement<SlotNames>]: Name extends `${ElementTagName}-${string}` ? Name : `${ElementTagName}-slot-${Name}`; }>; /** * Converts an array of slot names into a {@link SlotNamesMap}. * * Slot names that start with the element's tag name pass through unchanged. Slot names that do not * are transformed into the legacy `${tagName}-slot-${name}` format so existing elements that * pre-date the tag prefix convention keep working. * * @category Internal */ export declare function createSlotNamesMap<ElementTagName extends CustomElementTagName, SlotNames extends ReadonlyArray<string>>(elementTagName: ElementTagName, slotNames: SlotNames | undefined): SlotNamesMap<ElementTagName, SlotNames>;