element-vir
Version:
Heroic. Reactive. Declarative. Type safe. Web components without compromise.
49 lines (48 loc) • 2.46 kB
TypeScript
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>;