type DocumentRoot = Document | ShadowRoot;
type SelectorRoot = DocumentRoot | Element | SVGSVGElement;
type StyleElement = HTMLElement | SVGElement;
type SrcElement = HTMLImageElement | HTMLInputElement | HTMLVideoElement | HTMLAudioElement | HTMLEmbedElement | HTMLSourceElement | HTMLIFrameElement | HTMLTrackElement;
type TypeElement = HTMLLinkElement | HTMLStyleElement | HTMLScriptElement | HTMLAnchorElement | HTMLInputElement | HTMLButtonElement | HTMLObjectElement | HTMLEmbedElement | HTMLSourceElement;
type DimensionElement = HTMLImageElement | HTMLObjectElement | HTMLCanvasElement | SVGSVGElement | Exclude<SrcElement, HTMLTrackElement>;
type ContentElement = SrcElement | HTMLLinkElement | HTMLObjectElement;
type PseudoElt = PseudoDocumentElt | "::first-letter" | "::target-text";
type PseudoInsideElt = "::before" | "::after";
type PseudoDocumentElt = PseudoInsideElt | PseudoScrollElt | "::marker" | "::backdrop" | "::file-selector-button" | "::details-content" | "::picker(select)" | "::picker-icon" | "::checkmark";
type PseudoStyleElt = "::first-line" | "::first-letter" | "::placeholder" | "::selection" | "::target-text" | "::search-text" | "::view-transition" | "::spelling-error" | "::grammar-error" | "::cue" | `${PseudoInsideElt}::marker`;
type PseudoScrollElt = "::scroll-marker-group" | "::scroll-marker" | `::scroll-button(${PositionAttr | FlowPositionValue})`;
type PseudoQueryElt = `::part(${string})` | `::slotted(${string})` | `::cue(${string})` | `::highlight(${string})` | `::view-transition-group(${string})` | `::view-transition-image-pair(${string})` | `::view-transition-new(${string})` | `::view-transition-old(${string})`;
type PseudoStyleWebkitElt = "::-webkit-input-placeholder" | "::-webkit-selection";
type PositionAttr = "top" | "right" | "bottom" | "left";
type DimensionAttr = "width" | "height";
type BoxPaddingAttr = "paddingTop" | "paddingRight" | "paddingBottom" | "paddingLeft";
type BoxBorderAttr = "borderTopWidth" | "borderRightWidth" | "borderBottomWidth" | "borderLeftWidth";
type BoxMarginAttr = "marginTop" | "marginBottom" | "marginRight" | "marginLeft";
type BoxModelAttr = BoxMarginAttr | BoxPaddingAttr;
type CssStyleAttr = KeyOfType<CSSStyleDeclaration, string, string>;
type AlignContentValue = "start" | "end" | "center" | "baseline";
type FlowPositionValue = "block-start" | "block-end" | "inline-start" | "inline-end";
type PositionDirectionValue = PositionAttr | "start" | "end";
type BoxVisualValue = "content-box" | "padding-box" | "border-box";
type BoxLayoutValue = BoxVisualValue | "margin-box";
type ColorLAB = "lab" | "lch" | "oklab" | "oklch";
type ColorMethod = "rgb" | "hsl" | "hwb" | ColorLAB;
type ColorSpaceRGB = "srgb" | "srgb-linear" | "display-p3" | "display-p3-linear" | "rec2020" | "a98-rgb" | "prophoto-rgb";
type ColorSpaceXYZ = "xyz" | "xyz-d65" | "xyz-d50";
type ColorCoords = ColorLAB | ColorSpaceRGB | ColorSpaceXYZ;
type ColorScheme = "light" | "dark" | "only light" | "only dark";

type CssStyleMap = Partial<MapOfType<CSSStyleDeclaration, CssStyleAttr, string>>;

interface BoxRect<T = number> {
    top: T;
    right: T;
    bottom: T;
    left: T;
}

interface BoxRectDimension<T = number> extends BoxRect<T>, Dimension<T> {
    numberOfLines?: number;
    columns?: Dimension[] | null;
    overflow?: boolean;
}

