ng-select
Version:
Select component for angular.
1,094 lines • 74.5 kB
JavaScript
/**
* @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 ✕\n </div>\n <div class=\"toggle\"\n *ngIf=\"isOpen\">\n ▲\n </div>\n <div class=\"toggle\"\n *ngIf=\"!isOpen\">\n ▼\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 ✕\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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