/**
* The tagged-template HTML engine - `html` builds an escaped-by-construction {@link Template}.
*
* Security model (the part that matters): every interpolated value is HTML-escaped by default.
* The ONLY ways to emit unescaped markup are (1) nesting another `html` template - already escaped
* by construction - and (2) an explicit {@link raw} wrapper, which is the audit-greppable opt-out.
* The escaper covers text and double-quoted attribute contexts (`& < > " '`); interpolations into
* unquoted attributes or inline scripts are NOT safe by design - the docs say "always quote".
*/
/** Branded wrapper marking a string as pre-trusted markup. Construct only via {@link raw}. */
export declare class RawHtml {
readonly value: string;
constructor(value: string);
}
/**
* Mark a string as trusted, pre-escaped markup - it is emitted verbatim. The deliberate escape
* hatch (CMS-sanitized HTML, pre-rendered markdown): every call site is greppable, exactly like
* React's dangerouslySetInnerHTML, without the JSX.
*/
export declare function raw(trusted: string): RawHtml;
/** A rendered HTML fragment - what `html` returns and components produce. Stringified once. */
export declare class Template {
/** The final markup. Built eagerly at tag time (interpolations are already values by then). */
readonly html: string;
constructor(htmlString: string);
toString(): string;
}
/** What an interpolation may be: escaped primitives, nested templates/raw, arrays of the same.
* `null`/`undefined`/`false` render as nothing (conditional rendering: `cond && html\`…\``). */
export type HtmlValue = string | number | bigint | boolean | null | undefined | Template | RawHtml | ReadonlyArray;
/** The tag: `` html`${user.name}
` `` → an escaped {@link Template}. */
export declare function html(strings: TemplateStringsArray, ...values: HtmlValue[]): Template;
//# sourceMappingURL=html.d.ts.map