import * as _angular_core from '@angular/core';
import { PipeTransform, ElementRef, InjectionToken } from '@angular/core';
import { Nullable, Size, ColorAccent } from '@fundamental-ngx/cdk/utils';
import { IconFont } from '@fundamental-ngx/core/icon';

type AvatarValueStates = 'positive' | 'caution' | 'negative' | 'information';

declare class AvatarIconPipe implements PipeTransform {
    /**
     * Selects appropriate Avatar icon based on Avatar Value state and fallback icon.
     */
    transform(valueState: Nullable<AvatarValueStates>, fallbackIcon: Nullable<string>): string;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<AvatarIconPipe, never>;
    static ɵpipe: _angular_core.ɵɵPipeDeclaration<AvatarIconPipe, "fdAvatarIcon", true>;
}

type IndicationColor = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10;
declare class AvatarComponent {
    /** Id of the Avatar. */
    readonly id: _angular_core.InputSignal<string>;
    /** Aria-label for Avatar. */
    readonly ariaLabel: _angular_core.InputSignal<string | null | undefined>;
    /** Aria-Labelledby for element describing Avatar. */
    readonly ariaLabelledby: _angular_core.InputSignal<string | null | undefined>;
    /** Localized text for label */
    readonly label: _angular_core.InputSignal<string | null | undefined>;
    /** The size of the Avatar. Options include: *xs*, *s*, *m*, *l* and *xl*. */
    readonly size: _angular_core.InputSignal<Size>;
    /** Font family of the icon. */
    readonly font: _angular_core.InputSignal<IconFont>;
    /** The glyph name. */
    readonly glyph: _angular_core.InputSignal<string | null | undefined>;
    /** The glyph name for zoom icon. */
    readonly zoomGlyph: _angular_core.InputSignal<string | null | undefined>;
    /** Whether to apply a circle style to the Avatar. */
    readonly circle: _angular_core.InputSignalWithTransform<boolean, unknown>;
    /** Whether the Avatar should be interactive. */
    readonly interactive: _angular_core.InputSignalWithTransform<boolean, unknown>;
    /** Whether to apply a transparent style to the Avatar. */
    readonly transparent: _angular_core.InputSignalWithTransform<boolean, unknown>;
    /** Whether to apply background size contain style to the Avatar */
    readonly contain: _angular_core.InputSignalWithTransform<boolean, unknown>;
    /** Whether to apply a placeholder background style to the Avatar. */
    readonly placeholder: _angular_core.InputSignalWithTransform<boolean, unknown>;
    /** Whether to apply a tile background style to the Avatar. */
    readonly tile: _angular_core.InputSignalWithTransform<boolean, unknown>;
    /** Whether to apply a border to the Avatar. */
    readonly border: _angular_core.InputSignalWithTransform<boolean, unknown>;
    /** A number from 1 to 10 representing the background color of the Avatar.
     * This property will override the colorIndication property.
     */
    readonly colorAccent: _angular_core.InputSignal<ColorAccent | null | undefined>;
    /** A number from 1 to 10 representing the background color of the Avatar using the Indication Colors. */
    readonly colorIndication: _angular_core.InputSignal<IndicationColor | null | undefined>;
    /** Whether to apply random background color to the Avatar. */
    readonly random: _angular_core.InputSignalWithTransform<boolean, unknown>;
    /** Whether component should be focusable & clicable */
    readonly clickable: _angular_core.InputSignalWithTransform<boolean, unknown>;
    /** Value state of the Avatar. */
    readonly valueState: _angular_core.InputSignal<AvatarValueStates | null | undefined>;
    /** Background image resource: url or base64. */
    readonly image: _angular_core.InputSignal<string | null | undefined>;
    /** Backup options to use when image hasn't been loaded successfully.
     * Options separated with "|" symbol.
     * Possible options: content, alt, backup, default-icon
     */
    readonly alterIcon: _angular_core.InputSignal<string | null | undefined>;
    /** Backup image to load when image hasn't been loaded successfully.
     * Only applicable when using alterIcon input property.
     */
    readonly backupImage: _angular_core.InputSignal<string | null | undefined>;
    /** Event emitted when avatar clicked. Only fires if clickable input property set to true. */
    readonly avatarClicked: _angular_core.OutputEmitterRef<Event>;
    /** Event emitted when zoom icon clicked. Only fires if zoomGlyph input property is set. */
    readonly zoomGlyphClicked: _angular_core.OutputEmitterRef<void>;
    /** @hidden */
    protected readonly content: _angular_core.Signal<ElementRef<any> | undefined>;
    /** @hidden Internal state for background image */
    protected readonly bgImage: _angular_core.WritableSignal<string | null | undefined>;
    /** @hidden Internal state for computed abbreviation */
    protected readonly abbreviate: _angular_core.WritableSignal<string | null | undefined>;
    /** @hidden Computed tabindex based on clickable state */
    protected readonly tabindex: _angular_core.Signal<string | 0 | null>;
    /** @hidden Computed role attribute */
    protected readonly role: _angular_core.Signal<"button" | "img">;
    /** @hidden If a default placeholder should be displayed */
    protected readonly showDefault: _angular_core.Signal<boolean>;
    /** @hidden Computed CSS classes */
    protected readonly cssClass: _angular_core.Signal<string>;
    /** @hidden Internal state tracking if image loaded successfully */
    private readonly _imageLoaded;
    /** @hidden Explicitly track when to show default icon (for failed images with no fallback) */
    private readonly _shouldShowDefaultIcon;
    /** @hidden Stored random color accent to prevent regeneration */
    private readonly _randomColorAccent;
    /** @hidden Track the currently loading/loaded image URL to prevent duplicate requests */
    private _currentImageUrl;
    /** @hidden Cache of successfully loaded image URLs to prevent re-requesting */
    private readonly _loadedImageCache;
    /** @hidden */
    private readonly _elementRef;
    /** @hidden */
    private readonly _hostTabindex;
    /** @hidden */
    constructor();
    /** @hidden */
    protected onClick(event: Event): void;
    /** @hidden */
    protected zoomClicked(event: Event): void;
    /** @hidden Get the abbreviation string */
    private _generateAbbreviation;
    /** @hidden */
    private _setBgImage;
    /** @hidden */
    private _verifyImageUrl;
    /** @hidden */
    private _onErrorCallback;
    /** @hidden Helper to try setting abbreviation from text */
    private _trySetAbbreviation;
    /** @hidden */
    private _showDefaultIcon;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<AvatarComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<AvatarComponent, "fd-avatar", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "ariaLabelledby": { "alias": "ariaLabelledby"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "font": { "alias": "font"; "required": false; "isSignal": true; }; "glyph": { "alias": "glyph"; "required": false; "isSignal": true; }; "zoomGlyph": { "alias": "zoomGlyph"; "required": false; "isSignal": true; }; "circle": { "alias": "circle"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; "transparent": { "alias": "transparent"; "required": false; "isSignal": true; }; "contain": { "alias": "contain"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "tile": { "alias": "tile"; "required": false; "isSignal": true; }; "border": { "alias": "border"; "required": false; "isSignal": true; }; "colorAccent": { "alias": "colorAccent"; "required": false; "isSignal": true; }; "colorIndication": { "alias": "colorIndication"; "required": false; "isSignal": true; }; "random": { "alias": "random"; "required": false; "isSignal": true; }; "clickable": { "alias": "clickable"; "required": false; "isSignal": true; }; "valueState": { "alias": "valueState"; "required": false; "isSignal": true; }; "image": { "alias": "image"; "required": false; "isSignal": true; }; "alterIcon": { "alias": "alterIcon"; "required": false; "isSignal": true; }; "backupImage": { "alias": "backupImage"; "required": false; "isSignal": true; }; }, { "avatarClicked": "avatarClicked"; "zoomGlyphClicked": "zoomGlyphClicked"; }, never, ["*"], true, never>;
}

/**
 * @deprecated
 * Use `AvatarComponent` import instead.
 */
declare class AvatarModule {
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<AvatarModule, never>;
    static ɵmod: _angular_core.ɵɵNgModuleDeclaration<AvatarModule, never, [typeof AvatarComponent], [typeof AvatarComponent]>;
    static ɵinj: _angular_core.ɵɵInjectorDeclaration<AvatarModule>;
}

declare const FD_AVATAR_COMPONENT: InjectionToken<unknown>;

export { AvatarComponent, AvatarIconPipe, AvatarModule, FD_AVATAR_COMPONENT };
export type { AvatarValueStates, IndicationColor };
