ng-devui
Version:
DevUI components based on Angular
288 lines • 63 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { ChangeDetectorRef, Component, ElementRef, EventEmitter, forwardRef, HostBinding, Input, Output, TemplateRef, ViewChild, } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import { AutoCompleteDirective } from 'ng-devui/auto-complete';
import { addClassToOrigin, DevConfigService, removeClassFromOrigin, WithConfig } from 'ng-devui/utils';
import { of } from 'rxjs';
import * as i0 from "@angular/core";
import * as i1 from "ng-devui/utils";
import * as i2 from "@angular/common";
import * as i3 from "ng-devui/auto-complete";
import * as i4 from "@angular/forms";
import * as i5 from "ng-devui/tags";
export class MultiAutoCompleteComponent {
static { this.ID_SEED = 0; }
get hasGlowStyle() {
return this.showGlowStyle;
}
get placeholderView() {
if (this.multiItems.length > 0) {
return '';
}
else {
return this.placeholder;
}
}
constructor(changeDetectorRef, devConfigService) {
this.changeDetectorRef = changeDetectorRef;
this.devConfigService = devConfigService;
this.appendToBody = false;
this.appendToBodyDirections = ['rightDown', 'leftDown', 'rightUp', 'leftUp'];
/**
* @deprecated
* overview: border none multiline single
*/
this.overview = 'border';
this.placeholder = ''; // placeholder
this.disabled = false;
this.retainInputValue = false;
this.showAnimation = true;
this.showGlowStyle = true;
this.autoSubmit = new EventEmitter(); // 失焦自动提交
this.multiItems = [];
this.multipleLabelClassNameSuffix = this.overview;
this.inputEdit = false;
this.multipleLabelClassNameConfig = {
border: {
focus: 'border',
blur: 'border',
},
none: {
focus: 'border',
blur: 'none',
},
multiline: {
focus: 'multiline',
blur: 'multiline',
},
single: {
focus: 'single-focus',
blur: 'single',
},
};
this.clonePlaceholder = this.placeholder;
this.placement = 'bottom-left';
this.onChange = (_) => null;
this.onTouched = () => null;
this.formatter = (item) => (item ? item.label || item.toString() : '');
this.valueParser = (item) => item;
this.id = MultiAutoCompleteComponent.ID_SEED++;
}
writeValue(obj) {
const value = obj || [];
this.multiItems = value;
if (this.overview === 'single') {
this.inputEdit = this.multiItems.length === 0;
}
this.setSinglePlaceholder();
this.changeDetectorRef.markForCheck();
}
ngOnInit() {
if (this.source && !this.searchFn) {
this.searchFn = (term) => {
return of(this.source.filter((lang) => this.multiItems.indexOf(lang) === -1 && lang.toLowerCase().indexOf(term.toLowerCase()) !== -1));
};
}
}
ngOnChanges(changes) {
const { overview, placeholder } = changes;
if (overview) {
this.multipleLabelClassNameSuffix = overview.currentValue;
}
if (placeholder) {
this.clonePlaceholder = placeholder.currentValue;
}
}
registerOnChange(fn) {
this.onChange = fn;
}
registerOnTouched(fn) {
this.onTouched = fn;
}
singleClick($event) {
this.inputEdit = true;
}
onMultipleSearch(item) {
if (this.overview !== 'single' && item) {
let inArray = false;
for (let i = 0; i < this.multiItems.length; i++) {
if (item.label) {
if (item.label === this.multiItems[i].label) {
inArray = true;
break;
}
}
else {
if (item === this.multiItems[i]) {
inArray = true;
break;
}
}
}
if (!inArray) {
this.multiItems.push(item);
}
else {
this.multiItems = this.multiItems.filter((data) => {
if (data.label) {
return data.label !== item.label;
}
else {
return data !== item;
}
});
}
}
else if (this.overview === 'single' && item) {
this.multiItems = [];
this.multiItems.push(item);
this.inputEdit = false;
this.multipleLabelClassNameSuffix = this.multipleLabelClassNameConfig[this.overview].blur;
}
this.setSinglePlaceholder();
this.autoSubmit.emit(this.multiItems);
this.onChange(this.multiItems);
this.clearInputValue();
}
removeLabel(label) {
if (this.multiItems.indexOf(label) !== -1) {
this.multiItems = this.multiItems.filter((item) => item !== label);
}
this.setSinglePlaceholder();
this.autoSubmit.emit(this.multiItems);
this.onChange(this.multiItems);
}
getInputFocusFlag($event) {
this.inputEdit = this.multiItems.length === 0 || $event.focus;
this.popupRef = $event.popupRef;
this.setSinglePlaceholder();
if ($event.focus) {
this.multipleLabelClassNameSuffix = this.multipleLabelClassNameConfig[this.overview].focus;
setTimeout(() => {
// 这里需要等待一会才能聚焦
this.multiAutoCompleteInputElement.nativeElement.focus();
}, 0);
}
else {
this.multipleLabelClassNameSuffix = this.multipleLabelClassNameConfig[this.overview].blur;
this.clearInputValue();
this.autoSubmit.emit(this.multiItems);
}
}
clearInputValue() {
if (!this.retainInputValue) {
this.inputValue = null;
this.multiAutoCompleteInputElement.nativeElement.value = '';
}
}
onBackspaceKeyUp($event, inputValue) {
if (this.multiItems.length > 0 && !inputValue) {
this.multiItems.pop();
}
this.setSinglePlaceholder();
this.autoSubmit.emit(this.multiItems);
this.onChange(this.multiItems);
}
setSinglePlaceholder() {
if (this.overview === 'single') {
if (this.multiItems && this.multiItems.length > 0) {
this.placeholder = '';
}
else {
this.placeholder = this.clonePlaceholder;
}
}
}
changePopUp(open) {
if (open) {
addClassToOrigin(this.multiAutoCompleteWrapperElement);
}
else {
removeClassFromOrigin(this.multiAutoCompleteWrapperElement);
}
}
inputBlur() {
this.onTouched();
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MultiAutoCompleteComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.DevConfigService }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MultiAutoCompleteComponent, selector: "d-multi-auto-complete", inputs: { appendToBody: "appendToBody", appendToBodyDirections: "appendToBodyDirections", cssClass: "cssClass", overview: "overview", tipsText: "tipsText", placeholder: "placeholder", disabled: "disabled", retainInputValue: "retainInputValue", source: "source", latestSource: "latestSource", disabledKey: "disabledKey", width: "width", itemTemplate: "itemTemplate", noResultItemTemplate: "noResultItemTemplate", delay: "delay", searchFn: "searchFn", formatter: "formatter", valueParser: "valueParser", showAnimation: "showAnimation", showGlowStyle: "showGlowStyle" }, outputs: { autoSubmit: "autoSubmit" }, host: { properties: { "class.devui-glow-style": "this.hasGlowStyle" } }, providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => MultiAutoCompleteComponent),
multi: true,
},
], viewQueries: [{ propertyName: "multiAutoCompleteInputElement", first: true, predicate: ["multiAutoCompleteInput"], descendants: true }, { propertyName: "multiAutoCompleteWrapperElement", first: true, predicate: ["multiAutoCompleteWrapper"], descendants: true }, { propertyName: "autoCompleteDirective", first: true, predicate: AutoCompleteDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"form-group multi-auto-complete\">\n <label\n for=\"multiple-label-auto-complete-{{ id }}\"\n class=\"multiple-label-auto-complete multiple-label-auto-complete-{{ multipleLabelClassNameSuffix }}\"\n [ngClass]=\"{ 'multiple-label-auto-complete-disabled': disabled }\"\n >\n <ul *ngIf=\"overview !== 'single'\" class=\"devui-dropdown-origin\" #multiAutoCompleteWrapper>\n <li *ngFor=\"let item of multiItems\">\n <ng-template\n [ngTemplateOutlet]=\"disabled || (overview === 'none' && !inputEdit) ? transparentTemplate : defaultTemplate\"\n [ngTemplateOutletContext]=\"{\n item: item,\n formatter: formatter,\n parent: multiItems\n }\"\n ></ng-template>\n </li>\n <li *ngIf=\"!disabled\">\n <input\n #multiAutoCompleteInput\n id=\"multiple-label-auto-complete-{{ id }}\"\n type=\"text\"\n name=\"autoCompleteControl\"\n class=\"auto-complete-control\"\n [placeholder]=\"placeholderView\"\n [tipsText]=\"tipsText\"\n [latestSource]=\"latestSource\"\n (selectValue)=\"onMultipleSearch($event)\"\n (transInputFocusEmit)=\"getInputFocusFlag($event)\"\n (keydown.backspace)=\"onBackspaceKeyUp($event, inputValue)\"\n [formatter]=\"formatter\"\n [valueParser]=\"valueParser\"\n [itemTemplate]=\"itemTemplate\"\n [noResultItemTemplate]=\"noResultItemTemplate\"\n [cssClass]=\"cssClass\"\n [overview]=\"overview\"\n [disabled]=\"disabled\"\n [(ngModel)]=\"inputValue\"\n [delay]=\"delay\"\n [dAutoCompleteWidth]=\"width\"\n dAutoComplete\n [retainInputValue]=\"retainInputValue\"\n [showAnimation]=\"showAnimation\"\n [searchFn]=\"searchFn\"\n [appendToBody]=\"appendToBody\"\n [appendToBodyDirections]=\"appendToBodyDirections\"\n [cdkOverlayOffsetY]=\"3\"\n [disabledKey]=\"disabledKey\"\n (blur)=\"inputBlur()\"\n (changeDropDownStatus)=\"changePopUp($event)\"\n />\n </li>\n </ul>\n\n <!--\u5355\u9009\u6A21\u677F-->\n <ul *ngIf=\"overview === 'single'\" title=\"{{ formatter(multiItems[0]) }}\" (click)=\"singleClick($event)\">\n <li *ngFor=\"let item of multiItems\">\n <ng-template\n [ngTemplateOutlet]=\"transparentTemplate\"\n [ngTemplateOutletContext]=\"{\n item: item,\n formatter: formatter,\n parent: multiItems\n }\"\n ></ng-template>\n </li>\n <li *ngIf=\"!disabled && inputEdit\">\n <input\n #multiAutoCompleteInput\n id=\"multiple-label-auto-complete-{{ id }}\"\n type=\"text\"\n name=\"autoCompleteControl\"\n class=\"auto-complete-control\"\n [placeholder]=\"placeholder\"\n [tipsText]=\"tipsText\"\n [latestSource]=\"latestSource\"\n (selectValue)=\"onMultipleSearch($event)\"\n (transInputFocusEmit)=\"getInputFocusFlag($event)\"\n (keydown.backspace)=\"onBackspaceKeyUp($event, inputValue)\"\n [formatter]=\"formatter\"\n [valueParser]=\"valueParser\"\n [itemTemplate]=\"itemTemplate\"\n [noResultItemTemplate]=\"noResultItemTemplate\"\n [cssClass]=\"cssClass\"\n [overview]=\"overview\"\n [disabled]=\"disabled\"\n [(ngModel)]=\"inputValue\"\n [delay]=\"delay\"\n [dAutoCompleteWidth]=\"width\"\n dAutoComplete\n [searchFn]=\"searchFn\"\n (blur)=\"inputBlur()\"\n (changeDropDownStatus)=\"changePopUp($event)\"\n />\n </li>\n </ul>\n </label>\n</div>\n\n<!--\u9EC4\u5E95\u6A21\u677F-->\n<ng-template #defaultTemplate let-item=\"item\" let-formatter=\"formatter\">\n <d-tag [deletable]=\"true\" [tag]=\"formatter(item)\" (tagDelete)=\"removeLabel(item)\"></d-tag>\n</ng-template>\n\n<!--\u65E0\u5E95\u8272\u6A21\u677F-->\n<ng-template #transparentTemplate let-item=\"item\" let-formatter=\"formatter\" let-parent=\"parent\">\n <d-tag [tag]=\"formatter(item)\"></d-tag>\n</ng-template>\n", styles: [".devui-font-size-base{font-size:var(--devui-font-size, 12px)}.devui-font-base{font-size:var(--devui-font-size, 12px);font-weight:var(--devui-font-content-weight, normal);line-height:var(--devui-line-height-base, 1.5)}.devui-font-size-modal-title{font-size:var(--devui-font-size-modal-title, 18px)}.devui-font-modal-title{font-size:var(--devui-font-size-modal-title, 18px);font-weight:var(--devui-font-title-weight, bold);line-height:var(--devui-line-height-base, 1.5)}.devui-font-size-page-title{font-size:var(--devui-font-size-page-title, 16px)}.devui-font-page-title{font-size:var(--devui-font-size-page-title, 16px);font-weight:var(--devui-font-title-weight, bold);line-height:var(--devui-line-height-base, 1.5)}.devui-font-size-secondary-title{font-size:var(--devui-font-size-card-title, 14px)}.devui-font-secondary-title{font-size:var(--devui-font-size-card-title, 14px);font-weight:var(--devui-font-title-weight, bold);line-height:var(--devui-line-height-base, 1.5)}.form-group label{cursor:pointer;font-size:var(--devui-font-size, 12px);margin-bottom:0;width:100%}.multiple-label-auto-complete{padding:0;font-weight:400}.multiple-label-auto-complete ul{display:flex;flex-wrap:wrap;align-items:center;list-style:none;background:var(--devui-base-bg, #ffffff);border-radius:var(--devui-border-radius, 2px);padding:4px 4px 0}.multiple-label-auto-complete-single ul,.multiple-label-auto-complete-single-focus ul,.multiple-label-auto-complete-border ul,.multiple-label-auto-complete-multiline ul{border:1px solid var(--devui-line, #dbdbdb)}.multiple-label-auto-complete-single ul:hover,.multiple-label-auto-complete-single-focus ul:hover,.multiple-label-auto-complete-border ul:hover,.multiple-label-auto-complete-multiline ul:hover{border-color:var(--devui-form-control-line-hover, #808080)}.multiple-label-auto-complete-single ul:active,.multiple-label-auto-complete-single-focus ul:active,.multiple-label-auto-complete-border ul:active,.multiple-label-auto-complete-multiline ul:active{border-color:var(--devui-form-control-line-active, #0a59f7)}.multiple-label-auto-complete-single ul,.multiple-label-auto-complete-single-focus ul{overflow:hidden}.multiple-label-auto-complete-multiline ul{height:60px;overflow:auto}.multiple-label-auto-complete-none ul{border:1px solid transparent}.multiple-label-auto-complete-none ul:hover,.multiple-label-auto-complete-none ul:active{border-color:transparent}.multiple-label-auto-complete:not(.multiple-label-auto-complete-disabled) ul li:last-child{border-color:transparent}.multiple-label-auto-complete.multiple-label-auto-complete-disabled ul{cursor:not-allowed}.multiple-label-auto-complete.multiple-label-auto-complete-disabled ul,.multiple-label-auto-complete.multiple-label-auto-complete-disabled ul:hover{border-color:var(--devui-disabled-line, #e6e6e6);background-color:var(--devui-disabled-bg, #f3f3f3)}.multiple-label-auto-complete.multiple-label-auto-complete-disabled ul li{border-color:var(--devui-disabled-line, #e6e6e6)}.multiple-label-auto-complete.multiple-label-auto-complete-disabled ul li .label-text,.multiple-label-auto-complete.multiple-label-auto-complete-disabled ul li .label-text:hover{background-color:var(--devui-disabled-bg, #f3f3f3);color:var(--devui-disabled-text, #c2c2c2)}.multiple-label-auto-complete ul::-ms-expand{border:0;background-color:transparent}::-ms-clear,::-ms-reveal{display:none}.multiple-label-auto-complete ul li{position:relative;display:inline-block;line-height:1;margin:0 4px 4px 0}.multiple-label-auto-complete-none ul li{margin-right:0}.multiple-label-auto-complete-single ul li,.multiple-label-auto-complete-single-focus ul li,.multiple-label-auto-complete-multiline ul li{position:static}.multiple-label-auto-complete-single ul li,.multiple-label-auto-complete-single-focus ul li{float:left;width:100%}.multiple-label-auto-complete-single-focus ul li:first-child{max-width:calc(100% - 5px);margin-right:0;width:auto}.multiple-label-auto-complete-single-focus ul li:last-child{width:5px;margin-right:0;margin-left:0}.multiple-label-auto-complete ul li .label-close,.multiple-label-auto-complete ul li .label-text{font-size:var(--devui-font-size, 12px);line-height:20px;padding:0 8px;color:var(--devui-text-weak, #333333);font-weight:400;background-color:var(--devui-label-bg, #f0f0f0)}.multiple-label-auto-complete ul li .label-close{padding-left:4px;display:flex;align-items:center}.multiple-label-auto-complete ul li .label-close svg rect{fill:var(--devui-line, #dbdbdb)}.multiple-label-auto-complete ul li .label-close svg path{fill:var(--devui-light-text, #ffffff)}.multiple-label-auto-complete ul li .label-close:hover svg rect{fill:var(--devui-icon-fill-active-hover, #000000)}.multiple-label-auto-complete ul li .label-text:hover{color:var(--devui-icon-fill-active-hover, #000000)}.multiple-label-auto-complete ul li .label-text{border-radius:var(--devui-border-radius, 2px) 0 0 var(--devui-border-radius, 2px)}.multiple-label-auto-complete ul li .label-close{cursor:pointer;border-radius:0 var(--devui-border-radius, 2px) var(--devui-border-radius, 2px) 0}.multiple-label-auto-complete-single ul li .label-text,.multiple-label-auto-complete-single-focus ul li .label-text,.multiple-label-auto-complete-none ul li .label-text{background-color:transparent}.multiple-label-auto-complete-single ul li .label-text{width:100%;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;height:20px;line-height:20px}.multiple-label-auto-complete-single-focus ul li .label-text{width:100%;text-align:left;display:block;height:20px;line-height:20px}.multiple-label-auto-complete .auto-complete-control{min-width:160px;height:20px;border:none;outline:none;background:var(--devui-base-bg, #ffffff);color:var(--devui-text, #191919)}.multiple-label-auto-complete .auto-complete-control:focus,.multiple-label-auto-complete .auto-complete-control:hover{border:none;outline:none}.multiple-label-auto-complete-none .auto-complete-control{width:0}:host label{color:inherit}:host ::ng-deep .multiple-label-auto-complete-disabled li{border:solid 1px var(--devui-disabled-line, #e6e6e6);border-radius:var(--devui-border-radius, 2px)}:host ::ng-deep .multiple-label-auto-complete-disabled li d-tag .devui-tag-item{background-color:var(--devui-disabled-bg, #f3f3f3);color:var(--devui-disabled-text, #c2c2c2);cursor:not-allowed}:host ::ng-deep .multiple-label-auto-complete-border ul li .devui-dropdown-menu{margin-top:8px}:host ::ng-deep .multiple-label-auto-complete-multiline ul li .devui-dropdown-menu{margin-top:0;width:170px}:host-context(d-data-table) .multiple-label-auto-complete-single ul,:host-context(d-data-table) .multiple-label-auto-complete-single ul li .auto-complete-control{border-color:transparent;background-color:transparent}:host-context(d-data-table) .multiple-label-auto-complete-single ul{padding-left:0}\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: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.AutoCompleteDirective, selector: "[dAutoComplete]", inputs: ["disabled", "cssClass", "delay", "showGlowStyle", "minLength", "itemTemplate", "noResultItemTemplate", "searchingTemplate", "isSearching", "appendToBody", "appendToBodyDirections", "appendToBodyScrollStrategy", "cdkOverlayOffsetY", "dAutoCompleteWidth", "formatter", "sceneType", "tipsText", "overview", "latestSource", "source", "valueParser", "searchFn", "dropdown", "maxHeight", "disabledKey", "showAnimation", "enableLazyLoad", "retainInputValue", "allowEmptyValueSearch", "customViewTemplate", "customViewDirection"], outputs: ["loadMore", "selectValue", "transInputFocusEmit", "changeDropDownStatus", "toggleChange", "hoverItem"], exportAs: ["autoComplete"] }, { kind: "directive", type: i4.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: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.TagComponent, selector: "d-tag", inputs: ["tag", "labelStyle", "customColor", "deletable", "titleContent", "mode", "size", "checked", "maxWidth", "customViewTemplate", "beforeDelete"], outputs: ["tagDelete", "checkedChange"], exportAs: ["Tag"] }] }); }
}
__decorate([
WithConfig(),
__metadata("design:type", Object)
], MultiAutoCompleteComponent.prototype, "showAnimation", void 0);
__decorate([
WithConfig(),
__metadata("design:type", Object)
], MultiAutoCompleteComponent.prototype, "showGlowStyle", void 0);
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MultiAutoCompleteComponent, decorators: [{
type: Component,
args: [{ selector: 'd-multi-auto-complete', providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => MultiAutoCompleteComponent),
multi: true,
},
], preserveWhitespaces: false, template: "<div class=\"form-group multi-auto-complete\">\n <label\n for=\"multiple-label-auto-complete-{{ id }}\"\n class=\"multiple-label-auto-complete multiple-label-auto-complete-{{ multipleLabelClassNameSuffix }}\"\n [ngClass]=\"{ 'multiple-label-auto-complete-disabled': disabled }\"\n >\n <ul *ngIf=\"overview !== 'single'\" class=\"devui-dropdown-origin\" #multiAutoCompleteWrapper>\n <li *ngFor=\"let item of multiItems\">\n <ng-template\n [ngTemplateOutlet]=\"disabled || (overview === 'none' && !inputEdit) ? transparentTemplate : defaultTemplate\"\n [ngTemplateOutletContext]=\"{\n item: item,\n formatter: formatter,\n parent: multiItems\n }\"\n ></ng-template>\n </li>\n <li *ngIf=\"!disabled\">\n <input\n #multiAutoCompleteInput\n id=\"multiple-label-auto-complete-{{ id }}\"\n type=\"text\"\n name=\"autoCompleteControl\"\n class=\"auto-complete-control\"\n [placeholder]=\"placeholderView\"\n [tipsText]=\"tipsText\"\n [latestSource]=\"latestSource\"\n (selectValue)=\"onMultipleSearch($event)\"\n (transInputFocusEmit)=\"getInputFocusFlag($event)\"\n (keydown.backspace)=\"onBackspaceKeyUp($event, inputValue)\"\n [formatter]=\"formatter\"\n [valueParser]=\"valueParser\"\n [itemTemplate]=\"itemTemplate\"\n [noResultItemTemplate]=\"noResultItemTemplate\"\n [cssClass]=\"cssClass\"\n [overview]=\"overview\"\n [disabled]=\"disabled\"\n [(ngModel)]=\"inputValue\"\n [delay]=\"delay\"\n [dAutoCompleteWidth]=\"width\"\n dAutoComplete\n [retainInputValue]=\"retainInputValue\"\n [showAnimation]=\"showAnimation\"\n [searchFn]=\"searchFn\"\n [appendToBody]=\"appendToBody\"\n [appendToBodyDirections]=\"appendToBodyDirections\"\n [cdkOverlayOffsetY]=\"3\"\n [disabledKey]=\"disabledKey\"\n (blur)=\"inputBlur()\"\n (changeDropDownStatus)=\"changePopUp($event)\"\n />\n </li>\n </ul>\n\n <!--\u5355\u9009\u6A21\u677F-->\n <ul *ngIf=\"overview === 'single'\" title=\"{{ formatter(multiItems[0]) }}\" (click)=\"singleClick($event)\">\n <li *ngFor=\"let item of multiItems\">\n <ng-template\n [ngTemplateOutlet]=\"transparentTemplate\"\n [ngTemplateOutletContext]=\"{\n item: item,\n formatter: formatter,\n parent: multiItems\n }\"\n ></ng-template>\n </li>\n <li *ngIf=\"!disabled && inputEdit\">\n <input\n #multiAutoCompleteInput\n id=\"multiple-label-auto-complete-{{ id }}\"\n type=\"text\"\n name=\"autoCompleteControl\"\n class=\"auto-complete-control\"\n [placeholder]=\"placeholder\"\n [tipsText]=\"tipsText\"\n [latestSource]=\"latestSource\"\n (selectValue)=\"onMultipleSearch($event)\"\n (transInputFocusEmit)=\"getInputFocusFlag($event)\"\n (keydown.backspace)=\"onBackspaceKeyUp($event, inputValue)\"\n [formatter]=\"formatter\"\n [valueParser]=\"valueParser\"\n [itemTemplate]=\"itemTemplate\"\n [noResultItemTemplate]=\"noResultItemTemplate\"\n [cssClass]=\"cssClass\"\n [overview]=\"overview\"\n [disabled]=\"disabled\"\n [(ngModel)]=\"inputValue\"\n [delay]=\"delay\"\n [dAutoCompleteWidth]=\"width\"\n dAutoComplete\n [searchFn]=\"searchFn\"\n (blur)=\"inputBlur()\"\n (changeDropDownStatus)=\"changePopUp($event)\"\n />\n </li>\n </ul>\n </label>\n</div>\n\n<!--\u9EC4\u5E95\u6A21\u677F-->\n<ng-template #defaultTemplate let-item=\"item\" let-formatter=\"formatter\">\n <d-tag [deletable]=\"true\" [tag]=\"formatter(item)\" (tagDelete)=\"removeLabel(item)\"></d-tag>\n</ng-template>\n\n<!--\u65E0\u5E95\u8272\u6A21\u677F-->\n<ng-template #transparentTemplate let-item=\"item\" let-formatter=\"formatter\" let-parent=\"parent\">\n <d-tag [tag]=\"formatter(item)\"></d-tag>\n</ng-template>\n", styles: [".devui-font-size-base{font-size:var(--devui-font-size, 12px)}.devui-font-base{font-size:var(--devui-font-size, 12px);font-weight:var(--devui-font-content-weight, normal);line-height:var(--devui-line-height-base, 1.5)}.devui-font-size-modal-title{font-size:var(--devui-font-size-modal-title, 18px)}.devui-font-modal-title{font-size:var(--devui-font-size-modal-title, 18px);font-weight:var(--devui-font-title-weight, bold);line-height:var(--devui-line-height-base, 1.5)}.devui-font-size-page-title{font-size:var(--devui-font-size-page-title, 16px)}.devui-font-page-title{font-size:var(--devui-font-size-page-title, 16px);font-weight:var(--devui-font-title-weight, bold);line-height:var(--devui-line-height-base, 1.5)}.devui-font-size-secondary-title{font-size:var(--devui-font-size-card-title, 14px)}.devui-font-secondary-title{font-size:var(--devui-font-size-card-title, 14px);font-weight:var(--devui-font-title-weight, bold);line-height:var(--devui-line-height-base, 1.5)}.form-group label{cursor:pointer;font-size:var(--devui-font-size, 12px);margin-bottom:0;width:100%}.multiple-label-auto-complete{padding:0;font-weight:400}.multiple-label-auto-complete ul{display:flex;flex-wrap:wrap;align-items:center;list-style:none;background:var(--devui-base-bg, #ffffff);border-radius:var(--devui-border-radius, 2px);padding:4px 4px 0}.multiple-label-auto-complete-single ul,.multiple-label-auto-complete-single-focus ul,.multiple-label-auto-complete-border ul,.multiple-label-auto-complete-multiline ul{border:1px solid var(--devui-line, #dbdbdb)}.multiple-label-auto-complete-single ul:hover,.multiple-label-auto-complete-single-focus ul:hover,.multiple-label-auto-complete-border ul:hover,.multiple-label-auto-complete-multiline ul:hover{border-color:var(--devui-form-control-line-hover, #808080)}.multiple-label-auto-complete-single ul:active,.multiple-label-auto-complete-single-focus ul:active,.multiple-label-auto-complete-border ul:active,.multiple-label-auto-complete-multiline ul:active{border-color:var(--devui-form-control-line-active, #0a59f7)}.multiple-label-auto-complete-single ul,.multiple-label-auto-complete-single-focus ul{overflow:hidden}.multiple-label-auto-complete-multiline ul{height:60px;overflow:auto}.multiple-label-auto-complete-none ul{border:1px solid transparent}.multiple-label-auto-complete-none ul:hover,.multiple-label-auto-complete-none ul:active{border-color:transparent}.multiple-label-auto-complete:not(.multiple-label-auto-complete-disabled) ul li:last-child{border-color:transparent}.multiple-label-auto-complete.multiple-label-auto-complete-disabled ul{cursor:not-allowed}.multiple-label-auto-complete.multiple-label-auto-complete-disabled ul,.multiple-label-auto-complete.multiple-label-auto-complete-disabled ul:hover{border-color:var(--devui-disabled-line, #e6e6e6);background-color:var(--devui-disabled-bg, #f3f3f3)}.multiple-label-auto-complete.multiple-label-auto-complete-disabled ul li{border-color:var(--devui-disabled-line, #e6e6e6)}.multiple-label-auto-complete.multiple-label-auto-complete-disabled ul li .label-text,.multiple-label-auto-complete.multiple-label-auto-complete-disabled ul li .label-text:hover{background-color:var(--devui-disabled-bg, #f3f3f3);color:var(--devui-disabled-text, #c2c2c2)}.multiple-label-auto-complete ul::-ms-expand{border:0;background-color:transparent}::-ms-clear,::-ms-reveal{display:none}.multiple-label-auto-complete ul li{position:relative;display:inline-block;line-height:1;margin:0 4px 4px 0}.multiple-label-auto-complete-none ul li{margin-right:0}.multiple-label-auto-complete-single ul li,.multiple-label-auto-complete-single-focus ul li,.multiple-label-auto-complete-multiline ul li{position:static}.multiple-label-auto-complete-single ul li,.multiple-label-auto-complete-single-focus ul li{float:left;width:100%}.multiple-label-auto-complete-single-focus ul li:first-child{max-width:calc(100% - 5px);margin-right:0;width:auto}.multiple-label-auto-complete-single-focus ul li:last-child{width:5px;margin-right:0;margin-left:0}.multiple-label-auto-complete ul li .label-close,.multiple-label-auto-complete ul li .label-text{font-size:var(--devui-font-size, 12px);line-height:20px;padding:0 8px;color:var(--devui-text-weak, #333333);font-weight:400;background-color:var(--devui-label-bg, #f0f0f0)}.multiple-label-auto-complete ul li .label-close{padding-left:4px;display:flex;align-items:center}.multiple-label-auto-complete ul li .label-close svg rect{fill:var(--devui-line, #dbdbdb)}.multiple-label-auto-complete ul li .label-close svg path{fill:var(--devui-light-text, #ffffff)}.multiple-label-auto-complete ul li .label-close:hover svg rect{fill:var(--devui-icon-fill-active-hover, #000000)}.multiple-label-auto-complete ul li .label-text:hover{color:var(--devui-icon-fill-active-hover, #000000)}.multiple-label-auto-complete ul li .label-text{border-radius:var(--devui-border-radius, 2px) 0 0 var(--devui-border-radius, 2px)}.multiple-label-auto-complete ul li .label-close{cursor:pointer;border-radius:0 var(--devui-border-radius, 2px) var(--devui-border-radius, 2px) 0}.multiple-label-auto-complete-single ul li .label-text,.multiple-label-auto-complete-single-focus ul li .label-text,.multiple-label-auto-complete-none ul li .label-text{background-color:transparent}.multiple-label-auto-complete-single ul li .label-text{width:100%;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;height:20px;line-height:20px}.multiple-label-auto-complete-single-focus ul li .label-text{width:100%;text-align:left;display:block;height:20px;line-height:20px}.multiple-label-auto-complete .auto-complete-control{min-width:160px;height:20px;border:none;outline:none;background:var(--devui-base-bg, #ffffff);color:var(--devui-text, #191919)}.multiple-label-auto-complete .auto-complete-control:focus,.multiple-label-auto-complete .auto-complete-control:hover{border:none;outline:none}.multiple-label-auto-complete-none .auto-complete-control{width:0}:host label{color:inherit}:host ::ng-deep .multiple-label-auto-complete-disabled li{border:solid 1px var(--devui-disabled-line, #e6e6e6);border-radius:var(--devui-border-radius, 2px)}:host ::ng-deep .multiple-label-auto-complete-disabled li d-tag .devui-tag-item{background-color:var(--devui-disabled-bg, #f3f3f3);color:var(--devui-disabled-text, #c2c2c2);cursor:not-allowed}:host ::ng-deep .multiple-label-auto-complete-border ul li .devui-dropdown-menu{margin-top:8px}:host ::ng-deep .multiple-label-auto-complete-multiline ul li .devui-dropdown-menu{margin-top:0;width:170px}:host-context(d-data-table) .multiple-label-auto-complete-single ul,:host-context(d-data-table) .multiple-label-auto-complete-single ul li .auto-complete-control{border-color:transparent;background-color:transparent}:host-context(d-data-table) .multiple-label-auto-complete-single ul{padding-left:0}\n"] }]
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.DevConfigService }], propDecorators: { appendToBody: [{
type: Input
}], appendToBodyDirections: [{
type: Input
}], cssClass: [{
type: Input
}], overview: [{
type: Input
}], tipsText: [{
type: Input
}], placeholder: [{
type: Input
}], disabled: [{
type: Input
}], retainInputValue: [{
type: Input
}], source: [{
type: Input
}], latestSource: [{
type: Input
}], disabledKey: [{
type: Input
}], width: [{
type: Input
}], itemTemplate: [{
type: Input
}], noResultItemTemplate: [{
type: Input
}], delay: [{
type: Input
}], searchFn: [{
type: Input
}], formatter: [{
type: Input
}], valueParser: [{
type: Input
}], showAnimation: [{
type: Input
}], showGlowStyle: [{
type: Input
}], hasGlowStyle: [{
type: HostBinding,
args: ['class.devui-glow-style']
}], autoSubmit: [{
type: Output
}], multiAutoCompleteInputElement: [{
type: ViewChild,
args: ['multiAutoCompleteInput']
}], multiAutoCompleteWrapperElement: [{
type: ViewChild,
args: ['multiAutoCompleteWrapper']
}], autoCompleteDirective: [{
type: ViewChild,
args: [AutoCompleteDirective]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktYXV0by1jb21wbGV0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9kZXZ1aS9tdWx0aS1hdXRvLWNvbXBsZXRlL211bHRpLWF1dG8tY29tcGxldGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZGV2dWkvbXVsdGktYXV0by1jb21wbGV0ZS9tdWx0aS1hdXRvLWNvbXBsZXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFNBQVMsRUFFVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixXQUFXLEVBQ1gsS0FBSyxFQUdMLE1BQU0sRUFFTixXQUFXLEVBQ1gsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUscUJBQXFCLEVBQThCLE1BQU0sd0JBQXdCLENBQUM7QUFDM0YsT0FBTyxFQUFFLGdCQUFnQixFQUF5QixnQkFBZ0IsRUFBRSxxQkFBcUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5SCxPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7O0FBZXRDLE1BQU0sT0FBTywwQkFBMEI7YUFDOUIsWUFBTyxHQUFHLENBQUMsQUFBSixDQUFLO0lBNEJuQixJQUEyQyxZQUFZO1FBQ3JELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBNkJELElBQUksZUFBZTtRQUNqQixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQy9CLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDMUIsQ0FBQztJQUNILENBQUM7SUFTRCxZQUFvQixpQkFBb0MsRUFB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SztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDaUIsYUFBYTtzQkFBbkMsS0FBSztnQkFDaUIsYUFBYTtzQkFBbkMsS0FBSztnQkFDcUMsWUFBWTtzQkFBdEQsV0FBVzt1QkFBQyx3QkFBd0I7Z0JBRzNCLFVBQVU7c0JBQW5CLE1BQU07Z0JBQzhCLDZCQUE2QjtzQkFBakUsU0FBUzt1QkFBQyx3QkFBd0I7Z0JBQ0ksK0JBQStCO3NCQUFyRSxTQUFTO3VCQUFDLDBCQUEwQjtnQkFDSCxxQkFBcUI7c0JBQXRELFNBQVM7dUJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29ubmVjdGVkUG9zaXRpb24gfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XHJcbmltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIENvbXBvbmVudFJlZixcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBmb3J3YXJkUmVmLFxyXG4gIEhvc3RCaW5kaW5nLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEF1dG9Db21wbGV0ZURpcmVjdGl2ZSwgQXV0b0NvbXBsZXRlUG9wdXBDb21wb25lbnQgfSBmcm9tICduZy1kZXZ1aS9hdXRvLWNvbXBsZXRlJztcclxuaW1wb3J0IHsgYWRkQ2xhc3NUb09yaWdpbiwgQXBwZW5kVG9Cb2R5RGlyZWN0aW9uLCBEZXZDb25maWdTZXJ2aWNlLCByZW1vdmVDbGFzc0Zyb21PcmlnaW4sIFdpdGhDb25maWcgfSBmcm9tICduZy1kZXZ1aS91dGlscyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2QtbXVsdGktYXV0by1jb21wbGV0ZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL211bHRpLWF1dG8tY29tcGxldGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWydtdWx0aS1hdXRvLWNvbXBsZXRlLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBNdWx0aUF1dG9Db21wbGV0ZUNvbXBvbmVudCksXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgfSxcclxuICBdLFxyXG4gIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTXVsdGlBdXRvQ29tcGxldGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG4gIHN0YXRpYyBJRF9TRUVEID0gMDtcclxuICBASW5wdXQoKSBhcHBlbmRUb0JvZHkgPSBmYWxzZTtcclxuICBASW5wdXQoKSBhcHBlbmRUb0JvZHlEaXJlY3Rpb25zOiBBcnJheTxBcHBlbmRUb0JvZHlEaXJlY3Rpb24gfCBDb25uZWN0ZWRQb3NpdGlvbj4gPSBbJ3JpZ2h0RG93bicsICdsZWZ0RG93bicsICdyaWdodFVwJywgJ2xlZnRVcCddO1xyXG4gIC8qKlxyXG4gICAqIEBkZXByZWNhdGVkXHJcbiAgICovXHJcbiAgQElucHV0KCkgY3NzQ2xhc3M6IHN0cmluZztcclxuICAvKipcclxuICAgKiBAZGVwcmVjYXRlZFxyXG4gICAqIG92ZXJ2aWV3OiBib3JkZXIgbm9uZSBtdWx0aWxpbmUgc2luZ2xlXHJcbiAgICovXHJcbiAgQElucHV0KCkgb3ZlcnZpZXcgPSAnYm9yZGVyJztcclxuICBASW5wdXQoKSB0aXBzVGV4dDogc3RyaW5nOyAvLyDmj5DnpLrmloflrZdcclxuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICcnOyAvLyBwbGFjZWhvbGRlclxyXG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcmV0YWluSW5wdXRWYWx1ZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNvdXJjZTogYW55W107XHJcbiAgQElucHV0KCkgbGF0ZXN0U291cmNlOiBhbnlbXTsgLy8g5pyA6L+R6L6T5YWlXHJcbiAgQElucHV0KCkgZGlzYWJsZWRLZXk6IHN0cmluZzsgLy8g5Y2V5Liq6YCJ6aG556aB55SoXHJcbiAgQElucHV0KCkgd2lkdGg6IG51bWJlcjtcclxuICBASW5wdXQoKSBpdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQElucHV0KCkgbm9SZXN1bHRJdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQElucHV0KCkgZGVsYXk6IG51bWJlcjtcclxuICBASW5wdXQoKSBzZWFyY2hGbjogKHRlcm06IHN0cmluZykgPT4gT2JzZXJ2YWJsZTxhbnlbXT47XHJcbiAgQElucHV0KCkgZm9ybWF0dGVyOiAoaXRlbTogYW55KSA9PiBzdHJpbmc7XHJcbiAgQElucHV0KCkgdmFsdWVQYXJzZXI6IChpdGVtOiBhbnkpID0+IGFueTtcclxuICBASW5wdXQoKSBAV2l0aENvbmZpZygpIHNob3dBbmltYXRpb24gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIEBXaXRoQ29uZmlnKCkgc2hvd0dsb3dTdHlsZSA9IHRydWU7XHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5kZXZ1aS1nbG93LXN0eWxlJykgZ2V0IGhhc0dsb3dTdHlsZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnNob3dHbG93U3R5bGU7XHJcbiAgfVxyXG4gIEBPdXRwdXQoKSBhdXRvU3VibWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7IC8vIOWkseeEpuiHquWKqOaPkOS6pFxyXG4gIEBWaWV3Q2hpbGQoJ211bHRpQXV0b0NvbXBsZXRlSW5wdXQnKSBtdWx0aUF1dG9Db21wbGV0ZUlucHV0RWxlbWVudDogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdtdWx0aUF1dG9Db21wbGV0ZVdyYXBwZXInKSBtdWx0aUF1dG9Db21wbGV0ZVdyYXBwZXJFbGVtZW50OiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoQXV0b0NvbXBsZXRlRGlyZWN0aXZlKSBhdXRvQ29tcGxldGVEaXJlY3RpdmU6IEF1dG9Db21wbGV0ZURpcmVjdGl2ZTtcclxuICBtdWx0aUl0ZW1zOiBhbnlbXSA9IFtdO1xyXG4gIGlucHV0VmFsdWU6IGFueTtcclxuICBtdWx0aXBsZUxhYmVsQ2xhc3NOYW1lU3VmZml4OiBzdHJpbmcgPSB0aGlzLm92ZXJ2aWV3O1xyXG4gIGlucHV0RWRpdCA9IGZhbHNlO1xyXG4gIG11bHRpcGxlTGFiZWxDbGFzc05hbWVDb25m