import * as _angular_core from '@angular/core';
import { OnInit, TemplateRef, EventEmitter } from '@angular/core';
import { MXValueComponent, AXDataSource, AXListDataSource } from '@acorex/cdk/common';
import { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';

interface AXDataListItem {
    id: string;
    text: string;
    description?: string;
    disabled?: boolean;
    tooltip?: string;
    level?: number;
    children?: AXDataListItem[];
    expanded?: boolean;
    [key: string]: any;
}
interface AXDataListConfig {
    disabledField?: string;
    tooltipField?: string;
    textField?: string;
    descriptionField?: string;
    levelField?: string;
    childrenField?: string;
    expandedField?: string;
}
interface AXDataListSelectionChange {
    selectedItems: AXDataListItem[];
    selectedKeys: string[];
    isMultiple: boolean;
}
declare class AXDataListComponent extends MXValueComponent implements OnInit {
    dataSource: _angular_core.InputSignal<AXDataSource<AXDataListItem>>;
    config: _angular_core.InputSignal<AXDataListConfig>;
    multiple: _angular_core.InputSignal<boolean>;
    showCheckbox: _angular_core.InputSignal<boolean>;
    itemHeight: _angular_core.InputSignal<number>;
    isItemTruncated: _angular_core.InputSignal<boolean>;
    showItemTooltip: _angular_core.InputSignal<boolean>;
    disabledField: _angular_core.InputSignal<string>;
    tooltipField: _angular_core.InputSignal<string>;
    textField: _angular_core.InputSignal<string>;
    descriptionField: _angular_core.InputSignal<string>;
    levelField: _angular_core.InputSignal<string>;
    childrenField: _angular_core.InputSignal<string>;
    expandedField: _angular_core.InputSignal<string>;
    itemTemplate: _angular_core.InputSignal<TemplateRef<any>>;
    emptyTemplate: _angular_core.InputSignal<TemplateRef<any>>;
    loadingTemplate: _angular_core.InputSignal<TemplateRef<any>>;
    selectionChange: EventEmitter<AXDataListSelectionChange>;
    itemClick: EventEmitter<AXDataListItem>;
    itemDoubleClick: EventEmitter<AXDataListItem>;
    expandChange: EventEmitter<{
        item: AXDataListItem;
        expanded: boolean;
    }>;
    viewport: CdkVirtualScrollViewport;
    protected loading: _angular_core.WritableSignal<boolean>;
    protected totalItems: _angular_core.WritableSignal<number>;
    protected selectedItems: _angular_core.WritableSignal<AXDataListItem[]>;
    protected selectedKeys: _angular_core.WritableSignal<string[]>;
    protected focusedIndex: _angular_core.WritableSignal<number>;
    protected expandedItems: _angular_core.WritableSignal<Set<string>>;
    protected listDataSource: AXListDataSource<AXDataListItem> | null;
    protected hasItems: _angular_core.Signal<boolean>;
    protected isEmpty: _angular_core.Signal<boolean>;
    protected isMultipleSelection: _angular_core.Signal<boolean>;
    protected showCheckboxes: _angular_core.Signal<boolean>;
    selectionModel: _angular_core.ModelSignal<string | string[]>;
    constructor();
    ngOnInit(): void;
    private setupDataSourceSubscription;
    protected selectItem(item: AXDataListItem, event?: Event): void;
    protected toggleMultipleSelection(item: AXDataListItem): void;
    protected setSingleSelection(item: AXDataListItem): void;
    protected deselectItem(item: AXDataListItem): void;
    protected updateSelectedItems(): void;
    protected isItemSelected(item: AXDataListItem): boolean;
    protected isItemDisabled(item: AXDataListItem): boolean;
    protected getItemKey(item: AXDataListItem): string;
    protected toggleExpanded(item: AXDataListItem, event: Event): void;
    protected hasChildren(item: AXDataListItem): boolean;
    protected isExpanded(item: AXDataListItem): boolean;
    protected getItemLevel(item: AXDataListItem): number;
    protected onKeyDown(event: KeyboardEvent, item: AXDataListItem, index: number): void;
    protected focusNextItem(currentIndex: number): void;
    protected focusPreviousItem(currentIndex: number): void;
    protected scrollToIndex(index: number): void;
    protected onItemClick(item: AXDataListItem, event: Event): void;
    protected onCheckboxChange(item: AXDataListItem, checked: boolean): void;
    protected onCheckboxClick(event: Event): void;
    protected onItemDoubleClick(item: AXDataListItem): void;
    protected getItemText(item: AXDataListItem): string;
    protected getItemDescription(item: AXDataListItem): string;
    protected getItemTooltip(item: AXDataListItem): string;
    protected shouldShowTooltip(item: AXDataListItem): boolean;
    protected trackByFn: (index: number, item: AXDataListItem) => string;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXDataListComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXDataListComponent, "ax-data-list", never, { "dataSource": { "alias": "dataSource"; "required": true; "isSignal": true; }; "config": { "alias": "config"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "showCheckbox": { "alias": "showCheckbox"; "required": false; "isSignal": true; }; "itemHeight": { "alias": "itemHeight"; "required": false; "isSignal": true; }; "isItemTruncated": { "alias": "isItemTruncated"; "required": false; "isSignal": true; }; "showItemTooltip": { "alias": "showItemTooltip"; "required": false; "isSignal": true; }; "disabledField": { "alias": "disabledField"; "required": false; "isSignal": true; }; "tooltipField": { "alias": "tooltipField"; "required": false; "isSignal": true; }; "textField": { "alias": "textField"; "required": false; "isSignal": true; }; "descriptionField": { "alias": "descriptionField"; "required": false; "isSignal": true; }; "levelField": { "alias": "levelField"; "required": false; "isSignal": true; }; "childrenField": { "alias": "childrenField"; "required": false; "isSignal": true; }; "expandedField": { "alias": "expandedField"; "required": false; "isSignal": true; }; "itemTemplate": { "alias": "itemTemplate"; "required": false; "isSignal": true; }; "emptyTemplate": { "alias": "emptyTemplate"; "required": false; "isSignal": true; }; "loadingTemplate": { "alias": "loadingTemplate"; "required": false; "isSignal": true; }; "selectionModel": { "alias": "selectionModel"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; "itemClick": "itemClick"; "itemDoubleClick": "itemDoubleClick"; "expandChange": "expandChange"; "selectionModel": "selectionModelChange"; }, never, never, true, never>;
}

export { AXDataListComponent };
export type { AXDataListConfig, AXDataListItem, AXDataListSelectionChange };
