import { OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angular/core';
import { AbstractControl, UntypedFormArray } from '@angular/forms';
import { Subject } from 'rxjs';
import * as i0 from "@angular/core";
export declare class TableSelectableRowContext {
    /**specify the form control to use for the selectAll checkbox or provide your own.
     * This can be useful if you want to subscribe to changes to change button states as the selection changes
     * or if you want to add it to an already-existing form group
     */
    selectAllCheckbox: AbstractControl;
    /**specify the FormArray to use for the dependent checkboxes of the selectAll checkbox
     * The dependent checkboxes will add and remove themselves automatically and the selectAll
     * box will react accordingly. Do not provide your own controls
     * This can be useful if you want to subscribe to changes to change button states as the selection changes
     * or if you want to add it to an already-existing form group
     */
    rowCheckboxes: UntypedFormArray;
    /**The index of the last row the user clicked. This allows multiple directives on a screen to coordinate
     * for reacting to shift+click actions that should automatically select multiple rows between the clicked rows
     * defaults to -1 to indicate that no user click has been captured
     */
    lastClickedIndex: number;
    /**A subject that is triggered when a row-based directive is added or removed. It allows
     * the master checkbox in the header to know that it needs to reset tracking information
     * without replacing the actual FormArray that the hosting component may be subscribed to for changes
     */
    rowAddedOrRemoved: Subject<void>;
    /**
     * Set to true to disable Shift-Click/Ctrl-Click functionality
     */
    disableAdvancedRowClickBehavior: boolean;
    /**
     * Set to list of indices of controls that should not toggle when master/header checkbox toggles
     */
    nonDependentCheckboxes: number[];
}
export declare class TableSelectableRowComponent implements OnInit, OnDestroy, OnChanges {
    /**The ID root to use for the checkbox and table cell */
    id: string;
    /** Disables the selection functionality when false */
    set isSelectionEnabled(value: boolean | null | undefined);
    get isSelectionEnabled(): boolean | null | undefined;
    private _selectionEnabled;
    /**Shared context between master and children. Child directive adds its own FormControl to this
    and removes it onDestroy. The same context object must be used for all directives in a single table*/
    context: TableSelectableRowContext;
    rowIndex: number;
    /**The options used to lock the checkbox column to the left of the table, must be modified by host
     * if the checkbox is not the first column in the table
     */
    lockedColOptions: {
        border: boolean;
        left?: number;
        right?: number;
    };
    /** Automatically set to true based on checkbox state, used to highlight the row to match our table selected row styles */
    isSelected: boolean;
    /** Automatically set to true if no rowIndex is provided or the row index is less than zero */
    isHeader: boolean;
    /**
     * Set to true if you want the checkbox to be disabled.
     *
     * When you use this property, make sure you set `disableAdvancedRowClickBehavior: true`
     * in the `TableSelectableRowContext`, or undesired side-effects will occur.
     */
    isCheckboxDisabled?: boolean;
    dependentCheckboxesReference: {
        controls: AbstractControl[];
    };
    formControl: AbstractControl;
    checkboxAttributeID: string;
    /**Sends an event when the component is destroyed so that it can unsubscribe from any observables */
    private destroyed;
    /**Validate and populate the context as the table is dynamically built. Because the context is shared between the
     * header and each of the rows, changes to it can be used to determine what is happening and hook up the correct
     * subscriptions for selectAll. The user can provide an existing formArray for the rows and form control for the header,
     * or it can just be the default empty ones created by the context class.
    */
    ngOnInit(): void;
    /**Watch for changes to the row index that can occur if the table is reordered in-place instead of
     * recreated from scratch. Re-capture the correct form control to keep everything in sync
     */
    ngOnChanges(changes: SimpleChanges): void;
    /** Tell the header checkbox to refresh the selectAll subscription because a row was removed*/
    ngOnDestroy(): void;
    /**Handle when a user clicks on a table row (or something inside it which bubbles up) to increase the hit area for row selection
     * Only work on the table body (not the header) because the header may have other click handlers for sort etc that we don't care about.
     * Handle shift and control select as well as checkbox click like windows explorer or the original bill lists do.
    */
    rowClicked(event: MouseEvent): void;
    private watchForChanges;
    /**
      * If they are holding the shift key, try to select all the checkboxes between their last selection
      * and most recent selection. The logic is setup to behave the way windows explorer behaves
      * We don't allow drag-to-select like the kendo tables, but it means users can highlight text and copy+paste to excel etc
      * so I think this is actually preferable
      */
    private handleShiftSelect;
    private clearAllRows;
    static ɵfac: i0.ɵɵFactoryDeclaration<TableSelectableRowComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<TableSelectableRowComponent, "[ecTableSelectableRow]", never, { "id": { "alias": "id"; "required": false; }; "isSelectionEnabled": { "alias": "ecTableSelectableRow"; "required": false; }; "context": { "alias": "selectionContext"; "required": false; }; "rowIndex": { "alias": "rowIndex"; "required": false; }; "lockedColOptions": { "alias": "lockedColOptions"; "required": false; }; "isSelected": { "alias": "isSelected"; "required": false; }; "isCheckboxDisabled": { "alias": "isCheckboxDisabled"; "required": false; }; }, {}, never, [".before-checkbox", "*"], false, never>;
}