interface ContainerDimension extends Dimension, Omit<ContainerData, "element" | "name" | "descendantOf" | "descendantElement"> {}

interface BoxRectPosition extends BoxRect {
    static: boolean;
    topAsPercent: number;
    rightAsPercent: number;
    bottomAsPercent: number;
    leftAsPercent: number;
    horizontal: string;
    vertical: string;
    orientation: string[];
}

interface BoxMargin {
    marginTop: number;
    marginRight: number;
    marginBottom: number;
    marginLeft: number;
}

interface BoxPadding {
    paddingTop: number;
    paddingRight: number;
    paddingBottom: number;
    paddingLeft: number;
}

interface BoxModel extends BoxMargin, BoxPadding {
    borderTopWidth: number;
    borderRightWidth: number;
    borderBottomWidth: number;
    borderLeftWidth: number;
}

interface ContainerData {
    element: StyleElement;
    type: string;
    writingMode: string;
    conditionText?: string;
    name?: string;
    /** @deprecated */
    descendantOf?: HTMLElement[];
    descendantElement?: StyleElement;
}

interface Flexbox {
    enabled: boolean;
    alignSelf: string;
    justifySelf: string;
    basis: string;
    grow: number;
    shrink: number;
    order: number;
}

interface FlexboxLayout {
    inline?: boolean;
    row?: boolean;
    column?: boolean;
    reverse?: boolean;
    wrap?: boolean;
    wrapReverse?: boolean;
    alignContent?: string;
    justifyContent?: string;
}

interface ColorRGB {
    lighten(percent: number): ColorRGB;
    darken(percent: number): ColorRGB;
    blend(color: ColorRGB): ColorRGB;
    set(name: string, color: ColorRGB): void;
    get(name: string): ColorRGB | undefined;
    has(name: string): boolean;
    keys(): string[];
    to(name: ColorCoords): ColorCoordinates | null;
    toString(alpha: number, precision?: number): string;
    toString(precision: 2 | 3 | 4 | 5 | 6 | 7 | 8): string;
    toString(name: ColorCoords | ColorMethod, precision: 2 | 3 | 4 | 5 | 6 | 7 | 8): string;
    toString(name?: ColorCoords | ColorMethod, alpha?: number, precision?: number): string;
    get key(): string;
    get value(): string;
    get method(): string;
    get rgba(): RGBA;
    get hsla(): HSLA;
    get hwba(): HWBA;
    get srgb(): ColorCoordinates;
    get "srgb-linear"(): ColorCoordinates;
    get xyz(): ColorCoordinates;
    get "xyz-d50"(): ColorCoordinates;
    get "xyz-d65"(): ColorCoordinates;
    get "display-p3"(): ColorCoordinates;
    get "display-p3-linear"(): ColorCoordinates;
    get rec2020(): ColorCoordinates;
    get "a98-rgb"(): ColorCoordinates;
    get "prophoto-rgb"(): ColorCoordinates;
    get lab(): ColorCoordinates;
    get lch(): ColorCoordinates;
    get oklab(): ColorCoordinates;
    get oklch(): ColorCoordinates;
    get valueAsRGBA(): string;
    get valueAsARGB(): string;
    /** @deprecated toString("rgb", 1) */
    get rgbaAsString(): string;
    /** @deprecated toString("hsl", 1) */
    get hslaAsString(): string;
    /** @deprecated toString("rgb") */
    get rgbAsString(): string;
    /** @deprecated toString("hsl") */
    get hslAsString(): string;
    /** @deprecated toString("hwb") */
    get hwbAsString(): string;
    get grayscale(): boolean;
    get opacity(): number;
    get transparent(): boolean;
    get white(): boolean;
    get black(): boolean;
    get nearest(): ColorRGB;
    set scheme(value);
    get scheme(): ColorScheme | "";
    get size(): number;
}

interface ImageResolution {
    src: string;
    width: number;
    pixelRatio: number;
    actualWidth?: number;
    aspectRatio?: number;
}

interface OptionArrayData {
    items: string[];
    isInt?: boolean;
    isFloat?: boolean;
}