import * as _angular_core from '@angular/core';
import { OnInit } from '@angular/core';
import * as _angular_platform_browser from '@angular/platform-browser';
import { FlipProp, SizeProp, PullProp, RotateProp, IconName as IconName$1, IconPrefix as IconPrefix$1, FaSymbol, Transform, IconDefinition as IconDefinition$1, IconParams, TextParams, CounterParams } from '@fortawesome/fontawesome-svg-core';
export { CounterParams, FaSymbol, FlipProp, IconParams, PullProp, RotateProp, SizeProp, TextParams, Transform } from '@fortawesome/fontawesome-svg-core';

/**
 * Fontawesome props.
 */
interface FaProps {
    className?: string;
    animation?: AnimationProp;
    border?: boolean;
    fixedWidth?: boolean;
    counter?: boolean;
    inverse?: boolean;
    flip?: FlipProp;
    size?: SizeProp;
    pull?: PullProp;
    rotate?: RotateProp | string;
    stackItemSize?: '1x' | '2x';
}
type AnimationProp = 'beat' | 'fade' | 'beat-fade' | 'bounce' | 'flip' | 'shake' | 'spin' | 'spin-reverse' | 'spin-pulse' | 'spin-pulse-reverse';

type IconPrefix = IconPrefix$1 | (string & {});
type IconName = IconName$1 | (string & {});
interface IconLookup {
    prefix: IconPrefix;
    iconName: IconName;
}
interface IconDefinition {
    prefix: IconPrefix;
    iconName: IconName;
    icon: [
        number,
        number,
        string[],
        string,
        // unicode
        string | string[]
    ];
}
interface IconPack {
    [key: string]: IconDefinition;
}
type IconProp = IconName | [IconPrefix, IconName] | IconLookup;

