ng-zorro-antd
Version:
An enterprise-class UI components based on Ant Design and Angular
1 lines • 45.9 kB
Source Map (JSON)
{"version":3,"file":"ng-zorro-antd-mention.mjs","sources":["../../components/mention/mention-suggestions.ts","../../components/mention/config.ts","../../components/mention/mention.service.ts","../../components/mention/mention-trigger.ts","../../components/mention/mention.component.ts","../../components/mention/mention.module.ts","../../components/mention/public-api.ts","../../components/mention/ng-zorro-antd-mention.ts"],"sourcesContent":["/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { Directive } from '@angular/core';\n\n@Directive({\n selector: '[nzMentionSuggestion]',\n exportAs: 'nzMentionSuggestion'\n})\nexport class NzMentionSuggestionDirective {}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nexport const NZ_MENTION_CONFIG = {\n split: ' '\n};\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { Injectable, OnDestroy } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\nimport { NzMentionTriggerDirective } from './mention-trigger';\n\n@Injectable()\nexport class NzMentionService implements OnDestroy {\n private trigger?: NzMentionTriggerDirective;\n private triggerChange$ = new Subject<NzMentionTriggerDirective>();\n\n triggerChanged(): Observable<NzMentionTriggerDirective> {\n return this.triggerChange$.asObservable();\n }\n\n registerTrigger(trigger: NzMentionTriggerDirective): void {\n if (this.trigger !== trigger) {\n this.trigger = trigger;\n this.triggerChange$.next(trigger);\n }\n }\n\n ngOnDestroy(): void {\n this.triggerChange$.complete();\n }\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Directive,\n ElementRef,\n EventEmitter,\n ExistingProvider,\n forwardRef,\n NgZone,\n OnDestroy,\n Output\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { NzDestroyService } from 'ng-zorro-antd/core/services';\nimport { OnChangeType, OnTouchedType } from 'ng-zorro-antd/core/types';\nimport { fromEventOutsideAngular } from 'ng-zorro-antd/core/util';\n\nimport { NZ_MENTION_CONFIG } from './config';\nimport { Mention } from './mention.component';\nimport { NzMentionService } from './mention.service';\n\nexport const NZ_MENTION_TRIGGER_ACCESSOR: ExistingProvider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NzMentionTriggerDirective),\n multi: true\n};\n\n@Directive({\n selector: 'input[nzMentionTrigger], textarea[nzMentionTrigger]',\n exportAs: 'nzMentionTrigger',\n providers: [NzDestroyService, NZ_MENTION_TRIGGER_ACCESSOR],\n host: {\n autocomplete: 'off'\n }\n})\nexport class NzMentionTriggerDirective implements ControlValueAccessor, OnDestroy, AfterViewInit {\n onChange: OnChangeType = () => {};\n onTouched: OnTouchedType = () => {};\n\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n @Output() readonly onFocusin = new EventEmitter<FocusEvent>();\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n @Output() readonly onBlur = new EventEmitter<FocusEvent>();\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n @Output() readonly onInput = new EventEmitter<KeyboardEvent>();\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n @Output() readonly onKeydown = new EventEmitter<KeyboardEvent>();\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n @Output() readonly onClick = new EventEmitter<MouseEvent>();\n value?: string;\n\n constructor(\n public el: ElementRef<HTMLInputElement | HTMLTextAreaElement>,\n private ngZone: NgZone,\n private ref: ChangeDetectorRef,\n private destroy$: NzDestroyService,\n private nzMentionService: NzMentionService\n ) {}\n\n completeEvents(): void {\n this.onFocusin.complete();\n this.onBlur.complete();\n this.onInput.complete();\n this.onKeydown.complete();\n this.onClick.complete();\n }\n\n focus(caretPos: number | null = null): void {\n this.el.nativeElement.focus();\n this.el.nativeElement.setSelectionRange(caretPos, caretPos);\n }\n\n insertMention(mention: Mention): void {\n const value: string = this.el.nativeElement.value;\n const insertValue = `${mention.mention}${NZ_MENTION_CONFIG.split}`;\n const newValue = [\n value.slice(0, mention.startPos + 1),\n insertValue,\n value.slice(mention.endPos, value.length)\n ].join('');\n this.el.nativeElement.value = newValue;\n this.focus(mention.startPos + insertValue.length + 1);\n this.onChange(newValue);\n this.value = newValue;\n }\n\n writeValue(value: string): void {\n this.value = value;\n if (typeof value === 'string') {\n this.el.nativeElement.value = value;\n } else {\n this.el.nativeElement.value = '';\n }\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n ngAfterViewInit(): void {\n this.nzMentionService.registerTrigger(this);\n\n this.setupEventListener('blur', this.onBlur);\n this.setupEventListener('focusin', this.onFocusin);\n this.setupEventListener('input', this.onInput);\n this.setupEventListener('click', this.onClick);\n this.setupEventListener('keydown', this.onKeydown);\n }\n\n ngOnDestroy(): void {\n this.completeEvents();\n }\n\n private setupEventListener<TEvent extends Event>(eventName: string, eventEmitter: EventEmitter<TEvent>): void {\n fromEventOutsideAngular<TEvent>(this.el.nativeElement, eventName)\n .pipe(takeUntil(this.destroy$))\n .subscribe(event => {\n if (eventEmitter.observers.length) {\n this.ngZone.run(() => {\n eventEmitter.emit(event);\n this.ref.markForCheck();\n });\n }\n });\n }\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { Direction, Directionality } from '@angular/cdk/bidi';\nimport { DOWN_ARROW, ENTER, ESCAPE, LEFT_ARROW, RIGHT_ARROW, TAB, UP_ARROW } from '@angular/cdk/keycodes';\nimport {\n ConnectionPositionPair,\n FlexibleConnectedPositionStrategy,\n Overlay,\n OverlayConfig,\n OverlayRef,\n PositionStrategy\n} from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { DOCUMENT, NgTemplateOutlet } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n Renderer2,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewChildren,\n ViewContainerRef,\n booleanAttribute,\n inject\n} from '@angular/core';\nimport { Subscription, merge, of as observableOf } from 'rxjs';\nimport { distinctUntilChanged, map, startWith, switchMap, takeUntil, withLatestFrom } from 'rxjs/operators';\n\nimport { NzFormItemFeedbackIconComponent, NzFormNoStatusService, NzFormStatusService } from 'ng-zorro-antd/core/form';\nimport { DEFAULT_MENTION_BOTTOM_POSITIONS, DEFAULT_MENTION_TOP_POSITIONS } from 'ng-zorro-antd/core/overlay';\nimport { NzDestroyService } from 'ng-zorro-antd/core/services';\nimport { NgClassInterface, NzSafeAny, NzStatus, NzValidateStatus } from 'ng-zorro-antd/core/types';\nimport {\n fromEventOutsideAngular,\n getCaretCoordinates,\n getMentions,\n getStatusClassNames\n} from 'ng-zorro-antd/core/util';\nimport { NzEmptyModule } from 'ng-zorro-antd/empty';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\n\nimport { NZ_MENTION_CONFIG } from './config';\nimport { NzMentionSuggestionDirective } from './mention-suggestions';\nimport { NzMentionTriggerDirective } from './mention-trigger';\nimport { NzMentionService } from './mention.service';\n\nexport interface MentionOnSearchTypes {\n value: string;\n prefix: string;\n}\n\nexport interface Mention {\n startPos: number;\n endPos: number;\n mention: string;\n}\n\nexport type MentionPlacement = 'top' | 'bottom';\n\n@Component({\n selector: 'nz-mention',\n exportAs: 'nzMention',\n template: `\n <ng-content></ng-content>\n <ng-template #suggestions>\n <div class=\"ant-mentions-dropdown\">\n <ul class=\"ant-mentions-dropdown-menu\" role=\"menu\" tabindex=\"0\">\n @for (suggestion of filteredSuggestions; track suggestion) {\n <li\n #items\n class=\"ant-mentions-dropdown-menu-item\"\n role=\"menuitem\"\n tabindex=\"-1\"\n [class.ant-mentions-dropdown-menu-item-active]=\"$index === activeIndex\"\n [class.ant-mentions-dropdown-menu-item-selected]=\"$index === activeIndex\"\n (click)=\"selectSuggestion(suggestion)\"\n >\n @if (suggestionTemplate) {\n <ng-container *ngTemplateOutlet=\"suggestionTemplate; context: { $implicit: suggestion }\" />\n } @else {\n {{ nzValueWith(suggestion) }}\n }\n </li>\n }\n\n @if (filteredSuggestions.length === 0) {\n <li class=\"ant-mentions-dropdown-menu-item ant-mentions-dropdown-menu-item-disabled\">\n @if (nzLoading) {\n <span><nz-icon nzType=\"loading\" /></span>\n } @else {\n <span>\n <nz-embed-empty nzComponentName=\"select\" [specificContent]=\"nzNotFoundContent!\" />\n </span>\n }\n </li>\n }\n </ul>\n </div>\n </ng-template>\n @if (hasFeedback && !!status) {\n <nz-form-item-feedback-icon class=\"ant-mentions-suffix\" [status]=\"status\" />\n }\n `,\n preserveWhitespaces: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [NzMentionService, NzDestroyService],\n host: {\n class: 'ant-mentions',\n '[class.ant-mentions-rtl]': `dir === 'rtl'`\n },\n imports: [NgTemplateOutlet, NzIconModule, NzEmptyModule, NzFormItemFeedbackIconComponent]\n})\nexport class NzMentionComponent implements OnDestroy, OnInit, AfterViewInit, OnChanges {\n @Input() nzValueWith: (value: NzSafeAny) => string = value => value;\n @Input() nzPrefix: string | string[] = '@';\n @Input({ transform: booleanAttribute }) nzLoading = false;\n @Input() nzNotFoundContent: string = '无匹配结果,轻敲空格完成输入';\n @Input() nzPlacement: MentionPlacement = 'bottom';\n @Input() nzSuggestions: NzSafeAny[] = [];\n @Input() nzStatus: NzStatus = '';\n @Output() readonly nzOnSelect = new EventEmitter<NzSafeAny>();\n @Output() readonly nzOnSearchChange = new EventEmitter<MentionOnSearchTypes>();\n\n trigger!: NzMentionTriggerDirective;\n @ViewChild(TemplateRef, { static: false }) suggestionsTemp?: TemplateRef<void>;\n @ViewChildren('items', { read: ElementRef })\n items!: QueryList<ElementRef>;\n\n @ContentChild(NzMentionSuggestionDirective, { static: false, read: TemplateRef })\n set suggestionChild(value: TemplateRef<{ $implicit: NzSafeAny }>) {\n if (value) {\n this.suggestionTemplate = value;\n }\n }\n\n isOpen = false;\n filteredSuggestions: string[] = [];\n suggestionTemplate: TemplateRef<{ $implicit: NzSafeAny }> | null = null;\n activeIndex = -1;\n dir: Direction = 'ltr';\n // status\n prefixCls: string = 'ant-mentions';\n statusCls: NgClassInterface = {};\n status: NzValidateStatus = '';\n hasFeedback: boolean = false;\n\n private previousValue: string | null = null;\n private cursorMention: string | null = null;\n private cursorMentionStart?: number;\n private cursorMentionEnd?: number;\n private overlayRef: OverlayRef | null = null;\n private portal?: TemplatePortal<void>;\n private positionStrategy!: FlexibleConnectedPositionStrategy;\n private overlayOutsideClickSubscription!: Subscription;\n private document: Document = inject(DOCUMENT);\n\n private get triggerNativeElement(): HTMLTextAreaElement | HTMLInputElement {\n return this.trigger.el.nativeElement;\n }\n\n private get focusItemElement(): HTMLElement | null {\n const itemArr = this.items?.toArray();\n if (itemArr && itemArr[this.activeIndex]) {\n return itemArr[this.activeIndex].nativeElement;\n }\n return null;\n }\n\n private nzFormStatusService = inject(NzFormStatusService, { optional: true });\n private nzFormNoStatusService = inject(NzFormNoStatusService, { optional: true });\n\n constructor(\n private ngZone: NgZone,\n private directionality: Directionality,\n private cdr: ChangeDetectorRef,\n private overlay: Overlay,\n private viewContainerRef: ViewContainerRef,\n private elementRef: ElementRef,\n private renderer: Renderer2,\n private nzMentionService: NzMentionService,\n private destroy$: NzDestroyService\n ) {}\n\n ngOnInit(): void {\n this.nzFormStatusService?.formStatusChanges\n .pipe(\n distinctUntilChanged((pre, cur) => {\n return pre.status === cur.status && pre.hasFeedback === cur.hasFeedback;\n }),\n withLatestFrom(this.nzFormNoStatusService ? this.nzFormNoStatusService.noFormStatus : observableOf(false)),\n map(([{ status, hasFeedback }, noStatus]) => ({ status: noStatus ? '' : status, hasFeedback })),\n takeUntil(this.destroy$)\n )\n .subscribe(({ status, hasFeedback }) => {\n this.setStatusStyles(status, hasFeedback);\n });\n\n this.nzMentionService.triggerChanged().subscribe(trigger => {\n this.trigger = trigger;\n this.bindTriggerEvents();\n this.closeDropdown();\n this.overlayRef = null;\n });\n\n this.dir = this.directionality.value;\n this.directionality.change?.pipe(takeUntil(this.destroy$)).subscribe((direction: Direction) => {\n this.dir = direction;\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n const { nzSuggestions, nzStatus } = changes;\n if (nzSuggestions) {\n if (this.isOpen) {\n this.previousValue = null;\n this.activeIndex = -1;\n this.resetDropdown(false);\n }\n }\n if (nzStatus) {\n this.setStatusStyles(this.nzStatus, this.hasFeedback);\n }\n }\n\n ngAfterViewInit(): void {\n this.items.changes\n .pipe(\n startWith(this.items),\n switchMap(() => {\n const items = this.items.toArray();\n return merge(...items.map(item => fromEventOutsideAngular<MouseEvent>(item.nativeElement, 'mousedown')));\n })\n )\n .subscribe(event => {\n event.preventDefault();\n });\n }\n\n ngOnDestroy(): void {\n this.closeDropdown();\n }\n\n closeDropdown(): void {\n if (this.overlayRef && this.overlayRef.hasAttached()) {\n this.overlayRef.detach();\n this.overlayOutsideClickSubscription.unsubscribe();\n this.isOpen = false;\n this.cdr.markForCheck();\n }\n }\n\n openDropdown(): void {\n this.attachOverlay();\n this.isOpen = true;\n this.cdr.markForCheck();\n }\n\n getMentions(): string[] {\n return this.trigger ? getMentions(this.trigger.value!, this.nzPrefix) : [];\n }\n\n selectSuggestion(suggestion: string | {}): void {\n const value = this.nzValueWith(suggestion);\n this.trigger.insertMention({\n mention: value,\n startPos: this.cursorMentionStart!,\n endPos: this.cursorMentionEnd!\n });\n this.nzOnSelect.emit(suggestion);\n this.closeDropdown();\n this.activeIndex = -1;\n }\n\n private handleInput(event: KeyboardEvent): void {\n const target = event.target as HTMLInputElement | HTMLTextAreaElement;\n this.trigger.onChange(target.value);\n this.trigger.value = target.value;\n this.resetDropdown();\n }\n\n private handleKeydown(event: KeyboardEvent): void {\n const keyCode = event.keyCode;\n if (this.isOpen && keyCode === ENTER && this.activeIndex !== -1 && this.filteredSuggestions.length) {\n this.selectSuggestion(this.filteredSuggestions[this.activeIndex]);\n event.preventDefault();\n } else if (keyCode === LEFT_ARROW || keyCode === RIGHT_ARROW) {\n this.resetDropdown();\n event.stopPropagation();\n } else {\n if (this.isOpen && (keyCode === TAB || keyCode === ESCAPE)) {\n this.closeDropdown();\n return;\n }\n\n if (this.isOpen && keyCode === UP_ARROW) {\n this.setPreviousItemActive();\n event.preventDefault();\n event.stopPropagation();\n }\n\n if (this.isOpen && keyCode === DOWN_ARROW) {\n this.setNextItemActive();\n event.preventDefault();\n event.stopPropagation();\n }\n }\n }\n\n private handleClick(): void {\n this.resetDropdown();\n }\n\n private bindTriggerEvents(): void {\n this.trigger.onInput.subscribe((e: KeyboardEvent) => this.handleInput(e));\n this.trigger.onKeydown.subscribe((e: KeyboardEvent) => this.handleKeydown(e));\n this.trigger.onClick.subscribe(() => this.handleClick());\n }\n\n private suggestionsFilter(value: string, emit: boolean): void {\n const suggestions = value.substring(1);\n /**\n * Should always emit (nzOnSearchChange) when value empty\n *\n * @[something]... @[empty]... @[empty]\n * ^ ^ ^\n * preValue preValue (should emit)\n */\n if (this.previousValue === value && value !== this.cursorMention![0]) {\n return;\n }\n this.previousValue = value;\n if (emit) {\n this.nzOnSearchChange.emit({\n value: this.cursorMention!.substring(1),\n prefix: this.cursorMention![0]\n });\n }\n const searchValue = suggestions.toLowerCase();\n this.filteredSuggestions = this.nzSuggestions.filter(suggestion =>\n this.nzValueWith(suggestion).toLowerCase().includes(searchValue)\n );\n }\n\n private resetDropdown(emit: boolean = true): void {\n this.resetCursorMention();\n if (typeof this.cursorMention !== 'string' || !this.canOpen()) {\n this.closeDropdown();\n return;\n }\n this.suggestionsFilter(this.cursorMention, emit);\n const activeIndex = this.filteredSuggestions.indexOf(this.cursorMention.substring(1));\n this.activeIndex = activeIndex >= 0 ? activeIndex : 0;\n this.openDropdown();\n }\n\n private setNextItemActive(): void {\n this.activeIndex = this.activeIndex + 1 <= this.filteredSuggestions.length - 1 ? this.activeIndex + 1 : 0;\n this.cdr.markForCheck();\n this.scrollToFocusItem();\n }\n\n private setPreviousItemActive(): void {\n this.activeIndex = this.activeIndex - 1 < 0 ? this.filteredSuggestions.length - 1 : this.activeIndex - 1;\n this.cdr.markForCheck();\n this.scrollToFocusItem();\n }\n\n private scrollToFocusItem(): void {\n if (this.focusItemElement) {\n this.focusItemElement.scrollIntoView({ behavior: 'smooth', block: 'center', inline: 'nearest' });\n }\n }\n\n private canOpen(): boolean {\n const element: HTMLInputElement | HTMLTextAreaElement = this.triggerNativeElement;\n return !element.readOnly && !element.disabled;\n }\n\n private resetCursorMention(): void {\n const value = this.triggerNativeElement.value.replace(/[\\r\\n]/g, NZ_MENTION_CONFIG.split) || '';\n const selectionStart = this.triggerNativeElement.selectionStart!;\n const prefix = typeof this.nzPrefix === 'string' ? [this.nzPrefix] : this.nzPrefix;\n let i = prefix.length;\n while (i >= 0) {\n const startPos = value.lastIndexOf(prefix[i], selectionStart);\n const endPos =\n value.indexOf(NZ_MENTION_CONFIG.split, selectionStart) > -1\n ? value.indexOf(NZ_MENTION_CONFIG.split, selectionStart)\n : value.length;\n const mention = value.substring(startPos, endPos);\n if (\n (startPos > 0 && value[startPos - 1] !== NZ_MENTION_CONFIG.split) ||\n startPos < 0 ||\n mention.includes(prefix[i], 1) ||\n mention.includes(NZ_MENTION_CONFIG.split)\n ) {\n this.cursorMention = null;\n this.cursorMentionStart = -1;\n this.cursorMentionEnd = -1;\n } else {\n this.cursorMention = mention;\n this.cursorMentionStart = startPos;\n this.cursorMentionEnd = endPos;\n return;\n }\n i--;\n }\n }\n\n private updatePositions(): void {\n const coordinates = getCaretCoordinates(this.triggerNativeElement, this.cursorMentionStart!);\n const top =\n coordinates.top -\n this.triggerNativeElement.getBoundingClientRect().height -\n this.triggerNativeElement.scrollTop +\n (this.nzPlacement === 'bottom' ? coordinates.height - 6 : -6);\n const left = coordinates.left - this.triggerNativeElement.scrollLeft;\n this.positionStrategy.withDefaultOffsetX(left).withDefaultOffsetY(top);\n if (this.nzPlacement === 'bottom') {\n this.positionStrategy.withPositions([...DEFAULT_MENTION_BOTTOM_POSITIONS]);\n }\n if (this.nzPlacement === 'top') {\n this.positionStrategy.withPositions([...DEFAULT_MENTION_TOP_POSITIONS]);\n }\n this.positionStrategy.apply();\n }\n\n private subscribeOverlayOutsideClick(): Subscription {\n const canCloseDropdown = (event: MouseEvent | TouchEvent): boolean => {\n const clickTarget = event.target as HTMLElement;\n return (\n this.isOpen &&\n clickTarget !== this.trigger.el.nativeElement &&\n !this.overlayRef?.overlayElement.contains(clickTarget)\n );\n };\n\n const subscription = new Subscription();\n\n subscription.add(\n this.overlayRef!.outsidePointerEvents().subscribe(event => canCloseDropdown(event) && this.closeDropdown())\n );\n\n subscription.add(\n fromEventOutsideAngular<TouchEvent>(this.document, 'touchend').subscribe(\n event => canCloseDropdown(event) && this.ngZone.run(() => this.closeDropdown())\n )\n );\n\n return subscription;\n }\n\n private attachOverlay(): void {\n if (!this.overlayRef) {\n this.portal = new TemplatePortal(this.suggestionsTemp!, this.viewContainerRef);\n this.overlayRef = this.overlay.create(this.getOverlayConfig());\n }\n if (this.overlayRef && !this.overlayRef.hasAttached()) {\n this.overlayRef.attach(this.portal);\n this.overlayOutsideClickSubscription = this.subscribeOverlayOutsideClick();\n }\n this.updatePositions();\n }\n\n private getOverlayConfig(): OverlayConfig {\n return new OverlayConfig({\n positionStrategy: this.getOverlayPosition(),\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n disposeOnNavigation: true\n });\n }\n\n private getOverlayPosition(): PositionStrategy {\n const positions = [\n new ConnectionPositionPair({ originX: 'start', originY: 'bottom' }, { overlayX: 'start', overlayY: 'top' }),\n new ConnectionPositionPair({ originX: 'start', originY: 'top' }, { overlayX: 'start', overlayY: 'bottom' })\n ];\n this.positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(this.trigger.el)\n .withPositions(positions)\n .withFlexibleDimensions(false)\n .withPush(false);\n return this.positionStrategy;\n }\n\n private setStatusStyles(status: NzValidateStatus, hasFeedback: boolean): void {\n // set inner status\n this.status = status;\n this.hasFeedback = hasFeedback;\n this.cdr.markForCheck();\n // render status if nzStatus is set\n this.statusCls = getStatusClassNames(this.prefixCls, status, hasFeedback);\n Object.keys(this.statusCls).forEach(status => {\n if (this.statusCls[status]) {\n this.renderer.addClass(this.elementRef.nativeElement, status);\n } else {\n this.renderer.removeClass(this.elementRef.nativeElement, status);\n }\n });\n }\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { NgModule } from '@angular/core';\n\nimport { NzMentionSuggestionDirective } from './mention-suggestions';\nimport { NzMentionTriggerDirective } from './mention-trigger';\nimport { NzMentionComponent } from './mention.component';\n\nconst COMPONENTS = [NzMentionComponent, NzMentionTriggerDirective, NzMentionSuggestionDirective];\n\n@NgModule({\n imports: [...COMPONENTS],\n exports: [...COMPONENTS]\n})\nexport class NzMentionModule {}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nexport * from './mention.module';\nexport * from './mention.component';\nexport * from './mention-trigger';\nexport * from './mention-suggestions';\nexport * from './mention.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.NzMentionService","observableOf","i1","i3.NzMentionService","i4"],"mappings":"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"}