ngx-tethys 19.1.0-next.3 → 19.1.0-next.4

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 (35) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/badge/badge.component.d.ts +1 -1
  3. package/date-picker/date-picker.config.d.ts +2 -0
  4. package/date-picker/lib/date/date-table-cell.component.d.ts +7 -3
  5. package/fesm2022/ngx-tethys-badge.mjs.map +1 -1
  6. package/fesm2022/ngx-tethys-date-picker.mjs +20 -10
  7. package/fesm2022/ngx-tethys-date-picker.mjs.map +1 -1
  8. package/fesm2022/ngx-tethys-list.mjs +37 -52
  9. package/fesm2022/ngx-tethys-list.mjs.map +1 -1
  10. package/fesm2022/ngx-tethys-message.mjs +28 -34
  11. package/fesm2022/ngx-tethys-message.mjs.map +1 -1
  12. package/fesm2022/ngx-tethys-notify.mjs +33 -41
  13. package/fesm2022/ngx-tethys-notify.mjs.map +1 -1
  14. package/fesm2022/ngx-tethys-resizable.mjs +20 -17
  15. package/fesm2022/ngx-tethys-resizable.mjs.map +1 -1
  16. package/fesm2022/ngx-tethys-time-picker.mjs +244 -271
  17. package/fesm2022/ngx-tethys-time-picker.mjs.map +1 -1
  18. package/fesm2022/ngx-tethys.mjs +1 -1
  19. package/fesm2022/ngx-tethys.mjs.map +1 -1
  20. package/list/list-item-meta.component.d.ts +7 -9
  21. package/list/list-item.component.d.ts +0 -2
  22. package/list/list.component.d.ts +2 -8
  23. package/message/abstract/abstract-message.component.d.ts +2 -3
  24. package/message/message-container.component.d.ts +0 -1
  25. package/message/message.component.d.ts +1 -3
  26. package/notify/notify-container.component.d.ts +0 -1
  27. package/notify/notify.component.d.ts +7 -12
  28. package/package.json +1 -1
  29. package/resizable/resizable.directive.d.ts +2 -1
  30. package/schematics/version.d.ts +1 -1
  31. package/schematics/version.js +1 -1
  32. package/time-picker/inner/inner-time-picker.class.d.ts +15 -13
  33. package/time-picker/inner/inner-time-picker.component.d.ts +26 -26
  34. package/time-picker/time-picker-panel.component.d.ts +18 -20
  35. package/time-picker/time-picker.component.d.ts +22 -30
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { HostBinding, Input, Component, inject, Renderer2, ElementRef, NgZone, ChangeDetectorRef, EventEmitter, forwardRef, Output, ContentChildren, ChangeDetectionStrategy, ContentChild, NgModule } from '@angular/core';
2
+ import { input, Component, inject, Renderer2, ElementRef, NgZone, ChangeDetectorRef, EventEmitter, forwardRef, Output, Input, ContentChildren, HostBinding, ChangeDetectionStrategy, contentChild, NgModule } from '@angular/core';
3
3
  import { NgTemplateOutlet, CommonModule } from '@angular/common';
4
4
  import { coerceBooleanProperty, dom, helpers, keycodes } from 'ngx-tethys/util';
5
5
  import { ScrollToService } from 'ngx-tethys/core';
@@ -18,58 +18,45 @@ import { ThyAvatar, ThyAvatarModule } from 'ngx-tethys/avatar';
18
18
  * @order 10
19
19
  */
20
20
  class ThyList {
21
- /**
22
- * 控制分割线的显示与隐藏
23
- * @default false
24
- */
25
- set thyDivided(value) {
26
- this._isDivided = value;
27
- }
28
21
  constructor() {
29
- this._isDivided = false;
30
- this._isList = true;
22
+ /**
23
+ * 控制分割线的显示与隐藏
24
+ */
25
+ this.thyDivided = input(false, { transform: coerceBooleanProperty });
31
26
  }
32
27
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: ThyList, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
33
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "19.2.8", type: ThyList, isStandalone: true, selector: "thy-list", inputs: { thyDivided: ["thyDivided", "thyDivided", coerceBooleanProperty] }, host: { properties: { "class.thy-list-divided": "this._isDivided", "class.thy-list": "this._isList" } }, ngImport: i0, template: '<ng-content></ng-content>', isInline: true }); }
28
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.8", type: ThyList, isStandalone: true, selector: "thy-list", inputs: { thyDivided: { classPropertyName: "thyDivided", publicName: "thyDivided", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.thy-list-divided": "thyDivided()" }, classAttribute: "thy-list" }, ngImport: i0, template: '<ng-content></ng-content>', isInline: true }); }
34
29
  }
