ng-zorro-antd
Version:
An enterprise-class UI components based on Ant Design and Angular
595 lines (585 loc) • 27.9 kB
JavaScript
import { BidiModule } from '@angular/cdk/bidi';
import * as i1$1 from '@angular/cdk/overlay';
import { OverlayConfig, ConnectionPositionPair, OverlayModule } from '@angular/cdk/overlay';
import * as i3 from '@angular/common';
import { DOCUMENT, CommonModule } from '@angular/common';
import * as i0 from '@angular/core';
import { Directive, Injectable, forwardRef, EventEmitter, Output, TemplateRef, ElementRef, Component, ChangeDetectionStrategy, Optional, Inject, Input, ViewChild, ViewChildren, ContentChild, NgModule } from '@angular/core';
import { NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';
import * as i4 from 'ng-zorro-antd/icon';
import { NzIconModule } from 'ng-zorro-antd/icon';
import { Subject, fromEvent, Observable, merge, Subscription } from 'rxjs';
import { takeUntil, startWith, switchMap } from 'rxjs/operators';
import * as i1 from 'ng-zorro-antd/core/services';
import { NzDestroyService } from 'ng-zorro-antd/core/services';
import { __decorate } from 'tslib';
import { ENTER, LEFT_ARROW, RIGHT_ARROW, TAB, ESCAPE, UP_ARROW, DOWN_ARROW } from '@angular/cdk/keycodes';
import { TemplatePortal } from '@angular/cdk/portal';
import { DEFAULT_MENTION_BOTTOM_POSITIONS, DEFAULT_MENTION_TOP_POSITIONS } from 'ng-zorro-antd/core/overlay';
import { getMentions, getCaretCoordinates, InputBoolean } from 'ng-zorro-antd/core/util';
/**
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
*/
class NzMentionSuggestionDirective {
}
NzMentionSuggestionDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: NzMentionSuggestionDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
NzMentionSuggestionDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.5", type: NzMentionSuggestionDirective, selector: "[nzMentionSuggestion]", exportAs: ["nzMentionSuggestion"], ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: NzMentionSuggestionDirective, decorators: [{
type: Directive,
args: [{
selector: '[nzMentionSuggestion]',
exportAs: 'nzMentionSuggestion'
}]
}] });
/**
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
*/
const NZ_MENTION_CONFIG = {
split: ' '
};
/**
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
*/
class NzMentionService {
constructor() {
this.triggerChange$ = new Subject();
}
triggerChanged() {
return this.triggerChange$.asObservable();
}
registerTrigger(trigger) {
if (this.trigger !== trigger) {
this.trigger = trigger;
this.triggerChange$.next(trigger);
}
}
ngOnDestroy() {
this.triggerChange$.complete();
}
}
NzMentionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: NzMentionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
NzMentionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: NzMentionService });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: NzMentionService, decorators: [{
type: Injectable
}] });
/**
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
*/
const NZ_MENTION_TRIGGER_ACCESSOR = {
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => NzMentionTriggerDirective),
multi: true
};
class NzMentionTriggerDirective {
constructor(el, ngZone, ref, destroy$, nzMentionService) {
this.el = el;
this.ngZone = ngZone;
this.ref = ref;
this.destroy$ = destroy$;
this.nzMentionService = nzMentionService;
this.onChange = () => { };
this.onTouched = () => { };
// eslint-disable-next-line @angular-eslint/no-output-on-prefix
this.onFocusin = new EventEmitter();
// eslint-disable-next-line @angular-eslint/no-output-on-prefix
this.onBlur = new EventEmitter();
// eslint-disable-next-line @angular-eslint/no-output-on-prefix
this.onInput = new EventEmitter();
// eslint-disable-next-line @angular-eslint/no-output-on-prefix
this.onKeydown = new EventEmitter();
// eslint-disable-next-line @angular-eslint/no-output-on-prefix
this.onClick = new EventEmitter();
}
completeEvents() {
this.onFocusin.complete();
this.onBlur.complete();
this.onInput.complete();
this.onKeydown.complete();
this.onClick.complete();
}
focus(caretPos = null) {
this.el.nativeElement.focus();
this.el.nativeElement.setSelectionRange(caretPos, caretPos);
}
insertMention(mention) {
const value = this.el.nativeElement.value;
const insertValue = `${mention.mention}${NZ_MENTION_CONFIG.split}`;
const newValue = [
value.slice(0, mention.startPos + 1),
insertValue,
value.slice(mention.endPos, value.length)
].join('');
this.el.nativeElement.value = newValue;
this.focus(mention.startPos + insertValue.length + 1);
this.onChange(newValue);
this.value = newValue;
}
writeValue(value) {
this.value = value;
if (typeof value === 'string') {
this.el.nativeElement.value = value;
}
else {
this.el.nativeElement.value = '';
}
}
registerOnChange(fn) {
this.onChange = fn;
}
registerOnTouched(fn) {
this.onTouched = fn;
}
ngAfterViewInit() {
this.nzMentionService.registerTrigger(this);
this.setupEventListener('blur', this.onBlur);
this.setupEventListener('focusin', this.onFocusin);
this.setupEventListener('input', this.onInput, true);
this.setupEventListener('click', this.onClick, true);
this.setupEventListener('keydown', this.onKeydown, true);
}
ngOnDestroy() {
this.completeEvents();
}
setupEventListener(eventName, eventEmitter, shouldPassEvent = false) {
this.ngZone.runOutsideAngular(() => {
fromEvent(this.el.nativeElement, eventName)
.pipe(takeUntil(this.destroy$))
.subscribe(event => {
if (eventEmitter.observers.length) {
this.ngZone.run(() => {
eventEmitter.emit(shouldPassEvent ? event : undefined);
this.ref.markForCheck();
});
}
});
});
}
}
NzMentionTriggerDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: NzMentionTriggerDirective, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i1.NzDestroyService }, { token: NzMentionService }], target: i0.ɵɵFactoryTarget.Directive });
NzMentionTriggerDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.5", type: NzMentionTriggerDirective, selector: "input[nzMentionTrigger], textarea[nzMentionTrigger]", outputs: { onFocusin: "onFocusin", onBlur: "onBlur", onInput: "onInput", onKeydown: "onKeydown", onClick: "onClick" }, host: { attributes: { "autocomplete": "off" } }, providers: [NzDestroyService, NZ_MENTION_TRIGGER_ACCESSOR], exportAs: ["nzMentionTrigger"], ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: NzMentionTriggerDirective, decorators: [{
type: Directive,
args: [{
selector: 'input[nzMentionTrigger], textarea[nzMentionTrigger]',
exportAs: 'nzMentionTrigger',
providers: [NzDestroyService, NZ_MENTION_TRIGGER_ACCESSOR],
host: {
autocomplete: 'off'
}
}]
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i1.NzDestroyService }, { type: NzMentionService }]; }, propDecorators: { onFocusin: [{
type: Output
}], onBlur: [{
type: Output
}], onInput: [{
type: Output
}], onKeydown: [{
type: Output
}], onClick: [{
type: Output
}] } });
class NzMentionComponent {
constructor(ngZone, ngDocument, cdr, overlay, viewContainerRef, nzMentionService) {
this.ngZone = ngZone;
this.ngDocument = ngDocument;
this.cdr = cdr;
this.overlay = overlay;
this.viewContainerRef = viewContainerRef;
this.nzMentionService = nzMentionService;
this.nzValueWith = value => value;
this.nzPrefix = '@';
this.nzLoading = false;
this.nzNotFoundContent = '无匹配结果,轻敲空格完成输入';
this.nzPlacement = 'bottom';
this.nzSuggestions = [];
this.nzOnSelect = new EventEmitter();
this.nzOnSearchChange = new EventEmitter();
this.isOpen = false;
this.filteredSuggestions = [];
this.suggestionTemplate = null;
this.activeIndex = -1;
this.previousValue = null;
this.cursorMention = null;
this.overlayRef = null;
}
set suggestionChild(value) {
if (value) {
this.suggestionTemplate = value;
}
}
get triggerNativeElement() {
return this.trigger.el.nativeElement;
}
get focusItemElement() {
var _a;
const itemArr = (_a = this.items) === null || _a === void 0 ? void 0 : _a.toArray();
if (itemArr && itemArr[this.activeIndex]) {
return itemArr[this.activeIndex].nativeElement;
}
return null;
}
ngOnInit() {
this.nzMentionService.triggerChanged().subscribe(trigger => {
this.trigger = trigger;
this.bindTriggerEvents();
this.closeDropdown();
this.overlayRef = null;
});
}
ngOnChanges(changes) {
if (changes.hasOwnProperty('nzSuggestions')) {
if (this.isOpen) {
this.previousValue = null;
this.activeIndex = -1;
this.resetDropdown(false);
}
}
}
ngAfterViewInit() {
this.items.changes
.pipe(startWith(this.items), switchMap(() => {
const items = this.items.toArray();
// Caretaker note: we explicitly should call `subscribe()` within the root zone.
// `runOutsideAngular(() => fromEvent(...))` will just create an observable within the root zone,
// but `addEventListener` is called when the `fromEvent` is subscribed.
return new Observable(subscriber => this.ngZone.runOutsideAngular(() => merge(...items.map(item => fromEvent(item.nativeElement, 'mousedown'))).subscribe(subscriber)));
}))
.subscribe(event => {
event.preventDefault();
});
}
ngOnDestroy() {
this.closeDropdown();
}
closeDropdown() {
if (this.overlayRef && this.overlayRef.hasAttached()) {
this.overlayRef.detach();
this.overlayOutsideClickSubscription.unsubscribe();
this.isOpen = false;
this.cdr.markForCheck();
}
}
openDropdown() {
this.attachOverlay();
this.isOpen = true;
this.cdr.markForCheck();
}
getMentions() {
return this.trigger ? getMentions(this.trigger.value, this.nzPrefix) : [];
}
selectSuggestion(suggestion) {
const value = this.nzValueWith(suggestion);
this.trigger.insertMention({
mention: value,
startPos: this.cursorMentionStart,
endPos: this.cursorMentionEnd
});
this.nzOnSelect.emit(suggestion);
this.closeDropdown();
this.activeIndex = -1;
}
handleInput(event) {
const target = event.target;
this.trigger.onChange(target.value);
this.trigger.value = target.value;
this.resetDropdown();
}
handleKeydown(event) {
const keyCode = event.keyCode;
if (this.isOpen && keyCode === ENTER && this.activeIndex !== -1 && this.filteredSuggestions.length) {
this.selectSuggestion(this.filteredSuggestions[this.activeIndex]);
event.preventDefault();
}
else if (keyCode === LEFT_ARROW || keyCode === RIGHT_ARROW) {
this.resetDropdown();
event.stopPropagation();
}
else {
if (this.isOpen && (keyCode === TAB || keyCode === ESCAPE)) {
this.closeDropdown();
return;
}
if (this.isOpen && keyCode === UP_ARROW) {
this.setPreviousItemActive();
event.preventDefault();
event.stopPropagation();
}
if (this.isOpen && keyCode === DOWN_ARROW) {
this.setNextItemActive();
event.preventDefault();
event.stopPropagation();
}
}
}
handleClick() {
this.resetDropdown();
}
bindTriggerEvents() {
this.trigger.onInput.subscribe((e) => this.handleInput(e));
this.trigger.onKeydown.subscribe((e) => this.handleKeydown(e));
this.trigger.onClick.subscribe(() => this.handleClick());
}
suggestionsFilter(value, emit) {
const suggestions = value.substring(1);
/**
* Should always emit (nzOnSearchChange) when value empty
*
* @[something]... @[empty]... @[empty]
* ^ ^ ^
* preValue preValue (should emit)
*/
if (this.previousValue === value && value !== this.cursorMention[0]) {
return;
}
this.previousValue = value;
if (emit) {
this.nzOnSearchChange.emit({
value: this.cursorMention.substring(1),
prefix: this.cursorMention[0]
});
}
const searchValue = suggestions.toLowerCase();
this.filteredSuggestions = this.nzSuggestions.filter(suggestion => this.nzValueWith(suggestion).toLowerCase().includes(searchValue));
}
resetDropdown(emit = true) {
this.resetCursorMention();
if (typeof this.cursorMention !== 'string' || !this.canOpen()) {
this.closeDropdown();
return;
}
this.suggestionsFilter(this.cursorMention, emit);
const activeIndex = this.filteredSuggestions.indexOf(this.cursorMention.substring(1));
this.activeIndex = activeIndex >= 0 ? activeIndex : 0;
this.openDropdown();
}
setNextItemActive() {
this.activeIndex = this.activeIndex + 1 <= this.filteredSuggestions.length - 1 ? this.activeIndex + 1 : 0;
this.cdr.markForCheck();
this.scrollToFocusItem();
}
setPreviousItemActive() {
this.activeIndex = this.activeIndex - 1 < 0 ? this.filteredSuggestions.length - 1 : this.activeIndex - 1;
this.cdr.markForCheck();
this.scrollToFocusItem();
}
scrollToFocusItem() {
if (this.focusItemElement) {
this.focusItemElement.scrollIntoView({ behavior: 'smooth', block: 'center', inline: 'nearest' });
}
}
canOpen() {
const element = this.triggerNativeElement;
return !element.readOnly && !element.disabled;
}
resetCursorMention() {
const value = this.triggerNativeElement.value.replace(/[\r\n]/g, NZ_MENTION_CONFIG.split) || '';
const selectionStart = this.triggerNativeElement.selectionStart;
const prefix = typeof this.nzPrefix === 'string' ? [this.nzPrefix] : this.nzPrefix;
let i = prefix.length;
while (i >= 0) {
const startPos = value.lastIndexOf(prefix[i], selectionStart);
const endPos = value.indexOf(NZ_MENTION_CONFIG.split, selectionStart) > -1
? value.indexOf(NZ_MENTION_CONFIG.split, selectionStart)
: value.length;
const mention = value.substring(startPos, endPos);
if ((startPos > 0 && value[startPos - 1] !== NZ_MENTION_CONFIG.split) ||
startPos < 0 ||
mention.includes(prefix[i], 1) ||
mention.includes(NZ_MENTION_CONFIG.split)) {
this.cursorMention = null;
this.cursorMentionStart = -1;
this.cursorMentionEnd = -1;
}
else {
this.cursorMention = mention;
this.cursorMentionStart = startPos;
this.cursorMentionEnd = endPos;
return;
}
i--;
}
}
updatePositions() {
const coordinates = getCaretCoordinates(this.triggerNativeElement, this.cursorMentionStart);
const top = coordinates.top -
this.triggerNativeElement.getBoundingClientRect().height -
this.triggerNativeElement.scrollTop +
(this.nzPlacement === 'bottom' ? coordinates.height - 6 : -6);
const left = coordinates.left - this.triggerNativeElement.scrollLeft;
this.positionStrategy.withDefaultOffsetX(left).withDefaultOffsetY(top);
if (this.nzPlacement === 'bottom') {
this.positionStrategy.withPositions([...DEFAULT_MENTION_BOTTOM_POSITIONS]);
}
if (this.nzPlacement === 'top') {
this.positionStrategy.withPositions([...DEFAULT_MENTION_TOP_POSITIONS]);
}
this.positionStrategy.apply();
}
subscribeOverlayOutsideClick() {
const canCloseDropdown = (event) => {
var _a;
const clickTarget = event.target;
return (this.isOpen &&
clickTarget !== this.trigger.el.nativeElement &&
!((_a = this.overlayRef) === null || _a === void 0 ? void 0 : _a.overlayElement.contains(clickTarget)));
};
const subscription = new Subscription();
subscription.add(this.overlayRef.outsidePointerEvents().subscribe(event => canCloseDropdown(event) && this.closeDropdown()));
subscription.add(this.ngZone.runOutsideAngular(() => fromEvent(this.ngDocument, 'touchend').subscribe(event => canCloseDropdown(event) && this.ngZone.run(() => this.closeDropdown()))));
return subscription;
}
attachOverlay() {
if (!this.overlayRef) {
this.portal = new TemplatePortal(this.suggestionsTemp, this.viewContainerRef);
this.overlayRef = this.overlay.create(this.getOverlayConfig());
}
if (this.overlayRef && !this.overlayRef.hasAttached()) {
this.overlayRef.attach(this.portal);
this.overlayOutsideClickSubscription = this.subscribeOverlayOutsideClick();
}
this.updatePositions();
}
getOverlayConfig() {
return new OverlayConfig({
positionStrategy: this.getOverlayPosition(),
scrollStrategy: this.overlay.scrollStrategies.reposition(),
disposeOnNavigation: true
});
}
getOverlayPosition() {
const positions = [
new ConnectionPositionPair({ originX: 'start', originY: 'bottom' }, { overlayX: 'start', overlayY: 'top' }),
new ConnectionPositionPair({ originX: 'start', originY: 'top' }, { overlayX: 'start', overlayY: 'bottom' })
];
this.positionStrategy = this.overlay
.position()
.flexibleConnectedTo(this.trigger.el)
.withPositions(positions)
.withFlexibleDimensions(false)
.withPush(false);
return this.positionStrategy;
}
}
NzMentionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: NzMentionComponent, deps: [{ token: i0.NgZone }, { token: DOCUMENT, optional: true }, { token: i0.ChangeDetectorRef }, { token: i1$1.Overlay }, { token: i0.ViewContainerRef }, { token: NzMentionService }], target: i0.ɵɵFactoryTarget.Component });
NzMentionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.5", type: NzMentionComponent, selector: "nz-mention", inputs: { nzValueWith: "nzValueWith", nzPrefix: "nzPrefix", nzLoading: "nzLoading", nzNotFoundContent: "nzNotFoundContent", nzPlacement: "nzPlacement", nzSuggestions: "nzSuggestions" }, outputs: { nzOnSelect: "nzOnSelect", nzOnSearchChange: "nzOnSearchChange" }, providers: [NzMentionService], queries: [{ propertyName: "suggestionChild", first: true, predicate: NzMentionSuggestionDirective, descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "suggestionsTemp", first: true, predicate: TemplateRef, descendants: true }, { propertyName: "items", predicate: ["items"], descendants: true, read: ElementRef }], exportAs: ["nzMention"], usesOnChanges: true, ngImport: i0, template: `
<ng-content></ng-content>
<ng-template #suggestions>
<ul class="ant-mention-dropdown">
<li
#items
class="ant-mention-dropdown-item"
*ngFor="let suggestion of filteredSuggestions; let i = index"
[class.focus]="i === activeIndex"
(click)="selectSuggestion(suggestion)"
>
<ng-container *ngIf="suggestionTemplate; else defaultSuggestion">
<ng-container *ngTemplateOutlet="suggestionTemplate; context: { $implicit: suggestion }"></ng-container>
</ng-container>
<ng-template #defaultSuggestion>{{ nzValueWith(suggestion) }}</ng-template>
</li>
<li class="ant-mention-dropdown-notfound ant-mention-dropdown-item" *ngIf="filteredSuggestions.length === 0">
<span *ngIf="nzLoading"><i nz-icon nzType="loading"></i></span>
<span *ngIf="!nzLoading">{{ nzNotFoundContent }}</span>
</li>
</ul>
</ng-template>
`, isInline: true, directives: [{ type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i4.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
__decorate([
InputBoolean()
], NzMentionComponent.prototype, "nzLoading", void 0);
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: NzMentionComponent, decorators: [{
type: Component,
args: [{
selector: 'nz-mention',
exportAs: 'nzMention',
template: `
<ng-content></ng-content>
<ng-template #suggestions>
<ul class="ant-mention-dropdown">
<li
#items
class="ant-mention-dropdown-item"
*ngFor="let suggestion of filteredSuggestions; let i = index"
[class.focus]="i === activeIndex"
(click)="selectSuggestion(suggestion)"
>
<ng-container *ngIf="suggestionTemplate; else defaultSuggestion">
<ng-container *ngTemplateOutlet="suggestionTemplate; context: { $implicit: suggestion }"></ng-container>
</ng-container>
<ng-template #defaultSuggestion>{{ nzValueWith(suggestion) }}</ng-template>
</li>
<li class="ant-mention-dropdown-notfound ant-mention-dropdown-item" *ngIf="filteredSuggestions.length === 0">
<span *ngIf="nzLoading"><i nz-icon nzType="loading"></i></span>
<span *ngIf="!nzLoading">{{ nzNotFoundContent }}</span>
</li>
</ul>
</ng-template>
`,
preserveWhitespaces: false,
changeDetection: ChangeDetectionStrategy.OnPush,
providers: [NzMentionService]
}]
}], ctorParameters: function () {
return [{ type: i0.NgZone }, { type: undefined, decorators: [{
type: Optional
}, {
type: Inject,
args: [DOCUMENT]
}] }, { type: i0.ChangeDetectorRef }, { type: i1$1.Overlay }, { type: i0.ViewContainerRef }, { type: NzMentionService }];
}, propDecorators: { nzValueWith: [{
type: Input
}], nzPrefix: [{
type: Input
}], nzLoading: [{
type: Input
}], nzNotFoundContent: [{
type: Input
}], nzPlacement: [{
type: Input
}], nzSuggestions: [{
type: Input
}], nzOnSelect: [{
type: Output
}], nzOnSearchChange: [{
type: Output
}], suggestionsTemp: [{
type: ViewChild,
args: [TemplateRef, { static: false }]
}], items: [{
type: ViewChildren,
args: ['items', { read: ElementRef }]
}], suggestionChild: [{
type: ContentChild,
args: [NzMentionSuggestionDirective, { static: false, read: TemplateRef }]
}] } });
/**
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
*/
const COMPONENTS = [NzMentionComponent, NzMentionTriggerDirective, NzMentionSuggestionDirective];
class NzMentionModule {
}
NzMentionModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: NzMentionModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
NzMentionModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: NzMentionModule, declarations: [NzMentionComponent, NzMentionTriggerDirective, NzMentionSuggestionDirective], imports: [BidiModule, CommonModule, FormsModule, OverlayModule, NzIconModule], exports: [NzMentionComponent, NzMentionTriggerDirective, NzMentionSuggestionDirective] });
NzMentionModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: NzMentionModule, imports: [[BidiModule, CommonModule, FormsModule, OverlayModule, NzIconModule]] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: NzMentionModule, decorators: [{
type: NgModule,
args: [{
imports: [BidiModule, CommonModule, FormsModule, OverlayModule, NzIconModule],
declarations: [...COMPONENTS],
exports: [...COMPONENTS]
}]
}] });
/**
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
*/
/**
* Generated bundle index. Do not edit.
*/
export { NZ_MENTION_TRIGGER_ACCESSOR, NzMentionComponent, NzMentionModule, NzMentionService, NzMentionSuggestionDirective, NzMentionTriggerDirective };
//# sourceMappingURL=ng-zorro-antd-mention.mjs.map