truly-ui
Version:
Web Components for Desktop Applications.
516 lines (514 loc) • 77.6 kB
JavaScript
/*
MIT License
Copyright (c) 2019 Temainfo Software
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
import { Component, EventEmitter, Input, Output, ViewChild, Optional, Self, } from '@angular/core';
import { KeyEvent } from '../core/enums/key-events';
import { ValueAccessorBase } from '../input/core/value-accessor';
import { OverlayAnimation } from '../core/directives/overlay-animation';
import { Subject, Subscription } from 'rxjs';
import { debounceTime, distinctUntilChanged, map } from 'rxjs/operators';
import { MultiSelectErrorMessages } from './enums/error-messages';
import * as i0 from "@angular/core";
import * as i1 from "@angular/forms";
import * as i2 from "@angular/common";
import * as i3 from "../overlaylist/overlay-list";
import * as i4 from "@angular/cdk/overlay";
import * as i5 from "../internals/components/label/label";
import * as i6 from "../tag/tag";
export class TlMultiSelect extends ValueAccessorBase {
constructor(change, ngControl) {
super();
this.change = change;
this.ngControl = ngControl;
this.color = 'basic';
this.data = [];
this.labelSize = '100px';
this.defaultColorTag = '';
this.defaultIconTag = null;
this.openFocus = true;
this.detailOnTag = null;
this.keyValue = null;
this.itemHeight = '30px';
this.labelPlacement = 'left';
this.debounceTime = 200;
this.itemAmount = 5;
this.minLengthSearch = 2;
this.placeholder = 'Select item...';
this.sortAlphabetically = false;
this.onlyKeyValue = false;
this.disabled = false;
this.getSelecteds = new EventEmitter();
this.tagClick = new EventEmitter();
this.tagRemove = new EventEmitter();
this.typeOfData = 'complex';
this.isOpen = false;
this.filteredItems = [];
this.tags = [];
this.showIcon = true;
this.subject = new Subject();
this.touched = false;
this.required = false;
this.dataSource = [];
this.subscription = new Subscription();
this.setControl();
}
get control() {
return this.ngControl?.control;
}
ngOnInit() {
this.placeholderMessage = this.placeholder;
this.dataSource = [...this.data];
this.validateTypeDataSource();
this.setFilteredItems();
this.validateProperties();
this.handleTyping();
}
setControl() {
if (this.ngControl) {
this.ngControl.valueAccessor = this;
}
}
ngAfterViewInit() {
this.validateHasModel();
this.setRequired();
this.setDisabled();
this.handleValidator();
this.listenControlChanges();
}
onBackdropClick() {
this.isOpen = false;
this.change.detectChanges();
}
listenControlChanges() {
this.subscription.add(this.control.valueChanges.subscribe(() => {
this.validateHasModel();
}));
}
setDisabled() {
if (this.control) {
this.disabled = this.control.disabled;
}
}
handleTyping() {
this.subscription.add(this.subject.pipe(map(event => event), debounceTime(this.debounceTime), distinctUntilChanged()).subscribe((value) => {
this.searchItem(value);
}));
}
handleOpenOnFocus() {
if (this.openFocus && this.filteredItems.length > 0) {
this.isOpen = true;
}
}
setRequired() {
if (this.control && this.control.errors) {
if (this.control.errors['required']) {
this.required = true;
}
}
}
validateHasModel() {
setTimeout(() => {
if (this.value) {
this.cleanInput();
this.handleModelValueAsTags();
this.removeElementsForFilter();
this.setModelValue();
}
this.selectTag = this.tags.length;
}, 1);
}
handleModelValueAsTags() {
this.value.forEach((value) => {
let indexMock;
indexMock = this.keyValue ? this.dataSource.findIndex((item => this.getCompare(item, value))) :
this.dataSource.findIndex((item => JSON.stringify(item) === JSON.stringify(value)));
if (indexMock > -1) {
this.tags.push(this.dataSource[indexMock]);
}
});
}
getCompare(item, value) {
return value[this.keyValue] ? (item[this.keyValue] === value[this.keyValue]) : (item[this.keyValue] === value);
}
handleValidator() {
if (this.control) {
this.hasValidator = this.control.validator;
this.change.detectChanges();
}
}
sortFilteredItems() {
if (this.sortAlphabetically) {
this.filteredItems.sort((a, b) => {
const compareX = this.isSimpleData() ? a : a[this.query];
const compareY = this.isSimpleData() ? b : b[this.query];
const x = compareX.toLowerCase();
const y = compareY.toLowerCase();
return x < y ? -1 : x > y ? 1 : 0;
});
}
}
validateTypeDataSource() {
const key = Object.keys(this.dataSource)[0];
if (typeof this.data[key] === 'string') {
this.typeOfData = 'simple';
}
}
isSimpleData() {
return this.typeOfData === 'simple';
}
removeElementsForFilter() {
this.tags.forEach((value) => {
this.dataSource.forEach((value2, index) => {
const compareValue = this.isSimpleData() ? value : value[this.keyValue];
const compareValue2 = this.isSimpleData() ? value2 : value2[this.keyValue];
if (JSON.stringify(compareValue) === JSON.stringify(compareValue2)) {
this.dataSource = this.dataSource.filter((filter, indexFilter) => (indexFilter !== index));
}
});
});
this.filteredItems = this.dataSource;
this.sortFilteredItems();
}
validateProperties() {
if (!this.icon) {
this.showIcon = false;
}
if (this.isDataUndefined() || this.isQueryUndefined() && !this.isSimpleData()) {
throw new Error(MultiSelectErrorMessages.DATAUNDEFINED);
}
if (!this.isSimpleData() && !this.keyValue) {
throw new Error(MultiSelectErrorMessages.NOTSIMPLE_AND_NOTKEYVALUE);
}
if (!this.labelTag) {
this.labelTag = this.query;
}
if (this.isUndefinedDetail() && this.hasDetailOnTagProperty()) {
throw new Error(MultiSelectErrorMessages.NOTDETAIL_AND_WITHDETAILTAG);
}
}
isQueryUndefined() {
return this.query === undefined;
}
isDataUndefined() {
return this.data === undefined;
}
isUndefinedDetail() {
return this.detail === undefined;
}
hasDetailOnTagProperty() {
return this.detailOnTag !== null;
}
validateEmptySearch() {
setTimeout(() => {
if (this.input.nativeElement.value === '' && this.hasTags()) {
return this.filteredItems = this.data;
}
}, 1);
this.sortFilteredItems();
}
handleKeyDown($event) {
const keyEvent = {
[KeyEvent.DELETE]: () => this.handleKeyDelete($event),
[KeyEvent.BACKSPACE]: () => this.handleKeyBackspace(),
[KeyEvent.ESCAPE]: () => this.handleKeySpace($event),
[KeyEvent.ENTER]: () => this.handleKeyEnter($event),
[KeyEvent.TAB]: () => this.handleKeyTab(),
[KeyEvent.ARROWDOWN]: () => this.handleIsOpen($event),
[KeyEvent.ARROWUP]: () => this.handleIsOpen($event),
[KeyEvent.ARROWLEFT]: () => this.handleArrowLeft($event),
[KeyEvent.ARROWRIGHT]: () => this.handleArrowRight($event)
};
if (keyEvent[$event.code]) {
keyEvent[$event.code]();
}
}
handleOverlayList() {
if (this.filteredItems.length === 0) {
this.isOpen = false;
}
}
handleClickWrapper() {
if (!this.disabled && this.filteredItems.length > 0) {
this.isOpen = !this.isOpen;
}
this.setInputFocus();
}
setInputFocus() {
this.input.nativeElement.focus();
}
handleIsOpen($event) {
if (this.isOpen) {
this.stopEventKeyDown($event);
}
}
handleKeyDelete($event) {
this.stopEventKeyDown($event);
this.deleteTagSelected();
}
handleKeyBackspace() {
this.isOpen = true;
this.removeTagOnBackspace();
}
handleArrowRight($event) {
this.stopEventKeyDown($event);
if (!this.isSelectedTagEqualsLastTag() && this.hasTags()) {
this.selectTag++;
this.cleanSelected();
this.setSelectTagAsTrue();
}
}
handleKeyEnter($event) {
this.handleOverlayList();
if (this.isOpen) {
this.stopEventKeyDown($event);
}
}
handleKeySpace($event) {
if (this.isOpen) {
this.stopEventKeyDown($event);
}
this.isOpen = false;
}
handleKeyTab() {
if (this.isOpen) {
this.isOpen = false;
}
}
isSelectedTagEqualsLastTag() {
return this.selectTag === this.tags.length - 1;
}
handleArrowLeft($event) {
this.stopEventKeyDown($event);
if (this.hasTags() && !this.hasTagSelected()) {
this.selectTag--;
this.cleanSelected();
this.setSelectTagAsTrue();
}
}
hasTagSelected() {
return this.selectTag > 0;
}
cleanSelected() {
this.tags.forEach((item) => item.selected = false);
}
handleInputFocus() {
this.touched = true;
this.sortFilteredItems();
this.handleOpenOnFocus();
}
setFilteredItems() {
this.validateEmptySearch();
if (!this.isTagsLengthMoreThanZero()) {
if (this.isFilteredLengthEqualsDataLength() || this.filteredItems.length === 0) {
this.filteredItems = this.data;
this.sortFilteredItems();
}
}
}
removeTagOfFilter(tag) {
this.filteredItems = this.filteredItems.filter((item) => {
return JSON.stringify(tag) !== JSON.stringify(item);
});
this.change.detectChanges();
this.sortFilteredItems();
}
setSelectTagAsTrue() {
this.tags[this.selectTag]['selected'] = true;
}
handleArrowDown($event) {
if (this.isOpen) {
this.stopEventKeyDown($event);
}
}
addTag(item) {
if (item.option) {
this.tags.push(item.option.item);
this.placeholder = '';
this.getSelecteds.emit(this.tags);
this.setModelValue();
this.removeTagOfFilter(item.option.item);
this.removeElementsForFilter();
this.handleAllSelected();
this.cleanInput();
}
}
handleAllSelected() {
if (this.filteredItems.length === 0) {
this.isOpen = false;
}
}
stopEventKeyDown($event) {
$event.preventDefault();
$event.stopPropagation();
}
setModelValue() {
const modeltemp = [];
this.tags.forEach((value) => {
modeltemp.push(this.onlyKeyValue ? value[this.keyValue] : value);
});
this.value = modeltemp;
}
deleteTagSelected() {
this.addTagSelectedToFiltered();
this.removeTagSelectedOfTags();
this.sortFilteredItems();
}
getTagSelected() {
return this.tags.filter((item) => item.selected)[0];
}
removeTagSelectedOfTags() {
this.tags = this.tags.filter((item) => !item.selected);
}
addTagSelectedToFiltered() {
this.filteredItems = [...this.filteredItems, this.getTagSelected()];
}
searchItem(imputed) {
if (this.isValueMoreOrEqualThanMinLengthSearch(imputed)) {
!this.isTagsLengthMoreThanZero() ? this.filterOnData(imputed, this.dataSource) :
this.filterOnData(imputed, this.filteredItems);
}
else {
this.removeElementsForFilter();
}
}
filterOnData(imputed, dataSource) {
this.filteredItems = dataSource.filter((value) => {
const typeValue = this.isSimpleData() ? value : value[this.query];
return typeValue.toString().toUpperCase().includes(imputed.toUpperCase().trim());
});
}
isValueMoreOrEqualThanMinLengthSearch(value) {
return value.length >= this.minLengthSearch;
}
selectTagClick(index, item) {
this.tagClick.emit(item);
this.selectTag = index;
}
changePlaceholder() {
if (!this.hasTags()) {
this.placeholder = this.placeholderMessage;
}
}
removeTagOnBackspace() {
if (this.isInputValueEqualsEmpty() && this.isTagsLengthMoreThanZero()) {
this.removeTag(this.tags.length - 1);
}
else {
this.setFilteredItems();
}
}
removeTag(index, item) {
this.filteredItems.push(item ? item : this.tags[index]);
this.tagRemove.emit(item ? item : this.tags[index]);
this.getSelecteds.emit(this.tags);
this.tags.splice(index, 1);
this.changePlaceholder();
this.setModelValue();
this.sortFilteredItems();
this.cleanInput();
}
cleanInput() {
setTimeout(() => {
this.input.nativeElement.value = '';
}, 1);
}
hasTags() {
return this.tags.length > 0;
}
isInputValueEqualsEmpty() {
return this.input.nativeElement.value === '';
}
isTagsLengthMoreThanZero() {
return this.tags.length > 0;
}
isFilteredLengthEqualsDataLength() {
return this.filteredItems.length === this.dataSource.length;
}
ngOnDestroy() {
this.subscription.unsubscribe();
}
}
/** @nocollapse */ TlMultiSelect.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TlMultiSelect, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
/** @nocollapse */ TlMultiSelect.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TlMultiSelect, selector: "tl-multiselect", inputs: { keyColor: "keyColor", color: "color", data: "data", query: "query", label: "label", labelSize: "labelSize", labelTag: "labelTag", detail: "detail", icon: "icon", defaultColorTag: "defaultColorTag", defaultIconTag: "defaultIconTag", openFocus: "openFocus", detailOnTag: "detailOnTag", keyValue: "keyValue", itemHeight: "itemHeight", labelPlacement: "labelPlacement", debounceTime: "debounceTime", itemAmount: "itemAmount", minLengthSearch: "minLengthSearch", placeholder: "placeholder", sortAlphabetically: "sortAlphabetically", onlyKeyValue: "onlyKeyValue", formControlName: "formControlName", disabled: "disabled" }, outputs: { getSelecteds: "getSelecteds", tagClick: "tagClick", tagRemove: "tagRemove" }, viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<div [class]=\"'tl-multiselect-container '+ color\">\n <tl-label [required]=\"required\" [labelTitle]=\"label\" [labelSize]=\"labelSize\" [labelPlacement]=\"labelPlacement\"></tl-label>\n <div class=\"multiselect-wrapper\">\n <div\n class=\"input-wrapper-multiselect\"\n cdkOverlayOrigin #trigger=\"cdkOverlayOrigin\"\n #element\n (click)=\"handleClickWrapper()\"\n [ngClass]=\"\n {\n 'ng-touched': touched,\n 'ng-disabled': disabled,\n 'invalid': control.errors,\n 'withValidators': hasValidator,\n 'inputFormOpenFilter': isOpen && filteredItems.length !== 0\n }\">\n <div class=\"group-tags\">\n <tl-tag *ngFor=\"let tag of tags; let i = index\"\n [title]=\"isSimpleData() ? tag : tag[labelTag]\"\n [mode]=\"'closeable'\"\n [color]=\"'primary'\"\n [height]=\"'18px'\"\n (close)=\"removeTag(i, tag)\"\n (click)=\"$event.stopPropagation(); selectTagClick(i, tag)\">\n </tl-tag>\n\n <input autocomplete=\"off\"\n [name]=\"'notform'\"\n class=\"input-field\"\n [style.display]=\"'none'\"\n [(ngModel)]=\"value\">\n\n <input autocomplete=\"off\"\n class=\"input-field\"\n [ngClass]=\"\n {\n 'invalid': control.errors,\n 'withValidators': hasValidator,\n 'withoutValidators': !hasValidator\n }\"\n #input\n [attr.placeholder]=\"placeholder\"\n [attr.disabled]=\"disabled ? true : null\"\n (focus)=\"handleInputFocus()\"\n (keydown.arrowDown)=\"handleArrowDown($event)\"\n (keyup)=\"subject.next($event.target.value)\"\n (keydown)=\"handleKeyDown($event)\">\n </div>\n </div>\n <ng-template cdkConnectedOverlay\n (backdropClick)=\"onBackdropClick()\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayBackdropClass]=\"'cdk-overlay-transparent-backdrop'\"\n [cdkConnectedOverlayOpen]=\"isOpen\">\n <tl-overlay-list\n @overlay\n (selectOption)=\"addTag($event)\"\n (search)=\"handleKeyDown($event)\"\n [searchOnList]=\"true\"\n [customInput]=\"input\"\n [customFocus]=\"input\"\n [typeOfData]=\"typeOfData\"\n [hasDefaultOption]=\"false\"\n [datasource]=\"filteredItems\"\n [itemHeight]=\"itemHeight\"\n [width]=\"element.offsetWidth + 'px'\"\n [icon]=\"icon\"\n [keyText]=\"query\">\n </tl-overlay-list>\n </ng-template>\n </div>\n</div>\n", styles: [".tl-multiselect-container{width:100%;display:table}.tl-multiselect-container>.-labelTag{display:table-cell;text-align:right;line-height:1;width:100px;white-space:nowrap;vertical-align:middle;font-weight:400;font-family:Segoe UI,Lato,\"sans-serif\",Arial;font-size:.9em}.tl-multiselect-container>.multiselect-wrapper{display:table-cell}.tl-multiselect-container>.multiselect-wrapper small{opacity:.7}.tl-multiselect-container>.multiselect-wrapper .input-wrapper-multiselect{display:flex;align-items:center;justify-content:flex-start;min-height:23px;border-radius:3px;box-sizing:border-box;flex-direction:row;flex-wrap:wrap;cursor:text}.tl-multiselect-container>.multiselect-wrapper .input-field{font:inherit;background:0 0;border:none;padding:0;max-width:100%;margin:0 0 0 5px;vertical-align:bottom;text-align:inherit;outline:none;height:23px;font-size:.9em;font-family:Segoe UI,Lato,\"sans-serif\",Arial}.tl-multiselect-container>.multiselect-wrapper .input-field::placeholder{font-family:Segoe UI,Lato,\"sans-serif\",Arial;font-size:1em}.tl-multiselect-container>.multiselect-wrapper .select-options{display:block;position:absolute;width:100%;overflow:auto;z-index:1000;margin:0 auto;padding:0!important;cursor:pointer}.tl-multiselect-container>.multiselect-wrapper .select-options::-webkit-scrollbar{width:.5em;border-radius:3px}.tl-multiselect-container>.multiselect-wrapper .group-tags{display:flex;flex-direction:row;flex-wrap:wrap;align-items:center}.tl-multiselect-container>.multiselect-wrapper .group-tags .tag{position:relative;display:flex;align-items:center;grid-template-columns:1fr 20px;cursor:pointer;height:15px;border-radius:3px;font-size:.8em;margin:3px;font-family:Segoe UI,Lato,\"sans-serif\",Arial;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;color:#fff}.tl-multiselect-container>.multiselect-wrapper .group-tags .tag span{padding:0 5px;text-align:center}.tl-multiselect-container>.multiselect-wrapper .group-tags .tag:first-child{border-top:0;margin-left:3px}.tl-multiselect-container>.multiselect-wrapper .tags-detail{padding:5px;font-size:10px;opacity:1!important}.tl-multiselect-container>.multiselect-wrapper .select-options{border-radius:3px}.tl-multiselect-container>.multiselect-wrapper .select-options .itens{display:list-item;list-style:none;font-size:12px;font-family:Segoe UI,Lato,\"sans-serif\",Arial;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.tl-multiselect-container>.multiselect-wrapper .select-options small{float:right}.tl-multiselect-container>.multiselect-wrapper .dropdown-arrow{left:95%;font-size:1.2em;position:absolute}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.TlOverlayList, selector: "tl-overlay-list", inputs: ["datasource", "searchOnList", "itemHeight", "inputModelIndex", "optionSelected", "typeOfData", "keyText", "groupBy", "keyIcon", "icon", "defaultIcon", "defaultOptionText", "width", "maxHeight", "customInput", "customFocus", "hasDefaultOption"], outputs: ["selectOption", "defaultOption", "search", "findByLetter", "close"] }, { kind: "directive", type: i4.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i4.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: i5.TlLabel, selector: "tl-label", inputs: ["labelPlacement", "required", "labelSize", "labelTitle"] }, { kind: "component", type: i6.TlTag, selector: "tl-tag", inputs: ["title", "width", "height", "icon", "mode", "charcase", "closeOnValueEmited", "color"], outputs: ["close", "tagValue"] }], animations: [OverlayAnimation] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TlMultiSelect, decorators: [{
type: Component,
args: [{ selector: 'tl-multiselect', animations: [OverlayAnimation], template: "<div [class]=\"'tl-multiselect-container '+ color\">\n <tl-label [required]=\"required\" [labelTitle]=\"label\" [labelSize]=\"labelSize\" [labelPlacement]=\"labelPlacement\"></tl-label>\n <div class=\"multiselect-wrapper\">\n <div\n class=\"input-wrapper-multiselect\"\n cdkOverlayOrigin #trigger=\"cdkOverlayOrigin\"\n #element\n (click)=\"handleClickWrapper()\"\n [ngClass]=\"\n {\n 'ng-touched': touched,\n 'ng-disabled': disabled,\n 'invalid': control.errors,\n 'withValidators': hasValidator,\n 'inputFormOpenFilter': isOpen && filteredItems.length !== 0\n }\">\n <div class=\"group-tags\">\n <tl-tag *ngFor=\"let tag of tags; let i = index\"\n [title]=\"isSimpleData() ? tag : tag[labelTag]\"\n [mode]=\"'closeable'\"\n [color]=\"'primary'\"\n [height]=\"'18px'\"\n (close)=\"removeTag(i, tag)\"\n (click)=\"$event.stopPropagation(); selectTagClick(i, tag)\">\n </tl-tag>\n\n <input autocomplete=\"off\"\n [name]=\"'notform'\"\n class=\"input-field\"\n [style.display]=\"'none'\"\n [(ngModel)]=\"value\">\n\n <input autocomplete=\"off\"\n class=\"input-field\"\n [ngClass]=\"\n {\n 'invalid': control.errors,\n 'withValidators': hasValidator,\n 'withoutValidators': !hasValidator\n }\"\n #input\n [attr.placeholder]=\"placeholder\"\n [attr.disabled]=\"disabled ? true : null\"\n (focus)=\"handleInputFocus()\"\n (keydown.arrowDown)=\"handleArrowDown($event)\"\n (keyup)=\"subject.next($event.target.value)\"\n (keydown)=\"handleKeyDown($event)\">\n </div>\n </div>\n <ng-template cdkConnectedOverlay\n (backdropClick)=\"onBackdropClick()\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayBackdropClass]=\"'cdk-overlay-transparent-backdrop'\"\n [cdkConnectedOverlayOpen]=\"isOpen\">\n <tl-overlay-list\n @overlay\n (selectOption)=\"addTag($event)\"\n (search)=\"handleKeyDown($event)\"\n [searchOnList]=\"true\"\n [customInput]=\"input\"\n [customFocus]=\"input\"\n [typeOfData]=\"typeOfData\"\n [hasDefaultOption]=\"false\"\n [datasource]=\"filteredItems\"\n [itemHeight]=\"itemHeight\"\n [width]=\"element.offsetWidth + 'px'\"\n [icon]=\"icon\"\n [keyText]=\"query\">\n </tl-overlay-list>\n </ng-template>\n </div>\n</div>\n", styles: [".tl-multiselect-container{width:100%;display:table}.tl-multiselect-container>.-labelTag{display:table-cell;text-align:right;line-height:1;width:100px;white-space:nowrap;vertical-align:middle;font-weight:400;font-family:Segoe UI,Lato,\"sans-serif\",Arial;font-size:.9em}.tl-multiselect-container>.multiselect-wrapper{display:table-cell}.tl-multiselect-container>.multiselect-wrapper small{opacity:.7}.tl-multiselect-container>.multiselect-wrapper .input-wrapper-multiselect{display:flex;align-items:center;justify-content:flex-start;min-height:23px;border-radius:3px;box-sizing:border-box;flex-direction:row;flex-wrap:wrap;cursor:text}.tl-multiselect-container>.multiselect-wrapper .input-field{font:inherit;background:0 0;border:none;padding:0;max-width:100%;margin:0 0 0 5px;vertical-align:bottom;text-align:inherit;outline:none;height:23px;font-size:.9em;font-family:Segoe UI,Lato,\"sans-serif\",Arial}.tl-multiselect-container>.multiselect-wrapper .input-field::placeholder{font-family:Segoe UI,Lato,\"sans-serif\",Arial;font-size:1em}.tl-multiselect-container>.multiselect-wrapper .select-options{display:block;position:absolute;width:100%;overflow:auto;z-index:1000;margin:0 auto;padding:0!important;cursor:pointer}.tl-multiselect-container>.multiselect-wrapper .select-options::-webkit-scrollbar{width:.5em;border-radius:3px}.tl-multiselect-container>.multiselect-wrapper .group-tags{display:flex;flex-direction:row;flex-wrap:wrap;align-items:center}.tl-multiselect-container>.multiselect-wrapper .group-tags .tag{position:relative;display:flex;align-items:center;grid-template-columns:1fr 20px;cursor:pointer;height:15px;border-radius:3px;font-size:.8em;margin:3px;font-family:Segoe UI,Lato,\"sans-serif\",Arial;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;color:#fff}.tl-multiselect-container>.multiselect-wrapper .group-tags .tag span{padding:0 5px;text-align:center}.tl-multiselect-container>.multiselect-wrapper .group-tags .tag:first-child{border-top:0;margin-left:3px}.tl-multiselect-container>.multiselect-wrapper .tags-detail{padding:5px;font-size:10px;opacity:1!important}.tl-multiselect-container>.multiselect-wrapper .select-options{border-radius:3px}.tl-multiselect-container>.multiselect-wrapper .select-options .itens{display:list-item;list-style:none;font-size:12px;font-family:Segoe UI,Lato,\"sans-serif\",Arial;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.tl-multiselect-container>.multiselect-wrapper .select-options small{float:right}.tl-multiselect-container>.multiselect-wrapper .dropdown-arrow{left:95%;font-size:1.2em;position:absolute}\n"] }]
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.NgControl, decorators: [{
type: Optional
}, {
type: Self
}] }]; }, propDecorators: { keyColor: [{
type: Input
}], color: [{
type: Input
}], data: [{
type: Input
}], query: [{
type: Input
}], label: [{
type: Input
}], labelSize: [{
type: Input
}], labelTag: [{
type: Input
}], detail: [{
type: Input
}], icon: [{
type: Input
}], defaultColorTag: [{
type: Input
}], defaultIconTag: [{
type: Input
}], openFocus: [{
type: Input
}], detailOnTag: [{
type: Input
}], keyValue: [{
type: Input
}], itemHeight: [{
type: Input
}], labelPlacement: [{
type: Input
}], debounceTime: [{
type: Input
}], itemAmount: [{
type: Input
}], minLengthSearch: [{
type: Input
}], placeholder: [{
type: Input
}], sortAlphabetically: [{
type: Input
}], onlyKeyValue: [{
type: Input
}], formControlName: [{
type: Input
}], disabled: [{
type: Input
}], getSelecteds: [{
type: Output
}], tagClick: [{
type: Output
}], tagRemove: [{
type: Output
}], input: [{
type: ViewChild,
args: ['input', { static: true }]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlzZWxlY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy90cnVseS11aS9zcmMvY29tcG9uZW50cy9tdWx0aXNlbGVjdC9tdWx0aXNlbGVjdC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RydWx5LXVpL3NyYy9jb21wb25lbnRzL211bHRpc2VsZWN0L211bHRpc2VsZWN0Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBQ0gsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ2tFLFFBQVEsRUFBOEIsSUFBSSxHQUN0SCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHcEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDeEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7QUFRbEUsTUFBTSxPQUFPLGFBQWMsU0FBUSxpQkFBc0I7SUFvRnZELFlBQXFCLE1BQXlCLEVBQ04sU0FBb0I7UUFDMUQsS0FBSyxFQUFFLENBQUM7UUFGVyxXQUFNLEdBQU4sTUFBTSxDQUFtQjtRQUNOLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFqRm5ELFVBQUssR0FBRyxPQUFPLENBQUM7UUFFaEIsU0FBSSxHQUFHLEVBQUUsQ0FBQztRQU1WLGNBQVMsR0FBRyxPQUFPLENBQUM7UUFRcEIsb0JBQWUsR0FB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