35
30
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: ThyList, decorators: [{
36
31
  type: Component,
37
32
  args: [{
38
33
  selector: 'thy-list',
34
+ host: {
35
+ class: 'thy-list',
36
+ '[class.thy-list-divided]': 'thyDivided()'
37
+ },
39
38
  template: '<ng-content></ng-content>'
40
39
  }]
41
- }], ctorParameters: () => [], propDecorators: { thyDivided: [{
42
- type: Input,
43
- args: [{ transform: coerceBooleanProperty }]
44
- }], _isDivided: [{
45
- type: HostBinding,
46
- args: [`class.thy-list-divided`]
47
- }], _isList: [{
48
- type: HostBinding,
49
- args: [`class.thy-list`]
50
- }] } });
40
+ }] });
51
41
 
52
42
  /**
53
43
  * @name thy-list-item,[thy-list-item]
54
44
  * @order 15
55
45
  */
56
46
  class ThyListItem {
57
- constructor() {
58
- this._isListItem = true;
59
- }
60
47
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: ThyListItem, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
61
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.8", type: ThyListItem, isStandalone: true, selector: "thy-list-item,[thy-list-item]", host: { properties: { "class.thy-list-item": "this._isListItem" } }, ngImport: i0, template: '<ng-content></ng-content>', isInline: true }); }
48
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.8", type: ThyListItem, isStandalone: true, selector: "thy-list-item,[thy-list-item]", host: { classAttribute: "thy-list-item" }, ngImport: i0, template: '<ng-content></ng-content>', isInline: true }); }
62
49
  }
63
50
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: ThyListItem, decorators: [{
64
51
  type: Component,
65
52
  args: [{
66
53
  selector: 'thy-list-item,[thy-list-item]',
67
- template: '<ng-content></ng-content>'
54
+ template: '<ng-content></ng-content>',
55
+ host: {
56
+ class: 'thy-list-item'
57
+ }
68
58
  }]
69
- }], ctorParameters: () => [], propDecorators: { _isListItem: [{
70
- type: HostBinding,
71
- args: [`class.thy-list-item`]
72
- }] } });
59
+ }] });
73
60
 