declare class FaIconComponent {
    readonly icon: _angular_core.ModelSignal<IconProp>;
    /**
     * Specify a title for the icon.
     *
     * This text will be displayed in a tooltip on hover and presented to the
     * screen readers.
     */
    readonly title: _angular_core.ModelSignal<string | undefined>;
    /**
     * Icon animation.
     *
     * Most of the animations are only available when using Font Awesome 6. With
     * Font Awesome 5, only 'spin' and 'spin-pulse' are supported.
     */
    readonly animation: _angular_core.ModelSignal<AnimationProp | undefined>;
    readonly mask: _angular_core.ModelSignal<IconProp | undefined>;
    readonly flip: _angular_core.ModelSignal<FlipProp | undefined>;
    readonly size: _angular_core.ModelSignal<SizeProp | undefined>;
    readonly pull: _angular_core.ModelSignal<PullProp | undefined>;
    readonly border: _angular_core.ModelSignal<boolean | undefined>;
    readonly inverse: _angular_core.ModelSignal<boolean | undefined>;
    readonly symbol: _angular_core.ModelSignal<FaSymbol | undefined>;
    readonly rotate: _angular_core.ModelSignal<string | RotateProp | undefined>;
    readonly fixedWidth: _angular_core.ModelSignal<boolean | undefined>;
    readonly transform: _angular_core.ModelSignal<string | Transform | undefined>;
    /**
     * Specify the `role` attribute for the rendered <svg> element.
     *
     * @default 'img'
     */
    readonly a11yRole: _angular_core.ModelSignal<string | undefined>;
    readonly renderedIconHTML: _angular_core.Signal<_angular_platform_browser.SafeHtml>;
    private readonly document;
    private readonly sanitizer;
    private readonly config;
    private readonly iconLibrary;
    private readonly stackItem;
    private readonly stack;
    constructor();
    protected findIconDefinition(i: IconProp | IconDefinition): IconDefinition$1 | null;
    protected buildParams(): IconParams;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<FaIconComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<FaIconComponent, "fa-icon", never, { "icon": { "alias": "icon"; "required": true; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "animation": { "alias": "animation"; "required": false; "isSignal": true; }; "mask": { "alias": "mask"; "required": false; "isSignal": true; }; "flip": { "alias": "flip"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "pull": { "alias": "pull"; "required": false; "isSignal": true; }; "border": { "alias": "border"; "required": false; "isSignal": true; }; "inverse": { "alias": "inverse"; "required": false; "isSignal": true; }; "symbol": { "alias": "symbol"; "required": false; "isSignal": true; }; "rotate": { "alias": "rotate"; "required": false; "isSignal": true; }; "fixedWidth": { "alias": "fixedWidth"; "required": false; "isSignal": true; }; "transform": { "alias": "transform"; "required": false; "isSignal": true; }; "a11yRole": { "alias": "a11yRole"; "required": false; "isSignal": true; }; }, { "icon": "iconChange"; "title": "titleChange"; "animation": "animationChange"; "mask": "maskChange"; "flip": "flipChange"; "size": "sizeChange"; "pull": "pullChange"; "border": "borderChange"; "inverse": "inverseChange"; "symbol": "symbolChange"; "rotate": "rotateChange"; "fixedWidth": "fixedWidthChange"; "transform": "transformChange"; "a11yRole": "a11yRoleChange"; }, never, never, true, never>;
}

declare class FaDuotoneIconComponent extends FaIconComponent {
    /**
     * Swap the default opacity of each duotone icon’s layers. This will make an
     * icon’s primary layer have the default opacity of 40% rather than its
     * secondary layer.
     *
     * @default false
     */
    readonly swapOpacity: _angular_core.InputSignal<boolean | "true" | "false" | undefined>;
    /**
     * Customize the opacity of the primary icon layer.
     * Valid values are in range [0, 1.0].
     *
     * @default 1.0
     */
    readonly primaryOpacity: _angular_core.InputSignal<string | number | undefined>;
    /**
     * Customize the opacity of the secondary icon layer.
     * Valid values are in range [0, 1.0].
     *
     * @default 0.4
     */
    readonly secondaryOpacity: _angular_core.InputSignal<string | number | undefined>;
    /**
     * Customize the color of the primary icon layer.
     * Accepts any valid CSS color value.
     *
     * @default CSS inherited color
     */
    readonly primaryColor: _angular_core.InputSignal<string | undefined>;
    /**
     * Customize the color of the secondary icon layer.
     * Accepts any valid CSS color value.
     *
     * @default CSS inherited color
     */
    readonly secondaryColor: _angular_core.InputSignal<string | undefined>;
    protected findIconDefinition(i: IconProp | IconDefinition): IconDefinition$1 | null;
    protected buildParams(): IconParams;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<FaDuotoneIconComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<FaDuotoneIconComponent, "fa-duotone-icon", never, { "swapOpacity": { "alias": "swapOpacity"; "required": false; "isSignal": true; }; "primaryOpacity": { "alias": "primaryOpacity"; "required": false; "isSignal": true; }; "secondaryOpacity": { "alias": "secondaryOpacity"; "required": false; "isSignal": true; }; "primaryColor": { "alias": "primaryColor"; "required": false; "isSignal": true; }; "secondaryColor": { "alias": "secondaryColor"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
}

/**
 * Fontawesome layers.
 */
declare class FaLayersComponent implements OnInit {
    readonly size: _angular_core.InputSignal<SizeProp | undefined>;
    readonly fixedWidth: _angular_core.InputSignal<boolean | undefined>;
    readonly faFw: _angular_core.Signal<boolean | undefined>;
    readonly classes: _angular_core.Signal<{
        'fa-fw': boolean | undefined;
        'fa-layers': boolean;
    }>;
    private readonly document;
    private readonly config;
    ngOnInit(): void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<FaLayersComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<FaLayersComponent, "fa-layers", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "fixedWidth": { "alias": "fixedWidth"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
}

declare class FaLayersTextComponent {
    readonly content: _angular_core.InputSignal<string>;
    readonly title: _angular_core.InputSignal<string | undefined>;
    readonly flip: _angular_core.InputSignal<FlipProp | undefined>;
    readonly size: _angular_core.InputSignal<SizeProp | undefined>;
    readonly pull: _angular_core.InputSignal<PullProp | undefined>;
    readonly border: _angular_core.InputSignal<boolean | undefined>;
    readonly inverse: _angular_core.InputSignal<boolean | undefined>;
    readonly rotate: _angular_core.InputSignal<string | RotateProp | undefined>;
    readonly fixedWidth: _angular_core.InputSignal<boolean | undefined>;
    readonly transform: _angular_core.InputSignal<string | Transform | undefined>;
    readonly renderedHTML: _angular_core.Signal<_angular_platform_browser.SafeHtml>;
    private readonly document;
    private readonly config;
    private readonly parent;
    private readonly sanitizer;
    constructor();
    /**
     * Updating params by component props.
     */
    protected buildParams(): TextParams;
    private updateContent;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<FaLayersTextComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<FaLayersTextComponent, "fa-layers-text", never, { "content": { "alias": "content"; "required": true; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "flip": { "alias": "flip"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "pull": { "alias": "pull"; "required": false; "isSignal": true; }; "border": { "alias": "border"; "required": false; "isSignal": true; }; "inverse": { "alias": "inverse"; "required": false; "isSignal": true; }; "rotate": { "alias": "rotate"; "required": false; "isSignal": true; }; "fixedWidth": { "alias": "fixedWidth"; "required": false; "isSignal": true; }; "transform": { "alias": "transform"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
}

declare class FaLayersCounterComponent {
    readonly content: _angular_core.InputSignal<string>;
    readonly title: _angular_core.InputSignal<string | undefined>;
    readonly position: _angular_core.InputSignal<"bottom-right" | "bottom-left" | "top-right" | "top-left" | undefined>;
    readonly renderedHTML: _angular_core.Signal<_angular_platform_browser.SafeHtml>;
    private document;
    private config;
    private parent;
    private sanitizer;
    constructor();
    protected buildParams(): CounterParams;
    private updateContent;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<FaLayersCounterComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<FaLayersCounterComponent, "fa-layers-counter", never, { "content": { "alias": "content"; "required": true; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
}

declare class FaStackComponent {
    /**
     * Size of the stacked icon.
     * Note that stacked icon is by default 2 times bigger, than non-stacked icon.
     * You'll need to set size using custom CSS to align stacked icon with a
     * simple one. E.g. `fa-stack { font-size: 0.5em; }`.
     */
    readonly size: _angular_core.InputSignal<SizeProp | undefined>;
    readonly classes: _angular_core.Signal<{
        'fa-stack': boolean;
    }>;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<FaStackComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<FaStackComponent, "fa-stack", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
}

declare class FaStackItemSizeDirective {
    /**
     * Specify whether icon inside {@link FaStackComponent} should be rendered in
     * regular size (1x) or as a larger icon (2x).
     */
    readonly stackItemSize: _angular_core.InputSignal<"1x" | "2x">;
    _effect: _angular_core.EffectRef;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<FaStackItemSizeDirective, never>;
    static ɵdir: _angular_core.ɵɵDirectiveDeclaration<FaStackItemSizeDirective, "fa-icon[stackItemSize],fa-duotone-icon[stackItemSize]", never, { "stackItemSize": { "alias": "stackItemSize"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
}

declare class FontAwesomeModule {
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<FontAwesomeModule, never>;
    static ɵmod: _angular_core.ɵɵNgModuleDeclaration<FontAwesomeModule, never, [typeof FaIconComponent, typeof FaDuotoneIconComponent, typeof FaLayersComponent, typeof FaLayersTextComponent, typeof FaLayersCounterComponent, typeof FaStackComponent, typeof FaStackItemSizeDirective], [typeof FaIconComponent, typeof FaDuotoneIconComponent, typeof FaLayersComponent, typeof FaLayersTextComponent, typeof FaLayersCounterComponent, typeof FaStackComponent, typeof FaStackItemSizeDirective]>;
    static ɵinj: _angular_core.ɵɵInjectorDeclaration<FontAwesomeModule>;
}

declare class FaConfig {
    /**
     * Default prefix to use, when one is not provided with the icon name.
     *
     * @default 'fas'
     */
    defaultPrefix: IconPrefix;
    /**
     * Provides a fallback icon to use whilst main icon is being loaded asynchronously.
     * When value is null, then fa-icon component will throw an error if icon input is missing.
     * When value is not null, then the provided icon will be used as a fallback icon if icon input is missing.
     *
     * @default null
     */
    fallbackIcon: IconDefinition | null;
    /**
     * Set icons to the same fixed width.
     *
     * @see {@link: https://fontawesome.com/how-to-use/on-the-web/styling/fixed-width-icons}
     * @default false
     */
    fixedWidth?: boolean;
    /**
     * Automatically add Font Awesome styles to the document when icon is rendered.
     *
     * For the majority of the cases the automatically added CSS is sufficient,
     * please refer to the linked guide for more information on when to disable
     * this feature.
     *
     * @see {@link: https://github.com/FortAwesome/angular-fontawesome/blob/main/docs/guide/adding-css.md}
     * @default true
     */
    set autoAddCss(value: boolean);
    get autoAddCss(): boolean;
    private _autoAddCss;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<FaConfig, never>;
    static ɵprov: _angular_core.ɵɵInjectableDeclaration<FaConfig>;
}

interface FaIconLibraryInterface {
    addIcons(...icons: IconDefinition[]): void;
    addIconPacks(...packs: IconPack[]): void;
    getIconDefinition(prefix: IconPrefix, name: IconName): IconDefinition | null;
}
declare class FaIconLibrary implements FaIconLibraryInterface {
    private definitions;
    addIcons(...icons: IconDefinition[]): void;
    addIconPacks(...packs: IconPack[]): void;
    getIconDefinition(prefix: IconPrefix, name: IconName): IconDefinition | null;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<FaIconLibrary, never>;
    static ɵprov: _angular_core.ɵɵInjectableDeclaration<FaIconLibrary>;
}

export { FaConfig, FaDuotoneIconComponent, FaIconComponent, FaIconLibrary, FaLayersComponent, FaLayersCounterComponent, FaLayersTextComponent, FaStackComponent, FaStackItemSizeDirective, FontAwesomeModule };
export type { AnimationProp, FaIconLibraryInterface, FaProps, IconDefinition, IconLookup, IconName, IconPack, IconPrefix };
