UNPKG

igniteui-react-grids

Version:

Ignite UI React grid components.

3,613 lines 130 kB
import * as React from 'react';
import { delegateCombine, delegateRemove } from "igniteui-react-core";
import { IgrColumnCollection } from "./igr-column-collection";
import { IgrActionStripCollection } from "./igr-action-strip-collection";
import { IgrGridToolbarCollection } from "./igr-grid-toolbar-collection";
import { IgrPaginatorCollection } from "./igr-paginator-collection";
import { FilteringLogic_$type } from "./FilteringLogic";
import { IgrFilteringExpressionsTree } from "./igr-filtering-expressions-tree";
import { GridPagingMode_$type } from "./GridPagingMode";
import { GridValidationTrigger_$type } from "./GridValidationTrigger";
import { FilterMode_$type } from "./FilterMode";
import { GridSummaryPosition_$type } from "./GridSummaryPosition";
import { GridSummaryCalculationMode_$type } from "./GridSummaryCalculationMode";
import { GridSelectionMode_$type } from "./GridSelectionMode";
import { IgrForOfState } from "./igr-for-of-state";
import { IgrOverlayOutletDirective } from "./igr-overlay-outlet-directive";
import { IgrStateCollection } from "./igr-state-collection";
import { IgrFilteringExpressionsTreeEventArgs } from "./igr-filtering-expressions-tree-event-args";
import { IgrGridScrollEventArgs } from "./igr-grid-scroll-event-args";
import { IgrGridCellEventArgs } from "./igr-grid-cell-event-args";
import { IgrGridRowEventArgs } from "./igr-grid-row-event-args";
import { IgrGridFormGroupCreatedEventArgs } from "./igr-grid-form-group-created-event-args";
import { IgrGridValidationStatusEventArgs } from "./igr-grid-validation-status-event-args";
import { IgrRowSelectionEventArgs } from "./igr-row-selection-event-args";
import { IgrColumnSelectionEventArgs } from "./igr-column-selection-event-args";
import { IgrPinColumnCancellableEventArgs } from "./igr-pin-column-cancellable-event-args";
import { IgrPinColumnEventArgs } from "./igr-pin-column-event-args";
import { IgrGridEditEventArgs } from "./igr-grid-edit-event-args";
import { IgrGridEditDoneEventArgs } from "./igr-grid-edit-done-event-args";
import { IgrColumnComponentEventArgs } from "./igr-column-component-event-args";
import { IgrColumnsAutoGeneratedEventArgs } from "./igr-columns-auto-generated-event-args";
import { IgrSortingEventArgs } from "./igr-sorting-event-args";
import { IgrSortingExpressionEventArgs } from "./igr-sorting-expression-event-args";
import { IgrFilteringEventArgs } from "./igr-filtering-event-args";
import { IgrRowDataEventArgs } from "./igr-row-data-event-args";
import { IgrRowDataCancelableEventArgs } from "./igr-row-data-cancelable-event-args";
import { IgrColumnResizeEventArgs } from "./igr-column-resize-event-args";
import { IgrGridContextMenuEventArgs } from "./igr-grid-context-menu-event-args";
import { IgrColumnVisibilityChangingEventArgs } from "./igr-column-visibility-changing-event-args";
import { IgrColumnVisibilityChangedEventArgs } from "./igr-column-visibility-changed-event-args";
import { IgrColumnMovingStartEventArgs } from "./igr-column-moving-start-event-args";
import { IgrColumnMovingEventArgs } from "./igr-column-moving-event-args";
import { IgrColumnMovingEndEventArgs } from "./igr-column-moving-end-event-args";
import { IgrGridKeydownEventArgs } from "./igr-grid-keydown-event-args";
import { IgrRowDragStartEventArgs } from "./igr-row-drag-start-event-args";
import { IgrRowDragEndEventArgs } from "./igr-row-drag-end-event-args";
import { IgrGridClipboardEventEventArgs } from "./igr-grid-clipboard-event-event-args";
import { IgrComponentArrayDataValueChangedEventArgs } from "./igr-component-array-data-value-changed-event-args";
import { IgrRowToggleEventArgs } from "./igr-row-toggle-event-args";
import { IgrPinRowEventArgs } from "./igr-pin-row-event-args";
import { IgrActiveNodeChangeEventArgs } from "./igr-active-node-change-event-args";
import { IgrGridToolbarExportEventArgs } from "./igr-grid-toolbar-export-event-args";
import { IgrGridSelectionRangeEventArgs } from "./igr-grid-selection-range-event-args";
import { IgrVoidEventArgs } from "igniteui-react";
import { IgrForOfDataChangingEventArgs } from "./igr-for-of-data-changing-event-args";
import { IgrColumn } from "./igr-column";
import { TypeRegistrar } from "igniteui-react-core";
import { ReactRenderer, PortalManager } from "igniteui-react-core";
import { ContentChildrenManager } from "igniteui-react-core";
import { CollectionAdapter, NamePatcher, getModifiedProps, isValidProp, ensureBool, interfaceToInternal, ensureEnum, toSpinal, initializePropertiesFromCss } from "igniteui-react-core";
import { ReactTemplateAdapter } from "igniteui-react-core";
import { html } from "lit-html";
import { DataCloneStrategy } from "./DataCloneStrategy";
import { ClipboardOptions } from "./ClipboardOptions";
import { ColumnCollection as ColumnCollection_internal } from "./ColumnCollection";
import { Column } from "./Column";
import { SyncableObservableCollection$1 } from "igniteui-react-core";
import { NotifyCollectionChangedAction } from "igniteui-react-core";
import { ActionStrip } from "./ActionStrip";
import { IgrGridRowDragGhostContext } from "./igr-grid-row-drag-ghost-context";
import { IgrGridRowEditTextTemplateContext } from "./igr-grid-row-edit-text-template-context";
import { IgrGridEmptyTemplateContext } from "./igr-grid-empty-template-context";
import { IgrGridRowEditActionsTemplateContext } from "./igr-grid-row-edit-actions-template-context";
import { IgrGridRowTemplateContext } from "./igr-grid-row-template-context";
import { IgrGridTemplateContext } from "./igr-grid-template-context";
import { IgrGridHeaderTemplateContext } from "./igr-grid-header-template-context";
import { GridToolbar } from "./GridToolbar";
import { Paginator } from "./Paginator";
import { GridResourceStrings } from "./GridResourceStrings";
import { PinningConfig } from "./PinningConfig";
import { FilteringStrategy } from "./FilteringStrategy";
import { GridSortingStrategy } from "./GridSortingStrategy";
import { SortingOptions } from "./SortingOptions";
import { IgrHeadSelectorTemplateContext } from "./igr-head-selector-template-context";
import { IgrRowSelectorTemplateContext } from "./igr-row-selector-template-context";
import { GridState } from "./GridState";
import { SortingExpression } from "./SortingExpression";
import { GridSelectionRange } from "./GridSelectionRange";
import { OverlaySettings } from "./OverlaySettings";
export class IgrGridBaseDirective extends React.Component {
    createImplementation() {
        return null;
    }
    get nativeElement() {
        return this._implementation.nativeElement;
    }
    /**
     * @hidden
     */
    get i() {
        return this._implementation;
    } /**
                                 * @hidden
                                 */
    static _createFromInternal(internal) {
        if (!internal) {
            return null;
        }
        if (!internal.$type) {
            return null;
        }
        let name = internal.$type.name;
        let externalName = "Igr" + name;
        if (!TypeRegistrar.isRegistered(externalName)) {
            return null;
        }
        return TypeRegistrar.create(externalName);
    }
    onImplementationCreated() {
    }
    _initializeAdapters() {
        if (!this._contentChildrenManager) {
            const resolveNested = ((props, propName, nestedPropName) => {
                var _a;
                const prop = props[propName];
                if (Array.isArray(prop)) {
                    return prop.map(x => {
                        var _a;
                        return (_a = x[nestedPropName]) !== null && _a !== void 0 ? _a : resolveNested(x.props, propName, nestedPropName);
                    }).join("_");
                }
                else if (prop) {
                    return (_a = prop.props[nestedPropName]) !== null && _a !== void 0 ? _a : resolveNested(prop.props, propName, nestedPropName);
                }
                else {
                    return props[nestedPropName];
                }
            });
            this._contentChildrenManager = new ContentChildrenManager((ch) => {
                const key = ch.key || ch.props.name;
                if (!key) {
                    const type = (ch.type);
                    const instance = new type;
                    const name = instance.i.$type.name;
                    switch (name) {
                        case "Column": return ch.props.field;
                        case "ColumnGroup": return resolveNested(ch.props, "children", "field");
                        case "ColumnLayout": return resolveNested(ch.props, "children", "field");
                        case "ActionStrip": return "IgrActionStrip";
                        case "GridToolbar": return "IgrGridToolbar";
                        case "Paginator": return "IgrPaginator";
                        case "GridState": return "IgrGridState";
                        default: return undefined;
                    }
                }
                return key;
            }, (ch) => {
                const key = ch.key || ch.props.name;
                if (!key) {
                    const type = (ch.type);
                    const instance = new type;
                    const name = instance.i.$type.name;
                    switch (name) {
                        case "Column": return ch.props.field;
                        case "ColumnGroup": return resolveNested(ch.props, "children", "field");
                        case "ColumnLayout": return resolveNested(ch.props, "children", "field");
                        case "ActionStrip": return "IgrActionStrip";
                        case "GridToolbar": return "IgrGridToolbar";
                        case "Paginator": return "IgrPaginator";
                        case "GridState": return "IgrGridState";
                        default: return undefined;
                    }
                }
                return key;
            }, () => {
                if (this._updateContentChildren) {
                    this._updateContentChildren();
                }
                else if (this._updateAdapters) {
                    this._updateAdapters();
                }
            });
        }
        this._columnListAdapter = new CollectionAdapter(this.contentColumnList, this.i.u, this.combinedColumnList, (c) => c.i, (i) => {
            if (this._initializeElement) {
                this._initializeElement(i);
            }
        }, (i) => {
            if (this._destroyElement) {
                this._destroyElement(i);
            }
        });
        this._actionStripComponentsAdapter = new CollectionAdapter(this.contentActionStripComponents, this.i.l, this.actualActionStripComponents, (c) => c.i, (i) => {
            if (this._initializeElement) {
                this._initializeElement(i);
            }
        }, (i) => {
            if (this._destroyElement) {
                this._destroyElement(i);
            }
        });
        this._toolbarAdapter = new CollectionAdapter(this.contentToolbar, this.i.bh, this.actualToolbar, (c) => c.i, (i) => {
            if (this._initializeElement) {
                this._initializeElement(i);
            }
        }, (i) => {
            if (this._destroyElement) {
                this._destroyElement(i);
            }
        });
        this._paginationComponentsAdapter = new CollectionAdapter(this.contentPaginationComponents, this.i.bm, this.actualPaginationComponents, (c) => c.i, (i) => {
            if (this._initializeElement) {
                this._initializeElement(i);
            }
        }, (i) => {
            if (this._destroyElement) {
                this._destroyElement(i);
            }
        });
        this._stateComponentsAdapter = new CollectionAdapter(this.contentStateComponents, this.i.b5, this.actualStateComponents, (c) => c.i, (i) => {
            if (this._initializeElement) {
                this._initializeElement(i);
            }
        }, (i) => {
            if (this._destroyElement) {
                this._destroyElement(i);
            }
        });
        if (super["_initializeAdapters"]) {
            super["_initializeAdapters"]();
        }
    }
    _updateAdapters() {
        if (super["_updateAdapters"]) {
            super["_updateAdapters"]();
        }
        let contentChildrenActual = this._contentChildrenManager.contentChildrenActual;
        this.contentColumnList.length = 0;
        for (var i = 0; i < contentChildrenActual.length; i++) {
            if ((Column.$type).isAssignableFrom(contentChildrenActual[i].i.$type)) {
                this.contentColumnList.push(contentChildrenActual[i]);
            }
        }
        if (this._columnListAdapter != null) {
            this._columnListAdapter.notifyContentChanged();
        }
        this.contentActionStripComponents.length = 0;
        for (var i = 0; i < contentChildrenActual.length; i++) {
            if ((ActionStrip.$type).isAssignableFrom(contentChildrenActual[i].i.$type)) {
                this.contentActionStripComponents.push(contentChildrenActual[i]);
            }
        }
        if (this._actionStripComponentsAdapter != null) {
            this._actionStripComponentsAdapter.notifyContentChanged();
        }
        this.contentToolbar.length = 0;
        for (var i = 0; i < contentChildrenActual.length; i++) {
            if ((GridToolbar.$type).isAssignableFrom(contentChildrenActual[i].i.$type)) {
                this.contentToolbar.push(contentChildrenActual[i]);
            }
        }
        if (this._toolbarAdapter != null) {
            this._toolbarAdapter.notifyContentChanged();
        }
        this.contentPaginationComponents.length = 0;
        for (var i = 0; i < contentChildrenActual.length; i++) {
            if ((Paginator.$type).isAssignableFrom(contentChildrenActual[i].i.$type)) {
                this.contentPaginationComponents.push(contentChildrenActual[i]);
            }
        }
        if (this._paginationComponentsAdapter != null) {
            this._paginationComponentsAdapter.notifyContentChanged();
        }
        this.contentStateComponents.length = 0;
        for (var i = 0; i < contentChildrenActual.length; i++) {
            if ((GridState.$type).isAssignableFrom(contentChildrenActual[i].i.$type)) {
                this.contentStateComponents.push(contentChildrenActual[i]);
            }
        }
        if (this._stateComponentsAdapter != null) {
            this._stateComponentsAdapter.notifyContentChanged();
        }
    }
    constructor(props) {
        super(props);
        this.mounted = false;
        this._columnList = null;
        this._actionStripComponents = null;
        this._toolbar = null;
        this._paginationComponents = null;
        this._actualColumnList = null;
        this._stateComponents = null;
        this.__p = null;
        this._hasUserValues = new Set();
        this._stylingContainer = null;
        this._stylingParent = null;
        this._inStyling = false;
        this._filteringExpressionsTreeChange = null;
        this._filteringExpressionsTreeChange_wrapped = null;
        this._advancedFilteringExpressionsTreeChange = null;
        this._advancedFilteringExpressionsTreeChange_wrapped = null;
        this._gridScroll = null;
        this._gridScroll_wrapped = null;
        this._cellClick = null;
        this._cellClick_wrapped = null;
        this._rowClick = null;
        this._rowClick_wrapped = null;
        this._formGroupCreated = null;
        this._formGroupCreated_wrapped = null;
        this._validationStatusChange = null;
        this._validationStatusChange_wrapped = null;
        this._selected = null;
        this._selected_wrapped = null;
        this._rowSelectionChanging = null;
        this._rowSelectionChanging_wrapped = null;
        this._columnSelectionChanging = null;
        this._columnSelectionChanging_wrapped = null;
        this._columnPin = null;
        this._columnPin_wrapped = null;
        this._columnPinned = null;
        this._columnPinned_wrapped = null;
        this._cellEditEnter = null;
        this._cellEditEnter_wrapped = null;
        this._cellEditExit = null;
        this._cellEditExit_wrapped = null;
        this._cellEdit = null;
        this._cellEdit_wrapped = null;
        this._cellEditDone = null;
        this._cellEditDone_wrapped = null;
        this._rowEditEnter = null;
        this._rowEditEnter_wrapped = null;
        this._rowEdit = null;
        this._rowEdit_wrapped = null;
        this._rowEditDone = null;
        this._rowEditDone_wrapped = null;
        this._rowEditExit = null;
        this._rowEditExit_wrapped = null;
        this._columnInit = null;
        this._columnInit_wrapped = null;
        this._columnsAutogenerated = null;
        this._columnsAutogenerated_wrapped = null;
        this._sorting = null;
        this._sorting_wrapped = null;
        this._sortingDone = null;
        this._sortingDone_wrapped = null;
        this._filtering = null;
        this._filtering_wrapped = null;
        this._filteringDone = null;
        this._filteringDone_wrapped = null;
        this._rowAdded = null;
        this._rowAdded_wrapped = null;
        this._rowDeleted = null;
        this._rowDeleted_wrapped = null;
        this._rowDelete = null;
        this._rowDelete_wrapped = null;
        this._rowAdd = null;
        this._rowAdd_wrapped = null;
        this._columnResized = null;
        this._columnResized_wrapped = null;
        this._contextMenu = null;
        this._contextMenu_wrapped = null;
        this._doubleClick = null;
        this._doubleClick_wrapped = null;
        this._columnVisibilityChanging = null;
        this._columnVisibilityChanging_wrapped = null;
        this._columnVisibilityChanged = null;
        this._columnVisibilityChanged_wrapped = null;
        this._columnMovingStart = null;
        this._columnMovingStart_wrapped = null;
        this._columnMoving = null;
        this._columnMoving_wrapped = null;
        this._columnMovingEnd = null;
        this._columnMovingEnd_wrapped = null;
        this._gridKeydown = null;
        this._gridKeydown_wrapped = null;
        this._rowDragStart = null;
        this._rowDragStart_wrapped = null;
        this._rowDragEnd = null;
        this._rowDragEnd_wrapped = null;
        this._gridCopy = null;
        this._gridCopy_wrapped = null;
        this._selectedRowsChange = null;
        this._selectedRowsChange_wrapped = null;
        this._rowToggle = null;
        this._rowToggle_wrapped = null;
        this._rowPinning = null;
        this._rowPinning_wrapped = null;
        this._rowPinned = null;
        this._rowPinned_wrapped = null;
        this._activeNodeChange = null;
        this._activeNodeChange_wrapped = null;
        this._sortingExpressionsChange = null;
        this._sortingExpressionsChange_wrapped = null;
        this._toolbarExporting = null;
        this._toolbarExporting_wrapped = null;
        this._rangeSelected = null;
        this._rangeSelected_wrapped = null;
        this._rendered = null;
        this._rendered_wrapped = null;
        this._dataChanging = null;
        this._dataChanging_wrapped = null;
        this._dataChanged = null;
        this._dataChanged_wrapped = null;
        if (this._styling) {
            NamePatcher.ensureStylablePatched(Object.getPrototypeOf(this));
        }
        this._implementation = this.createImplementation();
        this._portalManager = new PortalManager("templates", () => {
            if (this.mounted) {
                this.setState({});
            }
        });
        if (typeof window !== 'undefined' && typeof document !== 'undefined') {
            this._renderer = new ReactRenderer(this._implementation.nativeElement, document, false, null, this._portalManager);
        }
        this._implementation.externalObject = this;
        this.onImplementationCreated();
        if (this._initializeAdapters) {
            this._initializeAdapters();
        }
    }
    componentDidMount() {
        this.mounted = true;
        for (const p of Object.keys(this.props)) {
            if (isValidProp(this, p)) {
                this[p] = this.props[p];
            }
        }
    }
    shouldComponentUpdate(nextProps, nextState) {
        const mod = getModifiedProps(this.props, nextProps);
        for (const p of Object.keys(mod)) {
            if (isValidProp(this, p)) {
                this[p] = mod[p];
            }
        }
        return true;
    }
    render() {
        let children = this._contentChildrenManager.getChildren(this.props.children);
        let div = React.createElement("div", {
            children: children
        });
        return div;
    }
    /**
     * Gets/Sets the display time for the row adding snackbar notification.
     * @remarks
     * By default it is 6000ms.
    */
    get snackbarDisplayTime() {
        return this.i.cx;
    }
    set snackbarDisplayTime(v) {
        this.i.cx = +v;
    }
    get autoGenerate() {
        return this.i.cc;
    }
    set autoGenerate(v) {
        this.i.cc = ensureBool(v);
    }
    get autoGenerateExclude() {
        return this.i.a;
    }
    set autoGenerateExclude(v) {
        if (v && !Array.isArray(v) && typeof (v) == "string") {
            const re = /\s*(?:,|\s|$)\s*/gm;
            v = v.split(re);
        }
        this.i.a = v;
    }
    /**
     * Controls whether columns moving is enabled in the grid.
    */
    get moving() {
        return this.i.ch;
    }
    set moving(v) {
        this.i.ch = ensureBool(v);
    }
    get emptyGridTemplate() {
        return this._emptyGridTemplate;
    }
    set emptyGridTemplate(v) {
        this._emptyGridTemplate = v;
        if (!this._emptyGridTemplateAdapter) {
            this._emptyGridTemplateAdapter = new ReactTemplateAdapter(this._renderer, this._portalManager, "dt", { html: html });
        }
        this._emptyGridTemplateAdapter.setValue(this.i, this._emptyGridTemplate);
    }
    get addRowEmptyTemplate() {
        return this._addRowEmptyTemplate;
    }
    set addRowEmptyTemplate(v) {
        this._addRowEmptyTemplate = v;
        if (!this._addRowEmptyTemplateAdapter) {
            this._addRowEmptyTemplateAdapter = new ReactTemplateAdapter(this._renderer, this._portalManager, "dq", { html: html });
        }
        this._addRowEmptyTemplateAdapter.setValue(this.i, this._addRowEmptyTemplate);
    }
    get loadingGridTemplate() {
        return this._loadingGridTemplate;
    }
    set loadingGridTemplate(v) {
        this._loadingGridTemplate = v;
        if (!this._loadingGridTemplateAdapter) {
            this._loadingGridTemplateAdapter = new ReactTemplateAdapter(this._renderer, this._portalManager, "dy", { html: html });
        }
        this._loadingGridTemplateAdapter.setValue(this.i, this._loadingGridTemplate);
    }
    /**
     * Get/Set IgxSummaryRow height
    */
    get summaryRowHeight() {
        return this.i.cy;
    }
    set summaryRowHeight(v) {
        this.i.cy = +v;
    }
    get dataCloneStrategy() {
        return this.i.af.nativeElement;
    }
    set dataCloneStrategy(v) {
        this.i.af = interfaceToInternal(v, () => new DataCloneStrategy());
    }
    /**
     * Controls the copy behavior of the grid.
    */
    get clipboardOptions() {
        return this.i.p.nativeElement;
    }
    set clipboardOptions(v) {
        this.i.p = interfaceToInternal(v, () => new ClipboardOptions());
    }
    get rowClasses() {
        return this.i.c5;
    }
    set rowClasses(v) {
        this.i.c5 = v;
    }
    get rowStyles() {
        return this.i.c6;
    }
    set rowStyles(v) {
        this.i.c6 = v;
    }
    get primaryKey() {
        return this.i.ee;
    }
    set primaryKey(v) {
        this.i.ee = v;
    }
    get combinedColumnList() {
        if (!this._combinedColumnList) {
            this._combinedColumnList = [];
        }
        return this._combinedColumnList;
    }
    get contentColumnList() {
        if (!this._contentColumnList) {
            this._contentColumnList = [];
        }
        return this._contentColumnList;
    }
    /**
     * @hidden @internal
    */
    get columnList() {
        if (this._columnList === null) {
            let coll = new IgrColumnCollection();
            let inner = coll._innerColl;
            this._columnList = coll;
            inner.addListener((sender, e) => {
                switch (e.action) {
                    case NotifyCollectionChangedAction.Add:
                        this._columnListAdapter.insertManualItem(e.newStartingIndex, e.newItems.item(0));
                        break;
                    case NotifyCollectionChangedAction.Remove:
                        this._columnListAdapter.removeManualItemAt(e.oldStartingIndex);
                        break;
                    case NotifyCollectionChangedAction.Replace:
                        this._columnListAdapter.removeManualItemAt(e.oldStartingIndex);
                        this._columnListAdapter.insertManualItem(e.newStartingIndex, e.newItems.item(0));
                        break;
                    case NotifyCollectionChangedAction.Reset:
                        this._columnListAdapter.clearManualItems();
                        break;
                }
            });
            ;
        }
        return this._columnList;
    }
    get actualActionStripComponents() {
        if (!this._actualActionStripComponents) {
            this._actualActionStripComponents = [];
        }
        return this._actualActionStripComponents;
    }
    get contentActionStripComponents() {
        if (!this._contentActionStripComponents) {
            this._contentActionStripComponents = [];
        }
        return this._contentActionStripComponents;
    }
    /**
     * @hidden @internal
    */
    get actionStripComponents() {
        if (this._actionStripComponents === null) {
            let coll = new IgrActionStripCollection();
            let inner = coll._innerColl;
            this._actionStripComponents = coll;
            inner.addListener((sender, e) => {
                switch (e.action) {
                    case NotifyCollectionChangedAction.Add:
                        this._actionStripComponentsAdapter.insertManualItem(e.newStartingIndex, e.newItems.item(0));
                        break;
                    case NotifyCollectionChangedAction.Remove:
                        this._actionStripComponentsAdapter.removeManualItemAt(e.oldStartingIndex);
                        break;
                    case NotifyCollectionChangedAction.Replace:
                        this._actionStripComponentsAdapter.removeManualItemAt(e.oldStartingIndex);
                        this._actionStripComponentsAdapter.insertManualItem(e.newStartingIndex, e.newItems.item(0));
                        break;
                    case NotifyCollectionChangedAction.Reset:
                        this._actionStripComponentsAdapter.clearManualItems();
                        break;
                }
            });
            ;
        }
        return this._actionStripComponents;
    }
    /**
     * Gets the custom template, if any, used for row drag ghost.
    */
    get dragGhostCustomTemplate() {
        return this._dragGhostCustomTemplate;
    }
    set dragGhostCustomTemplate(v) {
        this._dragGhostCustomTemplate = v;
        if (!this._dragGhostCustomTemplateAdapter) {
            this._dragGhostCustomTemplateAdapter = new ReactTemplateAdapter(this._renderer, this._portalManager, "dr", { html: html }, () => new IgrGridRowDragGhostContext());
        }
        this._dragGhostCustomTemplateAdapter.setValue(this.i, this._dragGhostCustomTemplate);
    }
    /**
     * Gets the row edit text template.
    */
    get rowEditTextTemplate() {
        return this._rowEditTextTemplate;
    }
    set rowEditTextTemplate(v) {
        this._rowEditTextTemplate = v;
        if (!this._rowEditTextTemplateAdapter) {
            this._rowEditTextTemplateAdapter = new ReactTemplateAdapter(this._renderer, this._portalManager, "d2", { html: html }, () => new IgrGridRowEditTextTemplateContext());
        }
        this._rowEditTextTemplateAdapter.setValue(this.i, this._rowEditTextTemplate);
    }
    /**
     * Gets the row add text template.
    */
    get rowAddTextTemplate() {
        return this._rowAddTextTemplate;
    }
    set rowAddTextTemplate(v) {
        this._rowAddTextTemplate = v;
        if (!this._rowAddTextTemplateAdapter) {
            this._rowAddTextTemplateAdapter = new ReactTemplateAdapter(this._renderer, this._portalManager, "dz", { html: html }, () => new IgrGridEmptyTemplateContext());
        }
        this._rowAddTextTemplateAdapter.setValue(this.i, this._rowAddTextTemplate);
    }
    /**
     * Gets the row edit actions template.
    */
    get rowEditActionsTemplate() {
        return this._rowEditActionsTemplate;
    }
    set rowEditActionsTemplate(v) {
        this._rowEditActionsTemplate = v;
        if (!this._rowEditActionsTemplateAdapter) {
            this._rowEditActionsTemplateAdapter = new ReactTemplateAdapter(this._renderer, this._portalManager, "d1", { html: html }, () => new IgrGridRowEditActionsTemplateContext());
        }
        this._rowEditActionsTemplateAdapter.setValue(this.i, this._rowEditActionsTemplate);
    }
    /**
     * Gets the row expand indicator template.
    */
    get rowExpandedIndicatorTemplate() {
        return this._rowExpandedIndicatorTemplate;
    }
    set rowExpandedIndicatorTemplate(v) {
        this._rowExpandedIndicatorTemplate = v;
        if (!this._rowExpandedIndicatorTemplateAdapter) {
            this._rowExpandedIndicatorTemplateAdapter = new ReactTemplateAdapter(this._renderer, this._portalManager, "d3", { html: html }, () => new IgrGridRowTemplateContext());
        }
        this._rowExpandedIndicatorTemplateAdapter.setValue(this.i, this._rowExpandedIndicatorTemplate);
    }
    /**
     * Gets the row collapse indicator template.
    */
    get rowCollapsedIndicatorTemplate() {
        return this._rowCollapsedIndicatorTemplate;
    }
    set rowCollapsedIndicatorTemplate(v) {
        this._rowCollapsedIndicatorTemplate = v;
        if (!this._rowCollapsedIndicatorTemplateAdapter) {
            this._rowCollapsedIndicatorTemplateAdapter = new ReactTemplateAdapter(this._renderer, this._portalManager, "d0", { html: html }, () => new IgrGridRowTemplateContext());
        }
        this._rowCollapsedIndicatorTemplateAdapter.setValue(this.i, this._rowCollapsedIndicatorTemplate);
    }
    /**
     * Gets the header expand indicator template.
    */
    get headerExpandedIndicatorTemplate() {
        return this._headerExpandedIndicatorTemplate;
    }
    set headerExpandedIndicatorTemplate(v) {
        this._headerExpandedIndicatorTemplate = v;
        if (!this._headerExpandedIndicatorTemplateAdapter) {
            this._headerExpandedIndicatorTemplateAdapter = new ReactTemplateAdapter(this._renderer, this._portalManager, "dw", { html: html }, () => new IgrGridTemplateContext());
        }
        this._headerExpandedIndicatorTemplateAdapter.setValue(this.i, this._headerExpandedIndicatorTemplate);
    }
    /**
     * Gets the row collapse indicator template.
    */
    get headerCollapsedIndicatorTemplate() {
        return this._headerCollapsedIndicatorTemplate;
    }
    set headerCollapsedIndicatorTemplate(v) {
        this._headerCollapsedIndicatorTemplate = v;
        if (!this._headerCollapsedIndicatorTemplateAdapter) {
            this._headerCollapsedIndicatorTemplateAdapter = new ReactTemplateAdapter(this._renderer, this._portalManager, "dv", { html: html }, () => new IgrGridTemplateContext());
        }
        this._headerCollapsedIndicatorTemplateAdapter.setValue(this.i, this._headerCollapsedIndicatorTemplate);
    }
    /**
     * Gets the excel style header icon.
    */
    get excelStyleHeaderIconTemplate() {
        return this._excelStyleHeaderIconTemplate;
    }
    set excelStyleHeaderIconTemplate(v) {
        this._excelStyleHeaderIconTemplate = v;
        if (!this._excelStyleHeaderIconTemplateAdapter) {
            this._excelStyleHeaderIconTemplateAdapter = new ReactTemplateAdapter(this._renderer, this._portalManager, "du", { html: html }, () => new IgrGridHeaderTemplateContext());
        }
        this._excelStyleHeaderIconTemplateAdapter.setValue(this.i, this._excelStyleHeaderIconTemplate);
    }
    /**
     * The custom template, if any, that should be used when rendering a header sorting indicator when columns are sorted in asc order.
    */
    get sortAscendingHeaderIconTemplate() {
        return this._sortAscendingHeaderIconTemplate;
    }
    set sortAscendingHeaderIconTemplate(v) {
        this._sortAscendingHeaderIconTemplate = v;
        if (!this._sortAscendingHeaderIconTemplateAdapter) {
            this._sortAscendingHeaderIconTemplateAdapter = new ReactTemplateAdapter(this._renderer, this._portalManager, "d5", { html: html }, () => new IgrGridHeaderTemplateContext());
        }
        this._sortAscendingHeaderIconTemplateAdapter.setValue(this.i, this._sortAscendingHeaderIconTemplate);
    }
    /**
     * The custom template, if any, that should be used when rendering a header sorting indicator when columns are sorted in desc order.
    */
    get sortDescendingHeaderIconTemplate() {
        return this._sortDescendingHeaderIconTemplate;
    }
    set sortDescendingHeaderIconTemplate(v) {
        this._sortDescendingHeaderIconTemplate = v;
        if (!this._sortDescendingHeaderIconTemplateAdapter) {
            this._sortDescendingHeaderIconTemplateAdapter = new ReactTemplateAdapter(this._renderer, this._portalManager, "d6", { html: html }, () => new IgrGridHeaderTemplateContext());
        }
        this._sortDescendingHeaderIconTemplateAdapter.setValue(this.i, this._sortDescendingHeaderIconTemplate);
    }
    /**
     * Gets custom template, if any, that should be used when rendering a header sorting indicator when columns are not sorted.
    */
    get sortHeaderIconTemplate() {
        return this._sortHeaderIconTemplate;
    }
    set sortHeaderIconTemplate(v) {
        this._sortHeaderIconTemplate = v;
        if (!this._sortHeaderIconTemplateAdapter) {
            this._sortHeaderIconTemplateAdapter = new ReactTemplateAdapter(this._renderer, this._portalManager, "d7", { html: html }, () => new IgrGridHeaderTemplateContext());
        }
        this._sortHeaderIconTemplateAdapter.setValue(this.i, this._sortHeaderIconTemplate);
    }
    get actualToolbar() {
        if (!this._actualToolbar) {
            this._actualToolbar = [];
        }
        return this._actualToolbar;
    }
    get contentToolbar() {
        if (!this._contentToolbar) {
            this._contentToolbar = [];
        }
        return this._contentToolbar;
    }
    /**
     * @hidden @internal
    */
    get toolbar() {
        if (this._toolbar === null) {
            let coll = new IgrGridToolbarCollection();
            let inner = coll._innerColl;
            this._toolbar = coll;
            inner.addListener((sender, e) => {
                switch (e.action) {
                    case NotifyCollectionChangedAction.Add:
                        this._toolbarAdapter.insertManualItem(e.newStartingIndex, e.newItems.item(0));
                        break;
                    case NotifyCollectionChangedAction.Remove:
                        this._toolbarAdapter.removeManualItemAt(e.oldStartingIndex);
                        break;
                    case NotifyCollectionChangedAction.Replace:
                        this._toolbarAdapter.removeManualItemAt(e.oldStartingIndex);
                        this._toolbarAdapter.insertManualItem(e.newStartingIndex, e.newItems.item(0));
                        break;
                    case NotifyCollectionChangedAction.Reset:
                        this._toolbarAdapter.clearManualItems();
                        break;
                }
            });
            ;
        }
        return this._toolbar;
    }
    get actualPaginationComponents() {
        if (!this._actualPaginationComponents) {
            this._actualPaginationComponents = [];
        }
        return this._actualPaginationComponents;
    }
    get contentPaginationComponents() {
        if (!this._contentPaginationComponents) {
            this._contentPaginationComponents = [];
        }
        return this._contentPaginationComponents;
    }
    /**
     * @hidden @internal
    */
    get paginationComponents() {
        if (this._paginationComponents === null) {
            let coll = new IgrPaginatorCollection();
            let inner = coll._innerColl;
            this._paginationComponents = coll;
            inner.addListener((sender, e) => {
                switch (e.action) {
                    case NotifyCollectionChangedAction.Add:
                        this._paginationComponentsAdapter.insertManualItem(e.newStartingIndex, e.newItems.item(0));
                        break;
                    case NotifyCollectionChangedAction.Remove:
                        this._paginationComponentsAdapter.removeManualItemAt(e.oldStartingIndex);
                        break;
                    case NotifyCollectionChangedAction.Replace:
                        this._paginationComponentsAdapter.removeManualItemAt(e.oldStartingIndex);
                        this._paginationComponentsAdapter.insertManualItem(e.newStartingIndex, e.newItems.item(0));
                        break;
                    case NotifyCollectionChangedAction.Reset:
                        this._paginationComponentsAdapter.clearManualItems();
                        break;
                }
            });
            ;
        }
        return this._paginationComponents;
    }
    /**
     * Gets/Sets the resource strings.
     * @remarks
     * By default it uses EN resources.
    */
    get resourceStrings() {
        return this.i.a7.nativeElement;
    }
    set resourceStrings(v) {
        this.i.a7 = interfaceToInternal(v, () => new GridResourceStrings());
    }
    get filteringLogic() {
        return this.i.am;
    }
    set filteringLogic(v) {
        this.i.am = ensureEnum(FilteringLogic_$type, v);
    }
    get filteringExpressionsTree() {
        const r = this.i.ai;
        if (r == null) {
            return null;
        }
        if (!r.externalObject) {
            let e = new IgrFilteringExpressionsTree();
            if (r.$type) {
                e._implementation = r;
            }
            else {
                if (e.i.setNativeElement) {
                    e.i.setNativeElement(r);
                }
            }
            r.externalObject = e;
        }
        return r.externalObject;
    }
    set filteringExpressionsTree(v) {
        v == null ? this.i.ai = null : this.i.ai = v.i;
    }
    /**
     * Gets/Sets the advanced filtering state.
     * @example
     * ```typescript
     * let advancedFilteringExpressionsTree = this.grid.advancedFilteringExpressionsTree;
     * this.grid.advancedFilteringExpressionsTree = logic;
     * ```
    */
    get advancedFilteringExpressionsTree() {
        const r = this.i.ah;
        if (r == null) {
            return null;
        }
        if (!r.externalObject) {
            let e = new IgrFilteringExpressionsTree();
            if (r.$type) {
                e._implementation = r;
            }
            else {
                if (e.i.setNativeElement) {
                    e.i.setNativeElement(r);
                }
            }
            r.externalObject = e;
        }
        return r.externalObject;
    }
    set advancedFilteringExpressionsTree(v) {
        v == null ? this.i.ah = null : this.i.ah = v.i;
    }
    /**
     * Gets/Sets the locale.
     * @remarks
     * If not set, returns browser's language.
    */
    get locale() {
        return this.i.ed;
    }
    set locale(v) {
        this.i.ed = v;
    }
    get pagingMode() {
        return this.i.a6;
    }
    set pagingMode(v) {
        this.i.a6 = ensureEnum(GridPagingMode_$type, v);
    }
    /**
     * Gets/Sets if the row selectors are hidden.
     * @remarks
     * By default row selectors are shown
    */
    get hideRowSelectors() {
        return this.i.cf;
    }
    set hideRowSelectors(v) {
        this.i.cf = ensureBool(v);
    }
    get rowDraggable() {
        return this.i.cj;
    }
    set rowDraggable(v) {
        this.i.cj = ensureBool(v);
    }
    get validationTrigger() {
        return this.i.bk;
    }
    set validationTrigger(v) {
        this.i.bk = ensureEnum(GridValidationTrigger_$type, v);
    }
    get rowEditable() {
        return this.i.ck;
    }
    set rowEditable(v) {
        this.i.ck = ensureBool(v);
    }
    get height() {
        return this.i.ec;
    }
    set height(v) {
        this.i.ec = v;
    }
    /**
     * Gets/Sets the width of the grid.
     * @example
     * ```typescript
     * let gridWidth = this.grid.width;
     * ```
    */
    get width() {
        return this.i.ef;
    }
    set width(v) {
        this.i.ef = v;
    }
    get rowHeight() {
        return this.i.cw;
    }
    set rowHeight(v) {
        this.i.cw = +v;
    }
    get columnWidth() {
        return this.i.d8;
    }
    set columnWidth(v) {
        this.i.d8 = v;
    }
    get emptyGridMessage() {
        return this.i.ea;
    }
    set emptyGridMessage(v) {
        this.i.ea = v;
    }
    get isLoading() {
        return this.i.cg;
    }
    set isLoading(v) {
        this.i.cg = ensureBool(v);
    }
    /**
     * Gets/Sets whether the columns should be auto-generated once again after the initialization of the grid
     * @deprecated Column re-creation now relies on `autoGenerate` instead.
    */
    get shouldGenerate() {
        return this.i.cm;
    }
    set shouldGenerate(v) {
        this.i.cm = ensureBool(v);
    }
    get emptyFilteredGridMessage() {
        return this.i.d9;
    }
    set emptyFilteredGridMessage(v) {
        this.i.d9 = v;
    }
    get pinning() {
        return this.i.bp.nativeElement;
    }
    set pinning(v) {
        this.i.bp = interfaceToInternal(v, () => new PinningConfig());
    }
    get allowFiltering() {
        return this.i.cb;
    }
    set allowFiltering(v) {
        this.i.cb = ensureBool(v);
    }
    get allowAdvancedFiltering() {
        return this.i.ca;
    }
    set allowAdvancedFiltering(v) {
        this.i.ca = ensureBool(v);
    }
    get filterMode() {
        return this.i.ao;
    }
    set filterMode(v) {
        this.i.ao = ensureEnum(FilterMode_$type, v);
    }
    get summaryPosition() {
        return this.i.bg;
    }
    set summaryPosition(v) {
        this.i.bg = ensureEnum(GridSummaryPosition_$type, v);
    }
    get summaryCalculationMode() {
        return this.i.bf;
    }
    set summaryCalculationMode(v) {
        this.i.bf = ensureEnum(GridSummaryCalculationMode_$type, v);
    }
    get showSummaryOnCollapse() {
        return this.i.cn;
    }
    set showSummaryOnCollapse(v) {
        this.i.cn = ensureBool(v);
    }
    get filterStrategy() {
        return this.i.an.nativeElement;
    }
    set filterStrategy(v) {
        this.i.an = interfaceToInternal(v, () => new FilteringStrategy());
    }
    get sortStrategy() {
        return this.i.be.nativeElement;
    }
    set sortStrategy(v) {
        this.i.be = interfaceToInternal(v, () => new GridSortingStrategy());
    }
    get sortingOptions() {
        return this.i.b4.nativeElement;
    }
    set sortingOptions(v) {
        this.i.b4 = interfaceToInternal(v, () => new SortingOptions());
    }
    get selectedRows() {
        return this.i.h;
    }
    set selectedRows(v) {
        if (v && !Array.isArray(v) && typeof (v) == "string") {
            const re = /\s*(?:,|\s|$)\s*/gm;
            v = v.split(re);
        }
        this.i.h = v;
    }
    /**
     * Gets the header row selector template.
    */
    get headSelectorTemplate() {
        return this._headSelectorTemplate;
    }
    set headSelectorTemplate(v) {
        this._headSelectorTemplate = v;
        if (!this._headSelectorTemplateAdapter) {
            this._headSelectorTemplateAdapter = new ReactTemplateAdapter(this._renderer, this._portalManager, "dx", { html: html }, () => new IgrHeadSelectorTemplateContext());
        }
        this._headSelectorTemplateAdapter.setValue(this.i, this._headSelectorTemplate);
    }
    /**
     * Gets the row selector template.
    */
    get rowSelectorTemplate() {
        return this._rowSelectorTemplate;
    }
    set rowSelectorTemplate(v) {
        this._rowSelectorTemplate = v;
        if (!this._rowSelectorTemplateAdapter) {
            this._rowSelectorTemplateAdapter = new ReactTemplateAdapter(this._renderer, this._portalManager, "d4", { html: html }, () => new IgrRowSelectorTemplateContext());
        }
        this._rowSelectorTemplateAdapter.setValue(this.i, this._rowSelectorTemplate);
    }
    /**
     * The custom template, if any, that should be used when rendering the row drag indicator icon
    */
    get dragIndicatorIconTemplate() {
        return this._dragIndicatorIconTemplate;
    }
    set dragIndicatorIconTemplate(v) {
        this._dragIndicatorIconTemplate = v;
        if (!this._dragIndicatorIconTemplateAdapter) {
            this._dragIndicatorIconTemplateAdapter = new ReactTemplateAdapter(this._renderer, this._portalManager, "ds", { html: html }, () => new IgrGridEmptyTemplateContext());
        }
        this._dragIndicatorIconTemplateAdapter.setValue(this.i, this._dragIndicatorIconTemplate);
    }
    get sortingExpressions() {
        if (!this.i.i) {
            return undefined;
        }
        let ret = [];
        for (let i = 0; i < this.i.i.length; i++) {
            let impl = this.i.i[i];
            ret.push(impl.nativeElement);
        }
        return ret;
    }
    set sortingExpressions(v) {
        let arr = [];
        for (let i = 0; i < v.length; i++) {
            arr.push(v[i]);
        }
        this.i.i = arr;
    }
    /**
     * Gets the number of hidden columns.
     * @example
     * ```typescript
     * const hiddenCol = this.grid.hiddenColumnsCount;
     * ``
    */
    get hiddenColumnsCount() {
        return this.i.ct;
    }
    /**
     * Gets the number of pinned columns.
    */
    get pinnedColumnsCount() {
        return this.i.cu;
    }
    get batchEditing() {
        return this.i.cd;
    }
    set batchEditing(v) {
        this.i.cd = ensureBool(v);
    }
    /**
     * Gets/Sets cell selection mode.
     * @remarks
     * By default the cell selection mode is multiple
     * selectionMode: GridSelectionMode
    */
    get cellSelection() {
        return this.i.ba;
    }
    set cellSelection(v) {
        this.i.ba = ensureEnum(GridSelectionMode_$type, v);
    }
    /**
     * Gets/Sets row selection mode
     * @remarks
     * By default the row selection mode is 'none'
     * Note that in IgxGrid and IgxHierarchicalGrid 'multipleCascade' behaves like 'multiple'
    */
    get rowSelection() {
        return this.i.bc;
    }
    set rowSelection(v) {
        this.i.bc = ensureEnum(GridSelectionMode_$type, v);
    }
    /**
     * Gets/Sets column selection mode
     * @remarks
     * By default the row selection mode is none
     * selectionMode: GridSelectionMode
    */
    get columnSelection() {
        return this.i.bb;
    }
    set columnSelection(v) {
        this.i.bb = ensureEnum(GridSelectionMode_$type, v);
    }
    /**
     * Represents the last search information.
    */
    get lastSearchInfo() {
        return this.i.b0.nativeElement;
    }
    /**
     * Returns an array of objects containing the filtered data.
     * @example
     * ```typescript
     * let filteredData = this.grid.filteredData;
     * ```
    */
    get filteredData() {
        return this.i.c2;
    }
    /**
     * Returns an array containing the filtered sorted data.
     * @example
     * ```typescript
     * const filteredSortedData = this.grid1.filteredSortedData;
     * ```
    */
    get filteredSortedData() {
        return this.i.d;
    }
    /**
     * Returns the state of the grid virtualization.
     * @remarks
     * Includes the start index and how many records are rendered.
     * @example
     * ```typescript
     * const gridVirtState = this.grid1.virtualizationState;
     * ```
    */
    get virtualizationState() {
        const r = this.i.aq;
        if (r == null) {
            return null;
        }
        if (!r.externalObject) {
            let e = new IgrForOfState();
            if (r.$type) {
                e._implementation = r;
            }
            else {
                if (e.i.setNativeElement) {
                    e.i.setNativeElement(r);
                }
            }
            r.externalObject = e;
        }
        return r.externalObject;
    }
    /**
     * Gets/Sets the outlet used to attach the grid's overlays to.
     * @remark
     * If set, returns the outlet defined outside the grid. Otherwise returns the grid's internal outlet directive.
    */
    get outlet() {
        const r = this.i.bl;
        if (r == null) {
            return null;
        }
        if (!r.externalObject) {
            let e = new IgrOverlayOutletDirective();
            if (r.$type) {
                e._implementation = r;
            }
            else {
                if (e.i.setNativeElement) {
                    e.i.setNativeElement(r);
                }
            }
            r.externalObject = e;
        }
        return r.externalObject;
    }
    set outlet(v) {
        v == null ? this.i.bl = null : this.i.bl = v.i;
    }
    /**
     * Gets the default row height.
     * @example
     * ```typescript
     * const rowHeigh = this.grid.defaultRowHeight;
     * ```
    */
    get defaultRowHeight() {
        return this.i.cq;
    }
    /**
     * Returns the `IgxGridHeaderGroupComponent`'s minimum allowed width.
     * @remarks
     * Used internally for restricting header group component width.
     * The values below depend on the header cell default right/left padding values.
    */
    get defaultHeaderGroupMinWidth() {
        return this.i.cp;
    }
    /**
     * Gets an array of `IgxColumnComponent`s.
     * @example
     * ```typescript
     * const colums = this.grid.columns.
     * ```
    */
    get columns() {
        if (!this.i.b) {
            return undefined;
        }
        let ret = [];
        for (let i = 0; i < this.i.b.length; i++) {
            let impl = this.i.b[i];
            if (!impl.externalObject) {
                if (impl instanceof IgrColumn) {
                    ret.push(impl);
                    continue;
                }
                let e = IgrColumn._createFromInternal(impl);
                e._implementation = impl;
                impl.externalObject = e;
            }
            ret.push(impl.externalObject);
        }
        return ret;
    }
    /**
     * Gets an array of the pinned `IgxColumnComponent`s.
     * @example
     * ```typescript
     * const pinnedColumns = this.grid.pinnedColumns.
     * ```
    */
    get pinnedColumns() {
        if (!this.i.f) {
            return undefined;
        }
        let ret = [];
        for (let i = 0; i < this.i.f.length; i++) {
            let impl = this.i.f[i];
            if (!impl.externalObject) {
                if (impl instanceof IgrColumn) {
                    ret.push(impl);
                    continue;
                }
                let e = IgrColumn._createFromInternal(impl);
                e._implementation = impl;
                impl.externalObject = e;
            }
            ret.push(impl.externalObject);
        }
        return ret;
    }
    /**
     * Gets an array of unpinned `IgxColumnComponent`s.
     * @example
     * ```typescript
     * const unpinnedColumns = this.grid.unpinnedColumns.
     * ```
    */
    get unpinnedColumns() {
        if (!this.i.j) {
            return undefined;
        }
        let ret = [];
        for (let i = 0; i < this.i.j.length; i++) {
            let impl = this.i.j[i];
            if (!impl.externalObject) {
                if (impl instanceof IgrColumn) {
                    ret.push(impl);
                    continue;
                }
                let e = IgrColumn._createFromInternal(impl);
                e._implementation = impl;
                impl.externalObject = e;
            }
            ret.push(impl.externalObject);
        }
        return ret;
    }
    /**
     * Returns an array of visible `IgxColumnComponent`s.
     * @example
     * ```typescript
     * const visibleColumns = this.grid.visibleColumns.
     * ```
    */
    get visibleColumns() {
        if (!this.i.k) {
            return undefined;
        }
        let ret = [];
        for (let i = 0; i < this.i.k.length; i++) {
            let impl = this.i.k[i];
            if (!impl.externalObject) {
                if (impl instanceof IgrColumn) {
                    ret.push(impl);
                    continue;
                }
                let e = IgrColumn._createFromInternal(impl);
                e._implementation = impl;
                impl.externalObject = e;
            }
            ret.push(impl.externalObject);
        }
        return ret;
    }
    /**
     * Returns the total number of records.
     * @remarks
     * Only functions when paging is enabled.
     * @example
     * ```typescript
     * const totalRecords = this.grid.totalRecords;
     * ```
    */
    get totalRecords() {
        return this.i.cz;
    }
    set totalRecords(v) {
        this.i.cz = +v;
    }
    /**
     * Returns the currently transformed paged/filtered/sorted/grouped/pinned/unpinned row data, displayed in the grid.
     * @example
     * ```typescript
     * const dataView = this.grid.dataView;
     * ```
    */
    get dataView() {
        return this.i.c;
    }
    /**
     * Gets/Sets whether clicking over a row should select/deselect it
     * @remarks
     * By default it is set to true
     * enabled: boolean
    */
    get selectRowOnClick() {
        return this.i.cl;
    }
    set selectRowOnClick(v) {
        this.i.cl = ensureBool(v);
    }
    get actualColumnList() {
        if (this._actualColumnList === null) {
            let coll = new IgrColumnCollection();
            let innerColl = this.i.t;
            if (!innerColl) {
                innerColl = new ColumnCollection_internal();
            }
            this._actualColumnList = coll._fromInner(innerColl);
        }
        return this._actualColumnList;
    }
    set actualColumnList(v) {
        if (this._actualColumnList !== null) {
            this._actualColumnList._setSyncTarget(null);
            this._actualColumnList = null;
        }
        let coll = new IgrColumnCollection();
        this._actualColumnList = coll._fromOuter(v);
        let syncColl = new SyncableObservableCollection$1(Column.$type);
        let innerColl = this.i.t;
        if (!innerColl) {
            innerColl = new ColumnCollection_internal();
        }
        syncColl._inner = innerColl;
        syncColl.clear();
        this._actualColumnList._setSyncTarget(syncColl);
    }
    get actualStateComponents() {
        if (!this._actualStateComponents) {
            this._actualStateComponents = [];
        }
        return this._actualStateComponents;
    }
    get contentStateComponents() {
        if (!this._contentStateComponents) {
            this._contentStateComponents = [];
        }
        return this._contentStateComponents;
    }
    /**
     * @hidden @internal
    */
    get stateComponents() {
        if (this._stateComponents === null) {
            let coll = new IgrStateCollection();
            let inner = coll._innerColl;
            this._stateComponents = coll;
            inner.addListener((sender, e) => {
                switch (e.action) {
                    case NotifyCollectionChangedAction.Add:
                        this._stateComponentsAdapter.insertManualItem(e.newStartingIndex, e.newItems.item(0));
                        break;
                    case NotifyCollectionChangedAction.Remove:
                        this._stateComponentsAdapter.removeManualItemAt(e.oldStartingIndex);
                        break;
                    case NotifyCollectionChangedAction.Replace:
                        this._stateComponentsAdapter.removeManualItemAt(e.oldStartingIndex);
                        this._stateComponentsAdapter.insertManualItem(e.newStartingIndex, e.newItems.item(0));
                        break;
                    case NotifyCollectionChangedAction.Reset:
                        this._stateComponentsAdapter.clearManualItems();
                        break;
                }
            });
            ;
        }
        return this._stateComponents;
    }
    findByName(name) {
        if (this.findEphemera) {
            if (name && name.indexOf("@@e:") == 0) {
                return this.findEphemera(name);
            }
        }
        if (this.dataCloneStrategy && this.dataCloneStrategy.name && this.dataCloneStrategy.name == name) {
            return this.dataCloneStrategy;
        }
        if (this.clipboardOptions && this.clipboardOptions.name && this.clipboardOptions.name == name) {
            return this.clipboardOptions;
        }
        if (this.columnList != null && this.columnList.findByName && this.columnList.findByName(name)) {
            return this.columnList.findByName(name);
        }
        if (this.actionStripComponents != null && this.actionStripComponents.findByName && this.actionStripComponents.findByName(name)) {
            return this.actionStripComponents.findByName(name);
        }
        if (this.toolbar != null && this.toolbar.findByName && this.toolbar.findByName(name)) {
            return this.toolbar.findByName(name);
        }
        if (this.paginationComponents != null && this.paginationComponents.findByName && this.paginationComponents.findByName(name)) {
            return this.paginationComponents.findByName(name);
        }
        if (this.resourceStrings && this.resourceStrings.name && this.resourceStrings.name == name) {
            return this.resourceStrings;
        }
        if (this.filteringExpressionsTree && this.filteringExpressionsTree.name && this.filteringExpressionsTree.name == name) {
            return this.filteringExpressionsTree;
        }
        if (this.advancedFilteringExpressionsTree && this.advancedFilteringExpressionsTree.name && this.advancedFilteringExpressionsTree.name == name) {
            return this.advancedFilteringExpressionsTree;
        }
        if (this.pinning && this.pinning.name && this.pinning.name == name) {
            return this.pinning;
        }
        if (this.filterStrategy && this.filterStrategy.name && this.filterStrategy.name == name) {
            return this.filterStrategy;
        }
        if (this.sortStrategy && this.sortStrategy.name && this.sortStrategy.name == name) {
            return this.sortStrategy;
        }
        if (this.sortingOptions && this.sortingOptions.name && this.sortingOptions.name == name) {
            return this.sortingOptions;
        }
        if (this.outlet && this.outlet.name && this.outlet.name == name) {
            return this.outlet;
        }
        if (this.actualColumnList != null && this.actualColumnList.findByName && this.actualColumnList.findByName(name)) {
            return this.actualColumnList.findByName(name);
        }
        if (this.stateComponents != null && this.stateComponents.findByName && this.stateComponents.findByName(name)) {
            return this.stateComponents.findByName(name);
        }
        return null;
    }
    get hasUserValues() {
        return this._hasUserValues;
    }
    __m(propertyName) {
        if (!this._inStyling) {
            this._hasUserValues.add(propertyName);
        }
    }
    _styling(container, component, parent) {
        if (this._inStyling) {
            return;
        }
        this._inStyling = true;
        this._stylingContainer = container;
        this._stylingParent = component;
        let genericPrefix = "";
        let typeName = this.i.$type.name;
        if (typeName.indexOf("Xam") === 0) {
            typeName = typeName.substring(3);
        }
        genericPrefix = toSpinal("GridBaseDirective");
        let additionalPrefixes = [];
        let prefix = toSpinal(typeName);
        additionalPrefixes.push(prefix + "-");
        let b = this.i.$type.baseType;
        while (b && b.name != "Object" &&
            b.name != "Base" &&
            b.name != "Control" &&
            b.Name != "DependencyObject" &&
            b.Name != "FrameworkElement") {
            typeName = b.name;
            if (typeName.indexOf("Xam") === 0) {
                typeName = typeName.substring(3);
            }
            let basePrefix = toSpinal(typeName);
            additionalPrefixes.push(basePrefix + "-");
            b = b.baseType;
        }
        if (parent) {
            let parentTypeName = parent.i.$type.name;
            if (parentTypeName.indexOf("Xam") === 0) {
                parentTypeName = parentTypeName.substring(3);
            }
            let parentPrefix = toSpinal(parentTypeName);
            additionalPrefixes.push(parentPrefix + "-" + genericPrefix + "-");
            additionalPrefixes.push(parentPrefix + "-" + prefix + "-");
        }
        initializePropertiesFromCss(container, this, genericPrefix + "-", this.hasUserValues, false, additionalPrefixes);
        if (this._otherStyling) {
            this._otherStyling(container, component, parent);
        }
        this._inStyling = false;
    }
    setNativeElement(element) {
        this.i.setNativeElement(element);
    }
    /**
     * Returns whether the record is pinned or not.
     * rowIndex Index of the record in the `filteredSortedData` collection.
    
    * @param rowIndex  * Index of the record in the `filteredSortedData` collection.
    */
    isRecordPinnedByIndex(rowIndex) {
        this.i.fu(rowIndex);
    }
    /**
     * Toggles the specified column's visibility.
     * @example
     * ```typescript
     * this.grid1.toggleColumnVisibility({
     * column: this.grid1.columns[0],
     * newValue: true
     * });
     * ```
    
    */
    toggleColumnVisibility(args) {
        this.i.gu((args == null ? null : args.i));
    }
    /**
     * Expands all rows.
     * @example
     * ```typescript
     * this.grid.expandAll();
     * ```
    
    */
    expandAll() {
        this.i.fg();
    }
    /**
     * Collapses all rows.
     * @example
     * ```typescript
     * this.grid.collapseAll();
     * ```
    
    */
    collapseAll() {
        this.i.et();
    }
    /**
     * Expands the row by its id.
     * @remarks
     * ID is either the primaryKey value or the data record instance.
     * @example
     * ```typescript
     * this.grid.expandRow(rowID);
     * ```
     * rowID The row id - primaryKey value or the data record instance.
    
    * @param rowID  * The row id - primaryKey value or the data record instance.
    */
    expandRow(rowID) {
        this.i.fh(rowID);
    }
    /**
     * Collapses the row by its id.
     * @remarks
     * ID is either the primaryKey value or the data record instance.
     * @example
     * ```typescript
     * this.grid.collapseRow(rowID);
     * ```
     * rowID The row id - primaryKey value or the data record instance.
    
    * @param rowID  * The row id - primaryKey value or the data record instance.
    */
    collapseRow(rowID) {
        this.i.eu(rowID);
    }
    /**
     * Toggles the row by its id.
     * @remarks
     * ID is either the primaryKey value or the data record instance.
     * @example
     * ```typescript
     * this.grid.toggleRow(rowID);
     * ```
     * rowID The row id - primaryKey value or the data record instance.
    
    * @param rowID  * The row id - primaryKey value or the data record instance.
    */
    toggleRow(rowID) {
        this.i.gv(rowID);
    }
    /**
     * Gets the `width` to be set on `IgxGridHeaderGroupComponent`.
    
    */
    getHeaderGroupWidth(column) {
        let iv = this.i.eb((column == null ? null : column.i));
        return (iv);
    }
    /**
     * Returns the `IgxColumnComponent` by field name.
     * @example
     * ```typescript
     * const myCol = this.grid1.getColumnByName("ID");
     * ```
     * name
    
    * @param   * name
    */
    getColumnByName(name) {
        let iv = this.i.q(name);
        let ret = null;
        if (iv && iv.externalObject) {
            ret = iv.externalObject;
        }
        else {
            if (iv) {
                let e = IgrColumn._createFromInternal(iv);
                e._implementation = iv;
                iv.externalObject = e;
                ret = e;
            }
        }
        return ret;
    }
    getColumnByVisibleIndex(index) {
        let iv = this.i.r(index);
        let ret = null;
        if (iv && iv.externalObject) {
            ret = iv.externalObject;
        }
        else {
            if (iv) {
                let e = IgrColumn._createFromInternal(iv);
                e._implementation = iv;
                iv.externalObject = e;
                ret = e;
            }
        }
        return ret;
    }
    /**
     * Recalculates all widths of columns that have size set to `auto`.
     * @example
     * ```typescript
     * this.grid1.recalculateAutoSizes();
     * ```
    
    */
    recalculateAutoSizes() {
        this.i.f0();
    }
    moveColumn(column, target, pos) {
        this.i.fw((column == null ? null : column.i), (target == null ? null : target.i), (pos == null ? null : pos));
    }
    /**
     * Triggers change detection for the `IgxGridComponent`.
     * Calling markForCheck also triggers the grid pipes explicitly, resulting in all updates being processed.
     * May degrade performance if used when not needed, or if misused:
     * ```typescript
     * // DON'Ts:
     * // don't call markForCheck from inside a loop
     * // don't call markForCheck when a primitive has changed
     * grid.data.forEach(rec => {
     * rec = newValue;
     * grid.markForCheck();
     * });
     * // DOs
     * // call markForCheck after updating a nested property
     * grid.data.forEach(rec => {
     * rec.nestedProp1.nestedProp2 = newValue;
     * });
     * grid.markForCheck();
     * ```
     * @example
     * ```typescript
     * grid.markForCheck();
     * ```
    
    */
    markForCheck() {
        this.i.fv();
    }
    /**
     * Removes the `IgxGridRowComponent` and the corresponding data record by primary key.
     * @remarks
     * Requires that the `primaryKey` property is set.
     * The method accept rowSelector as a parameter, which is the rowID.
     * @example
     * ```typescript
     * this.grid1.deleteRow(0);
     * ```
     * rowSelector
    
    * @param   * rowSelector
    */
    deleteRow(rowSelector) {
        let iv = this.i.c1(rowSelector);
        return (iv);
    }
    updateCell(value, rowSelector, column) {
        this.i.gx(value, rowSelector, column);
    }
    updateRow(value, rowSelector) {
        this.i.gy(value, rowSelector);
    }
    /**
     * Returns the data that is contained in the row component.
     * @remarks
     * If the primary key is not specified the row selector match the row data.
     * @example
     * ```typescript
     * const data = grid.getRowData(94741);
     * ```
     * rowSelector correspond to rowID
    
    * @param rowSelector  * correspond to rowID
    */
    getRowData(rowSelector) {
        let iv = this.i.c3(rowSelector);
        return (iv);
    }
    sort(expression) {
        let arr_expression = [];
        for (let i = 0; i < expression.length; i++) {
            arr_expression.push(interfaceToInternal(expression[i], () => new SortingExpression()));
        }
        this.i.gq(arr_expression);
    }
    filter(name, value, conditionOrExpressionTree, ignoreCase) {
        this.i.fi(name, value, (conditionOrExpressionTree == null ? null : conditionOrExpressionTree.i), ignoreCase);
    }
    filterGlobal(value, condition, ignoreCase) {
        this.i.fj(value, condition, ignoreCase);
    }
    enableSummaries(rest) {
        this.i.ff(rest);
    }
    disableSummaries(rest) {
        this.i.fd(rest);
    }
    /**
     * If name is provided, clears the filtering state of the corresponding `IgxColumnComponent`.
     * @remarks
     * Otherwise clears the filtering state of all `IgxColumnComponent`s.
     * @example
     * ```typescript
     * this.grid.clearFilter();
     * ```
     * name
    
    * @param   * name
    */
    clearFilter(name) {
        this.i.ep(name);
    }
    /**
     * If name is provided, clears the sorting state of the corresponding `IgxColumnComponent`.
     * @remarks
     * otherwise clears the sorting state of all `IgxColumnComponent`.
     * @example
     * ```typescript
     * this.grid.clearSort();
     * ```
     * name
    
    * @param   * name
    */
    clearSort(name) {
        this.i.er(name);
    }
    pinColumn(columnName, index) {
        let iv = this.i.ci(columnName, index);
        return (iv);
    }
    unpinColumn(columnName, index) {
        let iv = this.i.co(columnName, index);
        return (iv);
    }
    /**
     * Recalculates grid width/height dimensions.
     * @remarks
     * Should be run when changing DOM elements dimentions manually that affect the grid's size.
     * @example
     * ```typescript
     * this.grid.reflow();
     * ```
    
    */
    reflow() {
        this.i.f1();
    }
    findNext(text, caseSensitive, exactMatch) {
        let iv = this.i.cr(text, caseSensitive, exactMatch);
        return (iv);
    }
    findPrev(text, caseSensitive, exactMatch) {
        let iv = this.i.cs(text, caseSensitive, exactMatch);
        return (iv);
    }
    refreshSearch(updateActiveInfo, endEdit) {
        let iv = this.i.cv(updateActiveInfo, endEdit);
        return (iv);
    }
    /**
     * Removes all the highlights in the cell.
     * @example
     * ```typescript
     * this.grid.clearSearch();
     * ```
    
    */
    clearSearch() {
        this.i.eq();
    }
    /**
     * Gets calculated width of the pinned area.
     * @example
     * ```typescript
     * const pinnedWidth = this.grid.getPinnedWidth();
     * ```
     * takeHidden If we should take into account the hidden columns in the pinned area.
    
    * @param takeHidden  * If we should take into account the hidden columns in the pinned area.
    */
    getPinnedWidth(takeHidden) {
        this.i.fo(takeHidden);
    }
    selectRows(rowIDs, clearCurrentSelection) {
        this.i.go(rowIDs, clearCurrentSelection);
    }
    deselectRows(rowIDs) {
        this.i.fc(rowIDs);
    }
    /**
     * Selects all rows
     * @remarks
     * By default if filtering is in place, selectAllRows() and deselectAllRows() select/deselect all filtered rows.
     * If you set the parameter onlyFilterData to false that will select all rows in the grid exept deleted rows.
     * @example
     * ```typescript
     * this.grid.selectAllRows();
     * this.grid.selectAllRows(false);
     * ```
     * onlyFilterData
    
    * @param   * onlyFilterData
    */
    selectAllRows(onlyFilterData) {
        this.i.gj(onlyFilterData);
    }
    /**
     * Deselects all rows
     * @remarks
     * By default if filtering is in place, selectAllRows() and deselectAllRows() select/deselect all filtered rows.
     * If you set the parameter onlyFilterData to false that will deselect all rows in the grid exept deleted rows.
     * @example
     * ```typescript
     * this.grid.deselectAllRows();
     * ```
     * onlyFilterData
    
    * @param   * onlyFilterData
    */
    deselectAllRows(onlyFilterData) {
        this.i.fa(onlyFilterData);
    }
    /**
     * Deselect selected cells.
     * @example
     * ```typescript
     * this.grid.clearCellSelection();
     * ```
    
    */
    clearCellSelection() {
        this.i.eo();
    }
    selectRange(arg) {
        let arr_arg = [];
        for (let i = 0; i < arg.length; i++) {
            arr_arg.push(interfaceToInternal(arg[i], () => new GridSelectionRange()));
        }
        this.i.gn(arr_arg);
    }
    /**
     * Get the currently selected ranges in the grid.
    
    */
    getSelectedRanges() {
        let iv = this.i.e();
        let ret = [];
        for (let i = 0; i < iv.length; i++) {
            let impl = iv[i];
            if (!impl.externalObject) {
                let e = impl.nativeElement;
                impl.externalObject = e;
            }
            ret.push(impl.externalObject);
        }
        return ret;
    }
    getSelectedData(formatters, headers) {
        this.i.fq(formatters, headers);
    }
    /**
     * Get current selected columns.
     * @example
     * Returns an array with selected columns
     * ```typescript
     * const selectedColumns = this.grid.selectedColumns();
     * ```
    
    */
    selectedColumns() {
        let iv = this.i.g();
        let ret = [];
        for (let i = 0; i < iv.length; i++) {
            let impl = iv[i];
            if (!impl.externalObject) {
                let e = new IgrColumn({});
                e._implementation = impl;
                impl.externalObject = e;
            }
            ret.push(impl.externalObject);
        }
        return ret;
    }
    selectColumns(columns, clearCurrentSelection) {
        this.i.gk(columns, clearCurrentSelection);
    }
    deselectColumns(columns) {
        this.i.fb(columns);
    }
    /**
     * Deselects all columns
     * @example
     * ```typescript
     * this.grid.deselectAllColumns();
     * ```
    
    */
    deselectAllColumns() {
        this.i.e9();
    }
    /**
     * Selects all columns
     * @example
     * ```typescript
     * this.grid.deselectAllColumns();
     * ```
    
    */
    selectAllColumns() {
        this.i.gi();
    }
    getSelectedColumnsData(formatters, headers) {
        this.i.fp(formatters, headers);
    }
    navigateTo(rowIndex, visibleColIndex, cb) {
        this.i.fx(rowIndex, visibleColIndex, cb);
    }
    getNextCell(currRowIndex, curVisibleColIndex, callback) {
        let iv = this.i.n(currRowIndex, curVisibleColIndex, callback);
        let ret = null;
        if (iv && iv.externalObject) {
            ret = iv.externalObject;
        }
        else {
            if (iv) {
                ret = iv.nativeElement;
                delete ret.externalObject;
            }
        }
        return ret;
    }
    getPreviousCell(currRowIndex, curVisibleColIndex, callback) {
        let iv = this.i.o(currRowIndex, curVisibleColIndex, callback);
        let ret = null;
        if (iv && iv.externalObject) {
            ret = iv.externalObject;
        }
        else {
            if (iv) {
                ret = iv.nativeElement;
                delete ret.externalObject;
            }
        }
        return ret;
    }
    /**
     * Opens the advanced filtering dialog.
    
    */
    openAdvancedFilteringDialog(overlaySettings) {
        this.i.fy((overlaySettings == null ? null : interfaceToInternal(overlaySettings, () => new OverlaySettings())));
    }
    /**
     * Closes the advanced filtering dialog.
     * applyChanges indicates whether the changes should be applied
    
    * @param applyChanges  * indicates whether the changes should be applied
    */
    closeAdvancedFilteringDialog(applyChanges) {
        this.i.es(applyChanges);
    }
    endEdit(commit, evt) {
        let iv = this.i.ce(commit, evt);
        return (iv);
    }
    beginAddRowById(rowID, asChild) {
        this.i.ei(rowID, asChild);
    }
    get filteringExpressionsTreeChange() {
        return this._filteringExpressionsTreeChange;
    }
    set filteringExpressionsTreeChange(ev) {
        if (this._filteringExpressionsTreeChange_wrapped !== null) {
            this.i.filteringExpressionsTreeChange = delegateRemove(this.i.filteringExpressionsTreeChange, this._filteringExpressionsTreeChange_wrapped);
            this._filteringExpressionsTreeChange_wrapped = null;
            this._filteringExpressionsTreeChange = null;
        }
        this._filteringExpressionsTreeChange = ev;
        this._filteringExpressionsTreeChange_wrapped = (o, e) => {
            let outerArgs = new IgrFilteringExpressionsTreeEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeFilteringExpressionsTreeChange) {
                this.beforeFilteringExpressionsTreeChange(this, outerArgs);
            }
            if (this._filteringExpressionsTreeChange) {
                this._filteringExpressionsTreeChange(this, outerArgs);
            }
        };
        this.i.filteringExpressionsTreeChange = delegateCombine(this.i.filteringExpressionsTreeChange, this._filteringExpressionsTreeChange_wrapped);
        if (this.i.filteringExpressionsTreeChangeChanged) {
            this.i.filteringExpressionsTreeChangeChanged();
        }
        ;
    }
    get advancedFilteringExpressionsTreeChange() {
        return this._advancedFilteringExpressionsTreeChange;
    }
    set advancedFilteringExpressionsTreeChange(ev) {
        if (this._advancedFilteringExpressionsTreeChange_wrapped !== null) {
            this.i.advancedFilteringExpressionsTreeChange = delegateRemove(this.i.advancedFilteringExpressionsTreeChange, this._advancedFilteringExpressionsTreeChange_wrapped);
            this._advancedFilteringExpressionsTreeChange_wrapped = null;
            this._advancedFilteringExpressionsTreeChange = null;
        }
        this._advancedFilteringExpressionsTreeChange = ev;
        this._advancedFilteringExpressionsTreeChange_wrapped = (o, e) => {
            let outerArgs = new IgrFilteringExpressionsTreeEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeAdvancedFilteringExpressionsTreeChange) {
                this.beforeAdvancedFilteringExpressionsTreeChange(this, outerArgs);
            }
            if (this._advancedFilteringExpressionsTreeChange) {
                this._advancedFilteringExpressionsTreeChange(this, outerArgs);
            }
        };
        this.i.advancedFilteringExpressionsTreeChange = delegateCombine(this.i.advancedFilteringExpressionsTreeChange, this._advancedFilteringExpressionsTreeChange_wrapped);
        if (this.i.advancedFilteringExpressionsTreeChangeChanged) {
            this.i.advancedFilteringExpressionsTreeChangeChanged();
        }
        ;
    }
    get gridScroll() {
        return this._gridScroll;
    }
    set gridScroll(ev) {
        if (this._gridScroll_wrapped !== null) {
            this.i.gridScroll = delegateRemove(this.i.gridScroll, this._gridScroll_wrapped);
            this._gridScroll_wrapped = null;
            this._gridScroll = null;
        }
        this._gridScroll = ev;
        this._gridScroll_wrapped = (o, e) => {
            let outerArgs = new IgrGridScrollEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeGridScroll) {
                this.beforeGridScroll(this, outerArgs);
            }
            if (this._gridScroll) {
                this._gridScroll(this, outerArgs);
            }
        };
        this.i.gridScroll = delegateCombine(this.i.gridScroll, this._gridScroll_wrapped);
        if (this.i.gridScrollChanged) {
            this.i.gridScrollChanged();
        }
        ;
    }
    get cellClick() {
        return this._cellClick;
    }
    set cellClick(ev) {
        if (this._cellClick_wrapped !== null) {
            this.i.cellClick = delegateRemove(this.i.cellClick, this._cellClick_wrapped);
            this._cellClick_wrapped = null;
            this._cellClick = null;
        }
        this._cellClick = ev;
        this._cellClick_wrapped = (o, e) => {
            let outerArgs = new IgrGridCellEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeCellClick) {
                this.beforeCellClick(this, outerArgs);
            }
            if (this._cellClick) {
                this._cellClick(this, outerArgs);
            }
        };
        this.i.cellClick = delegateCombine(this.i.cellClick, this._cellClick_wrapped);
        if (this.i.cellClickChanged) {
            this.i.cellClickChanged();
        }
        ;
    }
    get rowClick() {
        return this._rowClick;
    }
    set rowClick(ev) {
        if (this._rowClick_wrapped !== null) {
            this.i.rowClick = delegateRemove(this.i.rowClick, this._rowClick_wrapped);
            this._rowClick_wrapped = null;
            this._rowClick = null;
        }
        this._rowClick = ev;
        this._rowClick_wrapped = (o, e) => {
            let outerArgs = new IgrGridRowEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeRowClick) {
                this.beforeRowClick(this, outerArgs);
            }
            if (this._rowClick) {
                this._rowClick(this, outerArgs);
            }
        };
        this.i.rowClick = delegateCombine(this.i.rowClick, this._rowClick_wrapped);
        if (this.i.rowClickChanged) {
            this.i.rowClickChanged();
        }
        ;
    }
    get formGroupCreated() {
        return this._formGroupCreated;
    }
    set formGroupCreated(ev) {
        if (this._formGroupCreated_wrapped !== null) {
            this.i.formGroupCreated = delegateRemove(this.i.formGroupCreated, this._formGroupCreated_wrapped);
            this._formGroupCreated_wrapped = null;
            this._formGroupCreated = null;
        }
        this._formGroupCreated = ev;
        this._formGroupCreated_wrapped = (o, e) => {
            let outerArgs = new IgrGridFormGroupCreatedEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeFormGroupCreated) {
                this.beforeFormGroupCreated(this, outerArgs);
            }
            if (this._formGroupCreated) {
                this._formGroupCreated(this, outerArgs);
            }
        };
        this.i.formGroupCreated = delegateCombine(this.i.formGroupCreated, this._formGroupCreated_wrapped);
        if (this.i.formGroupCreatedChanged) {
            this.i.formGroupCreatedChanged();
        }
        ;
    }
    get validationStatusChange() {
        return this._validationStatusChange;
    }
    set validationStatusChange(ev) {
        if (this._validationStatusChange_wrapped !== null) {
            this.i.validationStatusChange = delegateRemove(this.i.validationStatusChange, this._validationStatusChange_wrapped);
            this._validationStatusChange_wrapped = null;
            this._validationStatusChange = null;
        }
        this._validationStatusChange = ev;
        this._validationStatusChange_wrapped = (o, e) => {
            let outerArgs = new IgrGridValidationStatusEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeValidationStatusChange) {
                this.beforeValidationStatusChange(this, outerArgs);
            }
            if (this._validationStatusChange) {
                this._validationStatusChange(this, outerArgs);
            }
        };
        this.i.validationStatusChange = delegateCombine(this.i.validationStatusChange, this._validationStatusChange_wrapped);
        if (this.i.validationStatusChangeChanged) {
            this.i.validationStatusChangeChanged();
        }
        ;
    }
    get selected() {
        return this._selected;
    }
    set selected(ev) {
        if (this._selected_wrapped !== null) {
            this.i.selected = delegateRemove(this.i.selected, this._selected_wrapped);
            this._selected_wrapped = null;
            this._selected = null;
        }
        this._selected = ev;
        this._selected_wrapped = (o, e) => {
            let outerArgs = new IgrGridCellEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeSelected) {
                this.beforeSelected(this, outerArgs);
            }
            if (this._selected) {
                this._selected(this, outerArgs);
            }
        };
        this.i.selected = delegateCombine(this.i.selected, this._selected_wrapped);
        if (this.i.selectedChanged) {
            this.i.selectedChanged();
        }
        ;
    }
    get rowSelectionChanging() {
        return this._rowSelectionChanging;
    }
    set rowSelectionChanging(ev) {
        if (this._rowSelectionChanging_wrapped !== null) {
            this.i.rowSelectionChanging = delegateRemove(this.i.rowSelectionChanging, this._rowSelectionChanging_wrapped);
            this._rowSelectionChanging_wrapped = null;
            this._rowSelectionChanging = null;
        }
        this._rowSelectionChanging = ev;
        this._rowSelectionChanging_wrapped = (o, e) => {
            let outerArgs = new IgrRowSelectionEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeRowSelectionChanging) {
                this.beforeRowSelectionChanging(this, outerArgs);
            }
            if (this._rowSelectionChanging) {
                this._rowSelectionChanging(this, outerArgs);
            }
        };
        this.i.rowSelectionChanging = delegateCombine(this.i.rowSelectionChanging, this._rowSelectionChanging_wrapped);
        if (this.i.rowSelectionChangingChanged) {
            this.i.rowSelectionChangingChanged();
        }
        ;
    }
    get columnSelectionChanging() {
        return this._columnSelectionChanging;
    }
    set columnSelectionChanging(ev) {
        if (this._columnSelectionChanging_wrapped !== null) {
            this.i.columnSelectionChanging = delegateRemove(this.i.columnSelectionChanging, this._columnSelectionChanging_wrapped);
            this._columnSelectionChanging_wrapped = null;
            this._columnSelectionChanging = null;
        }
        this._columnSelectionChanging = ev;
        this._columnSelectionChanging_wrapped = (o, e) => {
            let outerArgs = new IgrColumnSelectionEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeColumnSelectionChanging) {
                this.beforeColumnSelectionChanging(this, outerArgs);
            }
            if (this._columnSelectionChanging) {
                this._columnSelectionChanging(this, outerArgs);
            }
        };
        this.i.columnSelectionChanging = delegateCombine(this.i.columnSelectionChanging, this._columnSelectionChanging_wrapped);
        if (this.i.columnSelectionChangingChanged) {
            this.i.columnSelectionChangingChanged();
        }
        ;
    }
    /**
     * Emitted before `IgxColumnComponent` is pinned.
     * @remarks
     * The index at which to insert the column may be changed through the `insertAtIndex` property.
     * @example
     * ```typescript
     * public columnPinning(event) {
     * if (event.column.field === "Name") {
     * event.insertAtIndex = 0;
     * }
     * }
     * ```
    */
    get columnPin() {
        return this._columnPin;
    }
    set columnPin(ev) {
        if (this._columnPin_wrapped !== null) {
            this.i.columnPin = delegateRemove(this.i.columnPin, this._columnPin_wrapped);
            this._columnPin_wrapped = null;
            this._columnPin = null;
        }
        this._columnPin = ev;
        this._columnPin_wrapped = (o, e) => {
            let outerArgs = new IgrPinColumnCancellableEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeColumnPin) {
                this.beforeColumnPin(this, outerArgs);
            }
            if (this._columnPin) {
                this._columnPin(this, outerArgs);
            }
        };
        this.i.columnPin = delegateCombine(this.i.columnPin, this._columnPin_wrapped);
        if (this.i.columnPinChanged) {
            this.i.columnPinChanged();
        }
        ;
    }
    /**
     * Emitted after `IgxColumnComponent` is pinned.
     * @remarks
     * The index that the column is inserted at may be changed through the `insertAtIndex` property.
     * @example
     * ```typescript
     * public columnPinning(event) {
     * if (event.column.field === "Name") {
     * event.insertAtIndex = 0;
     * }
     * }
     * ```
    */
    get columnPinned() {
        return this._columnPinned;
    }
    set columnPinned(ev) {
        if (this._columnPinned_wrapped !== null) {
            this.i.columnPinned = delegateRemove(this.i.columnPinned, this._columnPinned_wrapped);
            this._columnPinned_wrapped = null;
            this._columnPinned = null;
        }
        this._columnPinned = ev;
        this._columnPinned_wrapped = (o, e) => {
            let outerArgs = new IgrPinColumnEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeColumnPinned) {
                this.beforeColumnPinned(this, outerArgs);
            }
            if (this._columnPinned) {
                this._columnPinned(this, outerArgs);
            }
        };
        this.i.columnPinned = delegateCombine(this.i.columnPinned, this._columnPinned_wrapped);
        if (this.i.columnPinnedChanged) {
            this.i.columnPinnedChanged();
        }
        ;
    }
    get cellEditEnter() {
        return this._cellEditEnter;
    }
    set cellEditEnter(ev) {
        if (this._cellEditEnter_wrapped !== null) {
            this.i.cellEditEnter = delegateRemove(this.i.cellEditEnter, this._cellEditEnter_wrapped);
            this._cellEditEnter_wrapped = null;
            this._cellEditEnter = null;
        }
        this._cellEditEnter = ev;
        this._cellEditEnter_wrapped = (o, e) => {
            let outerArgs = new IgrGridEditEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeCellEditEnter) {
                this.beforeCellEditEnter(this, outerArgs);
            }
            if (this._cellEditEnter) {
                this._cellEditEnter(this, outerArgs);
            }
        };
        this.i.cellEditEnter = delegateCombine(this.i.cellEditEnter, this._cellEditEnter_wrapped);
        if (this.i.cellEditEnterChanged) {
            this.i.cellEditEnterChanged();
        }
        ;
    }
    get cellEditExit() {
        return this._cellEditExit;
    }
    set cellEditExit(ev) {
        if (this._cellEditExit_wrapped !== null) {
            this.i.cellEditExit = delegateRemove(this.i.cellEditExit, this._cellEditExit_wrapped);
            this._cellEditExit_wrapped = null;
            this._cellEditExit = null;
        }
        this._cellEditExit = ev;
        this._cellEditExit_wrapped = (o, e) => {
            let outerArgs = new IgrGridEditDoneEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeCellEditExit) {
                this.beforeCellEditExit(this, outerArgs);
            }
            if (this._cellEditExit) {
                this._cellEditExit(this, outerArgs);
            }
        };
        this.i.cellEditExit = delegateCombine(this.i.cellEditExit, this._cellEditExit_wrapped);
        if (this.i.cellEditExitChanged) {
            this.i.cellEditExitChanged();
        }
        ;
    }
    get cellEdit() {
        return this._cellEdit;
    }
    set cellEdit(ev) {
        if (this._cellEdit_wrapped !== null) {
            this.i.cellEdit = delegateRemove(this.i.cellEdit, this._cellEdit_wrapped);
            this._cellEdit_wrapped = null;
            this._cellEdit = null;
        }
        this._cellEdit = ev;
        this._cellEdit_wrapped = (o, e) => {
            let outerArgs = new IgrGridEditEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeCellEdit) {
                this.beforeCellEdit(this, outerArgs);
            }
            if (this._cellEdit) {
                this._cellEdit(this, outerArgs);
            }
        };
        this.i.cellEdit = delegateCombine(this.i.cellEdit, this._cellEdit_wrapped);
        if (this.i.cellEditChanged) {
            this.i.cellEditChanged();
        }
        ;
    }
    get cellEditDone() {
        return this._cellEditDone;
    }
    set cellEditDone(ev) {
        if (this._cellEditDone_wrapped !== null) {
            this.i.cellEditDone = delegateRemove(this.i.cellEditDone, this._cellEditDone_wrapped);
            this._cellEditDone_wrapped = null;
            this._cellEditDone = null;
        }
        this._cellEditDone = ev;
        this._cellEditDone_wrapped = (o, e) => {
            let outerArgs = new IgrGridEditDoneEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeCellEditDone) {
                this.beforeCellEditDone(this, outerArgs);
            }
            if (this._cellEditDone) {
                this._cellEditDone(this, outerArgs);
            }
        };
        this.i.cellEditDone = delegateCombine(this.i.cellEditDone, this._cellEditDone_wrapped);
        if (this.i.cellEditDoneChanged) {
            this.i.cellEditDoneChanged();
        }
        ;
    }
    get rowEditEnter() {
        return this._rowEditEnter;
    }
    set rowEditEnter(ev) {
        if (this._rowEditEnter_wrapped !== null) {
            this.i.rowEditEnter = delegateRemove(this.i.rowEditEnter, this._rowEditEnter_wrapped);
            this._rowEditEnter_wrapped = null;
            this._rowEditEnter = null;
        }
        this._rowEditEnter = ev;
        this._rowEditEnter_wrapped = (o, e) => {
            let outerArgs = new IgrGridEditEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeRowEditEnter) {
                this.beforeRowEditEnter(this, outerArgs);
            }
            if (this._rowEditEnter) {
                this._rowEditEnter(this, outerArgs);
            }
        };
        this.i.rowEditEnter = delegateCombine(this.i.rowEditEnter, this._rowEditEnter_wrapped);
        if (this.i.rowEditEnterChanged) {
            this.i.rowEditEnterChanged();
        }
        ;
    }
    get rowEdit() {
        return this._rowEdit;
    }
    set rowEdit(ev) {
        if (this._rowEdit_wrapped !== null) {
            this.i.rowEdit = delegateRemove(this.i.rowEdit, this._rowEdit_wrapped);
            this._rowEdit_wrapped = null;
            this._rowEdit = null;
        }
        this._rowEdit = ev;
        this._rowEdit_wrapped = (o, e) => {
            let outerArgs = new IgrGridEditEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeRowEdit) {
                this.beforeRowEdit(this, outerArgs);
            }
            if (this._rowEdit) {
                this._rowEdit(this, outerArgs);
            }
        };
        this.i.rowEdit = delegateCombine(this.i.rowEdit, this._rowEdit_wrapped);
        if (this.i.rowEditChanged) {
            this.i.rowEditChanged();
        }
        ;
    }
    get rowEditDone() {
        return this._rowEditDone;
    }
    set rowEditDone(ev) {
        if (this._rowEditDone_wrapped !== null) {
            this.i.rowEditDone = delegateRemove(this.i.rowEditDone, this._rowEditDone_wrapped);
            this._rowEditDone_wrapped = null;
            this._rowEditDone = null;
        }
        this._rowEditDone = ev;
        this._rowEditDone_wrapped = (o, e) => {
            let outerArgs = new IgrGridEditDoneEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeRowEditDone) {
                this.beforeRowEditDone(this, outerArgs);
            }
            if (this._rowEditDone) {
                this._rowEditDone(this, outerArgs);
            }
        };
        this.i.rowEditDone = delegateCombine(this.i.rowEditDone, this._rowEditDone_wrapped);
        if (this.i.rowEditDoneChanged) {
            this.i.rowEditDoneChanged();
        }
        ;
    }
    get rowEditExit() {
        return this._rowEditExit;
    }
    set rowEditExit(ev) {
        if (this._rowEditExit_wrapped !== null) {
            this.i.rowEditExit = delegateRemove(this.i.rowEditExit, this._rowEditExit_wrapped);
            this._rowEditExit_wrapped = null;
            this._rowEditExit = null;
        }
        this._rowEditExit = ev;
        this._rowEditExit_wrapped = (o, e) => {
            let outerArgs = new IgrGridEditDoneEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeRowEditExit) {
                this.beforeRowEditExit(this, outerArgs);
            }
            if (this._rowEditExit) {
                this._rowEditExit(this, outerArgs);
            }
        };
        this.i.rowEditExit = delegateCombine(this.i.rowEditExit, this._rowEditExit_wrapped);
        if (this.i.rowEditExitChanged) {
            this.i.rowEditExitChanged();
        }
        ;
    }
    get columnInit() {
        return this._columnInit;
    }
    set columnInit(ev) {
        if (this._columnInit_wrapped !== null) {
            this.i.columnInit = delegateRemove(this.i.columnInit, this._columnInit_wrapped);
            this._columnInit_wrapped = null;
            this._columnInit = null;
        }
        this._columnInit = ev;
        this._columnInit_wrapped = (o, e) => {
            let outerArgs = new IgrColumnComponentEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeColumnInit) {
                this.beforeColumnInit(this, outerArgs);
            }
            if (this._columnInit) {
                this._columnInit(this, outerArgs);
            }
        };
        this.i.columnInit = delegateCombine(this.i.columnInit, this._columnInit_wrapped);
        if (this.i.columnInitChanged) {
            this.i.columnInitChanged();
        }
        ;
    }
    /**
     * @hidden @internal
    */
    get columnsAutogenerated() {
        return this._columnsAutogenerated;
    }
    set columnsAutogenerated(ev) {
        if (this._columnsAutogenerated_wrapped !== null) {
            this.i.columnsAutogenerated = delegateRemove(this.i.columnsAutogenerated, this._columnsAutogenerated_wrapped);
            this._columnsAutogenerated_wrapped = null;
            this._columnsAutogenerated = null;
        }
        this._columnsAutogenerated = ev;
        this._columnsAutogenerated_wrapped = (o, e) => {
            let outerArgs = new IgrColumnsAutoGeneratedEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeColumnsAutogenerated) {
                this.beforeColumnsAutogenerated(this, outerArgs);
            }
            if (this._columnsAutogenerated) {
                this._columnsAutogenerated(this, outerArgs);
            }
        };
        this.i.columnsAutogenerated = delegateCombine(this.i.columnsAutogenerated, this._columnsAutogenerated_wrapped);
        if (this.i.columnsAutogeneratedChanged) {
            this.i.columnsAutogeneratedChanged();
        }
        ;
    }
    get sorting() {
        return this._sorting;
    }
    set sorting(ev) {
        if (this._sorting_wrapped !== null) {
            this.i.sorting = delegateRemove(this.i.sorting, this._sorting_wrapped);
            this._sorting_wrapped = null;
            this._sorting = null;
        }
        this._sorting = ev;
        this._sorting_wrapped = (o, e) => {
            let outerArgs = new IgrSortingEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeSorting) {
                this.beforeSorting(this, outerArgs);
            }
            if (this._sorting) {
                this._sorting(this, outerArgs);
            }
        };
        this.i.sorting = delegateCombine(this.i.sorting, this._sorting_wrapped);
        if (this.i.sortingChanged) {
            this.i.sortingChanged();
        }
        ;
    }
    get sortingDone() {
        return this._sortingDone;
    }
    set sortingDone(ev) {
        if (this._sortingDone_wrapped !== null) {
            this.i.sortingDone = delegateRemove(this.i.sortingDone, this._sortingDone_wrapped);
            this._sortingDone_wrapped = null;
            this._sortingDone = null;
        }
        this._sortingDone = ev;
        this._sortingDone_wrapped = (o, e) => {
            let outerArgs = new IgrSortingExpressionEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeSortingDone) {
                this.beforeSortingDone(this, outerArgs);
            }
            if (this._sortingDone) {
                this._sortingDone(this, outerArgs);
            }
        };
        this.i.sortingDone = delegateCombine(this.i.sortingDone, this._sortingDone_wrapped);
        if (this.i.sortingDoneChanged) {
            this.i.sortingDoneChanged();
        }
        ;
    }
    get filtering() {
        return this._filtering;
    }
    set filtering(ev) {
        if (this._filtering_wrapped !== null) {
            this.i.filtering = delegateRemove(this.i.filtering, this._filtering_wrapped);
            this._filtering_wrapped = null;
            this._filtering = null;
        }
        this._filtering = ev;
        this._filtering_wrapped = (o, e) => {
            let outerArgs = new IgrFilteringEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeFiltering) {
                this.beforeFiltering(this, outerArgs);
            }
            if (this._filtering) {
                this._filtering(this, outerArgs);
            }
        };
        this.i.filtering = delegateCombine(this.i.filtering, this._filtering_wrapped);
        if (this.i.filteringChanged) {
            this.i.filteringChanged();
        }
        ;
    }
    get filteringDone() {
        return this._filteringDone;
    }
    set filteringDone(ev) {
        if (this._filteringDone_wrapped !== null) {
            this.i.filteringDone = delegateRemove(this.i.filteringDone, this._filteringDone_wrapped);
            this._filteringDone_wrapped = null;
            this._filteringDone = null;
        }
        this._filteringDone = ev;
        this._filteringDone_wrapped = (o, e) => {
            let outerArgs = new IgrFilteringExpressionsTreeEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeFilteringDone) {
                this.beforeFilteringDone(this, outerArgs);
            }
            if (this._filteringDone) {
                this._filteringDone(this, outerArgs);
            }
        };
        this.i.filteringDone = delegateCombine(this.i.filteringDone, this._filteringDone_wrapped);
        if (this.i.filteringDoneChanged) {
            this.i.filteringDoneChanged();
        }
        ;
    }
    get rowAdded() {
        return this._rowAdded;
    }
    set rowAdded(ev) {
        if (this._rowAdded_wrapped !== null) {
            this.i.rowAdded = delegateRemove(this.i.rowAdded, this._rowAdded_wrapped);
            this._rowAdded_wrapped = null;
            this._rowAdded = null;
        }
        this._rowAdded = ev;
        this._rowAdded_wrapped = (o, e) => {
            let outerArgs = new IgrRowDataEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeRowAdded) {
                this.beforeRowAdded(this, outerArgs);
            }
            if (this._rowAdded) {
                this._rowAdded(this, outerArgs);
            }
        };
        this.i.rowAdded = delegateCombine(this.i.rowAdded, this._rowAdded_wrapped);
        if (this.i.rowAddedChanged) {
            this.i.rowAddedChanged();
        }
        ;
    }
    get rowDeleted() {
        return this._rowDeleted;
    }
    set rowDeleted(ev) {
        if (this._rowDeleted_wrapped !== null) {
            this.i.rowDeleted = delegateRemove(this.i.rowDeleted, this._rowDeleted_wrapped);
            this._rowDeleted_wrapped = null;
            this._rowDeleted = null;
        }
        this._rowDeleted = ev;
        this._rowDeleted_wrapped = (o, e) => {
            let outerArgs = new IgrRowDataEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeRowDeleted) {
                this.beforeRowDeleted(this, outerArgs);
            }
            if (this._rowDeleted) {
                this._rowDeleted(this, outerArgs);
            }
        };
        this.i.rowDeleted = delegateCombine(this.i.rowDeleted, this._rowDeleted_wrapped);
        if (this.i.rowDeletedChanged) {
            this.i.rowDeletedChanged();
        }
        ;
    }
    get rowDelete() {
        return this._rowDelete;
    }
    set rowDelete(ev) {
        if (this._rowDelete_wrapped !== null) {
            this.i.rowDelete = delegateRemove(this.i.rowDelete, this._rowDelete_wrapped);
            this._rowDelete_wrapped = null;
            this._rowDelete = null;
        }
        this._rowDelete = ev;
        this._rowDelete_wrapped = (o, e) => {
            let outerArgs = new IgrRowDataCancelableEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeRowDelete) {
                this.beforeRowDelete(this, outerArgs);
            }
            if (this._rowDelete) {
                this._rowDelete(this, outerArgs);
            }
        };
        this.i.rowDelete = delegateCombine(this.i.rowDelete, this._rowDelete_wrapped);
        if (this.i.rowDeleteChanged) {
            this.i.rowDeleteChanged();
        }
        ;
    }
    get rowAdd() {
        return this._rowAdd;
    }
    set rowAdd(ev) {
        if (this._rowAdd_wrapped !== null) {
            this.i.rowAdd = delegateRemove(this.i.rowAdd, this._rowAdd_wrapped);
            this._rowAdd_wrapped = null;
            this._rowAdd = null;
        }
        this._rowAdd = ev;
        this._rowAdd_wrapped = (o, e) => {
            let outerArgs = new IgrRowDataCancelableEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeRowAdd) {
                this.beforeRowAdd(this, outerArgs);
            }
            if (this._rowAdd) {
                this._rowAdd(this, outerArgs);
            }
        };
        this.i.rowAdd = delegateCombine(this.i.rowAdd, this._rowAdd_wrapped);
        if (this.i.rowAddChanged) {
            this.i.rowAddChanged();
        }
        ;
    }
    get columnResized() {
        return this._columnResized;
    }
    set columnResized(ev) {
        if (this._columnResized_wrapped !== null) {
            this.i.columnResized = delegateRemove(this.i.columnResized, this._columnResized_wrapped);
            this._columnResized_wrapped = null;
            this._columnResized = null;
        }
        this._columnResized = ev;
        this._columnResized_wrapped = (o, e) => {
            let outerArgs = new IgrColumnResizeEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeColumnResized) {
                this.beforeColumnResized(this, outerArgs);
            }
            if (this._columnResized) {
                this._columnResized(this, outerArgs);
            }
        };
        this.i.columnResized = delegateCombine(this.i.columnResized, this._columnResized_wrapped);
        if (this.i.columnResizedChanged) {
            this.i.columnResizedChanged();
        }
        ;
    }
    get contextMenu() {
        return this._contextMenu;
    }
    set contextMenu(ev) {
        if (this._contextMenu_wrapped !== null) {
            this.i.contextMenu = delegateRemove(this.i.contextMenu, this._contextMenu_wrapped);
            this._contextMenu_wrapped = null;
            this._contextMenu = null;
        }
        this._contextMenu = ev;
        this._contextMenu_wrapped = (o, e) => {
            let outerArgs = new IgrGridContextMenuEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeContextMenu) {
                this.beforeContextMenu(this, outerArgs);
            }
            if (this._contextMenu) {
                this._contextMenu(this, outerArgs);
            }
        };
        this.i.contextMenu = delegateCombine(this.i.contextMenu, this._contextMenu_wrapped);
        if (this.i.contextMenuChanged) {
            this.i.contextMenuChanged();
        }
        ;
    }
    get doubleClick() {
        return this._doubleClick;
    }
    set doubleClick(ev) {
        if (this._doubleClick_wrapped !== null) {
            this.i.doubleClick = delegateRemove(this.i.doubleClick, this._doubleClick_wrapped);
            this._doubleClick_wrapped = null;
            this._doubleClick = null;
        }
        this._doubleClick = ev;
        this._doubleClick_wrapped = (o, e) => {
            let outerArgs = new IgrGridCellEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeDoubleClick) {
                this.beforeDoubleClick(this, outerArgs);
            }
            if (this._doubleClick) {
                this._doubleClick(this, outerArgs);
            }
        };
        this.i.doubleClick = delegateCombine(this.i.doubleClick, this._doubleClick_wrapped);
        if (this.i.doubleClickChanged) {
            this.i.doubleClickChanged();
        }
        ;
    }
    get columnVisibilityChanging() {
        return this._columnVisibilityChanging;
    }
    set columnVisibilityChanging(ev) {
        if (this._columnVisibilityChanging_wrapped !== null) {
            this.i.columnVisibilityChanging = delegateRemove(this.i.columnVisibilityChanging, this._columnVisibilityChanging_wrapped);
            this._columnVisibilityChanging_wrapped = null;
            this._columnVisibilityChanging = null;
        }
        this._columnVisibilityChanging = ev;
        this._columnVisibilityChanging_wrapped = (o, e) => {
            let outerArgs = new IgrColumnVisibilityChangingEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeColumnVisibilityChanging) {
                this.beforeColumnVisibilityChanging(this, outerArgs);
            }
            if (this._columnVisibilityChanging) {
                this._columnVisibilityChanging(this, outerArgs);
            }
        };
        this.i.columnVisibilityChanging = delegateCombine(this.i.columnVisibilityChanging, this._columnVisibilityChanging_wrapped);
        if (this.i.columnVisibilityChangingChanged) {
            this.i.columnVisibilityChangingChanged();
        }
        ;
    }
    get columnVisibilityChanged() {
        return this._columnVisibilityChanged;
    }
    set columnVisibilityChanged(ev) {
        if (this._columnVisibilityChanged_wrapped !== null) {
            this.i.columnVisibilityChanged = delegateRemove(this.i.columnVisibilityChanged, this._columnVisibilityChanged_wrapped);
            this._columnVisibilityChanged_wrapped = null;
            this._columnVisibilityChanged = null;
        }
        this._columnVisibilityChanged = ev;
        this._columnVisibilityChanged_wrapped = (o, e) => {
            let outerArgs = new IgrColumnVisibilityChangedEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeColumnVisibilityChanged) {
                this.beforeColumnVisibilityChanged(this, outerArgs);
            }
            if (this._columnVisibilityChanged) {
                this._columnVisibilityChanged(this, outerArgs);
            }
        };
        this.i.columnVisibilityChanged = delegateCombine(this.i.columnVisibilityChanged, this._columnVisibilityChanged_wrapped);
        if (this.i.columnVisibilityChangedChanged) {
            this.i.columnVisibilityChangedChanged();
        }
        ;
    }
    get columnMovingStart() {
        return this._columnMovingStart;
    }
    set columnMovingStart(ev) {
        if (this._columnMovingStart_wrapped !== null) {
            this.i.columnMovingStart = delegateRemove(this.i.columnMovingStart, this._columnMovingStart_wrapped);
            this._columnMovingStart_wrapped = null;
            this._columnMovingStart = null;
        }
        this._columnMovingStart = ev;
        this._columnMovingStart_wrapped = (o, e) => {
            let outerArgs = new IgrColumnMovingStartEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeColumnMovingStart) {
                this.beforeColumnMovingStart(this, outerArgs);
            }
            if (this._columnMovingStart) {
                this._columnMovingStart(this, outerArgs);
            }
        };
        this.i.columnMovingStart = delegateCombine(this.i.columnMovingStart, this._columnMovingStart_wrapped);
        if (this.i.columnMovingStartChanged) {
            this.i.columnMovingStartChanged();
        }
        ;
    }
    get columnMoving() {
        return this._columnMoving;
    }
    set columnMoving(ev) {
        if (this._columnMoving_wrapped !== null) {
            this.i.columnMoving = delegateRemove(this.i.columnMoving, this._columnMoving_wrapped);
            this._columnMoving_wrapped = null;
            this._columnMoving = null;
        }
        this._columnMoving = ev;
        this._columnMoving_wrapped = (o, e) => {
            let outerArgs = new IgrColumnMovingEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeColumnMoving) {
                this.beforeColumnMoving(this, outerArgs);
            }
            if (this._columnMoving) {
                this._columnMoving(this, outerArgs);
            }
        };
        this.i.columnMoving = delegateCombine(this.i.columnMoving, this._columnMoving_wrapped);
        if (this.i.columnMovingChanged) {
            this.i.columnMovingChanged();
        }
        ;
    }
    get columnMovingEnd() {
        return this._columnMovingEnd;
    }
    set columnMovingEnd(ev) {
        if (this._columnMovingEnd_wrapped !== null) {
            this.i.columnMovingEnd = delegateRemove(this.i.columnMovingEnd, this._columnMovingEnd_wrapped);
            this._columnMovingEnd_wrapped = null;
            this._columnMovingEnd = null;
        }
        this._columnMovingEnd = ev;
        this._columnMovingEnd_wrapped = (o, e) => {
            let outerArgs = new IgrColumnMovingEndEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeColumnMovingEnd) {
                this.beforeColumnMovingEnd(this, outerArgs);
            }
            if (this._columnMovingEnd) {
                this._columnMovingEnd(this, outerArgs);
            }
        };
        this.i.columnMovingEnd = delegateCombine(this.i.columnMovingEnd, this._columnMovingEnd_wrapped);
        if (this.i.columnMovingEndChanged) {
            this.i.columnMovingEndChanged();
        }
        ;
    }
    get gridKeydown() {
        return this._gridKeydown;
    }
    set gridKeydown(ev) {
        if (this._gridKeydown_wrapped !== null) {
            this.i.gridKeydown = delegateRemove(this.i.gridKeydown, this._gridKeydown_wrapped);
            this._gridKeydown_wrapped = null;
            this._gridKeydown = null;
        }
        this._gridKeydown = ev;
        this._gridKeydown_wrapped = (o, e) => {
            let outerArgs = new IgrGridKeydownEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeGridKeydown) {
                this.beforeGridKeydown(this, outerArgs);
            }
            if (this._gridKeydown) {
                this._gridKeydown(this, outerArgs);
            }
        };
        this.i.gridKeydown = delegateCombine(this.i.gridKeydown, this._gridKeydown_wrapped);
        if (this.i.gridKeydownChanged) {
            this.i.gridKeydownChanged();
        }
        ;
    }
    /**
     * Emitted when start dragging a row.
     * @remarks
     * Return the dragged row.
    */
    get rowDragStart() {
        return this._rowDragStart;
    }
    set rowDragStart(ev) {
        if (this._rowDragStart_wrapped !== null) {
            this.i.rowDragStart = delegateRemove(this.i.rowDragStart, this._rowDragStart_wrapped);
            this._rowDragStart_wrapped = null;
            this._rowDragStart = null;
        }
        this._rowDragStart = ev;
        this._rowDragStart_wrapped = (o, e) => {
            let outerArgs = new IgrRowDragStartEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeRowDragStart) {
                this.beforeRowDragStart(this, outerArgs);
            }
            if (this._rowDragStart) {
                this._rowDragStart(this, outerArgs);
            }
        };
        this.i.rowDragStart = delegateCombine(this.i.rowDragStart, this._rowDragStart_wrapped);
        if (this.i.rowDragStartChanged) {
            this.i.rowDragStartChanged();
        }
        ;
    }
    /**
     * Emitted when dropping a row.
     * @remarks
     * Return the dropped row.
    */
    get rowDragEnd() {
        return this._rowDragEnd;
    }
    set rowDragEnd(ev) {
        if (this._rowDragEnd_wrapped !== null) {
            this.i.rowDragEnd = delegateRemove(this.i.rowDragEnd, this._rowDragEnd_wrapped);
            this._rowDragEnd_wrapped = null;
            this._rowDragEnd = null;
        }
        this._rowDragEnd = ev;
        this._rowDragEnd_wrapped = (o, e) => {
            let outerArgs = new IgrRowDragEndEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeRowDragEnd) {
                this.beforeRowDragEnd(this, outerArgs);
            }
            if (this._rowDragEnd) {
                this._rowDragEnd(this, outerArgs);
            }
        };
        this.i.rowDragEnd = delegateCombine(this.i.rowDragEnd, this._rowDragEnd_wrapped);
        if (this.i.rowDragEndChanged) {
            this.i.rowDragEndChanged();
        }
        ;
    }
    /**
     * Emitted when a copy operation is executed.
     * @remarks
     * Fired only if copy behavior is enabled through the [`clipboardOptions`]{@link IgxGridBaseDirective#clipboardOptions}.
    */
    get gridCopy() {
        return this._gridCopy;
    }
    set gridCopy(ev) {
        if (this._gridCopy_wrapped !== null) {
            this.i.gridCopy = delegateRemove(this.i.gridCopy, this._gridCopy_wrapped);
            this._gridCopy_wrapped = null;
            this._gridCopy = null;
        }
        this._gridCopy = ev;
        this._gridCopy_wrapped = (o, e) => {
            let outerArgs = new IgrGridClipboardEventEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeGridCopy) {
                this.beforeGridCopy(this, outerArgs);
            }
            if (this._gridCopy) {
                this._gridCopy(this, outerArgs);
            }
        };
        this.i.gridCopy = delegateCombine(this.i.gridCopy, this._gridCopy_wrapped);
        if (this.i.gridCopyChanged) {
            this.i.gridCopyChanged();
        }
        ;
    }
    /**
     * @hidden @internal
    */
    get selectedRowsChange() {
        return this._selectedRowsChange;
    }
    set selectedRowsChange(ev) {
        if (this._selectedRowsChange_wrapped !== null) {
            this.i.selectedRowsChange = delegateRemove(this.i.selectedRowsChange, this._selectedRowsChange_wrapped);
            this._selectedRowsChange_wrapped = null;
            this._selectedRowsChange = null;
        }
        this._selectedRowsChange = ev;
        this._selectedRowsChange_wrapped = (o, e) => {
            let outerArgs = new IgrComponentArrayDataValueChangedEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeSelectedRowsChange) {
                this.beforeSelectedRowsChange(this, outerArgs);
            }
            if (this._selectedRowsChange) {
                this._selectedRowsChange(this, outerArgs);
            }
        };
        this.i.selectedRowsChange = delegateCombine(this.i.selectedRowsChange, this._selectedRowsChange_wrapped);
        if (this.i.selectedRowsChangeChanged) {
            this.i.selectedRowsChangeChanged();
        }
        ;
    }
    get rowToggle() {
        return this._rowToggle;
    }
    set rowToggle(ev) {
        if (this._rowToggle_wrapped !== null) {
            this.i.rowToggle = delegateRemove(this.i.rowToggle, this._rowToggle_wrapped);
            this._rowToggle_wrapped = null;
            this._rowToggle = null;
        }
        this._rowToggle = ev;
        this._rowToggle_wrapped = (o, e) => {
            let outerArgs = new IgrRowToggleEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeRowToggle) {
                this.beforeRowToggle(this, outerArgs);
            }
            if (this._rowToggle) {
                this._rowToggle(this, outerArgs);
            }
        };
        this.i.rowToggle = delegateCombine(this.i.rowToggle, this._rowToggle_wrapped);
        if (this.i.rowToggleChanged) {
            this.i.rowToggleChanged();
        }
        ;
    }
    get rowPinning() {
        return this._rowPinning;
    }
    set rowPinning(ev) {
        if (this._rowPinning_wrapped !== null) {
            this.i.rowPinning = delegateRemove(this.i.rowPinning, this._rowPinning_wrapped);
            this._rowPinning_wrapped = null;
            this._rowPinning = null;
        }
        this._rowPinning = ev;
        this._rowPinning_wrapped = (o, e) => {
            let outerArgs = new IgrPinRowEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeRowPinning) {
                this.beforeRowPinning(this, outerArgs);
            }
            if (this._rowPinning) {
                this._rowPinning(this, outerArgs);
            }
        };
        this.i.rowPinning = delegateCombine(this.i.rowPinning, this._rowPinning_wrapped);
        if (this.i.rowPinningChanged) {
            this.i.rowPinningChanged();
        }
        ;
    }
    get rowPinned() {
        return this._rowPinned;
    }
    set rowPinned(ev) {
        if (this._rowPinned_wrapped !== null) {
            this.i.rowPinned = delegateRemove(this.i.rowPinned, this._rowPinned_wrapped);
            this._rowPinned_wrapped = null;
            this._rowPinned = null;
        }
        this._rowPinned = ev;
        this._rowPinned_wrapped = (o, e) => {
            let outerArgs = new IgrPinRowEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeRowPinned) {
                this.beforeRowPinned(this, outerArgs);
            }
            if (this._rowPinned) {
                this._rowPinned(this, outerArgs);
            }
        };
        this.i.rowPinned = delegateCombine(this.i.rowPinned, this._rowPinned_wrapped);
        if (this.i.rowPinnedChanged) {
            this.i.rowPinnedChanged();
        }
        ;
    }
    get activeNodeChange() {
        return this._activeNodeChange;
    }
    set activeNodeChange(ev) {
        if (this._activeNodeChange_wrapped !== null) {
            this.i.activeNodeChange = delegateRemove(this.i.activeNodeChange, this._activeNodeChange_wrapped);
            this._activeNodeChange_wrapped = null;
            this._activeNodeChange = null;
        }
        this._activeNodeChange = ev;
        this._activeNodeChange_wrapped = (o, e) => {
            let outerArgs = new IgrActiveNodeChangeEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeActiveNodeChange) {
                this.beforeActiveNodeChange(this, outerArgs);
            }
            if (this._activeNodeChange) {
                this._activeNodeChange(this, outerArgs);
            }
        };
        this.i.activeNodeChange = delegateCombine(this.i.activeNodeChange, this._activeNodeChange_wrapped);
        if (this.i.activeNodeChangeChanged) {
            this.i.activeNodeChangeChanged();
        }
        ;
    }
    get sortingExpressionsChange() {
        return this._sortingExpressionsChange;
    }
    set sortingExpressionsChange(ev) {
        if (this._sortingExpressionsChange_wrapped !== null) {
            this.i.sortingExpressionsChange = delegateRemove(this.i.sortingExpressionsChange, this._sortingExpressionsChange_wrapped);
            this._sortingExpressionsChange_wrapped = null;
            this._sortingExpressionsChange = null;
        }
        this._sortingExpressionsChange = ev;
        this._sortingExpressionsChange_wrapped = (o, e) => {
            let outerArgs = new IgrSortingExpressionEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeSortingExpressionsChange) {
                this.beforeSortingExpressionsChange(this, outerArgs);
            }
            if (this._sortingExpressionsChange) {
                this._sortingExpressionsChange(this, outerArgs);
            }
        };
        this.i.sortingExpressionsChange = delegateCombine(this.i.sortingExpressionsChange, this._sortingExpressionsChange_wrapped);
        if (this.i.sortingExpressionsChangeChanged) {
            this.i.sortingExpressionsChangeChanged();
        }
        ;
    }
    /**
     * Emitted when an export process is initiated by the user.
     * @example
     * ```typescript
     * toolbarExporting(event: IGridToolbarExportEventArgs){
     * const toolbarExporting = event;
     * }
     * ```
    */
    get toolbarExporting() {
        return this._toolbarExporting;
    }
    set toolbarExporting(ev) {
        if (this._toolbarExporting_wrapped !== null) {
            this.i.toolbarExporting = delegateRemove(this.i.toolbarExporting, this._toolbarExporting_wrapped);
            this._toolbarExporting_wrapped = null;
            this._toolbarExporting = null;
        }
        this._toolbarExporting = ev;
        this._toolbarExporting_wrapped = (o, e) => {
            let outerArgs = new IgrGridToolbarExportEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeToolbarExporting) {
                this.beforeToolbarExporting(this, outerArgs);
            }
            if (this._toolbarExporting) {
                this._toolbarExporting(this, outerArgs);
            }
        };
        this.i.toolbarExporting = delegateCombine(this.i.toolbarExporting, this._toolbarExporting_wrapped);
        if (this.i.toolbarExportingChanged) {
            this.i.toolbarExportingChanged();
        }
        ;
    }
    /**
     * Emitted when making a range selection.
     * @remarks
     * Range selection can be made either through drag selection or through keyboard selection.
    */
    get rangeSelected() {
        return this._rangeSelected;
    }
    set rangeSelected(ev) {
        if (this._rangeSelected_wrapped !== null) {
            this.i.rangeSelected = delegateRemove(this.i.rangeSelected, this._rangeSelected_wrapped);
            this._rangeSelected_wrapped = null;
            this._rangeSelected = null;
        }
        this._rangeSelected = ev;
        this._rangeSelected_wrapped = (o, e) => {
            let outerArgs = new IgrGridSelectionRangeEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeRangeSelected) {
                this.beforeRangeSelected(this, outerArgs);
            }
            if (this._rangeSelected) {
                this._rangeSelected(this, outerArgs);
            }
        };
        this.i.rangeSelected = delegateCombine(this.i.rangeSelected, this._rangeSelected_wrapped);
        if (this.i.rangeSelectedChanged) {
            this.i.rangeSelectedChanged();
        }
        ;
    }
    /**
     * Emitted after the ngAfterViewInit hook. At this point the grid exists in the DOM
    */
    get rendered() {
        return this._rendered;
    }
    set rendered(ev) {
        if (this._rendered_wrapped !== null) {
            this.i.rendered = delegateRemove(this.i.rendered, this._rendered_wrapped);
            this._rendered_wrapped = null;
            this._rendered = null;
        }
        this._rendered = ev;
        this._rendered_wrapped = (o, e) => {
            let outerArgs = new IgrVoidEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeRendered) {
                this.beforeRendered(this, outerArgs);
            }
            if (this._rendered) {
                this._rendered(this, outerArgs);
            }
        };
        this.i.rendered = delegateCombine(this.i.rendered, this._rendered_wrapped);
        if (this.i.renderedChanged) {
            this.i.renderedChanged();
        }
        ;
    }
    get dataChanging() {
        return this._dataChanging;
    }
    set dataChanging(ev) {
        if (this._dataChanging_wrapped !== null) {
            this.i.dataChanging = delegateRemove(this.i.dataChanging, this._dataChanging_wrapped);
            this._dataChanging_wrapped = null;
            this._dataChanging = null;
        }
        this._dataChanging = ev;
        this._dataChanging_wrapped = (o, e) => {
            let outerArgs = new IgrForOfDataChangingEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeDataChanging) {
                this.beforeDataChanging(this, outerArgs);
            }
            if (this._dataChanging) {
                this._dataChanging(this, outerArgs);
            }
        };
        this.i.dataChanging = delegateCombine(this.i.dataChanging, this._dataChanging_wrapped);
        if (this.i.dataChangingChanged) {
            this.i.dataChangingChanged();
        }
        ;
    }
    get dataChanged() {
        return this._dataChanged;
    }
    set dataChanged(ev) {
        if (this._dataChanged_wrapped !== null) {
            this.i.dataChanged = delegateRemove(this.i.dataChanged, this._dataChanged_wrapped);
            this._dataChanged_wrapped = null;
            this._dataChanged = null;
        }
        this._dataChanged = ev;
        this._dataChanged_wrapped = (o, e) => {
            let outerArgs = new IgrVoidEventArgs();
            outerArgs._provideImplementation(e);
            if (this.beforeDataChanged) {
                this.beforeDataChanged(this, outerArgs);
            }
            if (this._dataChanged) {
                this._dataChanged(this, outerArgs);
            }
        };
        this.i.dataChanged = delegateCombine(this.i.dataChanged, this._dataChanged_wrapped);
        if (this.i.dataChangedChanged) {
            this.i.dataChangedChanged();
        }
        ;
    }
}