import { CdkDrag, DragDrop, DropListRef } from "@angular/cdk/drag-drop";
import { CdkVirtualScrollViewport } from "@angular/cdk/scrolling";
import { AfterViewInit, ChangeDetectorRef, DoCheck, ElementRef, EventEmitter, IterableDiffers, OnDestroy, OnInit, QueryList, TemplateRef } from "@angular/core";
import { IFilter, IFilterPub, IRepeatFilter } from "../../services/data-source/public-api";
import { LoggerService } from "../../services/log-service";
import { IItemsReorderedEvent, IRepeatItem, IRepeatItemConfig, PaddingOptions, RepeatSelectionMode } from "./types";
import * as i0 from "@angular/core";
/**
 * repeat is used for displaying of continuous rows.
 * It can be used in "single"/"radio" or "multi" selection mode
 * <example-url>./../examples/index.html#/repeat</example-url>
 */
export declare class RepeatComponent<T extends IRepeatItem = unknown> implements OnInit, OnDestroy, AfterViewInit, DoCheck, IFilterPub {
    changeDetector: ChangeDetectorRef;
    logger: LoggerService;
    private iterableDiffers;
    dragDropService: DragDrop;
    private elRef;
    /**
     * Turns on/off dragging functionality
     */
    set draggable(value: boolean);
    get draggable(): boolean;
    /**
     * Turns on/off item reorder functionality
     */
    set reorderable(value: boolean);
    get reorderable(): boolean;
    draggableChange: EventEmitter<boolean>;
    reorderableChange: EventEmitter<boolean>;
    /**
     * This will stretch repeat items full width
     */
    width: string;
    /**
     * Prevent item bodies from capturing clicks
     */
    preventRowClick: boolean;
    /**
     * repeat item template
     */
    repeatItemTemplateRef: TemplateRef<any>;
    /**
     * Drag handle template that is applied on each item
     */
    dragHandleTemplateRef: TemplateRef<any>;
    /**
     * Drag preview class that is applied on the previewed item
     *
     * This input is required since CDK adds the preview DOM element as the last child on the body;
     * without it all drag previews within a project would have the same style
     */
    dragPreviewClass: string;
    /**
     * Drag preview template that is applied on each item
     */
    dragPreviewTemplateRef: TemplateRef<any>;
    /**
     * Actions-container content.
     */
    actionsTemplateRef: TemplateRef<any>;
    /**
     * Possible values are 'single', 'radio', 'multi' and 'none'
     */
    selectionMode: RepeatSelectionMode;
    /**
     * repeat rows padding. Possible values are:
     * 'normal', 'compact'.
     * Default value is 'compact'.
     */
    paddingSize: PaddingOptions;
    /**
     * Enables virtual scroll feature. Requires @itemSize input to have a correct item size set.
     */
    virtualScroll: boolean;
    /**
     * Required for virtual scroll. Don't forget to set a correct value here if you want to use virtual scroll.
     * The input accepts values in px only
     * @returns {number}
     */
    itemSize: number;
    /**
     * Selected repeat objects
     */
    selection: T[];
    /**
     * Is emitted when on items order has changed
     */
    itemsReordered: EventEmitter<IItemsReorderedEvent<T>>;
    /**
     * item config object containing callbacks
     */
    itemConfig: IRepeatItemConfig<T>;
    /**
     * repeat view objects array
     */
    itemsSource: T[];
    /**
     * Is selected item should be highlighted
     */
    highlightSelectedItem: boolean;
    /**
     * Is emitted when another item in the repeat is selected
     */
    selectionChange: EventEmitter<any[]>;
    dropListArea: ElementRef;
    /**
     * Reference to CdkVirtualScrollViewport exposed to give users control
     * over virtual viewport (ex. infinite scroll, programmatic repeat container scrolling).
     *
     * @see https://material.angular.io/cdk/scrolling/api#CdkVirtualScrollViewport
     */
    private _viewportRef;
    get viewportRef(): CdkVirtualScrollViewport;
    draggableElements: QueryList<CdkDrag>;
    mousedOver: boolean[];
    /**
     * Reference to CDK DropList so that the user can also subscribe
     * to its events in case they need to
     * @see https://material.angular.io/cdk/drag-drop/api#DropListRef
     */
    dropListRef: DropListRef;
    /**
     * Allows the list items to be draggable or not
     *
     * Note: This is not initialized so we can know whether it's been set by the consumer
     */
    private _draggable;
    /**
     * Allows the list items to be reorderable or not
     */
    private _reorderable;
    private selectionHasChanged;
    private itemsSourceDiff;
    private intersectionObserver;
    /** Emits when the drop list has been destroyed. */
    private readonly dropListDestroyed;
    get role(): string;
    get ariaMultiselectable(): true | null;
    constructor(changeDetector: ChangeDetectorRef, logger: LoggerService, iterableDiffers: IterableDiffers, dragDropService: DragDrop, elRef: ElementRef);
    ngOnInit(): void;
    ngDoCheck(): void;
    ngAfterViewInit(): void;
    /**
     * Cleanup CDK
     * PS: No need to unsubscribe from the EventEmitters, they are handled
     * automatically by Angular & RxJs
     */
    ngOnDestroy(): void;
    update(): void;
    getFilters(): IFilter<IRepeatFilter>;
    /**
     * Checks if repeat item is selected
     * @param item selected repeat item in repeat
     */
    isItemSelected(item: T): boolean;
    /**
     * repeat item is clicked
     * @param event
     * @param item value object that is used in nui-repeat-item
     */
    itemClicked(event: MouseEvent, item: T): void;
    /**
     * nui-repeat-item selection change handler
     * @param item selected nui-repeat-item
     */
    multiSelectionChanged(item: T): void;
    isModeMulti(): boolean;
    isModeRadio(): boolean;
    isItemClickable(item: T): boolean;
    isItemSelectable(item: T): boolean;
    isItemDisabled(item: T): boolean;
    isItemDraggable(item: T): boolean;
    private initializeCDKDropList;
    private disposeCDKDropList;
    private itemDropped;
    private intersectionObserverCallback;
    static ɵfac: i0.ɵɵFactoryDeclaration<RepeatComponent<any>, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<RepeatComponent<any>, "nui-repeat", never, { "draggable": "draggable"; "reorderable": "reorderable"; "preventRowClick": "preventRowClick"; "repeatItemTemplateRef": "repeatItemTemplateRef"; "dragHandleTemplateRef": "dragHandleTemplateRef"; "dragPreviewClass": "dragPreviewClass"; "dragPreviewTemplateRef": "dragPreviewTemplateRef"; "actionsTemplateRef": "actionsTemplateRef"; "selectionMode": "selectionMode"; "paddingSize": "paddingSize"; "virtualScroll": "virtualScroll"; "itemSize": "itemSize"; "selection": "selection"; "itemConfig": "itemConfig"; "itemsSource": "itemsSource"; "highlightSelectedItem": "highlightSelectedItem"; }, { "draggableChange": "draggableChange"; "reorderableChange": "reorderableChange"; "itemsReordered": "itemsReordered"; "selectionChange": "selectionChange"; }, never, ["[repeatHeaderTemplate]"]>;
}
