UNPKG

ng-select

Version:
1,094 lines 74.5 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, HostListener, Input, Output, EventEmitter, ViewChild, ViewEncapsulation, forwardRef, ElementRef, ContentChild, TemplateRef } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; import { SelectDropdownComponent } from './select-dropdown.component'; import { OptionList } from './option-list'; /** @type {?} */ export var SELECT_VALUE_ACCESSOR = { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef((/** * @return {?} */ function () { return SelectComponent; })), multi: true }; var SelectComponent = /** @class */ (function () { function SelectComponent(hostElement) { this.hostElement = hostElement; // Data input. this.options = []; // Functionality settings. this.allowClear = false; this.disabled = false; this.multiple = false; this.noFilter = 0; // Text settings. this.notFoundMsg = 'No results found'; this.placeholder = ''; this.filterPlaceholder = ''; this.label = ''; // Output events. this.opened = new EventEmitter(); this.closed = new EventEmitter(); this.selected = new EventEmitter(); this.deselected = new EventEmitter(); this.focus = new EventEmitter(); this.blur = new EventEmitter(); this.noOptionsFound = new EventEmitter(); this.filterInputChanged = new EventEmitter(); this._value = []; this.optionList = new OptionList([]); // View state variables. this.hasFocus = false; this.isOpen = false; this.isBelow = true; this.filterEnabled = true; this.filterInputWidth = 1; this.isDisabled = false; this.placeholderView = ''; this.clearClicked = false; this.selectContainerClicked = false; this.optionListClicked = false; this.optionClicked = false; this.onChange = (/** * @param {?} _ * @return {?} */ function (_) { }); this.onTouched = (/** * @return {?} */ function () { }); /** * Keys. * */ this.KEYS = { BACKSPACE: 8, TAB: 9, ENTER: 13, ESC: 27, SPACE: 32, UP: 38, DOWN: 40 }; } /** Event handlers. **/ /** * Event handlers. * * @return {?} */ SelectComponent.prototype.ngOnInit = /** * Event handlers. * * @return {?} */ function () { this.placeholderView = this.placeholder; }; /** * @param {?} changes * @return {?} */ SelectComponent.prototype.ngOnChanges = /** * @param {?} changes * @return {?} */ function (changes) { this.handleInputChanges(changes); }; /** * @return {?} */ SelectComponent.prototype.ngAfterViewInit = /** * @return {?} */ function () { this.updateState(); }; /** * @return {?} */ SelectComponent.prototype.onWindowBlur = /** * @return {?} */ function () { this._blur(); }; /** * @return {?} */ SelectComponent.prototype.onWindowClick = /** * @return {?} */ function () { if (!this.selectContainerClicked && (!this.optionListClicked || (this.optionListClicked && this.optionClicked))) { this.closeDropdown(this.optionClicked); if (!this.optionClicked) { this._blur(); } } this.clearClicked = false; this.selectContainerClicked = false; this.optionListClicked = false; this.optionClicked = false; }; /** * @return {?} */ SelectComponent.prototype.onWindowResize = /** * @return {?} */ function () { this.updateWidth(); }; /** * @param {?} event * @return {?} */ SelectComponent.prototype.onSelectContainerClick = /** * @param {?} event * @return {?} */ function (event) { this.selectContainerClicked = true; if (!this.clearClicked) { this.toggleDropdown(); } }; /** * @return {?} */ SelectComponent.prototype.onSelectContainerFocus = /** * @return {?} */ function () { this._focus(); }; /** * @param {?} event * @return {?} */ SelectComponent.prototype.onSelectContainerKeydown = /** * @param {?} event * @return {?} */ function (event) { this.handleSelectContainerKeydown(event); }; /** * @return {?} */ SelectComponent.prototype.onOptionsListClick = /** * @return {?} */ function () { this.optionListClicked = true; }; /** * @param {?} option * @return {?} */ SelectComponent.prototype.onDropdownOptionClicked = /** * @param {?} option * @return {?} */ function (option) { this.optionClicked = true; this.multiple ? this.toggleSelectOption(option) : this.selectOption(option); }; /** * @return {?} */ SelectComponent.prototype.onSingleFilterClick = /** * @return {?} */ function () { this.selectContainerClicked = true; }; /** * @return {?} */ SelectComponent.prototype.onSingleFilterFocus = /** * @return {?} */ function () { this._focus(); }; /** * @param {?} term * @return {?} */ SelectComponent.prototype.onFilterInput = /** * @param {?} term * @return {?} */ function (term) { this.filterInputChanged.emit(term); this.filter(term); }; /** * @param {?} event * @return {?} */ SelectComponent.prototype.onSingleFilterKeydown = /** * @param {?} event * @return {?} */ function (event) { this.handleSingleFilterKeydown(event); }; /** * @param {?} event * @return {?} */ SelectComponent.prototype.onMultipleFilterKeydown = /** * @param {?} event * @return {?} */ function (event) { this.handleMultipleFilterKeydown(event); }; /** * @return {?} */ SelectComponent.prototype.onMultipleFilterFocus = /** * @return {?} */ function () { this._focus(); }; /** * @param {?} event * @return {?} */ SelectComponent.prototype.onClearSelectionClick = /** * @param {?} event * @return {?} */ function (event) { this.clearClicked = true; this.clearSelection(); this.closeDropdown(true); }; /** * @param {?} option * @return {?} */ SelectComponent.prototype.onDeselectOptionClick = /** * @param {?} option * @return {?} */ function (option) { this.clearClicked = true; this.deselectOption(option); }; /** API. **/ // TODO fix issues with global click/key handler that closes the dropdown. /** * API. * * @return {?} */ // TODO fix issues with global click/key handler that closes the dropdown. SelectComponent.prototype.open = /** * API. * * @return {?} */ // TODO fix issues with global click/key handler that closes the dropdown. function () { this.openDropdown(); }; /** * @return {?} */ SelectComponent.prototype.close = /** * @return {?} */ function () { this.closeDropdown(false); }; /** * @return {?} */ SelectComponent.prototype.clear = /** * @return {?} */ function () { this.clearSelection(); }; /** * @param {?} value * @return {?} */ SelectComponent.prototype.select = /** * @param {?} value * @return {?} */ function (value) { this.writeValue(value); }; /** ControlValueAccessor interface methods. **/ /** * ControlValueAccessor interface methods. * * @param {?} value * @return {?} */ SelectComponent.prototype.writeValue = /** * ControlValueAccessor interface methods. * * @param {?} value * @return {?} */ function (value) { this.value = value; }; /** * @param {?} fn * @return {?} */ SelectComponent.prototype.registerOnChange = /** * @param {?} fn * @return {?} */ function (fn) { this.onChange = fn; }; /** * @param {?} fn * @return {?} */ SelectComponent.prototype.registerOnTouched = /** * @param {?} fn * @return {?} */ function (fn) { this.onTouched = fn; }; /** * @param {?} isDisabled * @return {?} */ SelectComponent.prototype.setDisabledState = /** * @param {?} isDisabled * @return {?} */ function (isDisabled) { this.disabled = isDisabled; }; /** Input change handling. **/ /** * Input change handling. * * @private * @param {?} changes * @return {?} */ SelectComponent.prototype.handleInputChanges = /** * Input change handling. * * @private * @param {?} changes * @return {?} */ function (changes) { /** @type {?} */ var optionsChanged = changes.hasOwnProperty('options'); /** @type {?} */ var noFilterChanged = changes.hasOwnProperty('noFilter'); /** @type {?} */ var placeholderChanged = changes.hasOwnProperty('placeholder'); if (optionsChanged) { this.updateOptionList(changes.options.currentValue); this.updateState(); } if (optionsChanged || noFilterChanged) { this.updateFilterEnabled(); } if (placeholderChanged) { this.updateState(); } }; /** * @private * @param {?} options * @return {?} */ SelectComponent.prototype.updateOptionList = /** * @private * @param {?} options * @return {?} */ function (options) { this.optionList = new OptionList(options); this.optionList.value = this._value; }; /** * @private * @return {?} */ SelectComponent.prototype.updateFilterEnabled = /** * @private * @return {?} */ function () { this.filterEnabled = this.optionList.options.length >= this.noFilter; }; Object.defineProperty(SelectComponent.prototype, "value", { /** Value. **/ get: /** * Value. * * @return {?} */ function () { return this.multiple ? this._value : this._value[0]; }, set: /** * @param {?} v * @return {?} */ function (v) { if (typeof v === 'undefined' || v === null || v === '') { v = []; } else if (typeof v === 'string') { v = [v]; } else if (!Array.isArray(v)) { throw new TypeError('Value must be a string or an array.'); } this.optionList.value = v; this._value = v; this.updateState(); }, enumerable: true, configurable: true }); /** * @private * @return {?} */ SelectComponent.prototype.valueChanged = /** * @private * @return {?} */ function () { this._value = this.optionList.value; this.updateState(); this.onChange(this.value); }; /** * @private * @return {?} */ SelectComponent.prototype.updateState = /** * @private * @return {?} */ function () { var _this = this; this.placeholderView = this.optionList.hasSelected ? '' : this.placeholder; setTimeout((/** * @return {?} */ function () { _this.updateFilterWidth(); })); }; /** Select. **/ /** * Select. * * @private * @param {?} option * @return {?} */ SelectComponent.prototype.selectOption = /** * Select. * * @private * @param {?} option * @return {?} */ function (option) { if (!option.selected && !option.disabled) { this.optionList.select(option, this.multiple); this.valueChanged(); this.selected.emit(option.wrappedOption); } }; /** * @private * @param {?} option * @return {?} */ SelectComponent.prototype.deselectOption = /** * @private * @param {?} option * @return {?} */ function (option) { var _this = this; if (option.selected) { this.optionList.deselect(option); this.valueChanged(); this.deselected.emit(option.wrappedOption); setTimeout((/** * @return {?} */ function () { if (_this.multiple) { _this.updatePosition(); _this.optionList.highlight(); if (_this.isOpen) { _this.dropdown.moveHighlightedIntoView(); } } })); } }; /** * @private * @return {?} */ SelectComponent.prototype.clearSelection = /** * @private * @return {?} */ function () { /** @type {?} */ var selection = this.optionList.selection; if (selection.length > 0) { this.optionList.clearSelection(); this.valueChanged(); if (selection.length === 1) { this.deselected.emit(selection[0].wrappedOption); } else { this.deselected.emit(selection.map((/** * @param {?} option * @return {?} */ function (option) { return option.wrappedOption; }))); } } }; /** * @private * @param {?} option * @return {?} */ SelectComponent.prototype.toggleSelectOption = /** * @private * @param {?} option * @return {?} */ function (option) { option.selected ? this.deselectOption(option) : this.selectOption(option); }; /** * @private * @return {?} */ SelectComponent.prototype.selectHighlightedOption = /** * @private * @return {?} */ function () { /** @type {?} */ var option = this.optionList.highlightedOption; if (option !== null) { this.selectOption(option); this.closeDropdown(true); } }; /** * @private * @return {?} */ SelectComponent.prototype.deselectLast = /** * @private * @return {?} */ function () { /** @type {?} */ var sel = this.optionList.selection; if (sel.length > 0) { /** @type {?} */ var option = sel[sel.length - 1]; this.deselectOption(option); this.setMultipleFilterInput(option.label + ' '); } }; /** Dropdown. **/ /** * Dropdown. * * @private * @return {?} */ SelectComponent.prototype.toggleDropdown = /** * Dropdown. * * @private * @return {?} */ function () { if (!this.isDisabled) { this.isOpen ? this.closeDropdown(true) : this.openDropdown(); } }; /** * @private * @return {?} */ SelectComponent.prototype.openDropdown = /** * @private * @return {?} */ function () { var _this = this; if (!this.isOpen) { this.isOpen = true; this.updateWidth(); setTimeout((/** * @return {?} */ function () { _this.updatePosition(); if (_this.multiple && _this.filterEnabled) { _this.filterInput.nativeElement.focus(); } _this.opened.emit(null); })); } }; /** * @private * @param {?} focus * @return {?} */ SelectComponent.prototype.closeDropdown = /** * @private * @param {?} focus * @return {?} */ function (focus) { if (this.isOpen) { this.clearFilterInput(); this.updateFilterWidth(); this.isOpen = false; if (focus) { this._focusSelectContainer(); } this.closed.emit(null); } }; /** Filter. **/ /** * Filter. * * @private * @param {?} term * @return {?} */ SelectComponent.prototype.filter = /** * Filter. * * @private * @param {?} term * @return {?} */ function (term) { var _this = this; if (this.multiple) { if (!this.isOpen) { this.openDropdown(); } this.updateFilterWidth(); } setTimeout((/** * @return {?} */ function () { /** @type {?} */ var hasShown = _this.optionList.filter(term); if (!hasShown) { _this.noOptionsFound.emit(term); } })); }; /** * @private * @return {?} */ SelectComponent.prototype.clearFilterInput = /** * @private * @return {?} */ function () { if (this.multiple && this.filterEnabled) { this.filterInput.nativeElement.value = ''; } }; /** * @private * @param {?} value * @return {?} */ SelectComponent.prototype.setMultipleFilterInput = /** * @private * @param {?} value * @return {?} */ function (value) { if (this.filterEnabled) { this.filterInput.nativeElement.value = value; } }; /** * @private * @param {?} event * @return {?} */ SelectComponent.prototype.handleSelectContainerKeydown = /** * @private * @param {?} event * @return {?} */ function (event) { var _this = this; /** @type {?} */ var key = event.which; if (this.isOpen) { if (key === this.KEYS.ESC || (key === this.KEYS.UP && event.altKey)) { this.closeDropdown(true); } else if (key === this.KEYS.TAB) { this.closeDropdown(event.shiftKey); this._blur(); } else if (key === this.KEYS.ENTER) { this.selectHighlightedOption(); } else if (key === this.KEYS.UP) { this.optionList.highlightPreviousOption(); this.dropdown.moveHighlightedIntoView(); if (!this.filterEnabled) { event.preventDefault(); } } else if (key === this.KEYS.DOWN) { this.optionList.highlightNextOption(); this.dropdown.moveHighlightedIntoView(); if (!this.filterEnabled) { event.preventDefault(); } } } else { // DEPRICATED --> SPACE if (key === this.KEYS.ENTER || key === this.KEYS.SPACE || (key === this.KEYS.DOWN && event.altKey)) { /* FIREFOX HACK: * * The setTimeout is added to prevent the enter keydown event * to be triggered for the filter input field, which causes * the dropdown to be closed again. */ setTimeout((/** * @return {?} */ function () { _this.openDropdown(); })); } else if (key === this.KEYS.TAB) { this._blur(); } } }; /** * @private * @param {?} event * @return {?} */ SelectComponent.prototype.handleMultipleFilterKeydown = /** * @private * @param {?} event * @return {?} */ function (event) { /** @type {?} */ var key = event.which; if (key === this.KEYS.BACKSPACE) { if (this.optionList.hasSelected && this.filterEnabled && this.filterInput.nativeElement.value === '') { this.deselectLast(); } } }; /** * @private * @param {?} event * @return {?} */ SelectComponent.prototype.handleSingleFilterKeydown = /** * @private * @param {?} event * @return {?} */ function (event) { /** @type {?} */ var key = event.which; if (key === this.KEYS.ESC || key === this.KEYS.TAB || key === this.KEYS.UP || key === this.KEYS.DOWN || key === this.KEYS.ENTER) { this.handleSelectContainerKeydown(event); } }; /** View. **/ /** * View. * * @return {?} */ SelectComponent.prototype._blur = /** * View. * * @return {?} */ function () { if (this.hasFocus) { this.hasFocus = false; this.onTouched(); this.blur.emit(null); } }; /** * @return {?} */ SelectComponent.prototype._focus = /** * @return {?} */ function () { if (!this.hasFocus) { this.hasFocus = true; this.focus.emit(null); } }; /** * @return {?} */ SelectComponent.prototype._focusSelectContainer = /** * @return {?} */ function () { this.selectionSpan.nativeElement.focus(); }; /** * @private * @return {?} */ SelectComponent.prototype.updateWidth = /** * @private * @return {?} */ function () { this.width = this.selectionSpan.nativeElement.getBoundingClientRect().width; }; /** * @private * @return {?} */ SelectComponent.prototype.updatePosition = /** * @private * @return {?} */ function () { if (typeof this.dropdown !== 'undefined') { /** @type {?} */ var hostRect = this.hostElement.nativeElement.getBoundingClientRect(); /** @type {?} */ var spanRect = this.selectionSpan.nativeElement.getBoundingClientRect(); /** @type {?} */ var dropRect = this.dropdown.hostElement.nativeElement.firstElementChild.getBoundingClientRect(); /** @type {?} */ var windowHeight = window.innerHeight; /** @type {?} */ var top_1 = spanRect.top - hostRect.top; /** @type {?} */ var bottom = hostRect.bottom + dropRect.height; this.isBelow = bottom < windowHeight; this.left = spanRect.left - hostRect.left; this.top = this.isBelow ? top_1 + spanRect.height : top_1 - dropRect.height; } }; /** * @private * @return {?} */ SelectComponent.prototype.updateFilterWidth = /** * @private * @return {?} */ function () { if (typeof this.filterInput !== 'undefined') { /** @type {?} */ var value = this.filterInput.nativeElement.value; this.filterInputWidth = value.length === 0 ? 1 + this.placeholderView.length * 10 : 1 + value.length * 10; } }; SelectComponent.decorators = [ { type: Component, args: [{ selector: 'ng-select', template: "<label\n *ngIf=\"label !== ''\">\n {{label}}\n</label>\n<div\n #selection\n [attr.tabindex]=\"disabled ? null : 0\"\n [ngClass]=\"{'open': isOpen, 'focus': hasFocus, 'below': isBelow, 'above': !isBelow, 'disabled': disabled}\"\n (click)=\"onSelectContainerClick($event)\"\n (focus)=\"onSelectContainerFocus()\"\n (keydown)=\"onSelectContainerKeydown($event)\">\n\n <div class=\"single\"\n *ngIf=\"!multiple\">\n <div class=\"value\"\n *ngIf=\"optionList.hasSelected\">\n <ng-container *ngTemplateOutlet=\"optionTemplate; context:{option: optionList.selection[0].wrappedOption, onDeselectOptionClick: onDeselectOptionClick}\"></ng-container>\n <span *ngIf=\"!optionTemplate\">{{optionList.selection[0].label}}</span>\n </div>\n <div class=\"placeholder\"\n *ngIf=\"!optionList.hasSelected\">\n {{placeholderView}}\n </div>\n <div class=\"clear\"\n *ngIf=\"allowClear && optionList.hasSelected\"\n (click)=\"onClearSelectionClick($event)\">\n &#x2715;\n </div>\n <div class=\"toggle\"\n *ngIf=\"isOpen\">\n &#x25B2;\n </div>\n <div class=\"toggle\"\n *ngIf=\"!isOpen\">\n &#x25BC;\n </div>\n </div>\n\n <div class=\"multiple\"\n *ngIf=\"multiple\">\n <div class=\"option\"\n *ngFor=\"let option of optionList.selection\">\n <span class=\"deselect-option\"\n (click)=onDeselectOptionClick(option)>\n &#x2715;\n </span>\n {{option.label}}\n </div>\n <div class=\"placeholder\"\n *ngIf=\"!filterEnabled && !optionList.hasSelected\">\n {{placeholderView}}\n </div>\n <input\n *ngIf=\"filterEnabled\"\n #filterInput\n autocomplete=\"off\"\n tabindex=\"-1\"\n [placeholder]=\"placeholderView\"\n [ngStyle]=\"{'width.px': filterInputWidth}\"\n (input)=\"onFilterInput($event.target.value)\"\n (keydown)=\"onMultipleFilterKeydown($event)\"\n (focus)=\"onMultipleFilterFocus()\"/>\n </div>\n\n</div>\n<select-dropdown\n *ngIf=\"isOpen\"\n #dropdown\n [multiple]=\"multiple\"\n [optionList]=\"optionList\"\n [notFoundMsg]=\"notFoundMsg\"\n [highlightColor]=\"highlightColor\"\n [highlightTextColor]=\"highlightTextColor\"\n [filterEnabled]=\"filterEnabled\"\n [placeholder]=\"filterPlaceholder\"\n [isBelow]=\"isBelow\"\n [width]=\"width\"\n [top]=\"top\"\n [left]=\"left\"\n [optionTemplate]=\"optionTemplate\"\n (optionClicked)=\"onDropdownOptionClicked($event)\"\n (optionsListClick)=\"onOptionsListClick()\"\n (singleFilterClick)=\"onSingleFilterClick()\"\n (singleFilterFocus)=\"onSingleFilterFocus()\"\n (singleFilterInput)=\"onFilterInput($event)\"\n (singleFilterKeydown)=\"onSingleFilterKeydown($event)\">\n</select-dropdown>\n", providers: [SELECT_VALUE_ACCESSOR], encapsulation: ViewEncapsulation.None, styles: ["ng-select{display:inline-block;margin:0;position:relative;vertical-align:middle;width:100%}ng-select *{box-sizing:border-box}ng-select>div{border:1px solid #ddd;box-sizing:border-box;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}ng-select>div.disabled{background-color:#eee;color:#aaa;cursor:default;pointer-events:none}ng-select>div>div.single{display:flex;height:30px;width:100%}ng-select>div>div.single>div.placeholder,ng-select>div>div.single>div.value{flex:1;line-height:30px;overflow:hidden;padding:0 10px;white-space:nowrap}ng-select>div>div.single>div.placeholder{color:#757575}ng-select>div>div.single>div.clear,ng-select>div>div.single>div.toggle{color:#aaa;line-height:30px;text-align:center;width:30px}ng-select>div>div.single>div.clear:hover,ng-select>div>div.single>div.toggle:hover{background-color:#ececec}ng-select>div>div.single>div.clear{font-size:18px}ng-select>div>div.single>div.toggle{font-size:14px}ng-select>div>div.multiple{display:flex;flex-flow:row wrap;height:100%;min-height:30px;padding:0 10px;width:100%}ng-select>div>div.multiple>div.option{background-color:#eee;border:1px solid #aaa;border-radius:4px;color:#333;cursor:default;display:inline-block;flex-shrink:0;font-size:14px;line-height:22px;margin:3px 5px 3px 0;padding:0 4px}ng-select>div>div.multiple>div.option span.deselect-option{color:#aaa;cursor:pointer;font-size:14px;height:20px;line-height:20px}ng-select>div>div.multiple>div.option span.deselect-option:hover{color:#555}ng-select>div>div.multiple input{background-color:transparent;border:none;cursor:pointer;height:30px;line-height:30px;padding:0}ng-select>div>div.multiple input:focus{outline:0}ng-select label{color:rgba(0,0,0,.38);display:block;font-size:13px;padding:4px 0}"] }] } ]; /** @nocollapse */ SelectComponent.ctorParameters = function () { return [ { type: ElementRef } ]; }; SelectComponent.propDecorators = { options: [{ type: Input }], allowClear: [{ type: Input }], disabled: [{ type: Input }], multiple: [{ type: Input }], noFilter: [{ type: Input }], highlightColor: [{ type: Input }], highlightTextColor: [{ type: Input }], notFoundMsg: [{ type: Input }], placeholder: [{ type: Input }], filterPlaceholder: [{ type: Input }], label: [{ type: Input }], opened: [{ type: Output }], closed: [{ type: Output }], selected: [{ type: Output }], deselected: [{ type: Output }], focus: [{ type: Output }], blur: [{ type: Output }], noOptionsFound: [{ type: Output }], filterInputChanged: [{ type: Output }], selectionSpan: [{ type: ViewChild, args: ['selection', { static: true },] }], dropdown: [{ type: ViewChild, args: ['dropdown', { static: false },] }], filterInput: [{ type: ViewChild, args: ['filterInput', { static: false },] }], optionTemplate: [{ type: ContentChild, args: ['optionTemplate', { static: false },] }], onWindowBlur: [{ type: HostListener, args: ['window:blur',] }], onWindowClick: [{ type: HostListener, args: ['window:click',] }], onWindowResize: [{ type: HostListener, args: ['window:resize',] }] }; return SelectComponent; }()); export { SelectComponent }; if (false) { /** @type {?} */ SelectComponent.prototype.options; /** @type {?} */ SelectComponent.prototype.allowClear; /** @type {?} */ SelectComponent.prototype.disabled; /** @type {?} */ SelectComponent.prototype.multiple; /** @type {?} */ SelectComponent.prototype.noFilter; /** @type {?} */ SelectComponent.prototype.highlightColor; /** @type {?} */ SelectComponent.prototype.highlightTextColor; /** @type {?} */ SelectComponent.prototype.notFoundMsg; /** @type {?} */ SelectComponent.prototype.placeholder; /** @type {?} */ SelectComponent.prototype.filterPlaceholder; /** @type {?} */ SelectComponent.prototype.label; /** @type {?} */ SelectComponent.prototype.opened; /** @type {?} */ SelectComponent.prototype.closed; /** @type {?} */ SelectComponent.prototype.selected; /** @type {?} */ SelectComponent.prototype.deselected; /** @type {?} */ SelectComponent.prototype.focus; /** @type {?} */ SelectComponent.prototype.blur; /** @type {?} */ SelectComponent.prototype.noOptionsFound; /** @type {?} */ SelectComponent.prototype.filterInputChanged; /** @type {?} */ SelectComponent.prototype.selectionSpan; /** @type {?} */ SelectComponent.prototype.dropdown; /** @type {?} */ SelectComponent.prototype.filterInput; /** @type {?} */ SelectComponent.prototype.optionTemplate; /** * @type {?} * @private */ SelectComponent.prototype._value; /** @type {?} */ SelectComponent.prototype.optionList; /** @type {?} */ SelectComponent.prototype.hasFocus; /** @type {?} */ SelectComponent.prototype.isOpen; /** @type {?} */ SelectComponent.prototype.isBelow; /** @type {?} */ SelectComponent.prototype.filterEnabled; /** @type {?} */ SelectComponent.prototype.filterInputWidth; /** * @type {?} * @private */ SelectComponent.prototype.isDisabled; /** @type {?} */ SelectComponent.prototype.placeholderView; /** * @type {?} * @private */ SelectComponent.prototype.clearClicked; /** * @type {?} * @private */ SelectComponent.prototype.selectContainerClicked; /** * @type {?} * @private */ SelectComponent.prototype.optionListClicked; /** * @type {?} * @private */ SelectComponent.prototype.optionClicked; /** @type {?} */ SelectComponent.prototype.width; /** @type {?} */ SelectComponent.prototype.top; /** @type {?} */ SelectComponent.prototype.left; /** * @type {?} * @private */ SelectComponent.prototype.onChange; /** * @type {?} * @private */ SelectComponent.prototype.onTouched; /** * Keys. * * @type {?} * @private */ SelectComponent.prototype.KEYS; /** * @type {?} * @private */ SelectComponent.prototype.hostElement; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLXNlbGVjdC8iLCJzb3VyY2VzIjpbImxpYi9zZWxlY3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxZQUFZLEVBQW9CLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUErQixZQUFZLEVBQUUsV0FBVyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3RPLE9BQU8sRUFBQyxpQkFBaUIsRUFBdUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RSxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUdwRSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOztBQUV6QyxNQUFNLEtBQU8scUJBQXFCLEdBQXFCO0lBQ25ELE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVU7OztJQUFDLGNBQU0sT0FBQSxlQUFlLEVBQWYsQ0FBZSxFQUFDO0lBQzlDLEtBQUssRUFBRSxJQUFJO0NBQ2Q7QUFFRDtJQXVFSSx5QkFDWSxXQUF1QjtRQUF2QixnQkFBVyxHQUFYLFdBQVcsQ0FBWTs7UUE3RDFCLFlBQU8sR0FBbUIsRUFBRSxDQUFDOztRQUc3QixlQUFVLEdBQVksS0FBSyxDQUFDO1FBQzVCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixhQUFRLEdBQVcsQ0FBQyxDQUFDOztRQU9yQixnQkFBVyxHQUFXLGtCQUFrQixDQUFDO1FBQ3pDLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBQ3pCLHNCQUFpQixHQUFXLEVBQUUsQ0FBQztRQUMvQixVQUFLLEdBQVcsRUFBRSxDQUFDOztRQUdsQixXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUNsQyxXQUFNLEdBQUcs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