import { OnInit, AfterContentInit, DoCheck, EventEmitter, ElementRef, QueryList, IterableDiffers } from '@angular/core';
import { CfCoreComponent } from '../core/core.component';
import { CfDatatableColumnComponent } from '../datatable-column/datatable-column.component';
import { IconModel } from '../../models/icon/icon.model';
import { InputModel } from '../../models/input/input.model';
import { DatatableModel } from '../../models/datatable/datatable.model';
import { DatatableStylingModel } from '../../models/datatable/datatable-styling.model';
import { TemplateService } from '../../services/template-service/template.service';
/**
 * <p>CfDatatable component is built using <a href="https://github.com/swimlane/ngx-datatable" target="_blank">ngx-datatable</a>, CfIcon and CfInput.</p>
 * <pre>
 * <code>
 * import { DatatableModel } from 'cedrus-fusion'
 * import { DatatableStylingModel } from 'cedrus-fusion'
 * <code><</code>cf-datatable<code>></code><code><</code><code>/</code>cf-datatable<code>></code>
 * </code>
 * </pre>
 */
export declare class CfDatatableComponent extends CfCoreComponent implements OnInit, AfterContentInit, DoCheck {
    elementRef: ElementRef;
    /** @hidden
     * List of datatable column components with column templates and names.
     */
    tableColumns: QueryList<CfDatatableColumnComponent>;
    /** @hidden
       * Datatable row details template
       */
    rowDetails: any;
    /** @hidden
     * Component property for registering Datatable and for connection to <b>ngx-datatable</b> functionality
     */
    datatableElement: any;
    /** @hidden
     * Cf-input component for filtering functionality
     */
    filteringInput: any;
    /** @hidden
     * DatatableModel data to be rendered in component html template
     */
    cfDatatable: DatatableModel;
    /** @hidden
     * Datatable original rows. Needs to be to keep original rows available after iteracting with datatable functionality (for exapmle after filtering).
     */
    originalRows: any[];
    /** @hidden
     * Working rows list which is changing by user iteraction with datatable functionality.
     */
    clonedRows: any[];
    /** @hidden
     * Array with CfDatatableColumnComponent's data (name and template).
     */
    _columns: any[];
    /** @hidden
     * Object to receive name and template for row details.
     */
    _rowDetails: {};
    /**
     * <pre>{
     *	rows: any[],
     *	rowHeight: any,
     *	limit: number,
     *	filterable: boolean,
     *	filterProperty: InputModel,
     *	expandable: boolean,
     *	detailsHeight: number,
     *	expandingIconProperty: IconModel,
     *	collapsingIconProperty: IconModel,
     *	selectable: boolean,
     *	sorted: [],
     *	selected: any[],
     * }</pre>
   * <h4>rows: array</h4>
   * It is an array with data for rows of any type.
   * <h4>rowHeight: number</h4>
   * It is height of each row. Can be numeric (number will be transformed to pixels) or 'auto'. Default: 50. Required when rows <b>expandable</b> is set.
   * <h4>limit: number</h4>
   * Means rows quontity per page. Default: undefined.
   * <h4>filterable: boolean</h4>
   * It means if filtering input must be shown. Type boolean. Default: false.
     * <h4>filterProperty: InputModel</h4>
     * CfInput component for the filter.
   * <h4>expandable: boolean</h4>
   * It means if to build or not row details. Default: false.
     * <h4>expandingIconProperty: IconModel</h4>
     * CfIcon component for the expanding icon.
     * <h4>collapsingIconProperty: IconModel</h4>
     * CfIcon component for the collapsing icon.
   * <h4>detailsHeight: boolean</h4>
   * It is number value and mean details row height in pixels. Default: 130.
   * <h4>selectable: boolean</h4>
   * It means if to show or not row selection checkboxes. Default: false.
   * <h4>sorted: array</h4>
   * Array with sorting objects. Default: []. Rows can sorted by multipe columns. Each sorting object is a json object with two properties: <b>prop</b>(property name by which to sort rows) and <b>dir</b>(sort direction. Can be: <b>asc</b> or <b>desc</b>).
   * <h4>selected: array</h4>
   * Array for selected items.
   * <p>Example:</p>
   * <pre>{
   * 		rows: [
     *			{ name: 'Austin', city: 'London' },
     *			{ name: 'Molly', city: 'Tokyo' },
     * 			{ name: 'Austin', city: 'New York' },
     * 			{ name: 'Monica', city: 'Paris' },
     * 			{ name: 'Austin', city: 'Dubai' }
     *		],
     *		rowHeight: 30,
     *		limit: 3,
     *		filterable: true,
     *		filterProperty: this.myInput
     *		expandable: true,
     *		expandingIconProperty: this.myExpandingIcon
     *		collapsingIconProperty: this.myCollapsingIcon
     *		detailsHeight: 150
     *		selectable: true,
     *		sorted: [{prop: 'name', dir: 'desc'}],
     *		selected: this.mySelected
   * }</pre>
   */
    properties: DatatableModel;
    /**
     *<p> dynamicClass: function() -> string,	// Function that returns name of the class </p>
     *<p> class: string											  // Name of the css class selector </p>
     *<p> themeColor: string									// primary/accent/warn </p>
     *<pre>
     *{
     *	// Container surrounding the all datatable elelemnts
     *	container: {
     *		dynamicClass,
     *		class
     *	},
     *	// Top section for filtering/expanding
     *	topOptions: {
     *		dynamicClass,
     *		class
     *	},
     *	// Filter element
     *	inputFilter: InputStylingModel, //refer to input component
     *	// Expanding icon styling
     *	expandingIcon: IconStylingModel, //refer to icon component
     *	// Collapsing icon styling
     *	collapsingIcon: IconStylingModel, //refer to icon component
     *	// Ngx-datatable elelemnt
     *	table: {
     *		dynamicClass,
     *		class
     *	},
     *	// Each cell container
     *	tableCell: {
     *		dynamicClass,
     *		class
     *	},
     *	// Each row details section
     *	tableRowDetails: {
     *		dynamicClass,
     *		class
     *	}
     *}
     * </pre>
   * <p>Example:<p>
   * <pre>
   *	new DatatableStylingModel({
     *		topOptions: {class: 'my-class-for-top-options'},
     *		inputFilter: new InputStylingModel({
     *			iconStyling: new IconStylingModel({ icon: { themeColor: "primary" } })
     *		}),
     *		expandingIcon: new IconStylingModel({ icon: {themeColor: "primary", class: "rotated"} }),
     *		collapsingIcon: new IconStylingModel({ icon: {themeColor: "primary", class: "rotated"} }),
     *		table: {class: 'my-class-for-table'},
     *		tableCell: {class: 'my-class-for-table-cell'},
     *		tableRowDetails: {class: 'my-class-for-table-row-details'},
   *	})
   * </pre>
   */
    styling: DatatableStylingModel;
    /**
     * It is array with rows json objects
     */
    rows: any[];
    /**
     * It is height of each row. Can be numeric (nember will be transformed to pixels) or 'auto'.
     */
    rowHeight: any;
    /**
     * It is rows quontity per page
     */
    limit: number;
    /**
     * To show or not filtering input
     */
    filterable: boolean;
    /**
     * CfInput component for the filter
     */
    filterProperty: InputModel;
    /**
     * It is boolean value to use or not row details section
     */
    expandable: boolean;
    /**
     * It is height of row in pixels
     */
    detailsHeight: number;
    /**
     * CfIcon component for the expanding icon
     */
    expandingIconProperty: IconModel;
    /**
     * CfIcon component for the collapsing icon
     */
    collapsingIconProperty: IconModel;
    /**
     * It is boolean value to show or not rows section checkboxes
     */
    selectable: boolean;
    /**
     * Array with sorting objects
     */
    sorted: any[];
    /**
     * Array for selected items
     */
    selected: any[];
    /**
     * <p>Output event with two properties: type and value.</p>
     * <p>Type can be: all or row</p>
     * <p>When type is <b>all</b> - value can be <b>true</b>(all details rows was expanded) or <b>false</b>(all details rows was compressed).</p>
     * <p>When type is <b>row</b> - value is an row json object.</p>
     */
    onDetailsToggle: EventEmitter<any>;
    /**
     * <p>Output event with selected items array</p>
     */
    onSelect: EventEmitter<any>;
    /**
     * <p>Output event with two properties: value and rows.</p>
     * <p>Value is a search string.</p>
     * <p>Rows is an array with filtered rows.</p>
     */
    onFilter: EventEmitter<any>;
    /**
     * <p>Output event with four properties: column, newValue, prevValue, sorts.</p>
     * <p>Column is data with ngx-datatable column properties.</p>
     * <p>NewValue can be: <b>asc</b>(ascending sorting), <b>desc</b>(descending sorting) or <b>undefined</b>(not sorted).</p>
     * <p>PrevValue can be: <b>asc</b>(ascending sorting), <b>desc</b>(descending sorting) or <b>undefined</b>(not sorted).</p>
     * <p>Sorts is an array with sorting object(s).</p>
     */
    onSort: EventEmitter<any>;
    /**@hidden
   * Object to register element state and compute differences.
   */
    differ: any;
    /** @hidden */
    constructor(elementRef: ElementRef, /**@hidden */ templateService: TemplateService, differs: IterableDiffers);
    /** @hidden
   * It will be generated <b>cfDatatable</b> object and rendered inside component template. Also arrays for filtering/selection will be initialized.
   */
    ngOnInit(): void;
    /** @hidden
     * After content was initialized, will be created columns array definition with names and templates and also will be created object for rows details templates.
     */
    ngAfterContentInit(): void;
    /** @hidden
   * Update the properties object with the changes on the inputs to keep the component dynamic
   * @param changes
   */
    ngOnChanges(changes: any): void;
    /**@hidden */
    ngDoCheck(): void;
    /**@hidden */
    updateRows(newRows: any): void;
    /** @hidden
     * Function for filtering Datatable. Goes to first page of Datatable after filtering.
     */
    updateFilter(event: any): void;
    /** @hidden
     * Function for selection rows with rows checkboxes.
     */
    onSelectRows({selected}: {
        selected: any;
    }): void;
    /** @hidden
     * Function for toggle each row details section.
     */
    toggleExpandRow(row: any): void;
    /** @hidden
     * Function to emit toggle event
   * @param event		object with type and value properties
     */
    onDetailToggle(event: any): void;
    /** @hidden
     * Function to emit sorting event
   * @param event		sort object
     */
    onSortRows(event: any): void;
    /** @hidden
     * Function for updating Datatable when rows length was changed by user custom functions.
     */
    checkFiltered(type: string, i: number, it: Object): void;
}
