import { AfterViewInit, ChangeDetectorRef, ElementRef, EventEmitter, OnDestroy, Renderer2 } from '@angular/core';
import { Nullable, TabbableElementService } from '@fundamental-ngx/cdk/utils';
import { ContentDensityObserver } from '@fundamental-ngx/core/content-density';
import { GridListItemBodyDirective } from '../../directives/grid-list-item-body.directive';
import { GridListSelectionMode } from '../../models/grid-list-selection.models';
import { GridListItemFooterBarComponent } from '../grid-list-item-footer-bar/grid-list-item-footer-bar.component';
import { GridListItemToolbarComponent } from '../grid-list-item-toolbar/grid-list-item-toolbar.component';
import { GridList } from '../grid-list/grid-list-base.component';
import * as i0 from "@angular/core";
export interface GridListItemOutputEvent<T> {
    index?: number;
    value?: T;
}
export type GridListItemType = 'inactive' | 'active' | 'detail' | 'detailsAndActive' | 'navigation';
export type GridListItemState = 'unread' | 'locked' | 'error' | 'draft';
export type GridListItemStatus = 'success' | 'warning' | 'error' | 'neutral';
export declare class GridListItemComponent<T> implements AfterViewInit, OnDestroy {
    private readonly _cd;
    private readonly _elementRef;
    private readonly _render;
    private readonly _gridList;
    readonly _contentDensityObserver: ContentDensityObserver;
    private readonly _tabbableElementService;
    /** id for the Element */
    id: string;
    /** width of the element */
    width: string;
    /**
     * specify the cell layout in the format `XLn-Ln-Mn-Sn` where n is
     * the number of occupied columns and n can be different for each size.
     */
    set layoutItemPattern(value: Nullable<string>);
    /**
     * Defines the status of Grid List Item
     * (Statuses: success | warning | error | neutral)
     */
    status?: GridListItemStatus;
    /** Sets number of sub items */
    counter: Nullable<number>;
    /**
     * Value field stores information for radio button value, checkbox button and for GridListSelectionEvent
     * The field is mandatory for modes like singleSelect, singleSelectLeft, singleSelectRight or multiSelect
     */
    value?: T;
    /** Whether click on the custom toolbar is disabled */
    disableToolbarClick: boolean;
    /** Allows an item to be selected programmatically */
    selected: boolean;
    /** Remove the padding from the Item body */
    noPadding: boolean;
    /** Sets the `aria-label` attribute to the element. */
    ariaLabel: Nullable<string>;
    /** Sets the `aria-label` attribute to the element. */
    ariaLabelledBy: Nullable<string>;
    /**
     * Defines the type of Grid List Item
     * Types:
     * - active: indicates that the item is clickable via active feedback when item is pressed
     * - detail: enables detail button of the list item that fires event.
     * - detailsAndActive: enables "detail" and "active" enumerations together
     * - inactive: indicates the list item does not have any active feedback when item is pressed
     * - navigation: indicates the list item is navigable to show extra information about the item
     * Default: inactive
     */
    set type(value: Nullable<GridListItemType>);
    get type(): GridListItemType;
    /**
     * Sets the state of Grid List Item
     * (States: unread | error | locked | draft)
     */
    state?: GridListItemState;
    /**
     * The navigated state of the list item.
     * If set to true, a navigation indicator is displayed at the end of the list item.
     */
    isNavigated: boolean;
    /** Title of the item */
    title: string;
    /**
     * Aria-level of the title
     * Available options: 1, 2, 3, 4, 5, 6
     * Default: 4
     */
    titleLevel: 1 | 2 | 3 | 4 | 5 | 6;
    /** Description of the item */
    description: string;
    /** When set to true the grid list item's height will be set to auto */
    autoHeight: boolean;
    /**
     * Event is thrown, when type is active
     * and item is pressed
     */
    press: EventEmitter<GridListItemOutputEvent<T>>;
    /**
     * Event is thrown, when type is detail or detailsAndActive
     * and Detail button was pressed
     */
    detail: EventEmitter<GridListItemOutputEvent<T>>;
    /**
     * Event is thrown, when mode delete
     * and Delete button was pressed
     */
    delete: EventEmitter<GridListItemOutputEvent<T>>;
    /**
     * Event is thrown, when type is navigation
     * and Navigate button was pressed
     */
    navigate: EventEmitter<GridListItemOutputEvent<T>>;
    /**
     * Event is thrown on grid list item click.
     */
    cardClick: EventEmitter<GridListItemOutputEvent<T>>;
    /**
     * Event is thrown, when state is error, not used GridListItemFooterBarComponent
     * and Draft button was pressed
     */
    draft: EventEmitter<GridListItemOutputEvent<T>>;
    /**
     * Event is thrown, when state is locked, not used GridListItemFooterBarComponent
     * and Locked button was pressed
     */
    locked: EventEmitter<GridListItemOutputEvent<T>>;
    /** @hidden */
    _gridListItem: ElementRef<HTMLDivElement>;
    /** @hidden */
    footerBarComponent: Nullable<GridListItemFooterBarComponent>;
    /** @hidden */
    itemToolbarComponent: Nullable<GridListItemToolbarComponent>;
    /** @hidden */
    body: Nullable<GridListItemBodyDirective>;
    /** @hidden
     * The active state of the list item.
     * If set to true, the whole card has active state. Becomes false only when the Edit button is clicked.
     */
    _isActive: boolean;
    /** @hidden */
    set gridLayoutClasses(value: string[]);
    get gridLayoutClasses(): string[];
    /** @hidden */
    _selectedItem?: T;
    /** @hidden */
    set selectionMode(mode: GridListSelectionMode | undefined);
    get selectionMode(): GridListSelectionMode | undefined;
    /** @hidden */
    _index?: number;
    /** tabIndex of the element */
    tabIndex: import("@angular/core").WritableSignal<number>;
    /** @hidden */
    private _type;
    /** @hidden */
    private _selectionMode?;
    /** @hidden */
    private _gridLayoutClasses;
    /** @hidden */
    private readonly subscription;
    /** @hidden */
    private _innerElementFocused;
    /** @hidden */
    constructor(_cd: ChangeDetectorRef, _elementRef: ElementRef, _render: Renderer2, _gridList: GridList<T>, _contentDensityObserver: ContentDensityObserver, _tabbableElementService: TabbableElementService);
    /** @hidden */
    ngAfterViewInit(): void;
    /** @hidden */
    ngOnDestroy(): void;
    /** Focus grid list item programmatically */
    focus(options?: FocusOptions): void;
    /** @hidden */
    _setActive(event: MouseEvent, isActive: boolean): void;
    /** @hidden */
    _singleSelect(event: Event): void;
    /** @hidden */
    _checkboxClick(event: MouseEvent): void;
    /** @hidden */
    _checkboxEscape(): void;
    /** @hidden */
    _selectionItem(value: boolean | number | T, event?: MouseEvent): void;
    /** @hidden */
    _onDetail(event: MouseEvent): void;
    /** @hidden */
    _onNavigate(event: MouseEvent): void;
    /** @hidden */
    _onDelete(event: MouseEvent): void;
    /** @hidden */
    _clickOnDraft(event: MouseEvent): void;
    /** @hidden */
    _clickOnLocked(event: MouseEvent): void;
    /** @hidden */
    _onClick(event: MouseEvent): void;
    /** @hidden */
    _onKeyDown(event: KeyboardEvent): void;
    /** @hidden */
    private _isElementCanBeClicked;
    /** @hidden */
    private _isToolbarElement;
    /** @hidden */
    private _preventDefault;
    /** @hidden */
    private get _outputEventValue();
    /** @hidden */
    private _addClassesNames;
    /** @hidden */
    private _removeClassesNames;
    static ɵfac: i0.ɵɵFactoryDeclaration<GridListItemComponent<any>, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<GridListItemComponent<any>, "fd-grid-list-item", never, { "id": { "alias": "id"; "required": false; }; "width": { "alias": "width"; "required": false; }; "layoutItemPattern": { "alias": "layoutItemPattern"; "required": false; }; "status": { "alias": "status"; "required": false; }; "counter": { "alias": "counter"; "required": false; }; "value": { "alias": "value"; "required": false; }; "disableToolbarClick": { "alias": "disableToolbarClick"; "required": false; }; "selected": { "alias": "selected"; "required": false; }; "noPadding": { "alias": "noPadding"; "required": false; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; }; "ariaLabelledBy": { "alias": "ariaLabelledBy"; "required": false; }; "type": { "alias": "type"; "required": false; }; "state": { "alias": "state"; "required": false; }; "isNavigated": { "alias": "isNavigated"; "required": false; }; "title": { "alias": "title"; "required": false; }; "titleLevel": { "alias": "titleLevel"; "required": false; }; "description": { "alias": "description"; "required": false; }; "autoHeight": { "alias": "autoHeight"; "required": false; }; }, { "press": "press"; "detail": "detail"; "delete": "delete"; "navigate": "navigate"; "cardClick": "cardClick"; "draft": "draft"; "locked": "locked"; }, ["footerBarComponent", "itemToolbarComponent", "body"], ["[fd-grid-list-item-image]"], true, never>;
    static ngAcceptInputType_selected: unknown;
}
