@wordpress/element
Version:
Element React module for WordPress.
39 lines • 1.81 kB
TypeScript
import type { ReactElement } from 'react';
/**
* Mirrors `TransformedText` from @wordpress/i18n.
* We don't import directly to avoid a circular dependency.
*/
type TransformedText<T extends string> = string & {
readonly __transformedText: T;
};
/**
* The input that can be passed to `createInterpolateElement`.
*/
export type InterpolationInput = string | TransformedText<string>;
/**
* The literal string extracted from the input.
*/
export type InterpolationString<Input> = Input extends TransformedText<infer Text> ? Text : Input;
/**
* Recursively trims trailing spaces from a string type.
* Matches the runtime tokenizer's `\s*` before the closing `>` or `/>`.
*/
type TrimTrailingSpaces<S extends string> = S extends `${infer Rest} ` ? TrimTrailingSpaces<Rest> : S;
/**
* Helper type to extract tag name and handle closing/self-closing indicators.
* Filters out tags with spaces as they won't be parsed by the tokenizer.
*/
type ExtractTagName<T extends string> = T extends `/${string}` ? never : TrimTrailingSpaces<T> extends infer Name extends string ? Name extends '' ? never : Name extends `${string} ${string}` ? never : Name extends `${infer Base}/` ? Base : Name : never;
/**
* Utility type to extract all tag names from a template literal string.
* Only handles simple tags without attributes, matching the runtime tokenizer.
*/
export type ExtractTags<T extends string> = T extends `${string}<${infer Tag}>${infer After}` ? ExtractTagName<Tag> | ExtractTags<After> : never;
/**
* Utility type to create a conversion map that:
* - Makes extracted tag keys optional
* - Only allows properties for tags found in the template literal
*/
export type ConversionMap<T extends string> = Partial<Record<ExtractTags<T>, ReactElement>>;
export {};
//# sourceMappingURL=types.d.ts.map