ngx-tethys 19.0.10 → 19.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/action/action.component.d.ts +12 -20
  3. package/action/actions.component.d.ts +5 -7
  4. package/affix/affix.component.d.ts +7 -10
  5. package/avatar/avatar-list/avatar-list.component.d.ts +8 -14
  6. package/avatar/avatar.component.d.ts +25 -39
  7. package/fesm2022/ngx-tethys-action.mjs +54 -91
  8. package/fesm2022/ngx-tethys-action.mjs.map +1 -1
  9. package/fesm2022/ngx-tethys-affix.mjs +29 -26
  10. package/fesm2022/ngx-tethys-affix.mjs.map +1 -1
  11. package/fesm2022/ngx-tethys-avatar.mjs +117 -162
  12. package/fesm2022/ngx-tethys-avatar.mjs.map +1 -1
  13. package/fesm2022/ngx-tethys-comment.mjs +1 -1
  14. package/fesm2022/ngx-tethys-comment.mjs.map +1 -1
  15. package/fesm2022/ngx-tethys-i18n.mjs +35 -5
  16. package/fesm2022/ngx-tethys-i18n.mjs.map +1 -1
  17. package/fesm2022/ngx-tethys-image.mjs +4 -4
  18. package/fesm2022/ngx-tethys-image.mjs.map +1 -1
  19. package/fesm2022/ngx-tethys-list.mjs +1 -1
  20. package/fesm2022/ngx-tethys-list.mjs.map +1 -1
  21. package/fesm2022/ngx-tethys-mention.mjs +51 -73
  22. package/fesm2022/ngx-tethys-mention.mjs.map +1 -1
  23. package/fesm2022/ngx-tethys-shared.mjs +7 -4
  24. package/fesm2022/ngx-tethys-shared.mjs.map +1 -1
  25. package/fesm2022/ngx-tethys.mjs +1 -1
  26. package/fesm2022/ngx-tethys.mjs.map +1 -1
  27. package/i18n/i18n.d.ts +6 -0
  28. package/i18n/locales/de-de.d.ts +6 -0
  29. package/i18n/locales/en-us.d.ts +6 -0
  30. package/i18n/locales/ja-jp.d.ts +6 -0
  31. package/i18n/locales/zh-hans.d.ts +6 -0
  32. package/i18n/locales/zh-hant.d.ts +6 -0
  33. package/image/preview/image-preview.component.d.ts +3 -2
  34. package/mention/mention.directive.d.ts +6 -7
  35. package/mention/suggestions/suggestions.component.d.ts +8 -9
  36. package/package.json +1 -1
  37. package/schematics/version.d.ts +1 -1
  38. package/schematics/version.js +1 -1
@@ -3,7 +3,7 @@ import { ThyLoading, ThyLoadingModule } from 'ngx-tethys/loading';
3
3
  import { ThyPopoverRef, ThyPopover, ThyPopoverModule } from 'ngx-tethys/popover';
4
4
  import { NgTemplateOutlet, SlicePipe, CommonModule } from '@angular/common';
5
5
  import * as i0 from '@angular/core';
6
- import { inject, ElementRef, NgZone, HostBinding, Component, EventEmitter, Output, Input, Directive, NgModule } from '@angular/core';
6
+ import { input, signal, inject, ElementRef, NgZone, Component, output, computed, Directive, NgModule } from '@angular/core';
7
7
  import { NgControl, FormsModule } from '@angular/forms';
8
8
  import { Subject, Observable, of, fromEvent, EMPTY } from 'rxjs';
9
9
  import { switchMap, debounceTime, catchError, take, takeUntil } from 'rxjs/operators';
@@ -342,33 +342,34 @@ class CaretPositioner {
342
342
  */
343
343
  class ThyMentionSuggestions {
344
344
  constructor() {
345
- this.elementRef = inject(ElementRef);
346
- this.ngZone = inject(NgZone);
347
- this.popoverRef = inject(ThyPopoverRef);
345
+ this.mention = input();
346
+ this.data = signal([]);
348
347
  this.suggestionSelect$ = new Subject();
349
348
  this.debounce = 150;
350
- this.loadingDone = true;
349
+ this.loadingDone = signal(true);
351
350
  this.search$ = new Subject();
352
- this.suggestionsClass = true;
351
+ this.elementRef = inject(ElementRef);
352
+ this.ngZone = inject(NgZone);
353
+ this.popoverRef = inject(ThyPopoverRef);
353
354
  this.search$
354
355
  .pipe(switchMap(query => {
355
- const data = this.mention.search(query.term, this.mention.data);
356
+ const data = this.mention().search(query.term, this.mention().data);
356
357
  if (data instanceof Observable) {
357
- this.loadingDone = false;
358
+ this.loadingDone.set(false);
358
359
  return data.pipe(debounceTime(this.debounce));
359
360
  }
360
361
  else {
361
362
  return of(data);
362
363
  }
363
364
  }), catchError(() => {
364
- this.loadingDone = false;
365
- return [];
365
+ this.loadingDone.set(false);
366
+ return of([]);
366
367
  }))
367
368
  .subscribe(data => {
368
- this.loadingDone = true;
369
- this.data = data || [];
369
+ this.loadingDone.set(true);
370
+ this.data.set(data || []);
370
371
  if (this.popoverRef) {
371
- if (this.mention.autoClose && this.data.length === 0) {
372
+ if (this.mention().autoClose && this.data().length === 0) {
372
373
  this.popoverRef.close();
373
374
  }
374
375
  this.ngZone.onStable.pipe(take(1)).subscribe(() => {
@@ -378,18 +379,15 @@ class ThyMentionSuggestions {
378
379
  });
379
380
  }
380
381
  ngOnInit() {
381
- if (this.mention.popoverClass) {
382
- this.elementRef.nativeElement.classList.add(this.mention.popoverClass);
382
+ if (this.mention().popoverClass) {
383
+ this.elementRef.nativeElement.classList.add(this.mention().popoverClass);
383
384
  }
384
385
  }
385
386
  search(query) {
386
387
  this.search$.next(query);
387
388
  }
388
389
  select(item, event) {
389
- this.suggestionSelect$.next({
390
- event,
391
- item
392
- });
390
+ this.suggestionSelect$.next({ event, item });
393
391
  }
394
392
  selectionChange(event) {
395
393
  this.select(event.value, event.event);
@@ -398,21 +396,15 @@ class ThyMentionSuggestions {
398
396
  this.search$.complete();
399
397
  }
400
398
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: ThyMentionSuggestions, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
401
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.8", type: ThyMentionSuggestions, isStandalone: true, selector: "thy-mention-suggestions", host: { properties: { "class.thy-mention-suggestions": "this.suggestionsClass" } }, ngImport: i0, template: "@if (mention.suggestionsTemplateRef) {\n <ng-container [ngTemplateOutlet]=\"mention.suggestionsTemplateRef\" [ngTemplateOutletContext]=\"{ data: data }\"></ng-container>\n} @else {\n <thy-loading [thyDone]=\"loadingDone\"></thy-loading>\n @if (loadingDone) {\n @if (data?.length > 0) {\n <thy-selection-list\n thyBindKeyEventContainer=\"body\"\n thyMultiple=\"false\"\n thyAutoActiveFirstItem=\"true\"\n thySpaceKeyEnabled=\"false\"\n [thyScrollContainer]=\"elementRef\"\n (thySelectionChange)=\"selectionChange($event)\">\n @for (item of data | slice: 0 : mention.limit; track $index) {\n <thy-list-option [thyValue]=\"item\">\n @if (mention?.displayTemplateRef) {\n <ng-template *ngTemplateOutlet=\"mention?.displayTemplateRef; context: { $implicit: item }\"></ng-template>\n } @else {\n {{ item['name'] || '' }}\n }\n </thy-list-option>\n }\n </thy-selection-list>\n } @else {\n <div class=\"text-desc p-3\">\n {{ mention?.emptyText }}\n </div>\n }\n }\n}\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ThyLoading, selector: "thy-loading", inputs: ["thyDone", "thyTip", "thyIsMask"] }, { kind: "component", type: ThySelectionList, selector: "thy-selection-list,[thy-selection-list]", inputs: ["thyMultiple", "thyBindKeyEventContainer", "thyScrollContainer", "thyBeforeKeydown", "thyUniqueKey", "thyCompareWith", "thyLayout", "thyAutoActiveFirstItem", "thySize", "thySpaceKeyEnabled"], outputs: ["thySelectionChange"] }, { kind: "component", type: ThyListOption, selector: "thy-list-option,[thy-list-option]", inputs: ["id", "thyValue", "thyDisabled"] }, { kind: "pipe", type: SlicePipe, name: "slice" }] }); }
399
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.8", type: ThyMentionSuggestions, isStandalone: true, selector: "thy-mention-suggestions", inputs: { mention: { classPropertyName: "mention", publicName: "mention", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "thy-mention-suggestions" }, ngImport: i0, template: "@if (mention().suggestionsTemplateRef) {\n <ng-container [ngTemplateOutlet]=\"mention().suggestionsTemplateRef\" [ngTemplateOutletContext]=\"{ data: data() }\"></ng-container>\n} @else {\n <thy-loading [thyDone]=\"loadingDone()\"></thy-loading>\n @if (loadingDone()) {\n @if (data()?.length > 0) {\n <thy-selection-list\n thyBindKeyEventContainer=\"body\"\n thyMultiple=\"false\"\n thyAutoActiveFirstItem=\"true\"\n thySpaceKeyEnabled=\"false\"\n [thyScrollContainer]=\"elementRef\"\n (thySelectionChange)=\"selectionChange($event)\">\n @for (item of data() | slice: 0 : mention().limit; track $index) {\n <thy-list-option [thyValue]=\"item\">\n @if (mention().displayTemplateRef) {\n <ng-template *ngTemplateOutlet=\"mention().displayTemplateRef; context: { $implicit: item }\"></ng-template>\n } @else {\n {{ item['name'] || '' }}\n }\n </thy-list-option>\n }\n </thy-selection-list>\n } @else {\n <div class=\"text-desc p-3\">\n {{ mention().emptyText }}\n </div>\n }\n }\n}\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ThyLoading, selector: "thy-loading", inputs: ["thyDone", "thyTip", "thyIsMask"] }, { kind: "component", type: ThySelectionList, selector: "thy-selection-list,[thy-selection-list]", inputs: ["thyMultiple", "thyBindKeyEventContainer", "thyScrollContainer", "thyBeforeKeydown", "thyUniqueKey", "thyCompareWith", "thyLayout", "thyAutoActiveFirstItem", "thySize", "thySpaceKeyEnabled"], outputs: ["thySelectionChange"] }, { kind: "component", type: ThyListOption, selector: "thy-list-option,[thy-list-option]", inputs: ["id", "thyValue", "thyDisabled"] }, { kind: "pipe", type: SlicePipe, name: "slice" }] }); }
402
400
  }
403
401
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: ThyMentionSuggestions, decorators: [{
404
402
  type: Component,
405
- args: [{ selector: 'thy-mention-suggestions', imports: [NgTemplateOutlet, ThyLoading, ThySelectionList, ThyListOption, SlicePipe], template: "@if (mention.suggestionsTemplateRef) {\n <ng-container [ngTemplateOutlet]=\"mention.suggestionsTemplateRef\" [ngTemplateOutletContext]=\"{ data: data }\"></ng-container>\n} @else {\n <thy-loading [thyDone]=\"loadingDone\"></thy-loading>\n @if (loadingDone) {\n @if (data?.length > 0) {\n <thy-selection-list\n thyBindKeyEventContainer=\"body\"\n thyMultiple=\"false\"\n thyAutoActiveFirstItem=\"true\"\n thySpaceKeyEnabled=\"false\"\n [thyScrollContainer]=\"elementRef\"\n (thySelectionChange)=\"selectionChange($event)\">\n @for (item of data | slice: 0 : mention.limit; track $index) {\n <thy-list-option [thyValue]=\"item\">\n @if (mention?.displayTemplateRef) {\n <ng-template *ngTemplateOutlet=\"mention?.displayTemplateRef; context: { $implicit: item }\"></ng-template>\n } @else {\n {{ item['name'] || '' }}\n }\n </thy-list-option>\n }\n </thy-selection-list>\n } @else {\n <div class=\"text-desc p-3\">\n {{ mention?.emptyText }}\n </div>\n }\n }\n}\n" }]
406
- }], ctorParameters: () => [], propDecorators: { suggestionsClass: [{
407
- type: HostBinding,
408
- args: ['class.thy-mention-suggestions']
409
- }] } });
403
+ args: [{ selector: 'thy-mention-suggestions', imports: [NgTemplateOutlet, ThyLoading, ThySelectionList, ThyListOption, SlicePipe], host: { class: 'thy-mention-suggestions' }, template: "@if (mention().suggestionsTemplateRef) {\n <ng-container [ngTemplateOutlet]=\"mention().suggestionsTemplateRef\" [ngTemplateOutletContext]=\"{ data: data() }\"></ng-container>\n} @else {\n <thy-loading [thyDone]=\"loadingDone()\"></thy-loading>\n @if (loadingDone()) {\n @if (data()?.length > 0) {\n <thy-selection-list\n thyBindKeyEventContainer=\"body\"\n thyMultiple=\"false\"\n thyAutoActiveFirstItem=\"true\"\n thySpaceKeyEnabled=\"false\"\n [thyScrollContainer]=\"elementRef\"\n (thySelectionChange)=\"selectionChange($event)\">\n @for (item of data() | slice: 0 : mention().limit; track $index) {\n <thy-list-option [thyValue]=\"item\">\n @if (mention().displayTemplateRef) {\n <ng-template *ngTemplateOutlet=\"mention().displayTemplateRef; context: { $implicit: item }\"></ng-template>\n } @else {\n {{ item['name'] || '' }}\n }\n </thy-list-option>\n }\n </thy-selection-list>\n } @else {\n <div class=\"text-desc p-3\">\n {{ mention().emptyText }}\n </div>\n }\n }\n}\n" }]
404
+ }], ctorParameters: () => [] });
410
405
 
411
406
  const SUGGESTION_BACKDROP_CLASS = 'thy-mention-suggestions-backdrop';
412
- const POPOVER_DEFAULT_CONFIG = {
413
- backdropClass: SUGGESTION_BACKDROP_CLASS,
414
- placement: 'bottomLeft'
415
- };
407
+ const POPOVER_DEFAULT_CONFIG = { backdropClass: SUGGESTION_BACKDROP_CLASS, placement: 'bottomLeft' };
416
408
  const DEFAULT_MENTION_CONFIG = {
417
409
  autoClose: true,
418
410
  emptyText: '无匹配数据,按空格完成输入',
@@ -427,24 +419,6 @@ const DEFAULT_MENTION_CONFIG = {
427
419
  * @order 10
428
420
  */
429
421
  class ThyMentionDirective {
430
- get mentions() {
431
- return this._mentions;
432
- }
433
- /**
434
- * 提及输入配置参数,同时支持多个提及规则
435
- * @type Mention<any>[]
436
- */
437
- set mentions(value) {
438
- this._mentions = value;
439
- if (this._mentions) {
440
- this._mentions = this._mentions.map(mention => {
441
- if ((typeof ngDevMode === 'undefined' || ngDevMode) && !mention.trigger) {
442
- throw new Error(`mention trigger is required`);
443
- }
444
- return Object.assign({}, DEFAULT_MENTION_CONFIG, mention);
445
- });
446
- }
447
- }
448
422
  get isOpened() {
449
423
  return !!this.openedSuggestionsRef;
450
424
  }
@@ -453,10 +427,32 @@ class ThyMentionDirective {
453
427
  this.thyPopover = inject(ThyPopover);
454
428
  this.ngControl = inject(NgControl, { optional: true, self: true });
455
429
  this.adapter = null;
430
+ /**
431
+ * 提及输入配置参数,同时支持多个提及规则
432
+ * @type Mention<any>[]
433
+ */
434
+ this.thyMention = input([]);
435
+ /**
436
+ * Popover 弹出层参数配置
437
+ */
438
+ this.thyPopoverConfig = input();
456
439
  /**
457
440
  * 选择后的回调函数
458
441
  */
459
- this.select = new EventEmitter();
442
+ this.select = output();
443
+ this.mentions = computed(() => {
444
+ if (this.thyMention()) {
445
+ return this.thyMention().map(mention => {
446
+ if ((typeof ngDevMode === 'undefined' || ngDevMode) && !mention.trigger) {
447
+ throw new Error(`mention trigger is required`);
448
+ }
449
+ return Object.assign({}, DEFAULT_MENTION_CONFIG, mention);
450
+ });
451
+ }
452
+ else {
453
+ return [];
454
+ }
455
+ });
460
456
  this.destroy$ = new Subject();
461
457
  this.openedSuggestionsRef$ = new Subject();
462
458
  const elementRef = this.elementRef;
@@ -498,7 +494,7 @@ class ThyMentionDirective {
498
494
  this.lookup(event);
499
495
  }
500
496
  lookup(event) {
501
- const matched = this.adapter.lookup(event, this.mentions);
497
+ const matched = this.adapter.lookup(event, this.mentions());
502
498
  if (matched) {
503
499
  this.openSuggestions(matched);
504
500
  }
@@ -513,16 +509,9 @@ class ThyMentionDirective {
513
509
  const fontSize = parseInt(getComputedStyle(this.elementRef.nativeElement).fontSize, 10);
514
510
  this.openedSuggestionsRef = this.thyPopover.open(ThyMentionSuggestions, Object.assign({}, POPOVER_DEFAULT_CONFIG, {
515
511
  origin: this.elementRef,
516
- originPosition: {
517
- x: position.left,
518
- y: position.top,
519
- width: fontSize,
520
- height: fontSize
521
- },
522
- initialState: {
523
- mention: matched.mention
524
- }
525
- }, this.popoverConfig));
512
+ originPosition: { x: position.left, y: position.top, width: fontSize, height: fontSize },
513
+ initialState: { mention: matched.mention }
514
+ }, this.thyPopoverConfig()));
526
515
  this.openedSuggestionsRef.afterClosed().subscribe(() => {
527
516
  this.openedSuggestionsRef = null;
528
517
  this.openedSuggestionsRef$.next(null);
@@ -539,23 +528,12 @@ class ThyMentionDirective {
539
528
  }
540
529
  }
541
530
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: ThyMentionDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
542
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.8", type: ThyMentionDirective, isStandalone: true, selector: "[thyMention]", inputs: { mentions: ["thyMention", "mentions"], popoverConfig: ["thyPopoverConfig", "popoverConfig"] }, outputs: { select: "thySelectSuggestion" }, ngImport: i0 }); }
531
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.8", type: ThyMentionDirective, isStandalone: true, selector: "[thyMention]", inputs: { thyMention: { classPropertyName: "thyMention", publicName: "thyMention", isSignal: true, isRequired: false, transformFunction: null }, thyPopoverConfig: { classPropertyName: "thyPopoverConfig", publicName: "thyPopoverConfig", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { select: "select" }, ngImport: i0 }); }
543
532
  }
544
533
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: ThyMentionDirective, decorators: [{
545
534
  type: Directive,
546
- args: [{
547
- selector: '[thyMention]'
548
- }]
549
- }], ctorParameters: () => [], propDecorators: { mentions: [{
550
- type: Input,
551
- args: ['thyMention']
552
- }], popoverConfig: [{
553
- type: Input,
554
- args: ['thyPopoverConfig']
555
- }], select: [{
556
- type: Output,
557
- args: ['thySelectSuggestion']
558
- }] } });
535
+ args: [{ selector: '[thyMention]' }]
536
+ }], ctorParameters: () => [] });
559
537
 
560
538
  class ThyMentionModule {
561
539
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: ThyMentionModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-tethys-mention.mjs","sources":["../../../src/mention/adapter/adapter.ts","../../../src/mention/adapter/textarea.adapter.ts","../../../src/mention/adapter/editable.adapter.ts","../../../src/mention/adapter/index.ts","../../../src/mention/caret-positioner.ts","../../../src/mention/suggestions/suggestions.component.ts","../../../src/mention/suggestions/suggestions.component.html","../../../src/mention/mention.directive.ts","../../../src/mention/mention.module.ts","../../../src/mention/ngx-tethys-mention.ts"],"sourcesContent":["import { MentionDefaultDataItem, Mention } from '../interfaces';\n\nexport interface SeekQueryResult {\n term: string;\n start: number;\n end: number;\n}\n\nexport interface MatchedMention<T = MentionDefaultDataItem> {\n query: SeekQueryResult;\n mention: Mention<T>;\n}\n\nexport type MentionInputorElement = HTMLTextAreaElement | HTMLInputElement;\nexport abstract class MentionAdapter {\n inputor: MentionInputorElement;\n\n matchedMention: MatchedMention;\n\n constructor(inputor: MentionInputorElement) {\n this.inputor = inputor;\n }\n\n abstract seekQuery(event: Event, mention: Mention): SeekQueryResult;\n\n abstract insertMention(item: MentionDefaultDataItem): string;\n\n lookup(event: Event, mentions: Mention[]) {\n this.matchedMention = null;\n for (const mention of mentions) {\n const query = this.seekQuery(event, mention);\n if (query) {\n this.matchedMention = {\n query: query,\n mention: mention\n };\n break;\n }\n }\n return this.matchedMention;\n }\n}\n","import { MentionAdapter, MentionInputorElement, SeekQueryResult } from './adapter';\nimport { Mention, MentionDefaultDataItem } from '../interfaces';\n\nexport class TextareaMentionAdapter extends MentionAdapter {\n inputor: MentionInputorElement;\n\n constructor(inputor: MentionInputorElement) {\n super(inputor);\n }\n\n public seekQuery(event: Event, mention: Mention): SeekQueryResult {\n const selectionStart = this.inputor.selectionStart;\n const value = this.inputor.value.replace(/[\\r\\n]/g, ' ');\n // @123 | @456 => 0(start) => @123\n // @123 @456 | => 5(start) => @456\n const start = value.lastIndexOf(mention.trigger, selectionStart);\n const fistSpaceIndexFromStart = value.indexOf(' ', selectionStart);\n const end = fistSpaceIndexFromStart > -1 ? fistSpaceIndexFromStart : value.length;\n const termWithTrigger = value.substring(start, end);\n const startBeforeHasSpace = start > 0 && value[start - 1] === ' ';\n if ((startBeforeHasSpace || start === 0) && !termWithTrigger.includes(' ') && !termWithTrigger.includes(mention.trigger, 1)) {\n return {\n start: start,\n end: end,\n term: termWithTrigger.substring(mention.trigger.length)\n };\n } else {\n return null;\n }\n }\n\n public insertMention(item: MentionDefaultDataItem): string {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && !this.matchedMention) {\n throw new Error(`matchedMention is null`);\n }\n const insertValue = this.getInsertValue(item);\n const value: string = this.inputor.value;\n const newValue = [\n value.slice(0, this.matchedMention.query.start),\n insertValue,\n value.slice(this.matchedMention.query.end, value.length)\n ].join('');\n this.inputor.value = newValue;\n this.focus(this.matchedMention.query.start + insertValue.length);\n return newValue;\n }\n\n private getInsertValue(item: MentionDefaultDataItem) {\n if (this.matchedMention.mention.insertTransform) {\n return this.matchedMention.mention.insertTransform(item).trim() + ' ';\n } else {\n return `${this.matchedMention.mention.trigger}${item['name']}`.trim() + ' ';\n }\n }\n\n private focus(caretPosition?: number): void {\n this.inputor.focus();\n this.inputor.setSelectionRange(caretPosition, caretPosition);\n }\n\n private isEditable() {\n return !this.inputor.readOnly && !this.inputor.disabled;\n }\n}\n","import { MentionAdapter, MentionInputorElement, SeekQueryResult } from './adapter';\nimport { Mention, MentionDefaultDataItem } from '../interfaces';\n\nexport class EditableMentionAdapter extends MentionAdapter {\n inputor: MentionInputorElement;\n\n constructor(inputor: MentionInputorElement) {\n super(inputor);\n }\n\n seekQuery(event: Event, mention: Mention): SeekQueryResult {\n const selectionStart = getSelection().focusOffset;\n const value = this.inputor.innerText.replace(/[\\r\\n]/g, ' ');\n const start = value.lastIndexOf(mention.trigger, selectionStart);\n const fistSpaceIndexFromStart = value.indexOf(' ', selectionStart);\n const end = fistSpaceIndexFromStart > -1 ? fistSpaceIndexFromStart : value.length;\n const termWithTrigger = value.substring(start, end);\n const startBeforeHasSpace = start > 0 && value[start - 1] === ' ';\n if ((startBeforeHasSpace || start === 0) && !termWithTrigger.includes(' ') && !termWithTrigger.includes(mention.trigger, 1)) {\n return {\n start: start,\n end: end,\n term: termWithTrigger.substring(mention.trigger.length)\n };\n } else {\n return null;\n }\n }\n\n insertMention(item: MentionDefaultDataItem): string {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && !this.matchedMention) {\n throw new Error(`matchedMention is null`);\n }\n const insertValue = this.getInsertValue(item);\n const value: string = this.inputor.innerText;\n const newValue = [\n value.slice(0, this.matchedMention.query.start),\n insertValue,\n value.slice(this.matchedMention.query.end, value.length)\n ].join('');\n this.inputor.value = newValue;\n return newValue;\n }\n\n private getInsertValue(item: MentionDefaultDataItem) {\n if (this.matchedMention.mention.insertTransform) {\n return this.matchedMention.mention.insertTransform(item).trim() + ' ';\n } else {\n return `${this.matchedMention.mention.trigger}${item['name']}`.trim() + ' ';\n }\n }\n}\n","import { isInputOrTextarea } from 'ngx-tethys/util';\nimport { TextareaMentionAdapter } from './textarea.adapter';\nimport { EditableMentionAdapter } from './editable.adapter';\nimport { MentionInputorElement } from './adapter';\n\nexport function createMentionAdapter(element: MentionInputorElement) {\n if (isInputOrTextarea(element)) {\n return new TextareaMentionAdapter(element);\n } else {\n element.contentEditable = 'true';\n return new EditableMentionAdapter(element);\n }\n}\n\nexport * from './editable.adapter';\nexport * from './textarea.adapter';\nexport * from './adapter';\n","import { Injectable } from '@angular/core';\nimport { getElementOffset } from 'ngx-tethys/util';\n\nexport interface CaretCoordinates {\n top: number;\n left: number;\n height: number;\n}\n\nexport interface CaretOptions {\n debug: boolean;\n}\n\n// We'll copy the properties below into the mirror div.\n// Note that some browsers, such as Firefox, do not concatenate properties\n// into their shorthand (e.g. padding-top, padding-bottom etc. -> padding),\n// so we have to list every single property explicitly.\nconst properties = [\n 'direction', // RTL support\n 'boxSizing',\n 'width', // on Chrome and IE, exclude the scrollbar, so the mirror div wraps exactly as the textarea does\n 'height',\n 'overflowX',\n 'overflowY', // copy the scrollbar for IE\n\n 'borderTopWidth',\n 'borderRightWidth',\n 'borderBottomWidth',\n 'borderLeftWidth',\n 'borderStyle',\n\n 'paddingTop',\n 'paddingRight',\n 'paddingBottom',\n 'paddingLeft',\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/font\n 'fontStyle',\n 'fontVariant',\n 'fontWeight',\n 'fontStretch',\n 'fontSize',\n 'fontSizeAdjust',\n 'lineHeight',\n 'fontFamily',\n\n 'textAlign',\n 'textTransform',\n 'textIndent',\n 'textDecoration', // might not make a difference, but better be safe\n\n 'letterSpacing',\n 'wordSpacing',\n\n 'tabSize',\n 'MozTabSize'\n];\n\nconst isBrowser = typeof window !== 'undefined';\nconst isFirefox = isBrowser && window['mozInnerScreenX'] != null;\n\nexport type InputOrTextAreaElement = HTMLInputElement | HTMLTextAreaElement;\nexport type AllElement = InputOrTextAreaElement | HTMLElement;\n\nexport class CaretPositioner {\n // get caret coordinates in input or textarea\n // copy from repo: https://github.com/component/textarea-caret-position\n static getTextareaCaretCoordinates(element: InputOrTextAreaElement, position: number, options?: CaretOptions): CaretCoordinates {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && !isBrowser) {\n throw new Error('textarea-caret-position#getCaretCoordinates should only be called in a browser');\n }\n\n const debug = (options && options.debug) || false;\n if (debug) {\n const el = document.querySelector('#input-textarea-caret-position-mirror-div');\n if (el) {\n el.parentNode.removeChild(el);\n }\n }\n\n // The mirror div will replicate the textarea's style\n const div = document.createElement('div');\n div.id = 'input-textarea-caret-position-mirror-div';\n document.body.appendChild(div);\n\n const style = div.style;\n const computed = window.getComputedStyle ? window.getComputedStyle(element) : element['currentStyle']; // currentStyle for IE < 9\n const isInput = element.nodeName === 'INPUT';\n\n // Default textarea styles\n style.whiteSpace = 'pre-wrap';\n if (!isInput) {\n style.wordWrap = 'break-word'; // only for textarea-s\n }\n\n // Position off-screen\n style.position = 'absolute'; // required to return coordinates properly\n if (!debug) {\n style.visibility = 'hidden'; // not 'display: none' because we want rendering\n }\n // Transfer the element's properties to the div\n properties.forEach(function (prop) {\n if (isInput && prop === 'lineHeight') {\n // Special case for <input>s because text is rendered centered and line height may be != height\n if (computed.boxSizing === 'border-box') {\n const height = parseInt(computed.height, 10);\n const outerHeight =\n parseInt(computed.paddingTop, 10) +\n parseInt(computed.paddingBottom, 10) +\n parseInt(computed.borderTopWidth, 10) +\n parseInt(computed.borderBottomWidth, 10);\n const targetHeight = outerHeight + parseInt(computed.lineHeight, 10);\n if (height > targetHeight) {\n style.lineHeight = height - outerHeight + 'px';\n } else if (height === targetHeight) {\n style.lineHeight = computed.lineHeight;\n } else {\n style.lineHeight = '0';\n }\n } else {\n style.lineHeight = computed.height;\n }\n } else {\n style[prop] = computed[prop];\n }\n });\n\n if (isFirefox) {\n // Firefox lies about the overflow property for textareas: https://bugzilla.mozilla.org/show_bug.cgi?id=984275\n if (element.scrollHeight > parseInt(computed.height, 10)) {\n style.overflowY = 'scroll';\n }\n } else {\n style.overflow = 'hidden'; // for Chrome to not render a scrollbar; IE keeps overflowY = 'scroll'\n }\n\n div.textContent = element.value.substring(0, position);\n // The second special handling for input type=\"text\" vs textarea:\n // spaces need to be replaced with non-breaking spaces - http://stackoverflow.com/a/13402035/1269037\n if (isInput) {\n div.textContent = div.textContent.replace(/\\s/g, '\\u00a0');\n }\n\n const span = document.createElement('span');\n // Wrapping must be replicated *exactly*, including when a long word gets\n // onto the next line, with whitespace at the end of the line before (#7).\n // The *only* reliable way to do that is to copy the *entire* rest of the\n // textarea's content into the <span> created at the caret position.\n // For inputs, just '.' would be enough, but no need to bother.\n span.textContent = element.value.substring(position) || '.'; // || because a completely empty faux span doesn't render at all\n div.appendChild(span);\n\n const coordinates = {\n top: span.offsetTop + parseInt(computed['borderTopWidth'], 10),\n left: span.offsetLeft + parseInt(computed['borderLeftWidth'], 10),\n height: parseInt(computed['lineHeight'], 10)\n };\n\n if (debug) {\n span.style.backgroundColor = '#aaa';\n } else {\n document.body.removeChild(div);\n }\n\n return coordinates;\n }\n\n static getEditableCaretCoordinates(element: HTMLElement): CaretCoordinates {\n if (window.getSelection().rangeCount) {\n const range = window.getSelection().getRangeAt(0);\n const rect = range.getBoundingClientRect();\n // using the start or endcontainer is... uhm yeah... difficult...? :D\n let height: string | number =\n range.startContainer.nodeType === 1\n ? getComputedStyle(range.startContainer as Element).lineHeight\n : getComputedStyle(range.startContainer.parentNode as Element).lineHeight;\n if (isNaN(height as any)) {\n let node = range.startContainer as HTMLElement;\n if (range.startContainer.nodeType !== 1) {\n node = node.parentNode as HTMLElement;\n }\n const current = node.style.lineHeight;\n node.style.lineHeight = '1em';\n height = parseInt(getComputedStyle(node).lineHeight, 10);\n node.style.lineHeight = current != null ? current : '';\n if (!node.getAttribute('style').length) {\n // clean up if empty\n node.removeAttribute('style');\n }\n }\n const editableRect = element.getBoundingClientRect();\n return {\n top: rect.top - editableRect.top,\n left: rect.left - editableRect.left,\n height: height as number\n };\n } else {\n return {\n top: 0,\n left: 0,\n height: 0\n };\n }\n }\n\n static getCaretCoordinates(element: AllElement, position: number, options?: CaretOptions) {\n const isInput = ['INPUT', 'TEXTAREA'].indexOf(element.nodeName) >= 0;\n if (isInput) {\n return this.getTextareaCaretCoordinates(element as InputOrTextAreaElement, position, options);\n } else {\n return this.getEditableCaretCoordinates(element);\n }\n }\n\n // get caret position in view window\n static getCaretPosition(element: AllElement, position: number, options?: CaretOptions) {\n const coordinates = CaretPositioner.getCaretCoordinates(element, position, options);\n const elementOffset = getElementOffset(element);\n return {\n top: coordinates.top + elementOffset.top,\n left: coordinates.left + elementOffset.left\n };\n }\n}\n","import { ThySelectionListChange, ThySelectionList } from 'ngx-tethys/list';\nimport { ThyPopoverRef } from 'ngx-tethys/popover';\nimport { Observable, of, Subject } from 'rxjs';\nimport { catchError, debounceTime, switchMap, take } from 'rxjs/operators';\n\nimport { Component, ElementRef, HostBinding, NgZone, OnDestroy, OnInit, inject } from '@angular/core';\n\nimport { SeekQueryResult } from '../adapter/adapter';\nimport { Mention, MentionDefaultDataItem, MentionSuggestionSelectEvent } from '../interfaces';\nimport { ThyListOption } from 'ngx-tethys/shared';\nimport { ThyLoading } from 'ngx-tethys/loading';\nimport { NgTemplateOutlet, SlicePipe } from '@angular/common';\n\n/**\n * @private\n */\n@Component({\n selector: 'thy-mention-suggestions',\n templateUrl: './suggestions.component.html',\n imports: [NgTemplateOutlet, ThyLoading, ThySelectionList, ThyListOption, SlicePipe]\n})\nexport class ThyMentionSuggestions<TItem = MentionDefaultDataItem> implements OnInit, OnDestroy {\n elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private ngZone = inject(NgZone);\n private popoverRef = inject<ThyPopoverRef<any>>(ThyPopoverRef);\n\n data: TItem[];\n\n mention: Mention<TItem>;\n\n suggestionSelect$ = new Subject<MentionSuggestionSelectEvent>();\n\n debounce = 150;\n\n loadingDone = true;\n\n private search$ = new Subject<SeekQueryResult>();\n\n @HostBinding('class.thy-mention-suggestions') suggestionsClass = true;\n\n constructor() {\n this.search$\n .pipe(\n switchMap(query => {\n const data = this.mention.search(query.term, this.mention.data);\n if (data instanceof Observable) {\n this.loadingDone = false;\n return (data as Observable<TItem[]>).pipe(debounceTime(this.debounce));\n } else {\n return of(data as TItem[]);\n }\n }),\n catchError(() => {\n this.loadingDone = false;\n return [];\n })\n )\n .subscribe(data => {\n this.loadingDone = true;\n this.data = data || [];\n\n if (this.popoverRef) {\n if (this.mention.autoClose && this.data.length === 0) {\n this.popoverRef.close();\n }\n this.ngZone.onStable.pipe(take(1)).subscribe(() => {\n this.popoverRef.updatePosition();\n });\n }\n });\n }\n\n ngOnInit(): void {\n if (this.mention.popoverClass) {\n this.elementRef.nativeElement.classList.add(this.mention.popoverClass);\n }\n }\n\n search(query: SeekQueryResult) {\n this.search$.next(query);\n }\n\n select(item: TItem, event: Event) {\n this.suggestionSelect$.next({\n event,\n item\n });\n }\n\n selectionChange(event: ThySelectionListChange<TItem>) {\n this.select(event.value, event.event);\n }\n\n ngOnDestroy() {\n this.search$.complete();\n }\n}\n","@if (mention.suggestionsTemplateRef) {\n <ng-container [ngTemplateOutlet]=\"mention.suggestionsTemplateRef\" [ngTemplateOutletContext]=\"{ data: data }\"></ng-container>\n} @else {\n <thy-loading [thyDone]=\"loadingDone\"></thy-loading>\n @if (loadingDone) {\n @if (data?.length > 0) {\n <thy-selection-list\n thyBindKeyEventContainer=\"body\"\n thyMultiple=\"false\"\n thyAutoActiveFirstItem=\"true\"\n thySpaceKeyEnabled=\"false\"\n [thyScrollContainer]=\"elementRef\"\n (thySelectionChange)=\"selectionChange($event)\">\n @for (item of data | slice: 0 : mention.limit; track $index) {\n <thy-list-option [thyValue]=\"item\">\n @if (mention?.displayTemplateRef) {\n <ng-template *ngTemplateOutlet=\"mention?.displayTemplateRef; context: { $implicit: item }\"></ng-template>\n } @else {\n {{ item['name'] || '' }}\n }\n </thy-list-option>\n }\n </thy-selection-list>\n } @else {\n <div class=\"text-desc p-3\">\n {{ mention?.emptyText }}\n </div>\n }\n }\n}\n","import { ThyPopover, ThyPopoverConfig, ThyPopoverRef } from 'ngx-tethys/popover';\nimport { EMPTY, fromEvent, Subject } from 'rxjs';\nimport { switchMap, takeUntil } from 'rxjs/operators';\n\nimport { Directive, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output, inject } from '@angular/core';\nimport { NgControl } from '@angular/forms';\n\nimport { createMentionAdapter, MatchedMention, MentionAdapter, MentionInputorElement } from './adapter';\nimport { CaretPositioner } from './caret-positioner';\nimport { Mention, MentionDefaultDataItem, MentionSuggestionSelectEvent } from './interfaces';\nimport { ThyMentionSuggestions } from './suggestions/suggestions.component';\nimport { isInputOrTextarea } from 'ngx-tethys/util';\n\nconst SUGGESTION_BACKDROP_CLASS = 'thy-mention-suggestions-backdrop';\n\nconst POPOVER_DEFAULT_CONFIG = {\n backdropClass: SUGGESTION_BACKDROP_CLASS,\n placement: 'bottomLeft'\n};\n\nconst DEFAULT_MENTION_CONFIG: Partial<Mention> = {\n autoClose: true,\n emptyText: '无匹配数据,按空格完成输入',\n search: (term: string, data: MentionDefaultDataItem[]) => {\n return data.filter(item => {\n return !item.name || item.name.toLowerCase().includes(term.toLowerCase());\n });\n }\n};\n\n/**\n * @name thyMention\n * @order 10\n */\n@Directive({\n selector: '[thyMention]'\n})\nexport class ThyMentionDirective implements OnInit, OnDestroy {\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private thyPopover = inject(ThyPopover);\n private ngControl = inject(NgControl, { optional: true, self: true })!;\n\n private adapter: MentionAdapter = null;\n\n public openedSuggestionsRef: ThyPopoverRef<ThyMentionSuggestions>;\n\n private _mentions: Mention<any>[];\n get mentions() {\n return this._mentions;\n }\n\n /**\n * 提及输入配置参数,同时支持多个提及规则\n * @type Mention<any>[]\n */\n @Input('thyMention') set mentions(value: Mention<any>[]) {\n this._mentions = value;\n if (this._mentions) {\n this._mentions = this._mentions.map(mention => {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && !mention.trigger) {\n throw new Error(`mention trigger is required`);\n }\n return Object.assign({}, DEFAULT_MENTION_CONFIG, mention);\n });\n }\n }\n\n /**\n * Popover 弹出层参数配置\n */\n @Input('thyPopoverConfig') popoverConfig: ThyPopoverConfig;\n\n /**\n * 选择后的回调函数\n */\n @Output('thySelectSuggestion') select = new EventEmitter<MentionSuggestionSelectEvent>();\n\n get isOpened() {\n return !!this.openedSuggestionsRef;\n }\n\n private destroy$ = new Subject<void>();\n\n private openedSuggestionsRef$ = new Subject<ThyPopoverRef<ThyMentionSuggestions> | null>();\n\n constructor() {\n const elementRef = this.elementRef;\n\n this.adapter = createMentionAdapter(elementRef.nativeElement as MentionInputorElement);\n }\n\n ngOnInit() {\n fromEvent(this.elementRef.nativeElement, 'input')\n .pipe(takeUntil(this.destroy$))\n .subscribe(event => this.onInput(event));\n\n fromEvent(this.elementRef.nativeElement, 'click')\n .pipe(takeUntil(this.destroy$))\n .subscribe(event => this.onClick(event));\n\n this.openedSuggestionsRef$\n .pipe(\n switchMap(openedSuggestionsRef =>\n // Re-subscribe to `suggestionSelect$` every time the suggestions component is re-created,\n // otherwise, unsubscribe, if it gets closed.\n openedSuggestionsRef ? openedSuggestionsRef.componentInstance.suggestionSelect$ : EMPTY\n ),\n takeUntil(this.destroy$)\n )\n .subscribe(event => {\n const newValue = this.adapter.insertMention(event.item);\n if (isInputOrTextarea(this.elementRef.nativeElement)) {\n if (this.ngControl && this.ngControl.control) {\n this.ngControl.control.setValue(newValue);\n }\n } else {\n this.elementRef.nativeElement.innerText = newValue;\n }\n this.openedSuggestionsRef.close();\n this.select.emit(event);\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n }\n\n onClick(event: Event) {\n this.lookup(event);\n }\n\n onInput(event: Event) {\n this.lookup(event);\n }\n\n private lookup(event: Event) {\n const matched = this.adapter.lookup(event, this.mentions);\n if (matched) {\n this.openSuggestions(matched);\n } else {\n this.closeSuggestions();\n }\n }\n\n private openSuggestions(matched: MatchedMention) {\n if (!this.openedSuggestionsRef) {\n const inputElement = this.elementRef.nativeElement as HTMLInputElement;\n const position = CaretPositioner.getCaretPosition(inputElement, matched.query.start);\n const fontSize = parseInt(getComputedStyle(this.elementRef.nativeElement).fontSize, 10);\n this.openedSuggestionsRef = this.thyPopover.open(\n ThyMentionSuggestions,\n Object.assign(\n {},\n POPOVER_DEFAULT_CONFIG,\n {\n origin: this.elementRef,\n originPosition: {\n x: position.left,\n y: position.top,\n width: fontSize,\n height: fontSize\n },\n initialState: {\n mention: matched.mention\n }\n },\n this.popoverConfig\n )\n );\n this.openedSuggestionsRef.afterClosed().subscribe(() => {\n this.openedSuggestionsRef = null;\n this.openedSuggestionsRef$.next(null);\n });\n\n this.openedSuggestionsRef$.next(this.openedSuggestionsRef);\n }\n\n if (this.openedSuggestionsRef) {\n this.openedSuggestionsRef.componentInstance.search(matched.query);\n }\n }\n\n private closeSuggestions() {\n if (this.openedSuggestionsRef) {\n this.openedSuggestionsRef.close();\n }\n }\n}\n","import { ThyListModule } from 'ngx-tethys/list';\nimport { ThyLoadingModule } from 'ngx-tethys/loading';\nimport { ThyPopoverModule } from 'ngx-tethys/popover';\n\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { ThyMentionDirective } from './mention.directive';\nimport { ThyMentionSuggestions } from './suggestions/suggestions.component';\n\n@NgModule({\n imports: [CommonModule, FormsModule, ThyPopoverModule, ThyListModule, ThyLoadingModule, ThyMentionDirective, ThyMentionSuggestions],\n exports: [ThyMentionDirective],\n providers: []\n})\nexport class ThyMentionModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngx-tethys-mention.mjs","sources":["../../../src/mention/adapter/adapter.ts","../../../src/mention/adapter/textarea.adapter.ts","../../../src/mention/adapter/editable.adapter.ts","../../../src/mention/adapter/index.ts","../../../src/mention/caret-positioner.ts","../../../src/mention/suggestions/suggestions.component.ts","../../../src/mention/suggestions/suggestions.component.html","../../../src/mention/mention.directive.ts","../../../src/mention/mention.module.ts","../../../src/mention/ngx-tethys-mention.ts"],"sourcesContent":["import { MentionDefaultDataItem, Mention } from '../interfaces';\n\nexport interface SeekQueryResult {\n term: string;\n start: number;\n end: number;\n}\n\nexport interface MatchedMention<T = MentionDefaultDataItem> {\n query: SeekQueryResult;\n mention: Mention<T>;\n}\n\nexport type MentionInputorElement = HTMLTextAreaElement | HTMLInputElement;\nexport abstract class MentionAdapter {\n inputor: MentionInputorElement;\n\n matchedMention: MatchedMention;\n\n constructor(inputor: MentionInputorElement) {\n this.inputor = inputor;\n }\n\n abstract seekQuery(event: Event, mention: Mention): SeekQueryResult;\n\n abstract insertMention(item: MentionDefaultDataItem): string;\n\n lookup(event: Event, mentions: Mention[]) {\n this.matchedMention = null;\n for (const mention of mentions) {\n const query = this.seekQuery(event, mention);\n if (query) {\n this.matchedMention = {\n query: query,\n mention: mention\n };\n break;\n }\n }\n return this.matchedMention;\n }\n}\n","import { MentionAdapter, MentionInputorElement, SeekQueryResult } from './adapter';\nimport { Mention, MentionDefaultDataItem } from '../interfaces';\n\nexport class TextareaMentionAdapter extends MentionAdapter {\n inputor: MentionInputorElement;\n\n constructor(inputor: MentionInputorElement) {\n super(inputor);\n }\n\n public seekQuery(event: Event, mention: Mention): SeekQueryResult {\n const selectionStart = this.inputor.selectionStart;\n const value = this.inputor.value.replace(/[\\r\\n]/g, ' ');\n // @123 | @456 => 0(start) => @123\n // @123 @456 | => 5(start) => @456\n const start = value.lastIndexOf(mention.trigger, selectionStart);\n const fistSpaceIndexFromStart = value.indexOf(' ', selectionStart);\n const end = fistSpaceIndexFromStart > -1 ? fistSpaceIndexFromStart : value.length;\n const termWithTrigger = value.substring(start, end);\n const startBeforeHasSpace = start > 0 && value[start - 1] === ' ';\n if ((startBeforeHasSpace || start === 0) && !termWithTrigger.includes(' ') && !termWithTrigger.includes(mention.trigger, 1)) {\n return {\n start: start,\n end: end,\n term: termWithTrigger.substring(mention.trigger.length)\n };\n } else {\n return null;\n }\n }\n\n public insertMention(item: MentionDefaultDataItem): string {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && !this.matchedMention) {\n throw new Error(`matchedMention is null`);\n }\n const insertValue = this.getInsertValue(item);\n const value: string = this.inputor.value;\n const newValue = [\n value.slice(0, this.matchedMention.query.start),\n insertValue,\n value.slice(this.matchedMention.query.end, value.length)\n ].join('');\n this.inputor.value = newValue;\n this.focus(this.matchedMention.query.start + insertValue.length);\n return newValue;\n }\n\n private getInsertValue(item: MentionDefaultDataItem) {\n if (this.matchedMention.mention.insertTransform) {\n return this.matchedMention.mention.insertTransform(item).trim() + ' ';\n } else {\n return `${this.matchedMention.mention.trigger}${item['name']}`.trim() + ' ';\n }\n }\n\n private focus(caretPosition?: number): void {\n this.inputor.focus();\n this.inputor.setSelectionRange(caretPosition, caretPosition);\n }\n\n private isEditable() {\n return !this.inputor.readOnly && !this.inputor.disabled;\n }\n}\n","import { MentionAdapter, MentionInputorElement, SeekQueryResult } from './adapter';\nimport { Mention, MentionDefaultDataItem } from '../interfaces';\n\nexport class EditableMentionAdapter extends MentionAdapter {\n inputor: MentionInputorElement;\n\n constructor(inputor: MentionInputorElement) {\n super(inputor);\n }\n\n seekQuery(event: Event, mention: Mention): SeekQueryResult {\n const selectionStart = getSelection().focusOffset;\n const value = this.inputor.innerText.replace(/[\\r\\n]/g, ' ');\n const start = value.lastIndexOf(mention.trigger, selectionStart);\n const fistSpaceIndexFromStart = value.indexOf(' ', selectionStart);\n const end = fistSpaceIndexFromStart > -1 ? fistSpaceIndexFromStart : value.length;\n const termWithTrigger = value.substring(start, end);\n const startBeforeHasSpace = start > 0 && value[start - 1] === ' ';\n if ((startBeforeHasSpace || start === 0) && !termWithTrigger.includes(' ') && !termWithTrigger.includes(mention.trigger, 1)) {\n return {\n start: start,\n end: end,\n term: termWithTrigger.substring(mention.trigger.length)\n };\n } else {\n return null;\n }\n }\n\n insertMention(item: MentionDefaultDataItem): string {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && !this.matchedMention) {\n throw new Error(`matchedMention is null`);\n }\n const insertValue = this.getInsertValue(item);\n const value: string = this.inputor.innerText;\n const newValue = [\n value.slice(0, this.matchedMention.query.start),\n insertValue,\n value.slice(this.matchedMention.query.end, value.length)\n ].join('');\n this.inputor.value = newValue;\n return newValue;\n }\n\n private getInsertValue(item: MentionDefaultDataItem) {\n if (this.matchedMention.mention.insertTransform) {\n return this.matchedMention.mention.insertTransform(item).trim() + ' ';\n } else {\n return `${this.matchedMention.mention.trigger}${item['name']}`.trim() + ' ';\n }\n }\n}\n","import { isInputOrTextarea } from 'ngx-tethys/util';\nimport { TextareaMentionAdapter } from './textarea.adapter';\nimport { EditableMentionAdapter } from './editable.adapter';\nimport { MentionInputorElement } from './adapter';\n\nexport function createMentionAdapter(element: MentionInputorElement) {\n if (isInputOrTextarea(element)) {\n return new TextareaMentionAdapter(element);\n } else {\n element.contentEditable = 'true';\n return new EditableMentionAdapter(element);\n }\n}\n\nexport * from './editable.adapter';\nexport * from './textarea.adapter';\nexport * from './adapter';\n","import { Injectable } from '@angular/core';\nimport { getElementOffset } from 'ngx-tethys/util';\n\nexport interface CaretCoordinates {\n top: number;\n left: number;\n height: number;\n}\n\nexport interface CaretOptions {\n debug: boolean;\n}\n\n// We'll copy the properties below into the mirror div.\n// Note that some browsers, such as Firefox, do not concatenate properties\n// into their shorthand (e.g. padding-top, padding-bottom etc. -> padding),\n// so we have to list every single property explicitly.\nconst properties = [\n 'direction', // RTL support\n 'boxSizing',\n 'width', // on Chrome and IE, exclude the scrollbar, so the mirror div wraps exactly as the textarea does\n 'height',\n 'overflowX',\n 'overflowY', // copy the scrollbar for IE\n\n 'borderTopWidth',\n 'borderRightWidth',\n 'borderBottomWidth',\n 'borderLeftWidth',\n 'borderStyle',\n\n 'paddingTop',\n 'paddingRight',\n 'paddingBottom',\n 'paddingLeft',\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/font\n 'fontStyle',\n 'fontVariant',\n 'fontWeight',\n 'fontStretch',\n 'fontSize',\n 'fontSizeAdjust',\n 'lineHeight',\n 'fontFamily',\n\n 'textAlign',\n 'textTransform',\n 'textIndent',\n 'textDecoration', // might not make a difference, but better be safe\n\n 'letterSpacing',\n 'wordSpacing',\n\n 'tabSize',\n 'MozTabSize'\n];\n\nconst isBrowser = typeof window !== 'undefined';\nconst isFirefox = isBrowser && window['mozInnerScreenX'] != null;\n\nexport type InputOrTextAreaElement = HTMLInputElement | HTMLTextAreaElement;\nexport type AllElement = InputOrTextAreaElement | HTMLElement;\n\nexport class CaretPositioner {\n // get caret coordinates in input or textarea\n // copy from repo: https://github.com/component/textarea-caret-position\n static getTextareaCaretCoordinates(element: InputOrTextAreaElement, position: number, options?: CaretOptions): CaretCoordinates {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && !isBrowser) {\n throw new Error('textarea-caret-position#getCaretCoordinates should only be called in a browser');\n }\n\n const debug = (options && options.debug) || false;\n if (debug) {\n const el = document.querySelector('#input-textarea-caret-position-mirror-div');\n if (el) {\n el.parentNode.removeChild(el);\n }\n }\n\n // The mirror div will replicate the textarea's style\n const div = document.createElement('div');\n div.id = 'input-textarea-caret-position-mirror-div';\n document.body.appendChild(div);\n\n const style = div.style;\n const computed = window.getComputedStyle ? window.getComputedStyle(element) : element['currentStyle']; // currentStyle for IE < 9\n const isInput = element.nodeName === 'INPUT';\n\n // Default textarea styles\n style.whiteSpace = 'pre-wrap';\n if (!isInput) {\n style.wordWrap = 'break-word'; // only for textarea-s\n }\n\n // Position off-screen\n style.position = 'absolute'; // required to return coordinates properly\n if (!debug) {\n style.visibility = 'hidden'; // not 'display: none' because we want rendering\n }\n // Transfer the element's properties to the div\n properties.forEach(function (prop) {\n if (isInput && prop === 'lineHeight') {\n // Special case for <input>s because text is rendered centered and line height may be != height\n if (computed.boxSizing === 'border-box') {\n const height = parseInt(computed.height, 10);\n const outerHeight =\n parseInt(computed.paddingTop, 10) +\n parseInt(computed.paddingBottom, 10) +\n parseInt(computed.borderTopWidth, 10) +\n parseInt(computed.borderBottomWidth, 10);\n const targetHeight = outerHeight + parseInt(computed.lineHeight, 10);\n if (height > targetHeight) {\n style.lineHeight = height - outerHeight + 'px';\n } else if (height === targetHeight) {\n style.lineHeight = computed.lineHeight;\n } else {\n style.lineHeight = '0';\n }\n } else {\n style.lineHeight = computed.height;\n }\n } else {\n style[prop] = computed[prop];\n }\n });\n\n if (isFirefox) {\n // Firefox lies about the overflow property for textareas: https://bugzilla.mozilla.org/show_bug.cgi?id=984275\n if (element.scrollHeight > parseInt(computed.height, 10)) {\n style.overflowY = 'scroll';\n }\n } else {\n style.overflow = 'hidden'; // for Chrome to not render a scrollbar; IE keeps overflowY = 'scroll'\n }\n\n div.textContent = element.value.substring(0, position);\n // The second special handling for input type=\"text\" vs textarea:\n // spaces need to be replaced with non-breaking spaces - http://stackoverflow.com/a/13402035/1269037\n if (isInput) {\n div.textContent = div.textContent.replace(/\\s/g, '\\u00a0');\n }\n\n const span = document.createElement('span');\n // Wrapping must be replicated *exactly*, including when a long word gets\n // onto the next line, with whitespace at the end of the line before (#7).\n // The *only* reliable way to do that is to copy the *entire* rest of the\n // textarea's content into the <span> created at the caret position.\n // For inputs, just '.' would be enough, but no need to bother.\n span.textContent = element.value.substring(position) || '.'; // || because a completely empty faux span doesn't render at all\n div.appendChild(span);\n\n const coordinates = {\n top: span.offsetTop + parseInt(computed['borderTopWidth'], 10),\n left: span.offsetLeft + parseInt(computed['borderLeftWidth'], 10),\n height: parseInt(computed['lineHeight'], 10)\n };\n\n if (debug) {\n span.style.backgroundColor = '#aaa';\n } else {\n document.body.removeChild(div);\n }\n\n return coordinates;\n }\n\n static getEditableCaretCoordinates(element: HTMLElement): CaretCoordinates {\n if (window.getSelection().rangeCount) {\n const range = window.getSelection().getRangeAt(0);\n const rect = range.getBoundingClientRect();\n // using the start or endcontainer is... uhm yeah... difficult...? :D\n let height: string | number =\n range.startContainer.nodeType === 1\n ? getComputedStyle(range.startContainer as Element).lineHeight\n : getComputedStyle(range.startContainer.parentNode as Element).lineHeight;\n if (isNaN(height as any)) {\n let node = range.startContainer as HTMLElement;\n if (range.startContainer.nodeType !== 1) {\n node = node.parentNode as HTMLElement;\n }\n const current = node.style.lineHeight;\n node.style.lineHeight = '1em';\n height = parseInt(getComputedStyle(node).lineHeight, 10);\n node.style.lineHeight = current != null ? current : '';\n if (!node.getAttribute('style').length) {\n // clean up if empty\n node.removeAttribute('style');\n }\n }\n const editableRect = element.getBoundingClientRect();\n return {\n top: rect.top - editableRect.top,\n left: rect.left - editableRect.left,\n height: height as number\n };\n } else {\n return {\n top: 0,\n left: 0,\n height: 0\n };\n }\n }\n\n static getCaretCoordinates(element: AllElement, position: number, options?: CaretOptions) {\n const isInput = ['INPUT', 'TEXTAREA'].indexOf(element.nodeName) >= 0;\n if (isInput) {\n return this.getTextareaCaretCoordinates(element as InputOrTextAreaElement, position, options);\n } else {\n return this.getEditableCaretCoordinates(element);\n }\n }\n\n // get caret position in view window\n static getCaretPosition(element: AllElement, position: number, options?: CaretOptions) {\n const coordinates = CaretPositioner.getCaretCoordinates(element, position, options);\n const elementOffset = getElementOffset(element);\n return {\n top: coordinates.top + elementOffset.top,\n left: coordinates.left + elementOffset.left\n };\n }\n}\n","import { ThySelectionListChange, ThySelectionList } from 'ngx-tethys/list';\nimport { ThyPopoverRef } from 'ngx-tethys/popover';\nimport { Observable, of, Subject } from 'rxjs';\nimport { catchError, debounceTime, switchMap, take } from 'rxjs/operators';\nimport { Component, ElementRef, NgZone, OnDestroy, OnInit, inject, signal, input } from '@angular/core';\nimport { SeekQueryResult } from '../adapter/adapter';\nimport { Mention, MentionDefaultDataItem, MentionSuggestionSelectEvent } from '../interfaces';\nimport { ThyListOption } from 'ngx-tethys/shared';\nimport { ThyLoading } from 'ngx-tethys/loading';\nimport { NgTemplateOutlet, SlicePipe } from '@angular/common';\n\n/**\n * @private\n */\n@Component({\n selector: 'thy-mention-suggestions',\n templateUrl: './suggestions.component.html',\n imports: [NgTemplateOutlet, ThyLoading, ThySelectionList, ThyListOption, SlicePipe],\n host: { class: 'thy-mention-suggestions' }\n})\nexport class ThyMentionSuggestions<TItem = MentionDefaultDataItem> implements OnInit, OnDestroy {\n readonly mention = input<Mention<TItem>>();\n\n data = signal<TItem[]>([]);\n\n suggestionSelect$ = new Subject<MentionSuggestionSelectEvent>();\n\n debounce = 150;\n\n loadingDone = signal(true);\n\n private search$ = new Subject<SeekQueryResult>();\n\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n private ngZone = inject(NgZone);\n\n private popoverRef = inject<ThyPopoverRef<any>>(ThyPopoverRef);\n\n constructor() {\n this.search$\n .pipe(\n switchMap(query => {\n const data = this.mention().search(query.term, this.mention().data);\n if (data instanceof Observable) {\n this.loadingDone.set(false);\n return (data as Observable<TItem[]>).pipe(debounceTime(this.debounce));\n } else {\n return of(data as TItem[]);\n }\n }),\n catchError(() => {\n this.loadingDone.set(false);\n return of([]);\n })\n )\n .subscribe(data => {\n this.loadingDone.set(true);\n this.data.set(data || []);\n\n if (this.popoverRef) {\n if (this.mention().autoClose && this.data().length === 0) {\n this.popoverRef.close();\n }\n this.ngZone.onStable.pipe(take(1)).subscribe(() => {\n this.popoverRef.updatePosition();\n });\n }\n });\n }\n\n ngOnInit(): void {\n if (this.mention().popoverClass) {\n this.elementRef.nativeElement.classList.add(this.mention().popoverClass);\n }\n }\n\n search(query: SeekQueryResult) {\n this.search$.next(query);\n }\n\n select(item: TItem, event: Event) {\n this.suggestionSelect$.next({ event, item });\n }\n\n selectionChange(event: ThySelectionListChange<TItem>) {\n this.select(event.value, event.event);\n }\n\n ngOnDestroy() {\n this.search$.complete();\n }\n}\n","@if (mention().suggestionsTemplateRef) {\n <ng-container [ngTemplateOutlet]=\"mention().suggestionsTemplateRef\" [ngTemplateOutletContext]=\"{ data: data() }\"></ng-container>\n} @else {\n <thy-loading [thyDone]=\"loadingDone()\"></thy-loading>\n @if (loadingDone()) {\n @if (data()?.length > 0) {\n <thy-selection-list\n thyBindKeyEventContainer=\"body\"\n thyMultiple=\"false\"\n thyAutoActiveFirstItem=\"true\"\n thySpaceKeyEnabled=\"false\"\n [thyScrollContainer]=\"elementRef\"\n (thySelectionChange)=\"selectionChange($event)\">\n @for (item of data() | slice: 0 : mention().limit; track $index) {\n <thy-list-option [thyValue]=\"item\">\n @if (mention().displayTemplateRef) {\n <ng-template *ngTemplateOutlet=\"mention().displayTemplateRef; context: { $implicit: item }\"></ng-template>\n } @else {\n {{ item['name'] || '' }}\n }\n </thy-list-option>\n }\n </thy-selection-list>\n } @else {\n <div class=\"text-desc p-3\">\n {{ mention().emptyText }}\n </div>\n }\n }\n}\n","import { ThyPopover, ThyPopoverConfig, ThyPopoverRef } from 'ngx-tethys/popover';\nimport { EMPTY, fromEvent, Subject } from 'rxjs';\nimport { switchMap, takeUntil } from 'rxjs/operators';\n\nimport { Directive, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output, computed, inject, input, output } from '@angular/core';\nimport { NgControl } from '@angular/forms';\n\nimport { createMentionAdapter, MatchedMention, MentionAdapter, MentionInputorElement } from './adapter';\nimport { CaretPositioner } from './caret-positioner';\nimport { Mention, MentionDefaultDataItem, MentionSuggestionSelectEvent } from './interfaces';\nimport { ThyMentionSuggestions } from './suggestions/suggestions.component';\nimport { isInputOrTextarea } from 'ngx-tethys/util';\n\nconst SUGGESTION_BACKDROP_CLASS = 'thy-mention-suggestions-backdrop';\n\nconst POPOVER_DEFAULT_CONFIG = { backdropClass: SUGGESTION_BACKDROP_CLASS, placement: 'bottomLeft' };\n\nconst DEFAULT_MENTION_CONFIG: Partial<Mention> = {\n autoClose: true,\n emptyText: '无匹配数据,按空格完成输入',\n search: (term: string, data: MentionDefaultDataItem[]) => {\n return data.filter(item => {\n return !item.name || item.name.toLowerCase().includes(term.toLowerCase());\n });\n }\n};\n\n/**\n * @name thyMention\n * @order 10\n */\n@Directive({ selector: '[thyMention]' })\nexport class ThyMentionDirective implements OnInit, OnDestroy {\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private thyPopover = inject(ThyPopover);\n private ngControl = inject(NgControl, { optional: true, self: true })!;\n\n private adapter: MentionAdapter = null;\n\n public openedSuggestionsRef: ThyPopoverRef<ThyMentionSuggestions>;\n\n /**\n * 提及输入配置参数,同时支持多个提及规则\n * @type Mention<any>[]\n */\n readonly thyMention = input<Mention<any>[]>([]);\n\n /**\n * Popover 弹出层参数配置\n */\n readonly thyPopoverConfig = input<ThyPopoverConfig>();\n\n /**\n * 选择后的回调函数\n */\n readonly select = output<MentionSuggestionSelectEvent>();\n\n get isOpened() {\n return !!this.openedSuggestionsRef;\n }\n\n mentions = computed(() => {\n if (this.thyMention()) {\n return this.thyMention().map(mention => {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && !mention.trigger) {\n throw new Error(`mention trigger is required`);\n }\n return Object.assign({}, DEFAULT_MENTION_CONFIG, mention);\n });\n } else {\n return [];\n }\n });\n\n private destroy$ = new Subject<void>();\n\n private openedSuggestionsRef$ = new Subject<ThyPopoverRef<ThyMentionSuggestions> | null>();\n\n constructor() {\n const elementRef = this.elementRef;\n\n this.adapter = createMentionAdapter(elementRef.nativeElement as MentionInputorElement);\n }\n\n ngOnInit() {\n fromEvent(this.elementRef.nativeElement, 'input')\n .pipe(takeUntil(this.destroy$))\n .subscribe(event => this.onInput(event));\n\n fromEvent(this.elementRef.nativeElement, 'click')\n .pipe(takeUntil(this.destroy$))\n .subscribe(event => this.onClick(event));\n\n this.openedSuggestionsRef$\n .pipe(\n switchMap(openedSuggestionsRef =>\n // Re-subscribe to `suggestionSelect$` every time the suggestions component is re-created,\n // otherwise, unsubscribe, if it gets closed.\n openedSuggestionsRef ? openedSuggestionsRef.componentInstance.suggestionSelect$ : EMPTY\n ),\n takeUntil(this.destroy$)\n )\n .subscribe(event => {\n const newValue = this.adapter.insertMention(event.item);\n if (isInputOrTextarea(this.elementRef.nativeElement)) {\n if (this.ngControl && this.ngControl.control) {\n this.ngControl.control.setValue(newValue);\n }\n } else {\n this.elementRef.nativeElement.innerText = newValue;\n }\n this.openedSuggestionsRef.close();\n this.select.emit(event);\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n }\n\n onClick(event: Event) {\n this.lookup(event);\n }\n\n onInput(event: Event) {\n this.lookup(event);\n }\n\n private lookup(event: Event) {\n const matched = this.adapter.lookup(event, this.mentions());\n if (matched) {\n this.openSuggestions(matched);\n } else {\n this.closeSuggestions();\n }\n }\n\n private openSuggestions(matched: MatchedMention) {\n if (!this.openedSuggestionsRef) {\n const inputElement = this.elementRef.nativeElement as HTMLInputElement;\n const position = CaretPositioner.getCaretPosition(inputElement, matched.query.start);\n const fontSize = parseInt(getComputedStyle(this.elementRef.nativeElement).fontSize, 10);\n this.openedSuggestionsRef = this.thyPopover.open(\n ThyMentionSuggestions,\n Object.assign(\n {},\n POPOVER_DEFAULT_CONFIG,\n {\n origin: this.elementRef,\n originPosition: { x: position.left, y: position.top, width: fontSize, height: fontSize },\n initialState: { mention: matched.mention }\n },\n this.thyPopoverConfig()\n )\n );\n this.openedSuggestionsRef.afterClosed().subscribe(() => {\n this.openedSuggestionsRef = null;\n this.openedSuggestionsRef$.next(null);\n });\n\n this.openedSuggestionsRef$.next(this.openedSuggestionsRef);\n }\n\n if (this.openedSuggestionsRef) {\n this.openedSuggestionsRef.componentInstance.search(matched.query);\n }\n }\n\n private closeSuggestions() {\n if (this.openedSuggestionsRef) {\n this.openedSuggestionsRef.close();\n }\n }\n}\n","import { ThyListModule } from 'ngx-tethys/list';\nimport { ThyLoadingModule } from 'ngx-tethys/loading';\nimport { ThyPopoverModule } from 'ngx-tethys/popover';\n\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { ThyMentionDirective } from './mention.directive';\nimport { ThyMentionSuggestions } from './suggestions/suggestions.component';\n\n@NgModule({\n imports: [CommonModule, FormsModule, ThyPopoverModule, ThyListModule, ThyLoadingModule, ThyMentionDirective, ThyMentionSuggestions],\n exports: [ThyMentionDirective],\n providers: []\n})\nexport class ThyMentionModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -784,8 +784,10 @@ class ThySelectControl {
784
784
  });
785
785
  }
786
786
  if (!this.panelOpened && this.thyShowSearch) {
787
- Promise.resolve(null).then(() => {
788
- this.setInputValue('');
787
+ new Promise(resolve => setTimeout(resolve, 100)).then(() => {
788
+ this.inputValue = '';
789
+ this.updateWidth();
790
+ this.thyOnSearch.emit(this.inputValue);
789
791
  });
790
792
  }
791
793
  this.setSelectControlClass();
@@ -824,7 +826,8 @@ class ThySelectControl {
824
826
  if (this.panelOpened && this.thyShowSearch) {
825
827
  if (!sameValue) {
826
828
  Promise.resolve(null).then(() => {
827
- this.setInputValue('');
829
+ this.inputValue = '';
830
+ this.updateWidth();
828
831
  });
829
832
  }
830
833
  //等待组件渲染好再聚焦
@@ -939,7 +942,7 @@ class ThySelectControl {
939
942
  if (event.isComposing) {
940
943
  return;
941
944
  }
942
- if (this.inputValue.length === 0 && this.selectedOptions instanceof Array) {
945
+ if (!this.inputValue?.length && this.selectedOptions instanceof Array) {
943
946
  if (this.selectedOptions.length > 0) {
944
947
  this.removeHandle(this.selectedOptions[this.selectedOptions.length - 1], event);
945
948
  }