ngx-tethys 19.0.12 → 19.0.13

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.
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-tethys-list.mjs","sources":["../../../src/list/list.component.ts","../../../src/list/list-item.component.ts","../../../src/list/selection/selection-list.ts","../../../src/list/list-item-meta.component.ts","../../../src/list/list-item-meta.component.html","../../../src/list/list.module.ts","../../../src/list/ngx-tethys-list.ts"],"sourcesContent":["import { Component, Input, HostBinding } from '@angular/core';\nimport { coerceBooleanProperty } from 'ngx-tethys/util';\n\n/**\n * 列表组件\n * @name thy-list\n * @order 10\n */\n@Component({\n selector: 'thy-list',\n template: '<ng-content></ng-content>'\n})\nexport class ThyList {\n /**\n * 控制分割线的显示与隐藏\n * @default false\n */\n @Input({ transform: coerceBooleanProperty })\n set thyDivided(value: boolean) {\n this._isDivided = value;\n }\n\n @HostBinding(`class.thy-list-divided`) _isDivided = false;\n\n @HostBinding(`class.thy-list`) _isList = true;\n\n constructor() {}\n}\n","import { Component, HostBinding } from '@angular/core';\n\n/**\n * @name thy-list-item,[thy-list-item]\n * @order 15\n */\n@Component({\n selector: 'thy-list-item,[thy-list-item]',\n template: '<ng-content></ng-content>'\n})\nexport class ThyListItem {\n @HostBinding(`class.thy-list-item`) _isListItem = true;\n\n constructor() {}\n}\n","import { ScrollToService } from 'ngx-tethys/core';\nimport { IThyListOptionParentComponent, THY_LIST_OPTION_PARENT_COMPONENT, ThyListOption } from 'ngx-tethys/shared';\nimport { coerceBooleanProperty, dom, helpers, keycodes } from 'ngx-tethys/util';\nimport { Subscription } from 'rxjs';\nimport { startWith } from 'rxjs/operators';\nimport { useHostRenderer } from '@tethys/cdk/dom';\nimport { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostBinding,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n Renderer2,\n inject\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ThyListLayout } from 'ngx-tethys/shared';\nimport { ThySelectionListChange } from './selection.interface';\n\nexport type ThyListSize = 'sm' | 'md' | 'lg';\n\nconst listSizesMap = {\n sm: 'thy-list-sm'\n};\n\n/**\n * @name thy-selection-list,[thy-selection-list]\n * @order 20\n */\n@Component({\n selector: 'thy-selection-list,[thy-selection-list]',\n template: '<ng-content></ng-content>',\n providers: [\n {\n provide: THY_LIST_OPTION_PARENT_COMPONENT,\n useExisting: ThySelectionList\n },\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ThySelectionList),\n multi: true\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ThySelectionList implements OnInit, OnDestroy, AfterContentInit, IThyListOptionParentComponent, ControlValueAccessor {\n private renderer = inject(Renderer2);\n private elementRef = inject(ElementRef);\n private ngZone = inject(NgZone);\n private changeDetectorRef = inject(ChangeDetectorRef);\n\n private _keyManager: ActiveDescendantKeyManager<ThyListOption>;\n\n private _selectionChangesUnsubscribe$ = Subscription.EMPTY;\n\n private _bindKeyEventUnsubscribe: () => void;\n\n private _modelValues: any[];\n\n private hostRenderer = useHostRenderer();\n\n /** The currently selected options. */\n selectionModel: SelectionModel<any>;\n\n disabled: boolean;\n\n layout: ThyListLayout = 'list';\n\n @HostBinding(`class.thy-list`) _isList = true;\n\n @HostBinding(`class.thy-selection-list`) _isSelectionList = true;\n\n @HostBinding(`class.thy-multiple-selection-list`) multiple = true;\n\n @HostBinding(`class.thy-grid-list`) isLayoutGrid = false;\n\n /**\n * @internal\n */\n @ContentChildren(ThyListOption, { descendants: true }) options: QueryList<ThyListOption>;\n\n /**\n * 改变 grid item 的选择模式,使其支持多选\n * @default true\n */\n @Input({ transform: coerceBooleanProperty })\n set thyMultiple(value: boolean) {\n const previousValue = this.multiple;\n this.multiple = value;\n if (previousValue !== this.multiple) {\n this._instanceSelectionModel();\n }\n }\n\n /**\n * 绑定键盘事件的容器\n * @type HTMLElement | ElementRef | string\n * @default thy-selection-list 组件绑定的元素\n */\n @Input() thyBindKeyEventContainer: HTMLElement | ElementRef | string;\n\n /**\n * 出现滚动条的容器\n * @type HTMLElement | ElementRef | string\n * @default thy-selection-list 组件绑定的元素\n */\n @Input() thyScrollContainer: HTMLElement | ElementRef | string;\n\n /**\n * 键盘事件触发 Before 调用,如果返回 false 则停止继续执行\n */\n @Input() thyBeforeKeydown: (event?: KeyboardEvent) => boolean;\n\n /**\n * Option Value 唯一的 Key,用于存储哪些选择被选中的唯一值,只有 Option 的 thyValue 是对象的时才可以传入该选项\n */\n @Input() thyUniqueKey: string;\n\n /**\n * 比较2个选项的 Value 是否相同\n */\n @Input() thyCompareWith: (o1: any, o2: any) => boolean;\n\n /**\n * grid item 的展示样式\n * @type list | grid\n * @default list\n */\n @Input() set thyLayout(value: ThyListLayout) {\n this.layout = value;\n this.isLayoutGrid = value === 'grid';\n }\n\n /**\n * 是否自动激活第一项\n */\n @Input({ transform: coerceBooleanProperty }) set thyAutoActiveFirstItem(value: boolean) {\n this.autoActiveFirstItem = value;\n }\n\n /**\n * 改变 grid item 的大小,支持默认以及 sm 两种大小\n * @type sm | md | lg\n */\n @Input() set thySize(value: ThyListSize) {\n this._setListSize(value);\n }\n\n private spaceEnabled = true;\n\n /**\n * 是否按下空格切换聚焦选项\n */\n @Input({ transform: coerceBooleanProperty }) set thySpaceKeyEnabled(value: boolean) {\n this.spaceEnabled = value;\n }\n\n /**\n * 每当选项的选定状态发生更改时,都会触发更改事件\n * @type EventEmitter<ThySelectionListChange>\n */\n @Output() readonly thySelectionChange: EventEmitter<ThySelectionListChange> = new EventEmitter<ThySelectionListChange>();\n\n private autoActiveFirstItem: boolean;\n\n private _onTouched: () => void = () => {};\n\n private _onChange: (value: any) => void = (_: any) => {};\n\n private _emitChangeEvent(option: ThyListOption, event: Event) {\n this.thySelectionChange.emit({\n source: this,\n value: option.thyValue,\n option: option,\n event: event,\n selected: this.isSelected(option)\n });\n }\n\n private _emitModelValueChange() {\n if (this.options) {\n let selectedValues = this.selectionModel.selected;\n if (this.thyUniqueKey) {\n selectedValues = selectedValues.map(selectedValue => {\n const selectedOption = this.options.find(option => {\n return option.thyValue[this.thyUniqueKey] === selectedValue;\n });\n if (selectedOption) {\n return selectedOption.thyValue;\n } else {\n return this._modelValues.find(value => {\n return value[this.thyUniqueKey] === selectedValue;\n });\n }\n });\n }\n this._modelValues = selectedValues;\n let changeValue = selectedValues;\n if (!this.multiple && selectedValues && selectedValues.length > 0) {\n changeValue = selectedValues[0];\n }\n this._onChange(changeValue);\n }\n }\n\n private _toggleFocusedOption(event: KeyboardEvent): void {\n if (this._keyManager.activeItem) {\n this.ngZone.run(() => {\n this.toggleOption(this._keyManager.activeItem, event);\n });\n }\n }\n\n private _initializeFocusKeyManager() {\n this._keyManager = new ActiveDescendantKeyManager<ThyListOption>(this.options)\n .withWrap()\n // .withTypeAhead()\n // Allow disabled items to be focusable. For accessibility reasons, there must be a way for\n // screenreader users, that allows reading the different options of the list.\n .skipPredicate(() => false);\n }\n\n private _instanceSelectionModel() {\n this.selectionModel = new SelectionModel<any>(this.multiple);\n }\n\n private _getElementBySelector(element: HTMLElement | ElementRef | string): HTMLElement {\n return dom.getHTMLElementBySelector(element, this.elementRef);\n }\n\n private _compareValue(value1: any, value2: any) {\n if (this.thyCompareWith) {\n const compareFn = this.thyCompareWith as (o1: any, o2: any) => boolean;\n return compareFn(value1, value2);\n } else if (this.thyUniqueKey) {\n return value1 && value1[this.thyUniqueKey] === value2 && value2[this.thyUniqueKey];\n } else {\n return value1 === value2;\n }\n }\n\n private _getOptionSelectionValue(option: ThyListOption) {\n if (option.thyValue) {\n return this.thyUniqueKey ? option.thyValue[this.thyUniqueKey] : option.thyValue;\n } else {\n return option;\n }\n }\n\n private _setSelectionByValues(values: any[]) {\n this.selectionModel.clear();\n values.forEach(value => {\n if (this.thyUniqueKey) {\n this.selectionModel.select(value[this.thyUniqueKey]);\n } else {\n this.selectionModel.select(value);\n }\n });\n }\n\n private _setAllOptionsSelected(toIsSelected: boolean) {\n // Keep track of whether anything changed, because we only want to\n // emit the changed event when something actually changed.\n let hasChanged = false;\n\n this.options.forEach(option => {\n const fromIsSelected = this.selectionModel.isSelected(option.thyValue);\n if (fromIsSelected !== toIsSelected) {\n hasChanged = true;\n this.selectionModel.toggle(option.thyValue);\n }\n });\n\n if (hasChanged) {\n this._emitModelValueChange();\n }\n }\n\n private _getOptionByValue(value: any) {\n return this.options.find(option => {\n return this._compareValue(option.thyValue, value);\n });\n }\n\n private _getActiveOption() {\n if (this._keyManager.activeItem) {\n return this._getOptionByValue(this._keyManager.activeItem.thyValue);\n } else {\n return null;\n }\n }\n\n private _setListSize(size: ThyListSize) {\n for (const key in listSizesMap) {\n if (listSizesMap.hasOwnProperty(key)) {\n this.hostRenderer.removeClass(listSizesMap[key]);\n }\n }\n if (size) {\n this.hostRenderer.addClass(listSizesMap[size]);\n }\n }\n\n ngOnInit() {\n const bindKeyEventElement = this._getElementBySelector(this.thyBindKeyEventContainer);\n this.ngZone.runOutsideAngular(() => {\n this._bindKeyEventUnsubscribe = this.renderer.listen(bindKeyEventElement, 'keydown', this.onKeydown.bind(this));\n });\n this._instanceSelectionModel();\n }\n\n writeValue(value: any[] | any): void {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && value) {\n if (this.multiple && !helpers.isArray(value)) {\n throw new Error(`The multiple selection ngModel must be an array.`);\n }\n if (!this.multiple && helpers.isArray(value)) {\n throw new Error(`The single selection ngModel should not be an array.`);\n }\n }\n const values = helpers.isArray(value) ? value : value ? [value] : [];\n this._modelValues = values;\n if (this.options) {\n this._setSelectionByValues(values);\n }\n this.changeDetectorRef.markForCheck();\n }\n\n registerOnChange(fn: any): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this._onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n onKeydown(event: KeyboardEvent) {\n if (this.thyBeforeKeydown) {\n // stop key down event\n const isContinue = this.thyBeforeKeydown(event);\n if (!isContinue) {\n return;\n }\n }\n const keyCode = event.keyCode || event.which;\n const manager = this._keyManager;\n const previousFocusIndex = manager.activeItemIndex;\n\n switch (keyCode) {\n case keycodes.SPACE:\n case keycodes.ENTER:\n if (keyCode === keycodes.SPACE && !this.spaceEnabled) {\n return;\n }\n this._toggleFocusedOption(event);\n // Always prevent space from scrolling the page since the list has focus\n event.preventDefault();\n break;\n default:\n manager.onKeydown(event);\n }\n if (\n (keyCode === keycodes.UP_ARROW || keyCode === keycodes.DOWN_ARROW) &&\n event.shiftKey &&\n manager.activeItemIndex !== previousFocusIndex\n ) {\n this._toggleFocusedOption(event);\n }\n }\n\n toggleOption(option: ThyListOption, event?: Event) {\n if (option && !option.disabled) {\n this.selectionModel.toggle(this._getOptionSelectionValue(option));\n // Emit a change event because the focused option changed its state through user\n // interaction.\n this._emitModelValueChange();\n this._emitChangeEvent(option, event);\n }\n }\n\n setActiveOption(option: ThyListOption) {\n this._keyManager.updateActiveItem(option); // .updateActiveItemIndex(this._getOptionIndex(option));\n }\n\n scrollIntoView(option: ThyListOption) {\n const scrollContainerElement = dom.getHTMLElementBySelector(this.thyScrollContainer, this.elementRef);\n ScrollToService.scrollToElement(option.element.nativeElement, scrollContainerElement);\n }\n\n isSelected(option: ThyListOption) {\n return this.selectionModel.isSelected(this._getOptionSelectionValue(option));\n }\n\n clearActiveItem() {\n if (this._keyManager.activeItem) {\n this._keyManager.setActiveItem(-1);\n }\n }\n\n determineClearActiveItem() {\n if (!this._getActiveOption()) {\n this.clearActiveItem();\n }\n }\n\n /** Selects all of the options. */\n selectAll() {\n this._setAllOptionsSelected(true);\n }\n\n /** Deselects all of the options. */\n deselectAll() {\n this._setAllOptionsSelected(false);\n }\n\n ngAfterContentInit(): void {\n this._initializeFocusKeyManager();\n this.options.changes.pipe(startWith(true)).subscribe(() => {\n if (this.autoActiveFirstItem) {\n if (!this._keyManager.activeItem || this.options.toArray().indexOf(this._keyManager.activeItem) < 0) {\n this._keyManager.setFirstItemActive();\n }\n }\n });\n }\n\n ngOnDestroy() {\n this._selectionChangesUnsubscribe$.unsubscribe();\n if (this._bindKeyEventUnsubscribe) {\n this._bindKeyEventUnsubscribe();\n }\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, Input, HostBinding, ChangeDetectionStrategy, TemplateRef, ContentChild } from '@angular/core';\nimport { ThyAvatar } from 'ngx-tethys/avatar';\n\n/**\n * @name thy-list-item-meta,[thy-list-item-meta]\n * @order 40\n */\n@Component({\n selector: 'thy-list-item-meta,[thy-list-item-meta]',\n templateUrl: './list-item-meta.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ThyAvatar, NgTemplateOutlet]\n})\nexport class ThyListItemMeta {\n /**\n * 列表项的左侧图片\n */\n @Input() thyAvatar: string;\n\n /**\n * 列表项的标题\n */\n @Input() thyTitle: string;\n\n /**\n * 列表项的描述文本\n */\n @Input() thyDescription: string;\n\n @ContentChild('metaAvatar')\n public avatarTemplateRef: TemplateRef<any>;\n\n @ContentChild('metaTitle')\n public titleTemplateRef: TemplateRef<any>;\n\n @ContentChild('metaDescription')\n public descriptionTemplateRef: TemplateRef<any>;\n\n @HostBinding('class') className = `thy-list-item-meta`;\n\n constructor() {}\n}\n","<div class=\"thy-list-item-meta-avatar\">\n @if (thyAvatar) {\n <thy-avatar [thySrc]=\"thyAvatar\"></thy-avatar>\n } @else {\n <ng-template [ngTemplateOutlet]=\"avatarTemplateRef\"></ng-template>\n }\n</div>\n<div class=\"thy-list-item-meta-content\">\n <div class=\"thy-list-item-meta-title\">\n @if (thyTitle) {\n {{ thyTitle }}\n } @else {\n <ng-template [ngTemplateOutlet]=\"titleTemplateRef\"></ng-template>\n }\n </div>\n <div class=\"thy-list-item-meta-description\">\n @if (thyDescription) {\n {{ thyDescription }}\n } @else {\n <ng-template [ngTemplateOutlet]=\"descriptionTemplateRef\"></ng-template>\n }\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ThyList } from './list.component';\nimport { ThyListItem } from './list-item.component';\nimport { ThySelectionList } from './selection/selection-list';\nimport { ThyOptionModule } from 'ngx-tethys/shared';\nimport { ThyListItemMeta } from './list-item-meta.component';\nimport { ThyAvatarModule } from 'ngx-tethys/avatar';\n\n@NgModule({\n imports: [CommonModule, ThyOptionModule, ThyAvatarModule, ThyList, ThyListItem, ThySelectionList, ThyListItemMeta],\n exports: [ThyList, ThyListItem, ThySelectionList, ThyListItemMeta, ThyOptionModule]\n})\nexport class ThyListModule {}\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-list.mjs","sources":["../../../src/list/list.component.ts","../../../src/list/list-item.component.ts","../../../src/list/selection/selection-list.ts","../../../src/list/list-item-meta.component.ts","../../../src/list/list-item-meta.component.html","../../../src/list/list.module.ts","../../../src/list/ngx-tethys-list.ts"],"sourcesContent":["import { Component, Input, HostBinding } from '@angular/core';\nimport { coerceBooleanProperty } from 'ngx-tethys/util';\n\n/**\n * 列表组件\n * @name thy-list\n * @order 10\n */\n@Component({\n selector: 'thy-list',\n template: '<ng-content></ng-content>'\n})\nexport class ThyList {\n /**\n * 控制分割线的显示与隐藏\n * @default false\n */\n @Input({ transform: coerceBooleanProperty })\n set thyDivided(value: boolean) {\n this._isDivided = value;\n }\n\n @HostBinding(`class.thy-list-divided`) _isDivided = false;\n\n @HostBinding(`class.thy-list`) _isList = true;\n\n constructor() {}\n}\n","import { Component, HostBinding } from '@angular/core';\n\n/**\n * @name thy-list-item,[thy-list-item]\n * @order 15\n */\n@Component({\n selector: 'thy-list-item,[thy-list-item]',\n template: '<ng-content></ng-content>'\n})\nexport class ThyListItem {\n @HostBinding(`class.thy-list-item`) _isListItem = true;\n\n constructor() {}\n}\n","import { ScrollToService } from 'ngx-tethys/core';\nimport { IThyListOptionParentComponent, THY_LIST_OPTION_PARENT_COMPONENT, ThyListOption } from 'ngx-tethys/shared';\nimport { coerceBooleanProperty, dom, helpers, keycodes } from 'ngx-tethys/util';\nimport { Subscription } from 'rxjs';\nimport { startWith } from 'rxjs/operators';\nimport { useHostRenderer } from '@tethys/cdk/dom';\nimport { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostBinding,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n Renderer2,\n inject\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ThyListLayout } from 'ngx-tethys/shared';\nimport { ThySelectionListChange } from './selection.interface';\n\nexport type ThyListSize = 'sm' | 'md' | 'lg';\n\nconst listSizesMap = {\n sm: 'thy-list-sm'\n};\n\n/**\n * @name thy-selection-list,[thy-selection-list]\n * @order 20\n */\n@Component({\n selector: 'thy-selection-list,[thy-selection-list]',\n template: '<ng-content></ng-content>',\n providers: [\n {\n provide: THY_LIST_OPTION_PARENT_COMPONENT,\n useExisting: ThySelectionList\n },\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ThySelectionList),\n multi: true\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ThySelectionList implements OnInit, OnDestroy, AfterContentInit, IThyListOptionParentComponent, ControlValueAccessor {\n private renderer = inject(Renderer2);\n private elementRef = inject(ElementRef);\n private ngZone = inject(NgZone);\n private changeDetectorRef = inject(ChangeDetectorRef);\n\n private _keyManager: ActiveDescendantKeyManager<ThyListOption>;\n\n private _selectionChangesUnsubscribe$ = Subscription.EMPTY;\n\n private _bindKeyEventUnsubscribe: () => void;\n\n private _modelValues: any[];\n\n private hostRenderer = useHostRenderer();\n\n /** The currently selected options. */\n selectionModel: SelectionModel<any>;\n\n disabled: boolean;\n\n layout: ThyListLayout = 'list';\n\n @HostBinding(`class.thy-list`) _isList = true;\n\n @HostBinding(`class.thy-selection-list`) _isSelectionList = true;\n\n @HostBinding(`class.thy-multiple-selection-list`) multiple = true;\n\n @HostBinding(`class.thy-grid-list`) isLayoutGrid = false;\n\n /**\n * @internal\n */\n @ContentChildren(ThyListOption, { descendants: true }) options: QueryList<ThyListOption>;\n\n /**\n * 改变 grid item 的选择模式,使其支持多选\n * @default true\n */\n @Input({ transform: coerceBooleanProperty })\n set thyMultiple(value: boolean) {\n const previousValue = this.multiple;\n this.multiple = value;\n if (previousValue !== this.multiple) {\n this._instanceSelectionModel();\n }\n }\n\n /**\n * 绑定键盘事件的容器\n * @type HTMLElement | ElementRef | string\n * @default thy-selection-list 组件绑定的元素\n */\n @Input() thyBindKeyEventContainer: HTMLElement | ElementRef | string;\n\n /**\n * 出现滚动条的容器\n * @type HTMLElement | ElementRef | string\n * @default thy-selection-list 组件绑定的元素\n */\n @Input() thyScrollContainer: HTMLElement | ElementRef | string;\n\n /**\n * 键盘事件触发 Before 调用,如果返回 false 则停止继续执行\n */\n @Input() thyBeforeKeydown: (event?: KeyboardEvent) => boolean;\n\n /**\n * Option Value 唯一的 Key,用于存储哪些选择被选中的唯一值,只有 Option 的 thyValue 是对象的时才可以传入该选项\n */\n @Input() thyUniqueKey: string;\n\n /**\n * 比较2个选项的 Value 是否相同\n */\n @Input() thyCompareWith: (o1: any, o2: any) => boolean;\n\n /**\n * grid item 的展示样式\n * @type list | grid\n * @default list\n */\n @Input() set thyLayout(value: ThyListLayout) {\n this.layout = value;\n this.isLayoutGrid = value === 'grid';\n }\n\n /**\n * 是否自动激活第一项\n */\n @Input({ transform: coerceBooleanProperty }) set thyAutoActiveFirstItem(value: boolean) {\n this.autoActiveFirstItem = value;\n }\n\n /**\n * 改变 grid item 的大小,支持默认以及 sm 两种大小\n * @type sm | md | lg\n */\n @Input() set thySize(value: ThyListSize) {\n this._setListSize(value);\n }\n\n private spaceEnabled = true;\n\n /**\n * 是否按下空格切换聚焦选项\n */\n @Input({ transform: coerceBooleanProperty }) set thySpaceKeyEnabled(value: boolean) {\n this.spaceEnabled = value;\n }\n\n /**\n * 每当选项的选定状态发生更改时,都会触发更改事件\n * @type EventEmitter<ThySelectionListChange>\n */\n @Output() readonly thySelectionChange: EventEmitter<ThySelectionListChange> = new EventEmitter<ThySelectionListChange>();\n\n private autoActiveFirstItem: boolean;\n\n private _onTouched: () => void = () => {};\n\n private _onChange: (value: any) => void = (_: any) => {};\n\n private _emitChangeEvent(option: ThyListOption, event: Event) {\n this.thySelectionChange.emit({\n source: this,\n value: option.thyValue,\n option: option,\n event: event,\n selected: this.isSelected(option)\n });\n }\n\n private _emitModelValueChange() {\n if (this.options) {\n let selectedValues = this.selectionModel.selected;\n if (this.thyUniqueKey) {\n selectedValues = selectedValues.map(selectedValue => {\n const selectedOption = this.options.find(option => {\n return option.thyValue[this.thyUniqueKey] === selectedValue;\n });\n if (selectedOption) {\n return selectedOption.thyValue;\n } else {\n return this._modelValues.find(value => {\n return value[this.thyUniqueKey] === selectedValue;\n });\n }\n });\n }\n this._modelValues = selectedValues;\n let changeValue = selectedValues;\n if (!this.multiple && selectedValues && selectedValues.length > 0) {\n changeValue = selectedValues[0];\n }\n this._onChange(changeValue);\n }\n }\n\n private _toggleFocusedOption(event: KeyboardEvent): void {\n if (this._keyManager.activeItem) {\n this.ngZone.run(() => {\n this.toggleOption(this._keyManager.activeItem, event);\n });\n }\n }\n\n private _initializeFocusKeyManager() {\n this._keyManager = new ActiveDescendantKeyManager<ThyListOption>(this.options)\n .withWrap()\n // .withTypeAhead()\n // Allow disabled items to be focusable. For accessibility reasons, there must be a way for\n // screenreader users, that allows reading the different options of the list.\n .skipPredicate(() => false);\n }\n\n private _instanceSelectionModel() {\n this.selectionModel = new SelectionModel<any>(this.multiple);\n }\n\n private _getElementBySelector(element: HTMLElement | ElementRef | string): HTMLElement {\n return dom.getHTMLElementBySelector(element, this.elementRef);\n }\n\n private _compareValue(value1: any, value2: any) {\n if (this.thyCompareWith) {\n const compareFn = this.thyCompareWith as (o1: any, o2: any) => boolean;\n return compareFn(value1, value2);\n } else if (this.thyUniqueKey) {\n return value1 && value1[this.thyUniqueKey] === value2 && value2[this.thyUniqueKey];\n } else {\n return value1 === value2;\n }\n }\n\n private _getOptionSelectionValue(option: ThyListOption) {\n if (option.thyValue) {\n return this.thyUniqueKey ? option.thyValue[this.thyUniqueKey] : option.thyValue;\n } else {\n return option;\n }\n }\n\n private _setSelectionByValues(values: any[]) {\n this.selectionModel.clear();\n values.forEach(value => {\n if (this.thyUniqueKey) {\n this.selectionModel.select(value[this.thyUniqueKey]);\n } else {\n this.selectionModel.select(value);\n }\n });\n }\n\n private _setAllOptionsSelected(toIsSelected: boolean) {\n // Keep track of whether anything changed, because we only want to\n // emit the changed event when something actually changed.\n let hasChanged = false;\n\n this.options.forEach(option => {\n const fromIsSelected = this.selectionModel.isSelected(option.thyValue);\n if (fromIsSelected !== toIsSelected) {\n hasChanged = true;\n this.selectionModel.toggle(option.thyValue);\n }\n });\n\n if (hasChanged) {\n this._emitModelValueChange();\n }\n }\n\n private _getOptionByValue(value: any) {\n return this.options.find(option => {\n return this._compareValue(option.thyValue, value);\n });\n }\n\n private _getActiveOption() {\n if (this._keyManager.activeItem) {\n return this._getOptionByValue(this._keyManager.activeItem.thyValue);\n } else {\n return null;\n }\n }\n\n private _setListSize(size: ThyListSize) {\n for (const key in listSizesMap) {\n if (listSizesMap.hasOwnProperty(key)) {\n this.hostRenderer.removeClass(listSizesMap[key]);\n }\n }\n if (size) {\n this.hostRenderer.addClass(listSizesMap[size]);\n }\n }\n\n ngOnInit() {\n const bindKeyEventElement = this._getElementBySelector(this.thyBindKeyEventContainer);\n this.ngZone.runOutsideAngular(() => {\n this._bindKeyEventUnsubscribe = this.renderer.listen(bindKeyEventElement, 'keydown', this.onKeydown.bind(this));\n });\n this._instanceSelectionModel();\n }\n\n writeValue(value: any[] | any): void {\n if ((typeof ngDevMode === 'undefined' || ngDevMode) && value) {\n if (this.multiple && !helpers.isArray(value)) {\n throw new Error(`The multiple selection ngModel must be an array.`);\n }\n if (!this.multiple && helpers.isArray(value)) {\n throw new Error(`The single selection ngModel should not be an array.`);\n }\n }\n const values = helpers.isArray(value) ? value : value ? [value] : [];\n this._modelValues = values;\n if (this.options) {\n this._setSelectionByValues(values);\n }\n this.changeDetectorRef.markForCheck();\n }\n\n registerOnChange(fn: any): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this._onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n onKeydown(event: KeyboardEvent) {\n if (this.thyBeforeKeydown) {\n // stop key down event\n const isContinue = this.thyBeforeKeydown(event);\n if (!isContinue) {\n return;\n }\n }\n const keyCode = event.keyCode || event.which;\n const manager = this._keyManager;\n const previousFocusIndex = manager.activeItemIndex;\n\n switch (keyCode) {\n case keycodes.SPACE:\n case keycodes.ENTER:\n if (keyCode === keycodes.SPACE && !this.spaceEnabled) {\n return;\n }\n this._toggleFocusedOption(event);\n // Always prevent space from scrolling the page since the list has focus\n event.preventDefault();\n break;\n default:\n manager.onKeydown(event);\n }\n if (\n (keyCode === keycodes.UP_ARROW || keyCode === keycodes.DOWN_ARROW) &&\n event.shiftKey &&\n manager.activeItemIndex !== previousFocusIndex\n ) {\n this._toggleFocusedOption(event);\n }\n }\n\n toggleOption(option: ThyListOption, event?: Event) {\n if (option && !option.disabled) {\n this.selectionModel.toggle(this._getOptionSelectionValue(option));\n // Emit a change event because the focused option changed its state through user\n // interaction.\n this._emitModelValueChange();\n this._emitChangeEvent(option, event);\n }\n }\n\n setActiveOption(option: ThyListOption) {\n this._keyManager.updateActiveItem(option); // .updateActiveItemIndex(this._getOptionIndex(option));\n }\n\n scrollIntoView(option: ThyListOption) {\n const scrollContainerElement = dom.getHTMLElementBySelector(this.thyScrollContainer, this.elementRef);\n ScrollToService.scrollToElement(option.element.nativeElement, scrollContainerElement);\n }\n\n isSelected(option: ThyListOption) {\n return this.selectionModel.isSelected(this._getOptionSelectionValue(option));\n }\n\n clearActiveItem() {\n if (this._keyManager.activeItem) {\n this._keyManager.setActiveItem(-1);\n }\n }\n\n determineClearActiveItem() {\n if (!this._getActiveOption()) {\n this.clearActiveItem();\n }\n }\n\n /** Selects all of the options. */\n selectAll() {\n this._setAllOptionsSelected(true);\n }\n\n /** Deselects all of the options. */\n deselectAll() {\n this._setAllOptionsSelected(false);\n }\n\n ngAfterContentInit(): void {\n this._initializeFocusKeyManager();\n this.options.changes.pipe(startWith(true)).subscribe(() => {\n if (this.autoActiveFirstItem) {\n if (!this._keyManager.activeItem || this.options.toArray().indexOf(this._keyManager.activeItem) < 0) {\n this._keyManager.setFirstItemActive();\n }\n }\n });\n }\n\n ngOnDestroy() {\n this._selectionChangesUnsubscribe$.unsubscribe();\n if (this._bindKeyEventUnsubscribe) {\n this._bindKeyEventUnsubscribe();\n }\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, Input, HostBinding, ChangeDetectionStrategy, TemplateRef, ContentChild } from '@angular/core';\nimport { ThyAvatar } from 'ngx-tethys/avatar';\n\n/**\n * @name thy-list-item-meta,[thy-list-item-meta]\n * @order 40\n */\n@Component({\n selector: 'thy-list-item-meta,[thy-list-item-meta]',\n templateUrl: './list-item-meta.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ThyAvatar, NgTemplateOutlet]\n})\nexport class ThyListItemMeta {\n /**\n * 列表项的左侧图片\n */\n @Input() thyAvatar: string;\n\n /**\n * 列表项的标题\n */\n @Input() thyTitle: string;\n\n /**\n * 列表项的描述文本\n */\n @Input() thyDescription: string;\n\n @ContentChild('metaAvatar')\n public avatarTemplateRef: TemplateRef<any>;\n\n @ContentChild('metaTitle')\n public titleTemplateRef: TemplateRef<any>;\n\n @ContentChild('metaDescription')\n public descriptionTemplateRef: TemplateRef<any>;\n\n @HostBinding('class') className = `thy-list-item-meta`;\n\n constructor() {}\n}\n","<div class=\"thy-list-item-meta-avatar\">\n @if (thyAvatar) {\n <thy-avatar [thySrc]=\"thyAvatar\"></thy-avatar>\n } @else {\n <ng-template [ngTemplateOutlet]=\"avatarTemplateRef\"></ng-template>\n }\n</div>\n<div class=\"thy-list-item-meta-content\">\n <div class=\"thy-list-item-meta-title\">\n @if (thyTitle) {\n {{ thyTitle }}\n } @else {\n <ng-template [ngTemplateOutlet]=\"titleTemplateRef\"></ng-template>\n }\n </div>\n <div class=\"thy-list-item-meta-description\">\n @if (thyDescription) {\n {{ thyDescription }}\n } @else {\n <ng-template [ngTemplateOutlet]=\"descriptionTemplateRef\"></ng-template>\n }\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ThyList } from './list.component';\nimport { ThyListItem } from './list-item.component';\nimport { ThySelectionList } from './selection/selection-list';\nimport { ThyOptionModule } from 'ngx-tethys/shared';\nimport { ThyListItemMeta } from './list-item-meta.component';\nimport { ThyAvatarModule } from 'ngx-tethys/avatar';\n\n@NgModule({\n imports: [CommonModule, ThyOptionModule, ThyAvatarModule, ThyList, ThyListItem, ThySelectionList, ThyListItemMeta],\n exports: [ThyList, ThyListItem, ThySelectionList, ThyListItemMeta, ThyOptionModule]\n})\nexport class ThyListModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -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 { input, signal, inject, ElementRef, NgZone, Component, output, computed, Directive, NgModule } from '@angular/core';
6
+ import { inject, ElementRef, NgZone, HostBinding, Component, EventEmitter, Output, Input, 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,34 +342,33 @@ class CaretPositioner {
342
342
  */
343
343
  class ThyMentionSuggestions {
344
344
  constructor() {
345
- this.mention = input();
346
- this.data = signal([]);
347
- this.suggestionSelect$ = new Subject();
348
- this.debounce = 150;
349
- this.loadingDone = signal(true);
350
- this.search$ = new Subject();
351
345
  this.elementRef = inject(ElementRef);
352
346
  this.ngZone = inject(NgZone);
353
347
  this.popoverRef = inject(ThyPopoverRef);
348
+ this.suggestionSelect$ = new Subject();
349
+ this.debounce = 150;
350
+ this.loadingDone = true;
351
+ this.search$ = new Subject();
352
+ this.suggestionsClass = true;
354
353
  this.search$
355
354
  .pipe(switchMap(query => {
356
- const data = this.mention().search(query.term, this.mention().data);
355
+ const data = this.mention.search(query.term, this.mention.data);
357
356
  if (data instanceof Observable) {
358
- this.loadingDone.set(false);
357
+ this.loadingDone = false;
359
358
  return data.pipe(debounceTime(this.debounce));
360
359
  }
361
360
  else {
362
361
  return of(data);
363
362
  }
364
363
  }), catchError(() => {
365
- this.loadingDone.set(false);
366
- return of([]);
364
+ this.loadingDone = false;
365
+ return [];
367
366
  }))
368
367
  .subscribe(data => {
369
- this.loadingDone.set(true);
370
- this.data.set(data || []);
368
+ this.loadingDone = true;
369
+ this.data = data || [];
371
370
  if (this.popoverRef) {
372
- if (this.mention().autoClose && this.data().length === 0) {
371
+ if (this.mention.autoClose && this.data.length === 0) {
373
372
  this.popoverRef.close();
374
373
  }
375
374
  this.ngZone.onStable.pipe(take(1)).subscribe(() => {
@@ -379,15 +378,18 @@ class ThyMentionSuggestions {
379
378
  });
380
379
  }
381
380
  ngOnInit() {
382
- if (this.mention().popoverClass) {
383
- this.elementRef.nativeElement.classList.add(this.mention().popoverClass);
381
+ if (this.mention.popoverClass) {
382
+ this.elementRef.nativeElement.classList.add(this.mention.popoverClass);
384
383
  }
385
384
  }
386
385
  search(query) {
387
386
  this.search$.next(query);
388
387
  }
389
388
  select(item, event) {
390
- this.suggestionSelect$.next({ event, item });
389
+ this.suggestionSelect$.next({
390
+ event,
391
+ item
392
+ });
391
393
  }
392
394
  selectionChange(event) {
393
395
  this.select(event.value, event.event);
@@ -396,15 +398,21 @@ class ThyMentionSuggestions {
396
398
  this.search$.complete();
397
399
  }
398
400
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: ThyMentionSuggestions, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
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" }] }); }
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" }] }); }
400
402
  }
401
403
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: ThyMentionSuggestions, decorators: [{
402
404
  type: Component,
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: () => [] });
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
+ }] } });
405
410
 
406
411
  const SUGGESTION_BACKDROP_CLASS = 'thy-mention-suggestions-backdrop';
407
- const POPOVER_DEFAULT_CONFIG = { backdropClass: SUGGESTION_BACKDROP_CLASS, placement: 'bottomLeft' };
412
+ const POPOVER_DEFAULT_CONFIG = {
413
+ backdropClass: SUGGESTION_BACKDROP_CLASS,
414
+ placement: 'bottomLeft'
415
+ };
408
416
  const DEFAULT_MENTION_CONFIG = {
409
417
  autoClose: true,
410
418
  emptyText: '无匹配数据,按空格完成输入',
@@ -419,6 +427,24 @@ const DEFAULT_MENTION_CONFIG = {
419
427
  * @order 10
420
428
  */
421
429
  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
+ }
422
448
  get isOpened() {
423
449
  return !!this.openedSuggestionsRef;
424
450
  }
@@ -427,32 +453,10 @@ class ThyMentionDirective {
427
453
  this.thyPopover = inject(ThyPopover);
428
454
  this.ngControl = inject(NgControl, { optional: true, self: true });
429
455
  this.adapter = null;
430
- /**
431
- * 提及输入配置参数,同时支持多个提及规则
432
- * @type Mention<any>[]
433
- */
434
- this.thyMention = input([]);
435
- /**
436
- * Popover 弹出层参数配置
437
- */
438
- this.thyPopoverConfig = input();
439
456
  /**
440
457
  * 选择后的回调函数
441
458
  */
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
- });
459
+ this.select = new EventEmitter();
456
460
  this.destroy$ = new Subject();
457
461
  this.openedSuggestionsRef$ = new Subject();
458
462
  const elementRef = this.elementRef;
@@ -494,7 +498,7 @@ class ThyMentionDirective {
494
498
  this.lookup(event);
495
499
  }
496
500
  lookup(event) {
497
- const matched = this.adapter.lookup(event, this.mentions());
501
+ const matched = this.adapter.lookup(event, this.mentions);
498
502
  if (matched) {
499
503
  this.openSuggestions(matched);
500
504
  }
@@ -509,9 +513,16 @@ class ThyMentionDirective {
509
513
  const fontSize = parseInt(getComputedStyle(this.elementRef.nativeElement).fontSize, 10);
510
514
  this.openedSuggestionsRef = this.thyPopover.open(ThyMentionSuggestions, Object.assign({}, POPOVER_DEFAULT_CONFIG, {
511
515
  origin: this.elementRef,
512
- originPosition: { x: position.left, y: position.top, width: fontSize, height: fontSize },
513
- initialState: { mention: matched.mention }
514
- }, this.thyPopoverConfig()));
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));
515
526
  this.openedSuggestionsRef.afterClosed().subscribe(() => {
516
527
  this.openedSuggestionsRef = null;
517
528
  this.openedSuggestionsRef$.next(null);
@@ -528,12 +539,23 @@ class ThyMentionDirective {
528
539
  }
529
540
  }
530
541
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: ThyMentionDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
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 }); }
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 }); }
532
543
  }
533
544
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: ThyMentionDirective, decorators: [{
534
545
  type: Directive,
535
- args: [{ selector: '[thyMention]' }]
536
- }], ctorParameters: () => [] });
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
+ }] } });
537
559
 
538
560
  class ThyMentionModule {
539
561
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: ThyMentionModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }