declare function isWellFormed(xml: string): void;

declare const validators_isWellFormed: typeof isWellFormed;
declare namespace validators {
  export { validators_isWellFormed as isWellFormed };
}

type Validator = (maybeValidXml: string) => void;

interface LitXmlOptions {
    readonly validators: Validator[];
    readonly format: boolean;
    readonly indent: number;
    /**
     * Enable strict mode for the template values.
     * This mode requires all template values to be a xml primitive (`string | number | boolean | bigint | XmlFragment | XmlFragment[]`)
     */
    readonly strictTemplateValues: boolean;
}

declare class XmlFragment {
    private xmlLiterals;
    private values;
    private options;
    constructor(xmlLiterals: TemplateStringsArray, values: unknown[], options: LitXmlOptions);
    toString(): string;
    /**
     * @internal
     */
    toStringRaw(): string;
}

type XmlPrimitive = string | number | boolean | bigint | XmlFragment | XmlFragment[];
type XmlTemplateLiteralTag<T> = (xmlLiterals: TemplateStringsArray, ...values: T[]) => XmlFragment;
type XmlTemplateLiteral = XmlTemplateLiteralTag<unknown>;
type StrictXmlTemplateLiteral = XmlTemplateLiteralTag<XmlPrimitive>;
declare function createLitXml<T extends Partial<LitXmlOptions>>(overrideOptions?: T): XmlTemplateLiteralTag<T extends {
    strictTemplateValues: true;
} ? XmlPrimitive : unknown>;
declare namespace createLitXml {
    var inject: readonly ["lit-xml-options"];
}
declare const xml: XmlTemplateLiteralTag<unknown>;

declare class InvalidXmlError extends Error {
    xmlDocument: string;
    constructor(line: number, message: string, xmlDocument: string);
}

export { InvalidXmlError, type StrictXmlTemplateLiteral, type Validator, XmlFragment, type XmlPrimitive, type XmlTemplateLiteral, type XmlTemplateLiteralTag, createLitXml, validators, xml };
