UNPKG

@alauda-fe/common

Version:

Alauda frontend team common codes.

399 lines 65.8 kB
import { __decorate, __metadata } from "tslib"; import { IconComponent, InputComponent, TagComponent } from '@alauda/ui'; import { AsyncPipe, NgClass, NgFor, NgIf } from '@angular/common'; import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, Output, ViewChild, } from '@angular/core'; import { FormsModule } from '@angular/forms'; import { cloneDeep, isEmpty, set } from 'lodash-es'; import { BehaviorSubject, combineLatest, distinctUntilChanged, fromEvent, map, merge, Observable, scan, Subject, take, takeUntil, tap, } from 'rxjs'; import { isEqual, ObservableInput, publishRef, PurePipe, } from '../../core/public-api'; import { MultiSearchActionInputComponent } from '../action-input/component'; import { MultiSearchTagsComponent } from '../multi-search-tags/component'; import * as i0 from "@angular/core"; import * as i1 from "@angular/forms"; const _c0 = ["inputRef"]; const _c1 = ["tagsRef"]; const _c2 = ["multiSearch"]; const _c3 = a0 => ({ "search-focus": a0 }); const _c4 = (a0, a1) => ({ "tags-width-with-delete": a0, "tags-width": a1 }); function MultiSearchComponent_div_12_Template(rf, ctx) { if (rf & 1) { const _r2 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "div", 9)(1, "aui-icon", 10); i0.ɵɵlistener("click", function MultiSearchComponent_div_12_Template_aui_icon_click_1_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); ctx_r2.clearConditions(); ctx_r2.doSearch(); return i0.ɵɵresetView($event.stopPropagation()); }); i0.ɵɵelementEnd()(); } if (rf & 2) { const ctx_r2 = i0.ɵɵnextContext(); i0.ɵɵadvance(); i0.ɵɵproperty("ngClass", ctx_r2.CLEAR_ICON_CLASS); } } function MultiSearchComponent_div_14_Template(rf, ctx) { if (rf & 1) { const _r4 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "div", 6)(1, "div", 11)(2, "aui-icon", 12); i0.ɵɵlistener("click", function MultiSearchComponent_div_14_Template_aui_icon_click_2_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(); ctx_r2.doSearch(); return i0.ɵɵresetView($event.stopPropagation()); }); i0.ɵɵelementEnd()()(); } if (rf & 2) { const ctx_r2 = i0.ɵɵnextContext(); i0.ɵɵadvance(2); i0.ɵɵproperty("ngClass", ctx_r2.SEARCH_ICON_CLASS); } } export const DEFAULT_OPERATOR = '='; export class MultiSearchComponent { get inputComponent() { return this.noDeletingCondition && this.noEditingCondition ? this.normalInputComponent : this.tagsComponent?.inputComponent; } constructor(cdr) { this.cdr = cdr; this.placeholder = ''; this.conditionCreatable = false; this.autoScroll = true; this.searchSuffix = true; // 搜索操作 this.search = new EventEmitter(); // 条件变化 this.conditionsChange = new EventEmitter(); // 当前multi-search组件是否focus this.focus$$ = new BehaviorSubject(false); this.destroy$$ = new Subject(); this.actionScanner$$ = new Subject(); this.existingConditions = []; this.existingConditions$ = merge(combineLatest([this.conditions$, this.conditionConfig$]).pipe(map(([conditions, conditionConfig]) => { const res = conditions?.map(condition => { const exist = this.existingConditions?.find(exist => exist.condition.value === condition.condition); const config = conditionConfig?.find(config => config.condition.value === condition.condition); // 所继承的数据,若已存在exist,则继承exist;若不存在,则继承config // 此处的继承是为了防止外界conditions数据的变化导致操作状态刷新 // 因此,除了conditions数据外的附加数据,都应该继承 const inherit = { ...exist, ...config, }; return isEmpty(inherit) ? { condition: { value: condition.condition }, operator: condition.operator, selectedValues: condition.values?.map(value => ({ value, })), } : { ...inherit, operator: condition.operator, selectedValues: condition.values?.map(value => { const find = inherit.values?.find(inheritValue => inheritValue.value === value); return find ? { ...find } : { value, }; }), }; }) || []; return (_) => res; })), this.actionScanner$$).pipe(scan((acc, cur) => cur(acc), []), tap(existingConditions => { this.existingConditions = existingConditions; }), publishRef()); this.noEditingCondition = true; this.noEditingCondition$ = this.existingConditions$.pipe(map(existingConditions => existingConditions?.every(condition => !condition.isEditing)), tap(noEditingCondition => (this.noEditingCondition = noEditingCondition)), publishRef()); this.noDeletingCondition = true; this.noDeletingCondition$ = this.existingConditions$.pipe(map(existingConditions => existingConditions?.every(condition => !condition.isDeleting)), tap(noDeletingCondition => (this.noDeletingCondition = noDeletingCondition)), publishRef()); this.addedInputShouldHidden$ = combineLatest([ this.noEditingCondition$, this.noDeletingCondition$, this.existingConditions$, ]).pipe(map(([noEditingCondition, noDeletingCondition, existingConditions]) => { return ((!noEditingCondition || !noDeletingCondition) && existingConditions.length !== 0); }), publishRef()); this.CLEAR_ICON_CLASS = 'search-clear-icon'; this.SEARCH_ICON_CLASS = 'search-icon'; this.existingConditions$ .pipe(takeUntil(this.destroy$$), distinctUntilChanged((a, b) => a?.length === b?.length)) .subscribe(existingConditions => { this.conditionsChange.emit(this.getConditionModel(existingConditions)); }); // 此处的click事件监听使用了捕获而非冒泡,是为了让事件触发的时机先于tag.click // 若tag.click先触发,会导致element.contains()判断出错 fromEvent(document.body, 'click', { capture: true }) .pipe(takeUntil(this.destroy$$)) .subscribe(event => { const target = event.target; if (this.isSearchBtn(target)) { this.manualComplete(false, true); this.inputComponent.toolTipHide(); return; } if (this.multiSearchRef?.nativeElement?.contains(target)) { // 当点击区域为multi-search组件,自动聚焦 // 对于操作按钮,只做hidden toolTip if (this.notActionElement(target)) { if (document.activeElement !== this.inputComponent?.inputElement) { const isFocus = this.focus$$.value; this.manualFocus(isFocus); } this.inputComponent.toolTipShow(); } else { this.manualFocus(true); // this.inputComponent.toolTipHide(); } // 当点击区域为非tooltip的其他区域时,自动收缩 } else if (this.notTooltipContent(target)) { this.manualBlur(); } }); } isSearchBtn(element) { return this.checkElement(element, element => element?.className?.includes?.(this.SEARCH_ICON_CLASS)); } notActionElement(element) { return !this.checkElement(element, element => element?.className?.includes?.(this.CLEAR_ICON_CLASS) || element?.className?.includes?.(this.SEARCH_ICON_CLASS) || element?.className?.includes?.('aui-tag__close')); } notTooltipContent(element) { return !this.checkElement(element, element => element.tagName === 'AUI-TOOLTIP'); } checkElement(element, fn) { while (element && !fn(element)) { element = element.parentElement; } return !!element; } manualComplete(toContinue = false, manualFocus = false) { this.inputComponent?.ifComplete(toContinue, manualFocus); } manualFocus(silence) { this.setFocus(true); this.inputComponent?.manualFocus(silence); } setFocus(focus) { this.focus$$.next(focus); } manualBlur() { this.setFocus(false); this.inputComponent?.manualBlur(); } // 搜索操作 doSearch() { this.existingConditions$ .pipe(take(1), takeUntil(this.destroy$$)) .subscribe(exists => { this.search.emit(this.getConditionModel(exists?.filter(exist => !this.conditionInAction(exist)))); }); } // 清除所有已选条件 clearConditions() { this.addedCondition = null; this.cdr.markForCheck(); this.actionScanner$$.next((_) => []); } // 移除当前条件 removeCondition(condition) { const remove = (existingConditions) => { const idx = existingConditions.findIndex(con => con.condition.value === condition.condition.value); existingConditions.splice(idx, 1); return [...existingConditions]; }; this.actionScanner$$.next(remove); } // 更新条件 updateCondition(condition, index) { const _update = (existingConditions) => { if (condition) { existingConditions.splice(index, 1, condition); } else { existingConditions.splice(index, 1); } return [...existingConditions]; }; this.actionScanner$$.next(_update); } // 添加condition addCondition(activeCondition) { const _add = (existingConditions) => { existingConditions.push(activeCondition); return [...existingConditions]; }; this.actionScanner$$.next(_add); } // 设置condition的状态为编辑态 setConditionEditing(condition) { if (this.isGrammarCustomCondition(condition)) return; const _update = (existingConditions) => { if (!existingConditions) return; const idx = existingConditions.findIndex(con => con.condition.value === condition.condition.value); const conditionsExceptCur = [ ...(existingConditions.slice(0, idx) || []), ...(existingConditions.slice(idx + 1) || []), ]; const alreadyHaveAction = conditionsExceptCur.some(con => this.conditionInAction(con)); // 当已经存在操作中的condition时,会继续维护之前操作,中止新的操作行为 // 上述处理逻辑主要是为了避免操作到一半(比如未选择operator、未选择condition时)就切换至另一个condition操作,此时该未完成的操作应该如何处理,暂未给定。 if (alreadyHaveAction || this.addedCondition) return existingConditions; const find = existingConditions[idx]; // 将当前所操作condition的状态重置为editing find.isDeleting = false; find.isEditing = true; find.actionModel = cloneDeep(find); return [...existingConditions]; }; this.actionScanner$$.next(_update); } // 设置condition的状态为删除态 setConditionDeleting(index) { const _delete = (existingConditions) => { const condition = Number.isInteger(index) ? existingConditions[index] : existingConditions.at(-1); if (condition) { set(condition, 'isDeleting', true); condition.actionModel = cloneDeep(condition); } return [...existingConditions]; }; this.actionScanner$$.next(_delete); } complete({ activeCondition, toContinue, manualFocus, index, }) { if (activeCondition) { activeCondition.isEditing = false; activeCondition.isDeleting = false; } if (Number.isInteger(index)) { this.updateCondition(activeCondition, index); } else if (activeCondition) { this.addCondition(activeCondition); } // 自动聚焦 if (manualFocus) { this.manualFocus(!toContinue); } } isGrammarCustomCondition(condition) { const inConfig = this.conditionConfig.some(config => isEqual(condition.condition, config.condition)); // 如果当前condition不在config中,且operator不为默认值,则代表当前condition是用户通过语法自定义的,此时不允许通过UI修改 // 考虑到未来会允许用户输入创建condition,此时是允许用户通过UI再次修改的。此类情况的特性:!inConfig && operator === DEFAULT_OPERATOR return !inConfig && condition.operator !== DEFAULT_OPERATOR; } getConditionModel(conditions) { return conditions?.map(condition => ({ condition: condition.condition.value, operator: condition.operator, values: condition.selectedValues?.map(value => value.value) || [], })); } conditionInAction(condition) { return condition.isEditing || condition.isDeleting; } ngOnDestroy() { this.destroy$$.next(); } static { this.ɵfac = function MultiSearchComponent_Factory(t) { return new (t || MultiSearchComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; } static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MultiSearchComponent, selectors: [["acl-multi-search"]], viewQuery: function MultiSearchComponent_Query(rf, ctx) { if (rf & 1) { i0.ɵɵviewQuery(_c0, 5); i0.ɵɵviewQuery(_c1, 5); i0.ɵɵviewQuery(_c2, 7); } if (rf & 2) { let _t; i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.normalInputComponent = _t.first); i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.tagsComponent = _t.first); i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.multiSearchRef = _t.first); } }, inputs: { placeholder: "placeholder", conditionCreatable: "conditionCreatable", conditions: "conditions", conditionConfig: "conditionConfig", autoScroll: "autoScroll", searchSuffix: "searchSuffix", showFootAction: "showFootAction" }, outputs: { search: "search", conditionsChange: "conditionsChange" }, standalone: true, features: [i0.ɵɵStandaloneFeature], decls: 15, vars: 35, consts: [["multiSearch", ""], ["tagsRef", ""], ["inputRef", ""], [1, "aui-input", "multi-search", 3, "ngClass"], [3, "removeCondition", "setConditionEditing", "setConditionDeleting", "search", "completed", "ngClass", "placeholder", "conditionCreatable", "existingConditions", "conditionConfig", "showFootAction"], [1, "input-wrapper", 3, "ngModelChange", "completed", "delete", "search", "isEditing", "hidden", "placeholder", "conditionCreatable", "conditionConfig", "existingConditions", "autoScroll", "ngModel", "showFootAction"], [1, "search-suffix"], ["class", "search-clear", 4, "ngIf"], ["class", "search-suffix", 4, "ngIf"], [1, "search-clear"], ["icon", "xmark_small", "size", "14", 1, "tw-text-n-4", "tw-cursor-pointer", 3, "click", "ngClass"], [1, "suffix-wrapper"], ["icon", "magnifier", 1, "tw-text-n-4", "tw-cursor-pointer", 3, "click", "ngClass"]], template: function MultiSearchComponent_Template(rf, ctx) { if (rf & 1) { const _r1 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "div", 3, 0); i0.ɵɵpipe(2, "async"); i0.ɵɵelementStart(3, "acl-multi-search-tags", 4, 1); i0.ɵɵpipe(5, "async"); i0.ɵɵpipe(6, "async"); i0.ɵɵlistener("removeCondition", function MultiSearchComponent_Template_acl_multi_search_tags_removeCondition_3_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.removeCondition($event)); })("setConditionEditing", function MultiSearchComponent_Template_acl_multi_search_tags_setConditionEditing_3_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.setConditionEditing($event)); })("setConditionDeleting", function MultiSearchComponent_Template_acl_multi_search_tags_setConditionDeleting_3_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.setConditionDeleting($event)); })("search", function MultiSearchComponent_Template_acl_multi_search_tags_search_3_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.doSearch()); })("completed", function MultiSearchComponent_Template_acl_multi_search_tags_completed_3_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.complete($event)); }); i0.ɵɵelementStart(7, "acl-multi-search-action-input", 5, 2); i0.ɵɵpipe(9, "async"); i0.ɵɵpipe(10, "async"); i0.ɵɵtwoWayListener("ngModelChange", function MultiSearchComponent_Template_acl_multi_search_action_input_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r1); i0.ɵɵtwoWayBindingSet(ctx.addedCondition, $event) || (ctx.addedCondition = $event); return i0.ɵɵresetView($event); }); i0.ɵɵlistener("completed", function MultiSearchComponent_Template_acl_multi_search_action_input_completed_7_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.complete($event)); })("delete", function MultiSearchComponent_Template_acl_multi_search_action_input_delete_7_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.setConditionDeleting()); })("search", function MultiSearchComponent_Template_acl_multi_search_action_input_search_7_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.doSearch()); }); i0.ɵɵelementEnd()(); i0.ɵɵelementStart(11, "div", 6); i0.ɵɵtemplate(12, MultiSearchComponent_div_12_Template, 2, 1, "div", 7); i0.ɵɵpipe(13, "async"); i0.ɵɵtemplate(14, MultiSearchComponent_div_14_Template, 3, 1, "div", 8); i0.ɵɵelementEnd()(); } if (rf & 2) { let tmp_4_0; let tmp_19_0; i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(30, _c3, i0.ɵɵpipeBind1(2, 18, ctx.focus$$))); i0.ɵɵadvance(3); i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction2(32, _c4, (tmp_4_0 = i0.ɵɵpipeBind1(5, 20, ctx.existingConditions$)) == null ? null : tmp_4_0.length, !((tmp_4_0 = i0.ɵɵpipeBind1(6, 22, ctx.existingConditions$)) == null ? null : tmp_4_0.length)))("placeholder", ctx.placeholder)("conditionCreatable", ctx.conditionCreatable)("existingConditions", ctx.existingConditions)("conditionConfig", ctx.conditionConfig)("showFootAction", ctx.showFootAction); i0.ɵɵadvance(4); i0.ɵɵproperty("isEditing", true)("hidden", i0.ɵɵpipeBind1(9, 24, ctx.addedInputShouldHidden$))("placeholder", ctx.placeholder)("conditionCreatable", ctx.conditionCreatable)("conditionConfig", ctx.conditionConfig)("existingConditions", i0.ɵɵpipeBind1(10, 26, ctx.existingConditions$))("autoScroll", ctx.autoScroll); i0.ɵɵtwoWayProperty("ngModel", ctx.addedCondition); i0.ɵɵproperty("showFootAction", ctx.showFootAction); i0.ɵɵadvance(5); i0.ɵɵproperty("ngIf", (tmp_19_0 = i0.ɵɵpipeBind1(13, 28, ctx.existingConditions$)) == null ? null : tmp_19_0.length); i0.ɵɵadvance(2); i0.ɵɵproperty("ngIf", ctx.searchSuffix); } }, dependencies: [NgClass, AsyncPipe, MultiSearchActionInputComponent, MultiSearchTagsComponent, NgIf, FormsModule, i1.NgControlStatus, i1.NgModel, IconComponent], styles: ["[_nghost-%COMP%]{min-width:0}.multi-search[_ngcontent-%COMP%]{min-width:240px;height:max-content;display:flex;align-items:stretch;padding:0;overflow-y:auto}.multi-search[_ngcontent-%COMP%] .tags-width[_ngcontent-%COMP%]{width:calc(100% - 30px)}.multi-search[_ngcontent-%COMP%] .tags-width-with-delete[_ngcontent-%COMP%]{width:calc(100% - 48px)}.multi-search[_ngcontent-%COMP%] .search-clear[_ngcontent-%COMP%]{width:18px;display:flex;align-items:center}.multi-search[_ngcontent-%COMP%] .search-clear-icon[_ngcontent-%COMP%] .aui-icon{border-radius:50%}.multi-search[_ngcontent-%COMP%] .search-clear-icon[_ngcontent-%COMP%] .aui-icon:hover{color:rgb(var(--aui-color-n-10));background-color:rgb(var(--aui-color-n-5))!important}.multi-search[_ngcontent-%COMP%] .search-suffix[_ngcontent-%COMP%]{display:flex;text-align:center}.multi-search[_ngcontent-%COMP%] .search-suffix[_ngcontent-%COMP%] .suffix-wrapper[_ngcontent-%COMP%]{margin-top:4px;margin-bottom:4px;height:calc(100% - 8px);border-left:solid 1px rgb(var(--aui-color-n-7));min-width:30px;display:flex;align-items:center;justify-content:center}.multi-search[_ngcontent-%COMP%] .search-suffix[_ngcontent-%COMP%] .suffix-wrapper[_ngcontent-%COMP%] aui-icon[_ngcontent-%COMP%]:hover{color:rgb(var(--aui-color-blue))}.search-focus[_ngcontent-%COMP%]{border-color:rgb(var(--aui-color-primary));box-shadow:0 0 0 2px rgba(var(--aui-color-primary),.16)}"], changeDetection: 0 }); } } __decorate([ ObservableInput(), __metadata("design:type", Observable) ], MultiSearchComponent.prototype, "conditions$", void 0); __decorate([ ObservableInput(), __metadata("design:type", Observable) ], MultiSearchComponent.prototype, "conditionConfig$", void 0); (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MultiSearchComponent, [{ type: Component, args: [{ selector: 'acl-multi-search', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [ NgClass, AsyncPipe, TagComponent, PurePipe, MultiSearchActionInputComponent, MultiSearchTagsComponent, NgFor, NgIf, InputComponent, FormsModule, IconComponent, ], template: "<div\n class=\"aui-input multi-search\"\n #multiSearch\n [ngClass]=\"{\n 'search-focus': focus$$ | async,\n }\"\n>\n <!-- \u5DF2\u9009\u62E9\u7C7B\u76EEtags -->\n <acl-multi-search-tags\n #tagsRef\n [ngClass]=\"{\n 'tags-width-with-delete': $any(existingConditions$ | async)?.length,\n 'tags-width': !$any(existingConditions$ | async)?.length,\n }\"\n [placeholder]=\"placeholder\"\n [conditionCreatable]=\"conditionCreatable\"\n [existingConditions]=\"existingConditions\"\n [conditionConfig]=\"conditionConfig\"\n (removeCondition)=\"removeCondition($event)\"\n (setConditionEditing)=\"setConditionEditing($event)\"\n (setConditionDeleting)=\"setConditionDeleting($event)\"\n [showFootAction]=\"showFootAction\"\n (search)=\"doSearch()\"\n (completed)=\"complete($event)\"\n >\n <!-- \u672B\u5C3E\u8F93\u5165\u6846 -->\n <acl-multi-search-action-input\n #inputRef\n class=\"input-wrapper\"\n [isEditing]=\"true\"\n [hidden]=\"addedInputShouldHidden$ | async\"\n [placeholder]=\"placeholder\"\n [conditionCreatable]=\"conditionCreatable\"\n [conditionConfig]=\"conditionConfig\"\n [existingConditions]=\"existingConditions$ | async\"\n [autoScroll]=\"autoScroll\"\n [(ngModel)]=\"addedCondition\"\n [showFootAction]=\"showFootAction\"\n (completed)=\"complete($event)\"\n (delete)=\"setConditionDeleting()\"\n (search)=\"doSearch()\"\n ></acl-multi-search-action-input>\n </acl-multi-search-tags>\n\n <div class=\"search-suffix\">\n <div\n *ngIf=\"$any(existingConditions$ | async)?.length\"\n class=\"search-clear\"\n >\n <aui-icon\n class=\"tw-text-n-4 tw-cursor-pointer\"\n [ngClass]=\"CLEAR_ICON_CLASS\"\n icon=\"xmark_small\"\n size=\"14\"\n (click)=\"clearConditions(); doSearch(); $event.stopPropagation()\"\n ></aui-icon>\n </div>\n <div\n class=\"search-suffix\"\n *ngIf=\"searchSuffix\"\n >\n <div class=\"suffix-wrapper\">\n <aui-icon\n class=\"tw-text-n-4 tw-cursor-pointer\"\n [ngClass]=\"SEARCH_ICON_CLASS\"\n icon=\"magnifier\"\n (click)=\"doSearch(); $event.stopPropagation()\"\n ></aui-icon>\n </div>\n </div>\n </div>\n</div>\n", styles: [":host{min-width:0}.multi-search{min-width:240px;height:max-content;display:flex;align-items:stretch;padding:0;overflow-y:auto}.multi-search .tags-width{width:calc(100% - 30px)}.multi-search .tags-width-with-delete{width:calc(100% - 48px)}.multi-search .search-clear{width:18px;display:flex;align-items:center}.multi-search .search-clear-icon ::ng-deep .aui-icon{border-radius:50%}.multi-search .search-clear-icon ::ng-deep .aui-icon:hover{color:rgb(var(--aui-color-n-10));background-color:rgb(var(--aui-color-n-5))!important}.multi-search .search-suffix{display:flex;text-align:center}.multi-search .search-suffix .suffix-wrapper{margin-top:4px;margin-bottom:4px;height:calc(100% - 8px);border-left:solid 1px rgb(var(--aui-color-n-7));min-width:30px;display:flex;align-items:center;justify-content:center}.multi-search .search-suffix .suffix-wrapper aui-icon:hover{color:rgb(var(--aui-color-blue))}.search-focus{border-color:rgb(var(--aui-color-primary));box-shadow:0 0 0 2px rgba(var(--aui-color-primary),.16)}\n"] }] }], () => [{ type: i0.ChangeDetectorRef }], { placeholder: [{ type: Input }], conditionCreatable: [{ type: Input }], conditions: [{ type: Input }], conditions$: [], conditionConfig: [{ type: Input }], conditionConfig$: [], autoScroll: [{ type: Input }], searchSuffix: [{ type: Input }], search: [{ type: Output }], showFootAction: [{ type: Input }], conditionsChange: [{ type: Output }], normalInputComponent: [{ type: ViewChild, args: ['inputRef'] }], tagsComponent: [{ type: ViewChild, args: ['tagsRef'] }], multiSearchRef: [{ type: ViewChild, args: ['multiSearch', { static: true }] }] }); })(); (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MultiSearchComponent, { className: "MultiSearchComponent" }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL211bHRpLXNlYXJjaC9mb3JtL2NvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy9tdWx0aS1zZWFyY2gvZm9ybS90ZW1wbGF0ZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDekUsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xFLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEQsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBQ2Isb0JBQW9CLEVBQ3BCLFNBQVMsRUFDVCxHQUFHLEVBQ0gsS0FBSyxFQUNMLFVBQVUsRUFDVixJQUFJLEVBQ0osT0FBTyxFQUNQLElBQUksRUFDSixTQUFTLEVBQ1QsR0FBRyxHQUNKLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxFQUNMLE9BQU8sRUFDUCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFFBQVEsR0FDVCxNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzVFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOzs7Ozs7Ozs7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b0JBQ1osUUFBUTtvQkFDUiwrQkFBK0I7b0JBQy9CLHdCQUF3QjtvQkFDeEIsS0FBSztvQkFDTCxJQUFJO29CQUNKLGNBQWM7b0JBQ2QsV0FBVztvQkFDWCxhQUFhO2lCQUNkO2tEQUlELFdBQVc7a0JBRFYsS0FBSztZQUlOLGtCQUFrQjtrQkFEakIsS0FBSztZQUtOLFVBQVU7a0JBRFQsS0FBSztZQUlOLFdBQVcsTUFJWCxlQUFlO2tCQURkLEtBQUs7WUFJTixnQkFBZ0IsTUFHaEIsVUFBVTtrQkFEVCxLQUFLO1lBSU4sWUFBWTtrQkFEWCxLQUFLO1lBS04sTUFBTTtrQkFETCxNQUFNO1lBSVAsY0FBYztrQkFEYixLQUFLO1lBS04sZ0JBQWdCO2tCQURmLE1BQU07WUFJUCxvQkFBb0I7a0JBRG5CLFNBQVM7bUJBQUMsVUFBVTtZQUlyQixhQUFhO2tCQURaLFNBQVM7bUJBQUMsU0FBUztZQUlwQixjQUFjO2tCQURiLFNBQVM7bUJBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTs7a0ZBNUMvQixvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJY29uQ29tcG9uZW50LCBJbnB1dENvbXBvbmVudCwgVGFnQ29tcG9uZW50IH0gZnJvbSAnQGFsYXVkYS91aSc7XG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nQ2xhc3MsIE5nRm9yLCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCBpc0VtcHR5LCBzZXQgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgZnJvbUV2ZW50LFxuICBtYXAsXG4gIG1lcmdlLFxuICBPYnNlcnZhYmxlLFxuICBzY2FuLFxuICBTdWJqZWN0LFxuICB0YWtlLFxuICB0YWtlVW50aWwsXG4gIHRhcCxcbn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7XG4gIGlzRXF1YWwsXG4gIE9ic2VydmFibGVJbnB1dCxcbiAgcHVibGlzaFJlZixcbiAgUHVyZVBpcGUsXG59IGZyb20gJy4uLy4uL2NvcmUvcHVibGljLWFwaSc7XG5pbXBvcnQgeyBNdWx0aVNlYXJjaEFjdGlvbklucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vYWN0aW9uLWlucHV0L2NvbXBvbmVudCc7XG5pbXBvcnQgeyBNdWx0aVNlYXJjaFRhZ3NDb21wb25lbnQgfSBmcm9tICcuLi9tdWx0aS1zZWFyY2gtdGFncy9jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgU2VhcmNoQ29uZGl0aW9uQ29uZmlnLFxuICBTZWFyY2hDb25kaXRpb24sXG4gIFNlYXJjaENvbmRpdGlvbk1vZGVsLFxufSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX09QRVJBVE9SOiBzdHJpbmcgPSAnPSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FjbC1tdWx0aS1zZWFyY2gnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICB0ZW1wbGF0ZVVybDogJy4vdGVtcGxhdGUuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3N0eWxlcy5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbXG4gICAgTmdDbGFzcyxcbiAgICBBc3luY1BpcGUsXG4gICAgVGFnQ29tcG9uZW50LFxuICAgIFB1cmVQaXBlLFxuICAgIE11bHRpU2VhcmNoQWN0aW9uSW5wdXRDb21wb25lbnQsXG4gICAgTXVsdGlTZWFyY2hUYWdzQ29tcG9uZW50LFxuICAgIE5nRm9yLFxuICAgIE5nSWYsXG4gICAgSW5wdXRDb21wb25lbnQsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgSWNvbkNvbXBvbmVudCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTXVsdGlTZWFyY2hDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBASW5wdXQoKVxuICBwbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XG5cbiAgQElucHV0KClcbiAgY29uZGl0aW9uQ3JlYXRhYmxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gc2VhcmNoIHZhbHVlXG4gIEBJbnB1dCgpXG4gIGNvbmRpdGlvbnM6IFNlYXJjaENvbmRpdGlvbltdO1xuXG4gIEBPYnNlcnZhYmxlSW5wdXQoKVxuICBjb25kaXRpb25zJCE6IE9ic2VydmFibGU8U2VhcmNoQ29uZGl0aW9uW10+O1xuXG4gIC8vIOexu+ebrumFjee9rlxuICBASW5wdXQoKVxuICBjb25kaXRpb25Db25maWc6IFNlYXJjaENvbmRpdGlvbkNvbmZpZ1tdO1xuXG4gIEBPYnNlcnZhYmxlSW5wdXQoKVxuICBjb25kaXRpb25Db25maWckITogT2JzZXJ2YWJsZTxTZWFyY2hDb25kaXRpb25Db25maWdbXT47XG5cbiAgQElucHV0KClcbiAgYXV0b1Njcm9sbDogYm9vbGVhbiA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgc2VhcmNoU3VmZml4OiBib29sZWFuID0gdHJ1ZTtcblxuICAvLyDmkJzntKLmk43kvZxcbiAgQE91dHB1dCgpXG4gIHNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8U2VhcmNoQ29uZGl0aW9uW10+KCk7XG5cbiAgQElucHV0KClcbiAgc2hvd0Zvb3RBY3Rpb246IGJvb2xlYW47XG5cbiAgLy8g5p2h5Lu25Y+Y5YyWXG4gIEBPdXRwdXQoKVxuICBjb25kaXRpb25zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxTZWFyY2hDb25kaXRpb25bXT4oKTtcblxuICBAVmlld0NoaWxkKCdpbnB1dFJlZicpXG4gIG5vcm1hbElucHV0Q29tcG9uZW50OiBNdWx0aVNlYXJjaEFjdGlvbklucHV0Q29tcG9uZW50O1xuXG4gIEBWaWV3Q2hpbGQoJ3RhZ3NSZWYnKVxuICB0YWdzQ29tcG9uZW50OiBNdWx0aVNlYXJjaFRhZ3NDb21wb25lbnQ7XG5cbiAgQFZpZXdDaGlsZCgnbXVsdGlTZWFyY2gnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBtdWx0aVNlYXJjaFJlZjogRWxlbWVudFJlZjtcblxuICBhZGRlZENvbmRpdGlvbjogU2VhcmNoQ29uZGl0aW9uTW9kZWw7XG5cbiAgLy8g5b2T5YmNbXVsdGktc2VhcmNo57uE5Lu25piv5ZCmZm9jdXNcbiAgZm9jdXMkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIGRlc3Ryb3kkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgYWN0aW9uU2Nhbm5lciQkID0gbmV3IFN1YmplY3Q8XG4gICAgKGl0ZW1zOiBTZWFyY2hDb25kaXRpb25Nb2RlbFtdKSA9PiBTZWFyY2hDb25kaXRpb25Nb2RlbFtdXG4gID4oKTtcblxuICBleGlzdGluZ0NvbmRpdGlvbnM6IFNlYXJjaENvbmRpdGlvbk1vZGVsW10gPSBbXTtcbiAgZXhpc3RpbmdDb25kaXRpb25zJCA9IG1lcmdlKFxuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuY29uZGl0aW9ucyQsIHRoaXMuY29uZGl0aW9uQ29uZmlnJF0pLnBpcGUoXG4gICAgICBtYXAoKFtjb25kaXRpb25zLCBjb25kaXRpb25Db25maWddKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlcyA9XG4gICAgICAgICAgY29uZGl0aW9ucz8ubWFwKGNvbmRpdGlvbiA9PiB7XG4gICAgICAgICAgICBjb25zdCBleGlzdCA9IHRoaXMuZXhpc3RpbmdDb25kaXRpb25zPy5maW5kKFxuICAgICAgICAgICAgICBleGlzdCA9PiBleGlzdC5jb25kaXRpb24udmFsdWUgPT09IGNvbmRpdGlvbi5jb25kaXRpb24sXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgY29uZmlnID0gY29uZGl0aW9uQ29uZmlnPy5maW5kKFxuICAgICAgICAgICAgICBjb25maWcgPT4gY29uZmlnLmNvbmRpdGlvbi52YWx1ZSA9PT0gY29uZGl0aW9uLmNvbmRpdGlvbixcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIC8vIOaJgOe7p+aJv+eahOaVsOaNru+8jOiLpeW3suWtmOWcqGV4aXN077yM5YiZ57un5om/ZXhpc3TvvJvoi6XkuI3lrZjlnKjvvIzliJnnu6fmib9jb25maWdcbiAgICAgICAgICAgIC8vIOatpOWkhOeahOe7p+aJv+aYr+S4uuS6humYsuatouWklueVjGNvbmRpdGlvbnPmlbDmja7nmoTlj5jljJblr7zoh7Tmk43kvZznirbmgIHliLfmlrBcbiAgICAgICAgICAgIC8vIOWboOatpO+8jOmZpOS6hmNvbmRpdGlvbnPmlbDmja7lpJbnmoTpmYTliqDmlbDmja7vvIzpg73lupTor6Xnu6fmib9cbiAgICAgICAgICAgIGNvbnN0IGluaGVyaXQgPSB7XG4gICAgICAgICAgICAgIC4uLmV4aXN0LFxuICAgICAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICByZXR1cm4gaXNFbXB0eShpbmhlcml0KVxuICAgICAgICAgICAgICA/ICh7XG4gICAgICAgICAgICAgICAgICBjb25kaXRpb246IHsgdmFsdWU6IGNvbmRpdGlvbi5jb25kaXRpb24gfSxcbiAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBjb25kaXRpb24ub3BlcmF0b3IsXG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZFZhbHVlczogY29uZGl0aW9uLnZhbHVlcz8ubWFwKHZhbHVlID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgICAgIH0gYXMgU2VhcmNoQ29uZGl0aW9uTW9kZWwpXG4gICAgICAgICAgICAgIDogKHtcbiAgICAgICAgICAgICAgICAgIC4uLmluaGVyaXQsXG4gICAgICAgICAgICAgICAgICBvcGVyYXRvcjogY29uZGl0aW9uLm9wZXJhdG9yLFxuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRWYWx1ZXM6IGNvbmRpdGlvbi52YWx1ZXM/Lm1hcCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmQgPSBpbmhlcml0LnZhbHVlcz8uZmluZChcbiAgICAgICAgICAgICAgICAgICAgICBpbmhlcml0VmFsdWUgPT4gaW5oZXJpdFZhbHVlLnZhbHVlID09PSB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbmRcbiAgICAgICAgICAgICAgICAgICAgICA/IHsgLi4uZmluZCB9XG4gICAgICAgICAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIH0gYXMgU2VhcmNoQ29uZGl0aW9uTW9kZWwpO1xuICAgICAgICAgIH0pIHx8IFtdO1xuICAgICAgICByZXR1cm4gKF86IFNlYXJjaENvbmRpdGlvbk1vZGVsW10pID0+IHJlcztcbiAgICAgIH0pLFxuICAgICksXG4gICAgdGhpcy5hY3Rpb25TY2FubmVyJCQsXG4gICkucGlwZShcbiAgICBzY2FuKChhY2MsIGN1cikgPT4gY3VyKGFjYyksIFtdIGFzIFNlYXJjaENvbmRpdGlvbk1vZGVsW10pLFxuICAgIHRhcChleGlzdGluZ0NvbmRpdGlvbnMgPT4ge1xuICAgICAgdGhpcy5leGlzdGluZ0NvbmRpdGlvbnMgPSBleGlzdGluZ0NvbmRpdGlvbnM7XG4gICAgfSksXG4gICAgcHVibGlzaFJlZigpLFxuICApO1xuXG4gIG5vRWRpdGluZ0NvbmRpdGlvbjogYm9vbGVhbiA9IHRydWU7XG4gIG5vRWRpdGluZ0NvbmRpdGlvbiQgPSB0aGlzLmV4aXN0aW5nQ29uZGl0aW9ucyQucGlwZShcbiAgICBtYXAoZXhpc3RpbmdDb25kaXRpb25zID0+XG4gICAgICBleGlzdGluZ0NvbmRpdGlvbnM/LmV2ZXJ5KGNvbmRpdGlvbiA9PiAhY29uZGl0aW9uLmlzRWRpdGluZyksXG4gICAgKSxcbiAgICB0YXAobm9FZGl0aW5nQ29uZGl0aW9uID0+ICh0aGlzLm5vRWRpdGluZ0NvbmRpdGlvbiA9IG5vRWRpdGluZ0NvbmRpdGlvbikpLFxuICAgIHB1Ymxpc2hSZWYoKSxcbiAgKTtcblxuICBub0RlbGV0aW5nQ29uZGl0aW9uOiBib29sZWFuID0gdHJ1ZTtcbiAgbm9EZWxldGluZ0NvbmRpdGlvbiQgPSB0aGlzLmV4aXN0aW5nQ29uZGl0aW9ucyQucGlwZShcbiAgICBtYXAoZXhpc3RpbmdDb25kaXRpb25zID0+XG4gICAgICBleGlzdGluZ0NvbmRpdGlvbnM/LmV2ZXJ5KGNvbmRpdGlvbiA9PiAhY29uZGl0aW9uLmlzRGVsZXRpbmcpLFxuICAgICksXG4gICAgdGFwKFxuICAgICAgbm9EZWxldGluZ0NvbmRpdGlvbiA9PiAodGhpcy5ub0RlbGV0aW5nQ29uZGl0aW9uID0gbm9EZWxldGluZ0NvbmRpdGlvbiksXG4gICAgKSxcbiAgICBwdWJsaXNoUmVmKCksXG4gICk7XG5cbiAgYWRkZWRJbnB1dFNob3VsZEhpZGRlbiQgPSBjb21iaW5lTGF0Z