interface ExtensionAttributeData extends PlainObject {
    element: ObjectMap<ExtensionAttributeElement>;
    resource: AnyObject;
}

interface ExtensionAttributeElement {
    self?: AnyObject;
    [name: string]: unknown;
}

interface ExtensionComposeViewElement extends Partial<ViewAttribute> {
    selector?: string;
}

interface ExtensionFragmentElement extends PathInfo, ExtensionComposeViewElement {
    name?: string;
    tag?: string;
}

interface ExtensionSubstituteElement<T = boolean | string> extends AnyObject {
    selector?: string;
    tag?: string;
    tagChild?: string;
    tagChildAttr?: string | ViewAttribute;
    renderChildren?: T;
    autoLayout?: T;
}

interface ExtensionViewModelElement {
    selector?: string;
    namespace?: string;
    attr?: string;
    expression?: string;
    twoWay?: boolean;
}

interface ExtensionIncludeElement extends PathInfo {
    selectorStart?: string;
    selectorEnd?: string;
    merge?: boolean;
    viewModel?: string;
}

interface ExtensionAccessibilityOptions extends PlainObject {
    displayLabel: boolean;
}

interface ResourceGridOptions extends PlainObject {
    floatPrecision: number;
}

interface ResourceCssGridOptions extends PlainObject {
    floatPrecision: number;
}

interface ExtensionSubstituteOptions extends ExtensionAttributeData, PlainObject {
    viewAttributes: string[];
    attributeMapping: StringMap;
}

interface ExtensionFragmentOptions extends PlainObject {
    viewAttributes: string[];
    viewAttributesApp: string[];
    retainAttributes: string[];
    retainAttributesApp: string[];
    dynamicNestedFragments: boolean;
}

interface ExtensionIncludesOptions extends PlainObject {
    viewAttributes: string[];
    viewAttributesApp: string[];
    viewAttributesOuterView: string[];
}

interface DelegateMultilineOptions extends PlainObject {
    mergeSingleLine: boolean;
    intlLocales: Intl.LocalesArgument | null;
}

interface DelegateScrollbarOptions extends PlainObject {
    alwaysDrawTrack: boolean;
    alwaysDrawHorizontalTrack: boolean;
    alwaysDrawVerticalTrack: boolean;
    style: "none" | "outsideInset" | "insideInset" | "insideOverlay" | "outsideOverlay";
    size: string;
    thinSize: string;
    fadeDuration: number;
    delayBeforeFade: number;
}

interface ResourceSvgOptions extends PlainObject {
    textAsImage: boolean;
    mergeClipPath: boolean;
    mergeVectorDrawable: boolean;
    dependencyVectorDrawable: "animated" | "seekable";
    transformExclude: SvgTransformExclude;
    animateInterpolator: string;
    customInterpolator: boolean | 1;
    floatPrecision: number;
    floatPrecisionKeyTime: number;
}

interface ResourceBackgroundOptions extends PlainObject {
    outlineAsInsetBorder: boolean;
    enableImageRepeat: boolean;
}

interface ResourceDimensOptions extends PlainObject {
    percentAsResource: boolean;
    floatPrecision: number;
}

interface ResourceStringsOptions extends PlainObject {
    numberAsResource: boolean;
    enableEmojiViews: boolean;
    detectEmojiPattern: RegExp | null;
    ignoreEmojiPattern: RegExp | null;
}

interface ResourceStylesOptions extends PlainObject {
    inheritFromParent: StringMap;
}

interface ResourceFontsOptions extends PlainObject {
    defaultFontFamily: string;
    mathFontFamily: string;
    systemFonts: string[];
    disableFontAlias: boolean;
    installGoogleFonts: boolean;
    fontSizeAdjust: number;
    floatPrecision: number;
}

interface JetpackComposeViewOptions extends PlainObject {
    viewAttributes: string[];
    renderChildren: boolean;
}