74
61
  const listSizesMap = {
75
62
  sm: 'thy-list-sm'
@@ -458,33 +445,31 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImpor
458
445
  */
459
446
  class ThyListItemMeta {
460
447
  constructor() {
461
- this.className = `thy-list-item-meta`;
448
+ /**
449
+ * 列表项的左侧图片
450
+ */
451
+ this.thyAvatar = input();
452
+ /**
453
+ * 列表项的标题
454
+ */
455
+ this.thyTitle = input();
456
+ /**
457
+ * 列表项的描述文本
458
+ */
459
+ this.thyDescription = input();
460
+ this.avatarTemplateRef = contentChild('metaAvatar');
461
+ this.titleTemplateRef = contentChild('metaTitle');
462
+ this.descriptionTemplateRef = contentChild('metaDescription');
462
463
  }
463
464
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: ThyListItemMeta, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
464
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.8", type: ThyListItemMeta, isStandalone: true, selector: "thy-list-item-meta,[thy-list-item-meta]", inputs: { thyAvatar: "thyAvatar", thyTitle: "thyTitle", thyDescription: "thyDescription" }, host: { properties: { "class": "this.className" } }, queries: [{ propertyName: "avatarTemplateRef", first: true, predicate: ["metaAvatar"], descendants: true }, { propertyName: "titleTemplateRef", first: true, predicate: ["metaTitle"], descendants: true }, { propertyName: "descriptionTemplateRef", first: true, predicate: ["metaDescription"], descendants: true }], ngImport: i0, template: "<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", dependencies: [{ kind: "component", type: ThyAvatar, selector: "thy-avatar", inputs: ["thyShowName", "thySrc", "thyName", "thySize", "thyShowRemove", "thyRemovable", "thyImgClass", "thyDisabled", "thyLoading", "thyFetchPriority"], outputs: ["thyOnRemove", "thyRemove", "thyError", "thySizeChange"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
465
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.8", type: ThyListItemMeta, isStandalone: true, selector: "thy-list-item-meta,[thy-list-item-meta]", inputs: { thyAvatar: { classPropertyName: "thyAvatar", publicName: "thyAvatar", isSignal: true, isRequired: false, transformFunction: null }, thyTitle: { classPropertyName: "thyTitle", publicName: "thyTitle", isSignal: true, isRequired: false, transformFunction: null }, thyDescription: { classPropertyName: "thyDescription", publicName: "thyDescription", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "thy-list-item-meta" }, queries: [{ propertyName: "avatarTemplateRef", first: true, predicate: ["metaAvatar"], descendants: true, isSignal: true }, { propertyName: "titleTemplateRef", first: true, predicate: ["metaTitle"], descendants: true, isSignal: true }, { propertyName: "descriptionTemplateRef", first: true, predicate: ["metaDescription"], descendants: true, isSignal: true }], ngImport: i0, template: "<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", dependencies: [{ kind: "component", type: ThyAvatar, selector: "thy-avatar", inputs: ["thyShowName", "thySrc", "thyName", "thySize", "thyShowRemove", "thyRemovable", "thyImgClass", "thyDisabled", "thyLoading", "thyFetchPriority"], outputs: ["thyOnRemove", "thyRemove", "thyError", "thySizeChange"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
465
466
  }
466
467
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: ThyListItemMeta, decorators: [{
467
468
  type: Component,
468
- args: [{ selector: 'thy-list-item-meta,[thy-list-item-meta]', changeDetection: ChangeDetectionStrategy.OnPush, imports: [ThyAvatar, NgTemplateOutlet], template: "<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" }]
469
- }], ctorParameters: () => [], propDecorators: { thyAvatar: [{
470
- type: Input
471
- }], thyTitle: [{
472
- type: Input
473
- }], thyDescription: [{
474
- type: Input
475
- }], avatarTemplateRef: [{
476
- type: ContentChild,
477
- args: ['metaAvatar']
478
- }], titleTemplateRef: [{
479
- type: ContentChild,
480
- args: ['metaTitle']
481
- }], descriptionTemplateRef: [{
482
- type: ContentChild,
483
- args: ['metaDescription']
484
- }], className: [{
485
- type: HostBinding,
486
- args: ['class']
487
- }] } });
469
+ args: [{ selector: 'thy-list-item-meta,[thy-list-item-meta]', host: {
470
+ class: 'thy-list-item-meta'
471
+ }, imports: [ThyAvatar, NgTemplateOutlet], template: "<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" }]
472
+ }] });
488
473
 
489
474
  class ThyListModule {
490
475
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: ThyListModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
@@ -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 } 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 host: {\n class: 'thy-list',\n '[class.thy-list-divided]': 'thyDivided()'\n },\n template: '<ng-content></ng-content>'\n})\nexport class ThyList {\n /**\n * 控制分割线的显示与隐藏\n */\n readonly thyDivided = input(false, { transform: coerceBooleanProperty });\n}\n","import { Component } 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 host: {\n class: 'thy-list-item'\n }\n})\nexport class ThyListItem {}\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, TemplateRef, input, 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 host: {\n class: 'thy-list-item-meta'\n },\n imports: [ThyAvatar, NgTemplateOutlet]\n})\nexport class ThyListItemMeta {\n /**\n * 列表项的左侧图片\n */\n readonly thyAvatar = input<string>();\n\n /**\n * 列表项的标题\n */\n readonly thyTitle = input<string>();\n\n /**\n * 列表项的描述文本\n */\n readonly thyDescription = input<string>();\n\n readonly avatarTemplateRef = contentChild<TemplateRef<any>>('metaAvatar');\n\n readonly titleTemplateRef = contentChild<TemplateRef<any>>('metaTitle');\n\n readonly descriptionTemplateRef = contentChild<TemplateRef<any>>('metaDescription');\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,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, ElementRef, HostBinding, Directive, NgZone, HostListener, Input, InjectionToken, Injectable, Component, NgModule, Injector } from '@angular/core';
2
+ import { inject, ElementRef, HostBinding, Directive, NgZone, input, HostListener, InjectionToken, Injectable, effect, Component, NgModule, Injector } from '@angular/core';
3
3
  import { AsyncPipe, CommonModule } from '@angular/common';
