import * as tslib_1 from "tslib";
import { ensureEnum, brushToString, stringToBrush, ensureBool, initializePropertiesFromCss, NamePatcher, toSpinal, enumToString, getAllPropertyNames, fromSpinal } from "igniteui-webcomponents-core";
import { FontInfo } from "igniteui-webcomponents-core";
import { WebComponentRenderer, PortalManager } from "igniteui-webcomponents-core";
import { delegateCombine, delegateRemove } from "igniteui-webcomponents-core";
import { RegisterElementHelper } from "igniteui-webcomponents-core";
import { MultiColumnComboBox } from "./MultiColumnComboBox";
import { BaseControlTheme_$type } from "igniteui-webcomponents-core";
import { ControlDisplayDensity_$type } from "igniteui-webcomponents-core";
import { SortMode_$type } from './SortMode';
import { CornerRadius } from "igniteui-webcomponents-core";
import { Thickness } from "igniteui-webcomponents-core";
import { IgcMultiColumnComboBoxTextChangedEventArgs } from './igc-multi-column-combo-box-text-changed-event-args';
import { IgcMultiColumnComboBoxValueChangedEventArgs } from './igc-multi-column-combo-box-value-changed-event-args';
import { IgcGotFocusEventArgs } from './igc-got-focus-event-args';
import { IgcLostFocusEventArgs } from './igc-lost-focus-event-args';
import { IgcHTMLElement } from "igniteui-webcomponents-core";
import { IgcKeyEventArgs } from "igniteui-webcomponents-core";
import { IgcInputChangeEventArgs } from "igniteui-webcomponents-inputs";
import { IgcColumnWidth } from './igc-column-width';
import { ColumnWidth as ColumnWidth_internal } from './ColumnWidth';
var IgcMultiColumnComboBoxComponent = /** @class */ /*@__PURE__*/ (function (_super) {
    tslib_1.__extends(IgcMultiColumnComboBoxComponent, _super);
    function IgcMultiColumnComboBoxComponent() {
        var _this = _super.call(this) || this;
        _this._implementation = null;
        _this._disconnected = false;
        _this._settingAttributes = false;
        _this._attached = false;
        _this._queuedSetAttributes = [];
        _this._updatingFromAttribute = false;
        _this.__p = null;
        _this._hasUserValues = new Set();
        _this._stylingContainer = null;
        _this._stylingParent = null;
        _this._inStyling = false;
        _this._gotFocus = null;
        _this._gotFocus_wrapped = null;
        _this._lostFocus = null;
        _this._lostFocus_wrapped = null;
        _this._textChanged = null;
        _this._textChanged_wrapped = null;
        _this._valueChanged = null;
        _this._valueChanged_wrapped = null;
        _this._keyDown = null;
        _this._keyDown_wrapped = null;
        _this._change = null;
        _this._change_wrapped = null;
        _this._changing = null;
        _this._changing_wrapped = null;
        if (_this._styling) {
            NamePatcher.ensureStylablePatched(Object.getPrototypeOf(_this));
        }
        _this._implementation = _this.createImplementation();
        _this._implementation.externalObject = _this;
        _this._portalManager = new PortalManager("multiColumnComboBoxContent");
        _this._webComponentRenderer = new WebComponentRenderer(_this, document, true, {}, _this._portalManager);
        _this._webComponentWrapper = _this._webComponentRenderer.createElement("div");
        _this._webComponentRenderer.updateRoot(_this._webComponentWrapper);
        _this._webComponentWrapper.setStyleProperty("display", "block");
        _this._webComponentWrapper.setStyleProperty("width", "100%");
        _this._webComponentWrapper.setStyleProperty("height", "100%");
        _this.i.provideRenderer(_this._webComponentRenderer);
        _this.i.notifySizeChanged();
        _this._webComponentRenderer.addSizeWatcher(function () {
            _this.i.notifySizeChanged();
        });
        return _this;
    }
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "height", {
        get: function () {
            return this._height;
        },
        set: function (value) {
            this._height = value;
            this.style.height = value;
            this.i.notifySizeChanged();
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "width", {
        get: function () {
            return this._width;
        },
        set: function (value) {
            this._width = value;
            this.style.width = value;
            this.i.notifySizeChanged();
        },
        enumerable: true,
        configurable: true
    });
    // supports angular themes or custom properties set in CSS
    IgcMultiColumnComboBoxComponent.prototype.updateStyle = function () {
        this._styling(this, this);
    };
    IgcMultiColumnComboBoxComponent.prototype.destroy = function () {
        this._implementation.destroy();
        this._webComponentRenderer.destroy();
    };
    IgcMultiColumnComboBoxComponent.prototype.createImplementation = function () {
        return new MultiColumnComboBox();
    };
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "i", {
        get: function () {
            return this._implementation;
        },
        enumerable: true,
        configurable: true
    });
    IgcMultiColumnComboBoxComponent.prototype.disconnectedCallback = function () {
        this._disconnected = true;
    };
    IgcMultiColumnComboBoxComponent.prototype.connectedCallback = function () {
        if (this._disconnected) {
            this._disconnected = false;
            return;
        }
        this.classList.add("ig-multi-column-combo-box");
        this.classList.add("igc-multi-column-combo-box");
        var rootWrapper = this._webComponentRenderer.rootWrapper;
        var rootElement = rootWrapper.getNativeElement();
        this.appendChild(rootElement);
        this._attached = true;
        this.style.display = "block";
        this.style.height = this._height;
        this.style.width = this._width;
        this._flushQueuedAttributes();
        // supports themes or custom properties set in CSS
        this._styling(this, this);
        this.afterContentInit();
    };
    IgcMultiColumnComboBoxComponent.prototype.afterContentInit = function () {
        this.i.notifySizeChanged();
    };
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "defaultColumnWidth", {
        /**
         * Gets or sets the default column width to use if a column as no local width.
         * */
        get: function () {
            var ext = this.i.defaultColumnWidth.externalObject;
            if (!ext) {
                ext = new IgcColumnWidth();
                ext._implementation = this.i.defaultColumnWidth;
            }
            return ext;
        },
        set: function (value) {
            if (typeof value == "string") {
                var int = ColumnWidth_internal.parse(value);
                var ext = new IgcColumnWidth();
                ext._implementation = int;
                value = ext;
            }
            this.i.defaultColumnWidth = value.i;
        },
        enumerable: true,
        configurable: true
    });
    IgcMultiColumnComboBoxComponent.prototype._enqueueSetAttribute = function (attrName, attrValue) {
        this._queuedSetAttributes.push({ attrName: attrName, attrValue: attrValue });
    };
    IgcMultiColumnComboBoxComponent.prototype._flushQueuedAttributes = function () {
        this._settingAttributes = true;
        for (var i = 0; i < this._queuedSetAttributes.length; i++) {
            this.setAttribute(this._queuedSetAttributes[i].attrName, this._queuedSetAttributes[i].attrValue);
        }
        this._settingAttributes = false;
        this._queuedSetAttributes.length = 0;
    };
    IgcMultiColumnComboBoxComponent.prototype._a = function (attrName, attrValue) {
        if (this._updatingFromAttribute) {
            return;
        }
        if (attrValue) {
            attrValue = attrValue.toString();
        }
        this._settingAttributes = true;
        attrName = toSpinal(attrName);
        if (this._attached) {
            this.setAttribute(attrName, attrValue);
        }
        else {
            this._enqueueSetAttribute(attrName, attrValue);
        }
        this._settingAttributes = false;
    };
    Object.defineProperty(IgcMultiColumnComboBoxComponent, "observedAttributes", {
        get: function () {
            if (IgcMultiColumnComboBoxComponent._observedAttributesIgcMultiColumnComboBoxComponent == null) {
                var names = getAllPropertyNames(IgcMultiColumnComboBoxComponent);
                for (var i = 0; i < names.length; i++) {
                    names[i] = toSpinal(names[i]);
                }
                IgcMultiColumnComboBoxComponent._observedAttributesIgcMultiColumnComboBoxComponent = names;
            }
            return IgcMultiColumnComboBoxComponent._observedAttributesIgcMultiColumnComboBoxComponent;
        },
        enumerable: true,
        configurable: true
    });
    IgcMultiColumnComboBoxComponent.prototype.attributeChangedCallback = function (name, oldValue, newValue) {
        if (this._settingAttributes) {
            return;
        }
        var setName = fromSpinal(name);
        this._updatingFromAttribute = true;
        this[setName] = newValue;
        this._updatingFromAttribute = false;
    };
    IgcMultiColumnComboBoxComponent.register = function () {
        if (!IgcMultiColumnComboBoxComponent._isElementRegistered) {
            IgcMultiColumnComboBoxComponent._isElementRegistered = true;
            RegisterElementHelper.registerElement(IgcMultiColumnComboBoxComponent.htmlTagName, IgcMultiColumnComboBoxComponent);
        }
    };
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "showClearButton", {
        /**
     * Gets or sets the ShowClearButton property to detirmine if the clear button is shown
    */
        get: function () {
            return this.i.be;
        },
        set: function (v) {
            this.i.be = ensureBool(v);
            this._a("showClearButton", this.i.be);
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "fields", {
        /**
         * Gets or sets the desired properties for the data source to load. If specified the data source may decide to constrain the properties it fetches to these properties and must make sure that at least those properties are loaded, rather than the default behavior for that data source.
        */
        get: function () {
            return this.i.g;
        },
        set: function (v) {
            this.i.g = v;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "backgroundColor", {
        /**
         * Gets or sets the background color to use for the input group.
        */
        get: function () {
            return brushToString(this.i.hd);
        },
        set: function (v) {
            this.i.hd = stringToBrush(v);
            this._a("backgroundColor", brushToString(this.i.hd));
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "actualBackgroundColor", {
        /**
         * Gets the actual opacity to use for the underline ripple element.
        */
        get: function () {
            return brushToString(this.i.g2);
        },
        set: function (v) {
            this.i.g2 = stringToBrush(v);
            this._a("actualBackgroundColor", brushToString(this.i.g2));
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "baseTheme", {
        /**
         * Gets or sets the base built in theme to use for the component.
        */
        get: function () {
            return this.i.ac;
        },
        set: function (v) {
            this.i.ac = ensureEnum(BaseControlTheme_$type, v);
            this._a("baseTheme", enumToString(BaseControlTheme_$type, this.i.ac));
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "actualBaseTheme", {
        /**
         * Gets the actual display baseTheme to use for the component.
        */
        get: function () {
            return this.i.ab;
        },
        set: function (v) {
            this.i.ab = ensureEnum(BaseControlTheme_$type, v);
            this._a("actualBaseTheme", enumToString(BaseControlTheme_$type, this.i.ab));
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "borderColor", {
        /**
         * Gets or sets the color to use the border of the input group.
        */
        get: function () {
            return brushToString(this.i.he);
        },
        set: function (v) {
            this.i.he = stringToBrush(v);
            this._a("borderColor", brushToString(this.i.he));
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "actualBorderColor", {
        /**
         * Gets the actual item background color.
        */
        get: function () {
            return brushToString(this.i.g3);
        },
        set: function (v) {
            this.i.g3 = stringToBrush(v);
            this._a("actualBorderColor", brushToString(this.i.g3));
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "borderWidth", {
        /**
         * Gets or sets the border width to use for the border of the item group.
        */
        get: function () {
            return this.i.b9;
        },
        set: function (v) {
            this.i.b9 = +v;
            this._a("borderWidth", this.i.b9);
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "actualBorderWidth", {
        /**
         * Gets the actual item border width.
        */
        get: function () {
            return this.i.bz;
        },
        set: function (v) {
            this.i.bz = +v;
            this._a("actualBorderWidth", this.i.bz);
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "columnHeadersVisible", {
        /**
         * Gets or sets the visibility of the drop down button.
        */
        get: function () {
            return this.i.columnHeadersVisible;
        },
        set: function (v) {
            this.i.columnHeadersVisible = ensureBool(v);
            this._a("columnHeadersVisible", this.i.columnHeadersVisible);
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "contentPaddingBottom", {
        get: function () {
            return this.i.h2 ? this.i.h2.b : NaN;
        },
        set: function (v) {
            this.ensureContentPadding();
            this.i.h2.b = +v;
            this._a("contentPaddingBottom", this.i.h2.b);
            this.i.h2 = this.i.h2;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "contentPaddingLeft", {
        get: function () {
            return this.i.h2 ? this.i.h2.c : NaN;
        },
        set: function (v) {
            this.ensureContentPadding();
            this.i.h2.c = +v;
            this._a("contentPaddingLeft", this.i.h2.c);
            this.i.h2 = this.i.h2;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "contentPaddingRight", {
        get: function () {
            return this.i.h2 ? this.i.h2.d : NaN;
        },
        set: function (v) {
            this.ensureContentPadding();
            this.i.h2.d = +v;
            this._a("contentPaddingRight", this.i.h2.d);
            this.i.h2 = this.i.h2;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "contentPaddingTop", {
        get: function () {
            return this.i.h2 ? this.i.h2.e : NaN;
        },
        set: function (v) {
            this.ensureContentPadding();
            this.i.h2.e = +v;
            this._a("contentPaddingTop", this.i.h2.e);
            this.i.h2 = this.i.h2;
        },
        enumerable: true,
        configurable: true
    });
    IgcMultiColumnComboBoxComponent.prototype.ensureContentPadding = function () {
        if (this.i.h2) {
            return;
        }
        this.i.h2 = new Thickness(2);
    };
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "actualContentPaddingBottom", {
        get: function () {
            return this.i.h1 ? this.i.h1.b : NaN;
        },
        set: function (v) {
            this.ensureActualContentPadding();
            this.i.h1.b = +v;
            this._a("actualContentPaddingBottom", this.i.h1.b);
            this.i.h1 = this.i.h1;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "actualContentPaddingLeft", {
        get: function () {
            return this.i.h1 ? this.i.h1.c : NaN;
        },
        set: function (v) {
            this.ensureActualContentPadding();
            this.i.h1.c = +v;
            this._a("actualContentPaddingLeft", this.i.h1.c);
            this.i.h1 = this.i.h1;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "actualContentPaddingRight", {
        get: function () {
            return this.i.h1 ? this.i.h1.d : NaN;
        },
        set: function (v) {
            this.ensureActualContentPadding();
            this.i.h1.d = +v;
            this._a("actualContentPaddingRight", this.i.h1.d);
            this.i.h1 = this.i.h1;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "actualContentPaddingTop", {
        get: function () {
            return this.i.h1 ? this.i.h1.e : NaN;
        },
        set: function (v) {
            this.ensureActualContentPadding();
            this.i.h1.e = +v;
            this._a("actualContentPaddingTop", this.i.h1.e);
            this.i.h1 = this.i.h1;
        },
        enumerable: true,
        configurable: true
    });
    IgcMultiColumnComboBoxComponent.prototype.ensureActualContentPadding = function () {
        if (this.i.h1) {
            return;
        }
        this.i.h1 = new Thickness(2);
    };
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "cornerRadiusBottomRight", {
        get: function () {
            return this.i.ge ? this.i.ge.b : NaN;
        },
        set: function (v) {
            this.ensureCornerRadius();
            this.i.ge.b = +v;
            this._a("cornerRadiusBottomRight", this.i.ge.b);
            this.i.ge = this.i.ge;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "cornerRadiusBottomLeft", {
        get: function () {
            return this.i.ge ? this.i.ge.a : NaN;
        },
        set: function (v) {
            this.ensureCornerRadius();
            this.i.ge.a = +v;
            this._a("cornerRadiusBottomLeft", this.i.ge.a);
            this.i.ge = this.i.ge;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "cornerRadiusTopLeft", {
        get: function () {
            return this.i.ge ? this.i.ge.c : NaN;
        },
        set: function (v) {
            this.ensureCornerRadius();
            this.i.ge.c = +v;
            this._a("cornerRadiusTopLeft", this.i.ge.c);
            this.i.ge = this.i.ge;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "cornerRadiusTopRight", {
        get: function () {
            return this.i.ge ? this.i.ge.d : NaN;
        },
        set: function (v) {
            this.ensureCornerRadius();
            this.i.ge.d = +v;
            this._a("cornerRadiusTopRight", this.i.ge.d);
            this.i.ge = this.i.ge;
        },
        enumerable: true,
        configurable: true
    });
    IgcMultiColumnComboBoxComponent.prototype.ensureCornerRadius = function () {
        if (this.i.ge) {
            return;
        }
        this.i.ge = new CornerRadius(2);
    };
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "actualCornerRadiusBottomRight", {
        get: function () {
            return this.i.gd ? this.i.gd.b : NaN;
        },
        set: function (v) {
            this.ensureActualCornerRadius();
            this.i.gd.b = +v;
            this._a("actualCornerRadiusBottomRight", this.i.gd.b);
            this.i.gd = this.i.gd;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "actualCornerRadiusBottomLeft", {
        get: function () {
            return this.i.gd ? this.i.gd.a : NaN;
        },
        set: function (v) {
            this.ensureActualCornerRadius();
            this.i.gd.a = +v;
            this._a("actualCornerRadiusBottomLeft", this.i.gd.a);
            this.i.gd = this.i.gd;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "actualCornerRadiusTopLeft", {
        get: function () {
            return this.i.gd ? this.i.gd.c : NaN;
        },
        set: function (v) {
            this.ensureActualCornerRadius();
            this.i.gd.c = +v;
            this._a("actualCornerRadiusTopLeft", this.i.gd.c);
            this.i.gd = this.i.gd;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "actualCornerRadiusTopRight", {
        get: function () {
            return this.i.gd ? this.i.gd.d : NaN;
        },
        set: function (v) {
            this.ensureActualCornerRadius();
            this.i.gd.d = +v;
            this._a("actualCornerRadiusTopRight", this.i.gd.d);
            this.i.gd = this.i.gd;
        },
        enumerable: true,
        configurable: true
    });
    IgcMultiColumnComboBoxComponent.prototype.ensureActualCornerRadius = function () {
        if (this.i.gd) {
            return;
        }
        this.i.gd = new CornerRadius(2);
    };
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "dataSourceDesiredProperties", {
        /**
         * Gets or sets the desired properties for the data source to load. If specified the data source may decide to constrain the properties it fetches to these properties and must make sure that at least those properties are loaded, rather than the default behavior for that data source.
        */
        get: function () {
            return this.i.f;
        },
        set: function (v) {
            this.i.f = v;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "density", {
        /**
         * Gets or sets the display Density to use for the buttons and dropdown grid.
        */
        get: function () {
            return this.i.density;
        },
        set: function (v) {
            this.i.density = ensureEnum(ControlDisplayDensity_$type, v);
            this._a("density", enumToString(ControlDisplayDensity_$type, this.i.density));
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "actualDensity", {
        /**
         * Gets the actual display Density to use for the component.
        */
        get: function () {
            return this.i.ag;
        },
        set: function (v) {
            this.i.ag = ensureEnum(ControlDisplayDensity_$type, v);
            this._a("actualDensity", enumToString(ControlDisplayDensity_$type, this.i.ag));
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "dropDownButtonVisible", {
        /**
         * Gets or sets the visibility of the drop down button.
        */
        get: function () {
            return this.i.dropDownButtonVisible;
        },
        set: function (v) {
            this.i.dropDownButtonVisible = ensureBool(v);
            this._a("dropDownButtonVisible", this.i.dropDownButtonVisible);
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "focusBorderColor", {
        /**
         * Gets or sets the color to use the hovered background of the inputs in the group.
        */
        get: function () {
            return brushToString(this.i.hq);
        },
        set: function (v) {
            this.i.hq = stringToBrush(v);
            this._a("focusBorderColor", brushToString(this.i.hq));
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "actualFocusBorderColor", {
        /**
         * Gets the actual item border color.
        */
        get: function () {
            return brushToString(this.i.g4);
        },
        set: function (v) {
            this.i.g4 = stringToBrush(v);
            this._a("actualFocusBorderColor", brushToString(this.i.g4));
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "focusBorderWidth", {
        /**
         * Gets or sets the border width to use for the border of the item group when focused.
        */
        get: function () {
            return this.i.cl;
        },
        set: function (v) {
            this.i.cl = +v;
            this._a("focusBorderWidth", this.i.cl);
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "actualFocusBorderWidth", {
        /**
         * Gets the actual item border width.
        */
        get: function () {
            return this.i.b0;
        },
        set: function (v) {
            this.i.b0 = +v;
            this._a("actualFocusBorderWidth", this.i.b0);
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "focusUnderlineColor", {
        /**
         * Gets or sets the color to use for the underline element.
        */
        get: function () {
            return brushToString(this.i.hr);
        },
        set: function (v) {
            this.i.hr = stringToBrush(v);
            this._a("focusUnderlineColor", brushToString(this.i.hr));
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "actualFocusUnderlineColor", {
        /**
         * Gets the actual color to use for the underline element when focused.
        */
        get: function () {
            return brushToString(this.i.g5);
        },
        set: function (v) {
            this.i.g5 = stringToBrush(v);
            this._a("actualFocusUnderlineColor", brushToString(this.i.g5));
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "focusUnderlineOpacity", {
        /**
         * Gets or sets the color to use for the underline element.
        */
        get: function () {
            return this.i.cm;
        },
        set: function (v) {
            this.i.cm = +v;
            this._a("focusUnderlineOpacity", this.i.cm);
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "actualFocusUnderlineOpacity", {
        /**
         * Gets the actual opacity to use for the underline element when focused.
        */
        get: function () {
            return this.i.b1;
        },
        set: function (v) {
            this.i.b1 = +v;
            this._a("actualFocusUnderlineOpacity", this.i.b1);
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "focusUnderlineRippleOpacity", {
        /**
         * Gets or sets the opacity to use for the underline ripple element when focused.
        */
        get: function () {
            return this.i.cn;
        },
        set: function (v) {
            this.i.cn = +v;
            this._a("focusUnderlineRippleOpacity", this.i.cn);
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "actualFocusUnderlineRippleOpacity", {
        /**
         * Gets the actual opacity to use for the underline ripple element when focused.
        */
        get: function () {
            return this.i.b2;
        },
        set: function (v) {
            this.i.b2 = +v;
            this._a("actualFocusUnderlineRippleOpacity", this.i.b2);
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "hoverUnderlineColor", {
        /**
         * Gets or sets the color to use for the underline element.
        */
        get: function () {
            return brushToString(this.i.hs);
        },
        set: function (v) {
            this.i.hs = stringToBrush(v);
            this._a("hoverUnderlineColor", brushToString(this.i.hs));
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "actualHoverUnderlineColor", {
        /**
         * Gets the actual color to use for the underline element.
        */
        get: function () {
            return brushToString(this.i.g6);
        },
        set: function (v) {
            this.i.g6 = stringToBrush(v);
            this._a("actualHoverUnderlineColor", brushToString(this.i.g6));
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "hoverUnderlineOpacity", {
        /**
         * Gets or sets the color to use for the underline element.
        */
        get: function () {
            return this.i.co;
        },
        set: function (v) {
            this.i.co = +v;
            this._a("hoverUnderlineOpacity", this.i.co);
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "actualHoverUnderlineOpacity", {
        /**
         * Gets the actual opacity to use for the underline element when hovered.
        */
        get: function () {
            return this.i.b3;
        },
        set: function (v) {
            this.i.b3 = +v;
            this._a("actualHoverUnderlineOpacity", this.i.b3);
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "hoverUnderlineWidth", {
        /**
         * Gets or sets the width to use for the underline element when hovered.
        */
        get: function () {
            return this.i.cp;
        },
        set: function (v) {
            this.i.cp = +v;
            this._a("hoverUnderlineWidth", this.i.cp);
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "actualHoverUnderlineWidth", {
        /**
         * Gets the width to use for the underline element when hovered.
        */
        get: function () {
            return this.i.b4;
        },
        set: function (v) {
            this.i.b4 = +v;
            this._a("actualHoverUnderlineWidth", this.i.b4);
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "dataSource", {
        /**
         * Gets or sets the data to which to bind the combo box list. This can be some type of array or list, or it can
         * be an IDataSource instance.
        */
        get: function () {
            return this.i.itemsSource;
        },
        set: function (v) {
            this.i.itemsSource = v;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "actualDataSource", {
        /**
         * Gets the actual data source that is being used by the combo box list. If a collection was provided for the combo box data, an implicit LocalDataSource has been created, and this is available via this property.
        */
        get: function () {
            return this.i.actualDataSource;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "label", {
        /**
         * The text displayed in the label portion of the control.
        */
        get: function () {
            return this.i.ev;
        },
        set: function (v) {
            this.i.ev = v;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "labelTextColor", {
        /**
         * Gets or sets the color to use for the text.
        */
        get: function () {
            return brushToString(this.i.ht);
        },
        set: function (v) {
            this.i.ht = stringToBrush(v);
            this._a("labelTextColor", brushToString(this.i.ht));
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "actualLabelTextColor", {
        /**
         * Gets the actual color to use for the text color.
        */
        get: function () {
            return brushToString(this.i.g7);
        },
        set: function (v) {
            this.i.g7 = stringToBrush(v);
            this._a("actualLabelTextColor", brushToString(this.i.g7));
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "labelTextStyle", {
        /**
         * Gets or sets the font to use for the combobox.
        */
        get: function () {
            if (this.i.az == null) {
                return null;
            }
            return this.i.az.fontString;
        },
        set: function (v) {
            var fi = new FontInfo();
            fi.fontString = v;
            this.i.az = fi;
            this._a("labelTextStyle", this.i.az != null ? this.i.az.fontString : "");
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "actualLabelVisible", {
        /**
         * Gets or sets the visibility of the label.
        */
        get: function () {
            return this.i.actualLabelVisible;
        },
        set: function (v) {
            this.i.actualLabelVisible = ensureBool(v);
            this._a("actualLabelVisible", this.i.actualLabelVisible);
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "noMatchesFoundLabel", {
        /**
         * Gets or sets the text to display on the list when no suggested matches are found.
        */
        get: function () {
            return this.i.e1;
        },
        set: function (v) {
            this.i.e1 = v;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "actualNoMatchesFoundLabel", {
        /**
         * Gets the actual text to display on the list when no suggested matches are found.
        */
        get: function () {
            return this.i.actualNoMatchesFoundLabel;
        },
        set: function (v) {
            this.i.actualNoMatchesFoundLabel = v;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "noMatchesFoundLabelBackgroundColor", {
        /**
         * Gets or sets the color to use for the "no matches found" label.
        */
        get: function () {
            return brushToString(this.i.hu);
        },
        set: function (v) {
            this.i.hu = stringToBrush(v);
            this._a("noMatchesFoundLabelBackgroundColor", brushToString(this.i.hu));
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "actualNoMatchesFoundLabelBackgroundColor", {
        /**
         * Gets the actual color to use for the "no matches found" label.
        */
        get: function () {
            return brushToString(this.i.g8);
        },
        set: function (v) {
            this.i.g8 = stringToBrush(v);
            this._a("actualNoMatchesFoundLabelBackgroundColor", brushToString(this.i.g8));
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "noMatchesFoundLabelTextColor", {
        /**
         * Gets or sets the color to use for the "no matches found" label.
        */
        get: function () {
            return brushToString(this.i.hv);
        },
        set: function (v) {
            this.i.hv = stringToBrush(v);
            this._a("noMatchesFoundLabelTextColor", brushToString(this.i.hv));
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "actualNoMatchesFoundLabelTextColor", {
        /**
         * Gets the actual color to use for the "no matches found" label.
        */
        get: function () {
            return brushToString(this.i.g9);
        },
        set: function (v) {
            this.i.g9 = stringToBrush(v);
            this._a("actualNoMatchesFoundLabelTextColor", brushToString(this.i.g9));
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "noMatchesFoundLabelTextStyle", {
        /**
         * Gets or sets the font to use for the combobox.
        */
        get: function () {
            if (this.i.a0 == null) {
                return null;
            }
            return this.i.a0.fontString;
        },
        set: function (v) {
            var fi = new FontInfo();
            fi.fontString = v;
            this.i.a0 = fi;
            this._a("noMatchesFoundLabelTextStyle", this.i.a0 != null ? this.i.a0.fontString : "");
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "placeholder", {
        /**
         * Placeholder text which gives the user a hint about what kind of text is expected.
        */
        get: function () {
            return this.i.e6;
        },
        set: function (v) {
            this.i.e6 = v;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "rowSeparatorsVisible", {
        /**
         * Gets or sets the visibility of the row separators in the drop down.
        */
        get: function () {
            return this.i.rowSeparatorsVisible;
        },
        set: function (v) {
            this.i.rowSeparatorsVisible = ensureBool(v);
            this._a("rowSeparatorsVisible", this.i.rowSeparatorsVisible);
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "textColor", {
        /**
         * Gets or sets the color to use for the text.
        */
        get: function () {
            return brushToString(this.i.hw);
        },
        set: function (v) {
            this.i.hw = stringToBrush(v);
            this._a("textColor", brushToString(this.i.hw));
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "actualTextColor", {
        /**
         * Gets the actual color to use for the text color.
        */
        get: function () {
            return brushToString(this.i.ha);
        },
        set: function (v) {
            this.i.ha = stringToBrush(v);
            this._a("actualTextColor", brushToString(this.i.ha));
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "textStyle", {
        /**
         * Gets or sets the font to use for the combobox.
        */
        get: function () {
            if (this.i.a1 == null) {
                return null;
            }
            return this.i.a1.fontString;
        },
        set: function (v) {
            var fi = new FontInfo();
            fi.fontString = v;
            this.i.a1 = fi;
            this._a("textStyle", this.i.a1 != null ? this.i.a1.fontString : "");
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "underlineColor", {
        /**
         * Gets or sets the color to use for the underline element.
        */
        get: function () {
            return brushToString(this.i.hx);
        },
        set: function (v) {
            this.i.hx = stringToBrush(v);
            this._a("underlineColor", brushToString(this.i.hx));
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "actualUnderlineColor", {
        /**
         * Gets the actual color to use for the underline element.
        */
        get: function () {
            return brushToString(this.i.hb);
        },
        set: function (v) {
            this.i.hb = stringToBrush(v);
            this._a("actualUnderlineColor", brushToString(this.i.hb));
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "underlineOpacity", {
        /**
         * Gets or sets the color to use for the underline element.
        */
        get: function () {
            return this.i.cq;
        },
        set: function (v) {
            this.i.cq = +v;
            this._a("underlineOpacity", this.i.cq);
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "actualUnderlineOpacity", {
        /**
         * Gets the actual opacity to use for the underline element.
        */
        get: function () {
            return this.i.b5;
        },
        set: function (v) {
            this.i.b5 = +v;
            this._a("actualUnderlineOpacity", this.i.b5);
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "underlineRippleColor", {
        /**
         * Gets or sets the color to use for the underline ripple element.
        */
        get: function () {
            return brushToString(this.i.hy);
        },
        set: function (v) {
            this.i.hy = stringToBrush(v);
            this._a("underlineRippleColor", brushToString(this.i.hy));
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "actualUnderlineRippleColor", {
        /**
         * Gets the actual color to use for the underline ripple element.
        */
        get: function () {
            return brushToString(this.i.hc);
        },
        set: function (v) {
            this.i.hc = stringToBrush(v);
            this._a("actualUnderlineRippleColor", brushToString(this.i.hc));
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "underlineRippleOpacity", {
        /**
         * Gets or sets the opacity to use for the underline ripple element.
        */
        get: function () {
            return this.i.cr;
        },
        set: function (v) {
            this.i.cr = +v;
            this._a("underlineRippleOpacity", this.i.cr);
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "actualUnderlineRippleOpacity", {
        /**
         * Gets the actual opacity to use for the underline ripple element.
        */
        get: function () {
            return this.i.b6;
        },
        set: function (v) {
            this.i.b6 = +v;
            this._a("actualUnderlineRippleOpacity", this.i.b6);
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "underlineRippleWidth", {
        /**
         * Gets or sets the width to use for the underline element.
        */
        get: function () {
            return this.i.cs;
        },
        set: function (v) {
            this.i.cs = +v;
            this._a("underlineRippleWidth", this.i.cs);
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "actualUnderlineRippleWidth", {
        /**
         * Gets the actual width to use for the underline element.
        */
        get: function () {
            return this.i.b7;
        },
        set: function (v) {
            this.i.b7 = +v;
            this._a("actualUnderlineRippleWidth", this.i.b7);
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "underlineWidth", {
        /**
         * Gets or sets the width to use for the underline element.
        */
        get: function () {
            return this.i.ct;
        },
        set: function (v) {
            this.i.ct = +v;
            this._a("underlineWidth", this.i.ct);
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "actualUnderlineWidth", {
        /**
         * Gets the actual width to use for the underline element.
        */
        get: function () {
            return this.i.b8;
        },
        set: function (v) {
            this.i.b8 = +v;
            this._a("actualUnderlineWidth", this.i.b8);
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "allowFilter", {
        /**
         * Whether to allow filtering of the combo
        */
        get: function () {
            return this.i.a7;
        },
        set: function (v) {
            this.i.a7 = ensureBool(v);
            this._a("allowFilter", this.i.a7);
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "sortMode", {
        /**
         * Returns/sets the action to take when a column header is clicked.
        */
        get: function () {
            return this.i.x;
        },
        set: function (v) {
            this.i.x = ensureEnum(SortMode_$type, v);
            this._a("sortMode", enumToString(SortMode_$type, this.i.x));
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "textField", {
        /**
         * Determines the name of the field in the data source will be used as the Text of the MultiColumnComboBox.
        */
        get: function () {
            return this.i.fe;
        },
        set: function (v) {
            this.i.fe = v;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "text", {
        /**
         * The text displayed in the edit portion of the control.
        */
        get: function () {
            return this.i.fc;
        },
        set: function (v) {
            this.i.fc = v;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "valueField", {
        /**
         * Sets or gets the user provided primary key to assume for the data. Certain functionality of the combo (such as the the current Value) requires
         * a way to uniquely identify items in order to work correctly.
         * If a primary key cannot be inferred from the data source, you may need to provide one here.
        */
        get: function () {
            return this.i.j;
        },
        set: function (v) {
            this.i.j = v;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "actualValueField", {
        /**
         * Gets the actual name of the field in the data source will be used as the Value of the MultiColumnComboBox.
        */
        get: function () {
            return this.i.e;
        },
        set: function (v) {
            this.i.e = v;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "value", {
        /**
         * Gets or sets the Value of the combo.
         * When the user selects an item from, the value is set based on the specified ValueField field. If not ValueField is specified, then the first field in the data source is used.
         * When the user enters text into the combo, the list is searched based on the TextField field. If a matching string is found, the Value of the combo is the value of the ValueField field in the same row.
         * If the text entered in the combo does not match any item on the list, then the value will return null.
        */
        get: function () {
            return this.i.c1;
        },
        set: function (v) {
            this.i.c1 = v;
        },
        enumerable: true,
        configurable: true
    });
    IgcMultiColumnComboBoxComponent.prototype.findByName = function (name) {
        return null;
    };
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "hasUserValues", {
        get: function () {
            return this._hasUserValues;
        },
        enumerable: true,
        configurable: true
    });
    IgcMultiColumnComboBoxComponent.prototype.__m = function (propertyName) {
        if (!this._inStyling) {
            this._hasUserValues.add(propertyName);
        }
    };
    IgcMultiColumnComboBoxComponent.prototype._styling = function (container, component, parent) {
        if (this._inStyling) {
            return;
        }
        this._inStyling = true;
        this._stylingContainer = container;
        this._stylingParent = component;
        var genericPrefix = "";
        var typeName = this.i.$type.name;
        if (typeName.indexOf("Xam") === 0) {
            typeName = typeName.substring(3);
        }
        genericPrefix = toSpinal("MultiColumnComboBoxComponent");
        var additionalPrefixes = [];
        var prefix = toSpinal(typeName);
        additionalPrefixes.push(prefix + "-");
        var 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);
            }
            var basePrefix = toSpinal(typeName);
            additionalPrefixes.push(basePrefix + "-");
            b = b.baseType;
        }
        if (parent) {
            var parentTypeName = parent.i.$type.name;
            if (parentTypeName.indexOf("Xam") === 0) {
                parentTypeName = parentTypeName.substring(3);
            }
            var 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;
    };
    /**
 * Programmatically closes the list.

*/
    IgcMultiColumnComboBoxComponent.prototype.closeUp = function () {
        this.i.closeUp();
    };
    /**
     * Programmatically drops down the list.
    
    */
    IgcMultiColumnComboBoxComponent.prototype.dropDown = function () {
        this.i.dropDown();
    };
    /**
     * Selects all the text in the combo input area.
    
    */
    IgcMultiColumnComboBoxComponent.prototype.select = function () {
        this.i.select();
    };
    /**
     * Exports visual information about the current state of the grid.
    
    */
    IgcMultiColumnComboBoxComponent.prototype.exportVisualModel = function () {
        var iv = this.i.cw();
        return (iv);
    };
    /**
     * Returns a serialized copy of the exported visual model
    
    */
    IgcMultiColumnComboBoxComponent.prototype.exportSerializedVisualModel = function () {
        var iv = this.i.eh();
        return (iv);
    };
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "gotFocus", {
        get: function () {
            return this._gotFocus;
        },
        set: function (ev) {
            var _this = this;
            if (this._gotFocus_wrapped !== null) {
                this.i.gotFocus = delegateRemove(this.i.gotFocus, this._gotFocus_wrapped);
                this._gotFocus_wrapped = null;
                this._gotFocus = null;
            }
            this._gotFocus = ev;
            this._gotFocus_wrapped = function (o, e) {
                var outerArgs = new IgcGotFocusEventArgs();
                outerArgs._provideImplementation(e);
                if (_this.beforeGotFocus) {
                    _this.beforeGotFocus(_this, outerArgs);
                }
                if (_this._gotFocus) {
                    _this._gotFocus(_this, outerArgs);
                }
            };
            this.i.gotFocus = delegateCombine(this.i.gotFocus, this._gotFocus_wrapped);
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "lostFocus", {
        get: function () {
            return this._lostFocus;
        },
        set: function (ev) {
            var _this = this;
            if (this._lostFocus_wrapped !== null) {
                this.i.lostFocus = delegateRemove(this.i.lostFocus, this._lostFocus_wrapped);
                this._lostFocus_wrapped = null;
                this._lostFocus = null;
            }
            this._lostFocus = ev;
            this._lostFocus_wrapped = function (o, e) {
                var outerArgs = new IgcLostFocusEventArgs();
                outerArgs._provideImplementation(e);
                if (_this.beforeLostFocus) {
                    _this.beforeLostFocus(_this, outerArgs);
                }
                if (_this._lostFocus) {
                    _this._lostFocus(_this, outerArgs);
                }
            };
            this.i.lostFocus = delegateCombine(this.i.lostFocus, this._lostFocus_wrapped);
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "textChanged", {
        get: function () {
            return this._textChanged;
        },
        set: function (ev) {
            var _this = this;
            if (this._textChanged_wrapped !== null) {
                this.i.textChanged = delegateRemove(this.i.textChanged, this._textChanged_wrapped);
                this._textChanged_wrapped = null;
                this._textChanged = null;
            }
            this._textChanged = ev;
            this._textChanged_wrapped = function (o, e) {
                var outerArgs = new IgcMultiColumnComboBoxTextChangedEventArgs();
                outerArgs._provideImplementation(e);
                if (_this.beforeTextChanged) {
                    _this.beforeTextChanged(_this, outerArgs);
                }
                if (_this._textChanged) {
                    _this._textChanged(_this, outerArgs);
                }
            };
            this.i.textChanged = delegateCombine(this.i.textChanged, this._textChanged_wrapped);
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "valueChanged", {
        get: function () {
            return this._valueChanged;
        },
        set: function (ev) {
            var _this = this;
            if (this._valueChanged_wrapped !== null) {
                this.i.valueChanged = delegateRemove(this.i.valueChanged, this._valueChanged_wrapped);
                this._valueChanged_wrapped = null;
                this._valueChanged = null;
            }
            this._valueChanged = ev;
            this._valueChanged_wrapped = function (o, e) {
                var outerArgs = new IgcMultiColumnComboBoxValueChangedEventArgs();
                outerArgs._provideImplementation(e);
                if (_this.beforeValueChanged) {
                    _this.beforeValueChanged(_this, outerArgs);
                }
                if (_this._valueChanged) {
                    _this._valueChanged(_this, outerArgs);
                }
            };
            this.i.valueChanged = delegateCombine(this.i.valueChanged, this._valueChanged_wrapped);
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "keyDown", {
        get: function () {
            return this._keyDown;
        },
        set: function (ev) {
            var _this = this;
            if (this._keyDown_wrapped !== null) {
                this.i.keyDown = delegateRemove(this.i.keyDown, this._keyDown_wrapped);
                this._keyDown_wrapped = null;
                this._keyDown = null;
            }
            this._keyDown = ev;
            this._keyDown_wrapped = function (o, e) {
                var outerArgs = new IgcKeyEventArgs();
                outerArgs._provideImplementation(e);
                if (_this.beforeKeyDown) {
                    _this.beforeKeyDown(_this, outerArgs);
                }
                if (_this._keyDown) {
                    _this._keyDown(_this, outerArgs);
                }
            };
            this.i.keyDown = delegateCombine(this.i.keyDown, this._keyDown_wrapped);
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "change", {
        get: function () {
            return this._change;
        },
        set: function (ev) {
            var _this = this;
            if (this._change_wrapped !== null) {
                this.i.change = delegateRemove(this.i.change, this._change_wrapped);
                this._change_wrapped = null;
                this._change = null;
            }
            this._change = ev;
            this._change_wrapped = function (o, e) {
                var outerArgs = new IgcInputChangeEventArgs();
                outerArgs._provideImplementation(e);
                if (_this.beforeChange) {
                    _this.beforeChange(_this, outerArgs);
                }
                if (_this._change) {
                    _this._change(_this, outerArgs);
                }
            };
            this.i.change = delegateCombine(this.i.change, this._change_wrapped);
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgcMultiColumnComboBoxComponent.prototype, "changing", {
        get: function () {
            return this._changing;
        },
        set: function (ev) {
            var _this = this;
            if (this._changing_wrapped !== null) {
                this.i.changing = delegateRemove(this.i.changing, this._changing_wrapped);
                this._changing_wrapped = null;
                this._changing = null;
            }
            this._changing = ev;
            this._changing_wrapped = function (o, e) {
                var outerArgs = new IgcInputChangeEventArgs();
                outerArgs._provideImplementation(e);
                if (_this.beforeChanging) {
                    _this.beforeChanging(_this, outerArgs);
                }
                if (_this._changing) {
                    _this._changing(_this, outerArgs);
                }
            };
            this.i.changing = delegateCombine(this.i.changing, this._changing_wrapped);
        },
        enumerable: true,
        configurable: true
    });
    IgcMultiColumnComboBoxComponent._observedAttributesIgcMultiColumnComboBoxComponent = null;
    IgcMultiColumnComboBoxComponent.htmlTagName = "igc-multi-column-combo-box";
    IgcMultiColumnComboBoxComponent._isElementRegistered = false;
    return IgcMultiColumnComboBoxComponent;
}(IgcHTMLElement));
export { IgcMultiColumnComboBoxComponent };
//# sourceMappingURL=igc-multi-column-combo-box-component.js.map
