UNPKG

truly-ui

Version:

Web Components for Desktop Applications.

516 lines (514 loc) 77.6 kB
/* 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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