4
4
  import { ThyIcon, ThyIconModule } from 'ngx-tethys/icon';
5
5
  import { OverlayModule, Overlay } from '@angular/cdk/overlay';
@@ -74,12 +74,10 @@ const HIDE_STYLE = { transform: 'translateX(0)', opacity: 0, height: 0, paddingT
74
74
  * @internal
75
75
  */
76
76
  class ThyAbstractMessageComponent {
77
- set thyConfig(value) {
78
- this.config = value;
79
- }
80
77
  constructor(queue) {
81
78
  this._ngZone = inject(NgZone);
82
79
  this.iconName = '';
80
+ this.config = input(null, { alias: 'thyConfig' });
83
81
  this.queue = queue;
84
82
  }
85
83
  ngOnInit() {
@@ -89,16 +87,16 @@ class ThyAbstractMessageComponent {
89
87
  warning: 'waring-fill',
90
88
  error: 'close-circle-fill'
91
89
  };
92
- this.iconName = iconName[this.config.type];
90
+ this.iconName = iconName[this.config()?.type];
93
91
  this.createCloseTimer();
94
92
  }
95
93
  mouseenter() {
96
- if (this.config.pauseOnHover) {
94
+ if (this.config()?.pauseOnHover) {
97
95
  this.clearCloseTimer();
98
96
  }
99
97
  }
100
98
  mouseleave() {
101
- if (this.config.pauseOnHover) {
99
+ if (this.config()?.pauseOnHover) {
102
100
  this.createCloseTimer();
103
101
  }
104
102
  }
@@ -106,16 +104,17 @@ class ThyAbstractMessageComponent {
106
104
  this._ngZone.runOutsideAngular(() => {
107
105
  this.animationState = 'componentHide';
108
106
  setTimeout(() => {
109
- this.queue.remove(this.config.id);
107
+ this.queue.remove(this.config()?.id);
110
108
  }, ANIMATION_OUT_DURATION);
111
109
  });
112
110
  }
113
111
  createCloseTimer() {
114
- if (this.config.duration) {
112
+ const config = this.config();
113
+ if (config?.duration) {
115
114
  this.closeTimer = setInterval(() => {
116
115
  this.clearCloseTimer();
117
116
  this.close();
118
- }, this.config.duration);
117
+ }, config.duration);
119
118
  }
120
119
  }
121
120
  clearCloseTimer() {
@@ -125,13 +124,11 @@ class ThyAbstractMessageComponent {
125
124
  this.clearCloseTimer();
126
125
  }
127
126
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: ThyAbstractMessageComponent, deps: [{ token: ThyAbstractMessageQueue }], target: i0.ɵɵFactoryTarget.Directive }); }
128
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.8", type: ThyAbstractMessageComponent, isStandalone: true, inputs: { thyConfig: "thyConfig" }, host: { listeners: { "mouseenter": "mouseenter()", "mouseleave": "mouseleave()" } }, ngImport: i0 }); }
127
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.8", type: ThyAbstractMessageComponent, isStandalone: true, inputs: { config: { classPropertyName: "config", publicName: "thyConfig", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "mouseenter": "mouseenter()", "mouseleave": "mouseleave()" } }, ngImport: i0 }); }
129
128
  }
130
129
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: ThyAbstractMessageComponent, decorators: [{
131
130
  type: Directive
132
- }], ctorParameters: () => [{ type: ThyAbstractMessageQueue }], propDecorators: { thyConfig: [{
133
- type: Input
134
- }], mouseenter: [{
131
+ }], ctorParameters: () => [{ type: ThyAbstractMessageQueue }], propDecorators: { mouseenter: [{
135
132
  type: HostListener,
136
133
  args: ['mouseenter']
137
134
  }], mouseleave: [{
@@ -226,21 +223,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImpor
226
223
  * @internal
227
224
  */
228
225
  class ThyMessage extends ThyAbstractMessageComponent {
229
- set thyConfig(value) {
230
- this.config = value;
231
- if (this.config?.hostClass) {
232
- const hostClass = coerceArray(this.config.hostClass);
233
- this.hostRenderer.updateClass(hostClass);
234
- }
235
- }
236
226
  constructor() {
237
227
  const messageQueue = inject(ThyMessageQueue);
238
228
  super(messageQueue);
239
229
  this.animationState = 'flyIn';
240
230
  this.hostRenderer = useHostRenderer();
231
+ effect(() => {
232
+ const config = this.config();
233
+ if (config?.hostClass) {
234
+ const hostClass = coerceArray(config.hostClass);
235
+ this.hostRenderer.updateClass(hostClass);
236
+ }
237
+ });
241
238
  }
242
239
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: ThyMessage, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
243
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.8", type: ThyMessage, isStandalone: true, selector: "thy-message", inputs: { thyConfig: "thyConfig" }, host: { properties: { "class": "'thy-message thy-message-' + config.type", "@flyInOut": "this.animationState" } }, usesInheritance: true, ngImport: i0, template: "@if (iconName) {\n <thy-icon class=\"thy-message-icon\" [thyIconName]=\"iconName\"></thy-icon>\n} @else {\n <span class=\"thy-message-icon loading-icon\"></span>\n}\n<div class=\"thy-message-main\">\n <ng-container *thyStringOrTemplateOutlet=\"config.content\"></ng-container>\n</div>\n@if (config.showClose) {\n <thy-icon class=\"thy-message-close\" thyIconName=\"close\" (click)=\"close()\"></thy-icon>\n}\n\n", dependencies: [{ kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "directive", type: ThyStringOrTemplateOutletDirective, selector: "[thyStringOrTemplateOutlet]", inputs: ["thyStringOrTemplateOutletContext", "thyStringOrTemplateOutlet"], exportAs: ["thyStringOrTemplateOutlet"] }], animations: [
240
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.8", type: ThyMessage, isStandalone: true, selector: "thy-message", host: { properties: { "class": "'thy-message thy-message-' + config().type", "@flyInOut": "this.animationState" } }, usesInheritance: true, ngImport: i0, template: "@let messageConfig = config();\n\n@if (iconName) {\n <thy-icon class=\"thy-message-icon\" [thyIconName]=\"iconName\"></thy-icon>\n} @else {\n <span class=\"thy-message-icon loading-icon\"></span>\n}\n<div class=\"thy-message-main\">\n <ng-container *thyStringOrTemplateOutlet=\"messageConfig?.content\"></ng-container>\n</div>\n@if (messageConfig?.showClose) {\n <thy-icon class=\"thy-message-close\" thyIconName=\"close\" (click)=\"close()\"></thy-icon>\n}\n", dependencies: [{ kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "directive", type: ThyStringOrTemplateOutletDirective, selector: "[thyStringOrTemplateOutlet]", inputs: ["thyStringOrTemplateOutletContext", "thyStringOrTemplateOutlet"], exportAs: ["thyStringOrTemplateOutlet"] }], animations: [
244
241
  trigger('flyInOut', [
245
242
  state('flyIn', style({ transform: 'translateY(0)', opacity: 1, height: '*' })),
246
243
  transition('void => flyIn', [
@@ -255,7 +252,7 @@ class ThyMessage extends ThyAbstractMessageComponent {
255
252
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: ThyMessage, decorators: [{
256
253
  type: Component,
257
254
  args: [{ selector: 'thy-message', host: {
258
- '[class]': "'thy-message thy-message-' + config.type"
255
+ '[class]': "'thy-message thy-message-' + config().type"
259
256
  }, animations: [
260
257
  trigger('flyInOut', [
261
258
  state('flyIn', style({ transform: 'translateY(0)', opacity: 1, height: '*' })),
@@ -266,12 +263,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImpor
266
263
  transition('flyIn => componentHide', [animate(ANIMATION_OUT_DURATION, style(HIDE_STYLE))]),
267
264
  state('componentHide', style(HIDE_STYLE))
268
265
  ])
269
- ], imports: [ThyIcon, ThyStringOrTemplateOutletDirective], template: "@if (iconName) {\n <thy-icon class=\"thy-message-icon\" [thyIconName]=\"iconName\"></thy-icon>\n} @else {\n <span class=\"thy-message-icon loading-icon\"></span>\n}\n<div class=\"thy-message-main\">\n <ng-container *thyStringOrTemplateOutlet=\"config.content\"></ng-container>\n</div>\n@if (config.showClose) {\n <thy-icon class=\"thy-message-close\" thyIconName=\"close\" (click)=\"close()\"></thy-icon>\n}\n\n" }]
266
+ ], imports: [ThyIcon, ThyStringOrTemplateOutletDirective], template: "@let messageConfig = config();\n\n@if (iconName) {\n <thy-icon class=\"thy-message-icon\" [thyIconName]=\"iconName\"></thy-icon>\n} @else {\n <span class=\"thy-message-icon loading-icon\"></span>\n}\n<div class=\"thy-message-main\">\n <ng-container *thyStringOrTemplateOutlet=\"messageConfig?.content\"></ng-container>\n</div>\n@if (messageConfig?.showClose) {\n <thy-icon class=\"thy-message-close\" thyIconName=\"close\" (click)=\"close()\"></thy-icon>\n}\n" }]
270
267
  }], ctorParameters: () => [], propDecorators: { animationState: [{
271
268
  type: HostBinding,
272
269
  args: ['@flyInOut']
273
- }], thyConfig: [{
274
- type: Input
275
270
  }] } });
276
271
 
277
272
  /**
@@ -286,14 +281,13 @@ class ThyMessageContainer extends ThyAbstractMessageContainerComponent {
286
281
  ...defaultConfig
287
282
  });
288
283
  this.messageQueue = inject(ThyMessageQueue);
289
- this.className = 'thy-message-container';
290
284
  }
291
285
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: ThyMessageContainer, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
292
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.8", type: ThyMessageContainer, isStandalone: true, selector: "thy-message-container", host: { properties: { "class": "this.className" } }, usesInheritance: true, ngImport: i0, template: `
286
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.8", type: ThyMessageContainer, isStandalone: true, selector: "thy-message-container", host: { classAttribute: "thy-message-container" }, usesInheritance: true, ngImport: i0, template: `
293
287
  @for (message of messageQueue.queues$ | async; track message.id) {
294
288
  <thy-message [thyConfig]="message.config"></thy-message>
295
289
  }
296
- `, isInline: true, dependencies: [{ kind: "component", type: ThyMessage, selector: "thy-message", inputs: ["thyConfig"] }, { kind: "pipe", type: AsyncPipe, name: "async" }] }); }
290
+ `, isInline: true, dependencies: [{ kind: "component", type: ThyMessage, selector: "thy-message" }, { kind: "pipe", type: AsyncPipe, name: "async" }] }); }
297
291
  }
298
292
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: ThyMessageContainer, decorators: [{
299
293
  type: Component,
@@ -304,12 +298,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImpor
304
298
  <thy-message [thyConfig]="message.config"></thy-message>
305
299
  }
306
300
  `,
307
- imports: [ThyMessage, AsyncPipe]
301
+ imports: [ThyMessage, AsyncPipe],
302
+ host: {
303
+ class: 'thy-message-container'
304
+ }
308
305
  }]
309
- }], ctorParameters: () => [], propDecorators: { className: [{
310
- type: HostBinding,
311
- args: ['class']
312
- }] } });
306
+ }], ctorParameters: () => [] });
313
307
 
314
308
  class ThyMessageModule {
315
309
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: ThyMessageModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }