ngx-tethys 21.0.1 → 21.0.3

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.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,24 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines.
4
4
 
5
+ ## [21.0.3](https://github.com/atinc/ngx-tethys/compare/21.0.2...21.0.3) (2026-05-09)
6
+
7
+
8
+ ### Features
9
+
10
+ * **dialog:** support header config in dialog ([#3802](https://github.com/atinc/ngx-tethys/issues/3802)) ([6013d92](https://github.com/atinc/ngx-tethys/commit/6013d9220ea761f79ace50a73d8058c2be459270))
11
+
12
+
13
+
14
+ ## [21.0.2](https://github.com/atinc/ngx-tethys/compare/21.0.1...21.0.2) (2026-04-24)
15
+
16
+
17
+ ### Bug Fixes
18
+
19
+ * **nav:** fix nav more item style #TINFR-3632 ([#3797](https://github.com/atinc/ngx-tethys/issues/3797)) ([ebcba78](https://github.com/atinc/ngx-tethys/commit/ebcba780680f46fcaf118a91550b1a219dbd8cfb)), closes [#TINFR-3632](https://github.com/atinc/ngx-tethys/issues/TINFR-3632)
20
+
21
+
22
+
5
23
  ## [21.0.1](https://github.com/atinc/ngx-tethys/compare/21.0.0...21.0.1) (2026-04-23)
6
24
 
7
25
 
@@ -2,7 +2,7 @@ import { Overlay, OverlayKeyboardDispatcher, OverlayContainer, OverlayModule } f
2
2
  import { PortalModule, ComponentPortal } from '@angular/cdk/portal';
3
3
  import { NgTemplateOutlet, NgClass, CommonModule } from '@angular/common';
4
4
  import * as i0 from '@angular/core';
5
- import { InjectionToken, inject, ChangeDetectorRef, ElementRef, DOCUMENT, NgZone, Renderer2, EventEmitter, HostBinding, ViewChild, ChangeDetectionStrategy, Component, Injector, Injectable, input, contentChild, computed, output, NgModule } from '@angular/core';
5
+ import { InjectionToken, inject, ElementRef, contentChild, input, computed, output, Component, ChangeDetectorRef, DOCUMENT, NgZone, Renderer2, EventEmitter, HostBinding, ViewChild, ChangeDetectionStrategy, forwardRef, Injector, Injectable, NgModule } from '@angular/core';
6
6
  import * as i1$1 from '@angular/forms';
7
7
  import { FormsModule } from '@angular/forms';
8
8
  import { ThyAction, ThyActionModule } from 'ngx-tethys/action';
@@ -10,8 +10,8 @@ import { ThyButton, ThyButtonModule } from 'ngx-tethys/button';
10
10
  import { ThyFormDirective, ThyFormGroupFooter, ThyFormModule } from 'ngx-tethys/form';
11
11
  import { ThyIcon, ThyIconModule } from 'ngx-tethys/icon';
12
12
  import { ThySharedModule } from 'ngx-tethys/shared';
13
- import { ThyAbstractOverlayConfig, ThyAbstractOverlayContainer, reqAnimFrame, ThyClickPositioner, ThyPortalOutlet, ThyAbstractOverlayRef, ThyAbstractInternalOverlayRef, ThyAbstractOverlayService, ThyTranslate } from 'ngx-tethys/core';
14
- import { isString, coerceBooleanProperty } from 'ngx-tethys/util';
13
+ import { ThyAbstractOverlayConfig, ThyTranslate, ThyAbstractOverlayContainer, reqAnimFrame, ThyClickPositioner, ThyPortalOutlet, ThyAbstractOverlayRef, ThyAbstractInternalOverlayRef, ThyAbstractOverlayService } from 'ngx-tethys/core';
14
+ import { coerceBooleanProperty, isString } from 'ngx-tethys/util';
15
15
  import { filter, finalize } from 'rxjs/operators';
16
16
  import { FocusTrapFactory } from '@angular/cdk/a11y';
17
17
  import { state, style, transition, animate, trigger } from '@angular/animations';
@@ -106,6 +106,94 @@ const dialogAbstractOverlayOptions = {
106
106
  disposeWhenClose: true
107
107
  };
108
108
 
109
+ /**
110
+ * 模态框头部组件
111
+ * @name thy-dialog-header
112
+ * @order 40
113
+ */
114
+ class ThyDialogHeader {
115
+ constructor() {
116
+ this.elementRef = inject(ElementRef);
117
+ this.dialog = inject(ThyDialog);
118
+ this.translate = inject(ThyTranslate);
119
+ this.dialogContainer = inject(ThyDialogContainer, { optional: true });
120
+ /**
121
+ * 自定义头部模板
122
+ */
123
+ this.headerTemplate = contentChild('dialogHeader', ...(ngDevMode ? [{ debugName: "headerTemplate" }] : /* istanbul ignore next */ []));
124
+ /**
125
+ * 标题
126
+ */
127
+ this.thyTitle = input(...(ngDevMode ? [undefined, { debugName: "thyTitle" }] : /* istanbul ignore next */ []));
128
+ /**
129
+ * 大小,只有大的详情页场景会使用 lg,左右 padding 缩小至 20px
130
+ * @type lg | md
131
+ */
132
+ this.thySize = input('md', ...(ngDevMode ? [{ debugName: "thySize" }] : /* istanbul ignore next */ []));
133
+ /**
134
+ * 是否显示分割线
135
+ */
136
+ this.thyDivided = input(false, { ...(ngDevMode ? { debugName: "thyDivided" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
137
+ /**
138
+ * 标题的多语言 Key
139
+ */
140
+ this.thyTitleTranslationKey = input(...(ngDevMode ? [undefined, { debugName: "thyTitleTranslationKey" }] : /* istanbul ignore next */ []));
141
+ this.title = computed(() => {
142
+ const title = this.thyTitle();
143
+ const titleTranslationKey = this.thyTitleTranslationKey();
144
+ return title || (titleTranslationKey && this.translate.instant(titleTranslationKey));
145
+ }, ...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
146
+ /**
147
+ * 头部图标
148
+ */
149
+ this.thyIcon = input(...(ngDevMode ? [undefined, { debugName: "thyIcon" }] : /* istanbul ignore next */ []));
150
+ this.iconName = computed(() => {
151
+ const icon = this.thyIcon();
152
+ return typeof icon === 'string' ? icon : icon?.name || '';
153
+ }, ...(ngDevMode ? [{ debugName: "iconName" }] : /* istanbul ignore next */ []));
154
+ this.iconColor = computed(() => {
155
+ const icon = this.thyIcon();
156
+ return typeof icon === 'string' ? undefined : icon?.color;
157
+ }, ...(ngDevMode ? [{ debugName: "iconColor" }] : /* istanbul ignore next */ []));
158
+ /**
159
+ * 关闭事件
160
+ */
161
+ this.thyOnClose = output();
162
+ }
163
+ ngOnInit() {
164
+ if (!this.dialogContainer) {
165
+ // When this directive is included in a dialog via TemplateRef (rather than being
166
+ // in a Component), the ThyDialogContainerComponent isn't available via injection because embedded
167
+ // views cannot be given a custom injector. Instead, we look up the ThyDialogContainerComponent by
168
+ // ID. This must occur in `onInit`, as the ID binding for the dialog container won't
169
+ // be resolved at constructor time.
170
+ const dialogRef = this.dialog.getClosestDialog(this.elementRef.nativeElement);
171
+ this.dialogContainer = dialogRef ? dialogRef.containerInstance : null;
172
+ }
173
+ // change in next microtask avoid throw ExpressionChangedAfterItHasBeenCheckedError
174
+ // because sub component change parent's HostBinding property (ariaLabelledBy)
175
+ Promise.resolve().then(() => {
176
+ if (this.dialogContainer) {
177
+ this.dialogContainer.ariaLabelledBy = this.title();
178
+ }
179
+ });
180
+ }
181
+ close(event) {
182
+ this.thyOnClose.emit(event);
183
+ this.dialog.close();
184
+ }
185
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: ThyDialogHeader, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
186
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: ThyDialogHeader, isStandalone: true, selector: "thy-dialog-header", inputs: { thyTitle: { classPropertyName: "thyTitle", publicName: "thyTitle", isSignal: true, isRequired: false, transformFunction: null }, thySize: { classPropertyName: "thySize", publicName: "thySize", isSignal: true, isRequired: false, transformFunction: null }, thyDivided: { classPropertyName: "thyDivided", publicName: "thyDivided", isSignal: true, isRequired: false, transformFunction: null }, thyTitleTranslationKey: { classPropertyName: "thyTitleTranslationKey", publicName: "thyTitleTranslationKey", isSignal: true, isRequired: false, transformFunction: null }, thyIcon: { classPropertyName: "thyIcon", publicName: "thyIcon", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { thyOnClose: "thyOnClose" }, host: { properties: { "class.thy-dialog-header-lg": "thySize() === 'lg'", "class.thy-dialog-header-divided": "thyDivided()" }, classAttribute: "dialog-header thy-dialog-header" }, queries: [{ propertyName: "headerTemplate", first: true, predicate: ["dialogHeader"], descendants: true, isSignal: true }], exportAs: ["thyDialogHeader"], ngImport: i0, template: "@if (headerTemplate()) {\n <template [ngTemplateOutlet]=\"headerTemplate()\"></template>\n} @else {\n <h3 class=\"dialog-title d-flex align-items-center\">\n @if (iconName()) {\n <thy-icon class=\"mr-2\" [thyIconName]=\"iconName()\" [style.color]=\"iconColor()\"></thy-icon>\n }\n <span>{{ title() }}</span>\n </h3>\n <a href=\"javascript:;\" class=\"mr-n2\" thyAction thyActionIcon=\"close\" (click)=\"close($event)\"></a>\n}\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "component", type: ThyAction, selector: "thy-action, [thyAction]", inputs: ["thyType", "thyIcon", "thyActionIcon", "thyActive", "thyActionActive", "thyTheme", "thyHoverIcon", "thyDisabled"] }] }); }
187
+ }
188
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: ThyDialogHeader, decorators: [{
189
+ type: Component,
190
+ args: [{ selector: 'thy-dialog-header', exportAs: 'thyDialogHeader', host: {
191
+ class: 'dialog-header thy-dialog-header',
192
+ '[class.thy-dialog-header-lg]': `thySize() === 'lg'`,
193
+ '[class.thy-dialog-header-divided]': `thyDivided()`
194
+ }, imports: [NgTemplateOutlet, ThyIcon, ThyAction], template: "@if (headerTemplate()) {\n <template [ngTemplateOutlet]=\"headerTemplate()\"></template>\n} @else {\n <h3 class=\"dialog-title d-flex align-items-center\">\n @if (iconName()) {\n <thy-icon class=\"mr-2\" [thyIconName]=\"iconName()\" [style.color]=\"iconColor()\"></thy-icon>\n }\n <span>{{ title() }}</span>\n </h3>\n <a href=\"javascript:;\" class=\"mr-n2\" thyAction thyActionIcon=\"close\" (click)=\"close($event)\"></a>\n}\n" }]
195
+ }], propDecorators: { headerTemplate: [{ type: i0.ContentChild, args: ['dialogHeader', { isSignal: true }] }], thyTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyTitle", required: false }] }], thySize: [{ type: i0.Input, args: [{ isSignal: true, alias: "thySize", required: false }] }], thyDivided: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyDivided", required: false }] }], thyTitleTranslationKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyTitleTranslationKey", required: false }] }], thyIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyIcon", required: false }] }], thyOnClose: [{ type: i0.Output, args: ["thyOnClose"] }] } });
196
+
109
197
  /**
110
198
  * @private
111
199
  */
@@ -230,13 +318,23 @@ class ThyDialogContainer extends ThyAbstractOverlayContainer {
230
318
  super.destroy();
231
319
  }
232
320
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: ThyDialogContainer, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
233
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.8", type: ThyDialogContainer, isStandalone: true, selector: "thy-dialog-container", host: { attributes: { "tabindex": "-1", "aria-modal": "true" }, listeners: { "@dialogContainer.start": "onAnimationStart($event)", "@dialogContainer.done": "onAnimationDone($event)" }, properties: { "attr.id": "this.id", "attr.role": "config.role", "attr.aria-labelledby": "config.ariaLabel ? null : ariaLabelledBy", "attr.aria-label": "config.ariaLabel", "attr.aria-describedby": "config.ariaDescribedBy || null", "@dialogContainer": "animationState" }, classAttribute: "thy-dialog-container" }, viewQueries: [{ propertyName: "portalOutlet", first: true, predicate: ThyPortalOutlet, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: ` <ng-template thyPortalOutlet></ng-template> `, isInline: true, dependencies: [{ kind: "ngmodule", type: PortalModule }, { kind: "directive", type: ThyPortalOutlet, selector: "[thyPortalOutlet]", inputs: ["thyPortalOutlet"], exportAs: ["thyPortalOutlet"] }], animations: [thyDialogAnimations.dialogContainer], changeDetection: i0.ChangeDetectionStrategy.Eager }); }
321
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: ThyDialogContainer, isStandalone: true, selector: "thy-dialog-container", host: { attributes: { "tabindex": "-1", "aria-modal": "true" }, listeners: { "@dialogContainer.start": "onAnimationStart($event)", "@dialogContainer.done": "onAnimationDone($event)" }, properties: { "attr.id": "this.id", "attr.role": "config.role", "attr.aria-labelledby": "config.ariaLabel ? null : ariaLabelledBy", "attr.aria-label": "config.ariaLabel", "attr.aria-describedby": "config.ariaDescribedBy || null", "@dialogContainer": "animationState" }, classAttribute: "thy-dialog-container" }, viewQueries: [{ propertyName: "portalOutlet", first: true, predicate: ThyPortalOutlet, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
322
+ @if (config.header?.title) {
323
+ <thy-dialog-header [thyTitle]="config.header?.title" [thyIcon]="config.header?.icon"></thy-dialog-header>
324
+ }
325
+ <ng-template thyPortalOutlet></ng-template>
326
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: i0.forwardRef(() => PortalModule) }, { kind: "directive", type: i0.forwardRef(() => ThyPortalOutlet), selector: "[thyPortalOutlet]", inputs: ["thyPortalOutlet"], exportAs: ["thyPortalOutlet"] }, { kind: "component", type: i0.forwardRef(() => ThyDialogHeader), selector: "thy-dialog-header", inputs: ["thyTitle", "thySize", "thyDivided", "thyTitleTranslationKey", "thyIcon"], outputs: ["thyOnClose"], exportAs: ["thyDialogHeader"] }], animations: [thyDialogAnimations.dialogContainer], changeDetection: i0.ChangeDetectionStrategy.Eager }); }
234
327
  }
235
328
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: ThyDialogContainer, decorators: [{
236
329
  type: Component,
237
330
  args: [{
238
331
  selector: 'thy-dialog-container',
239
- template: ` <ng-template thyPortalOutlet></ng-template> `,
332
+ template: `
333
+ @if (config.header?.title) {
334
+ <thy-dialog-header [thyTitle]="config.header?.title" [thyIcon]="config.header?.icon"></thy-dialog-header>
335
+ }
336
+ <ng-template thyPortalOutlet></ng-template>
337
+ `,
240
338
  // Using OnPush for dialogs caused some sync issues, e.g. custom ngModel can't to detect changes
241
339
  // Disabled until we can track them down.
242
340
  changeDetection: ChangeDetectionStrategy.Default,
@@ -254,7 +352,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImpor
254
352
  '(@dialogContainer.start)': 'onAnimationStart($event)',
255
353
  '(@dialogContainer.done)': 'onAnimationDone($event)'
256
354
  },
257
- imports: [PortalModule, ThyPortalOutlet]
355
+ imports: [PortalModule, ThyPortalOutlet, forwardRef(() => ThyDialogHeader)]
258
356
  }]
259
357
  }], ctorParameters: () => [], propDecorators: { portalOutlet: [{
260
358
  type: ViewChild,
@@ -485,86 +583,6 @@ const THY_CONFIRM_DEFAULT_OPTIONS_PROVIDER = {
485
583
  deps: [ThyI18nService]
486
584
  };
487
585
 
488
- /**
489
- * 模态框头部组件
490
- * @name thy-dialog-header
491
- * @order 40
492
- */
493
- class ThyDialogHeader {
494
- constructor() {
495
- this.elementRef = inject(ElementRef);
496
- this.dialog = inject(ThyDialog);
497
- this.translate = inject(ThyTranslate);
498
- this.dialogContainer = inject(ThyDialogContainer, { optional: true });
499
- /**
500
- * 自定义头部模板
501
- */
502
- this.headerTemplate = contentChild('dialogHeader', ...(ngDevMode ? [{ debugName: "headerTemplate" }] : /* istanbul ignore next */ []));
503
- /**
504
- * 标题
505
- */
506
- this.thyTitle = input(...(ngDevMode ? [undefined, { debugName: "thyTitle" }] : /* istanbul ignore next */ []));
507
- /**
508
- * 大小,只有大的详情页场景会使用 lg,左右 padding 缩小至 20px
509
- * @type lg | md
510
- */
511
- this.thySize = input('md', ...(ngDevMode ? [{ debugName: "thySize" }] : /* istanbul ignore next */ []));
512
- /**
513
- * 是否显示分割线
514
- */
515
- this.thyDivided = input(false, { ...(ngDevMode ? { debugName: "thyDivided" } : /* istanbul ignore next */ {}), transform: coerceBooleanProperty });
516
- /**
517
- * 标题的多语言 Key
518
- */
519
- this.thyTitleTranslationKey = input(...(ngDevMode ? [undefined, { debugName: "thyTitleTranslationKey" }] : /* istanbul ignore next */ []));
520
- this.title = computed(() => {
521
- const title = this.thyTitle();
522
- const titleTranslationKey = this.thyTitleTranslationKey();
523
- return title || (titleTranslationKey && this.translate.instant(titleTranslationKey));
524
- }, ...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
525
- /**
526
- * 头部图标
527
- */
528
- this.thyIcon = input(...(ngDevMode ? [undefined, { debugName: "thyIcon" }] : /* istanbul ignore next */ []));
529
- /**
530
- * 关闭事件
531
- */
532
- this.thyOnClose = output();
533
- }
534
- ngOnInit() {
535
- if (!this.dialogContainer) {
536
- // When this directive is included in a dialog via TemplateRef (rather than being
537
- // in a Component), the ThyDialogContainerComponent isn't available via injection because embedded
538
- // views cannot be given a custom injector. Instead, we look up the ThyDialogContainerComponent by
539
- // ID. This must occur in `onInit`, as the ID binding for the dialog container won't
540
- // be resolved at constructor time.
541
- const dialogRef = this.dialog.getClosestDialog(this.elementRef.nativeElement);
542
- this.dialogContainer = dialogRef ? dialogRef.containerInstance : null;
543
- }
544
- // change in next microtask avoid throw ExpressionChangedAfterItHasBeenCheckedError
545
- // because sub component change parent's HostBinding property (ariaLabelledBy)
546
- Promise.resolve().then(() => {
547
- if (this.dialogContainer) {
548
- this.dialogContainer.ariaLabelledBy = this.title();
549
- }
550
- });
551
- }
552
- close(event) {
553
- this.thyOnClose.emit(event);
554
- this.dialog.close();
555
- }
556
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: ThyDialogHeader, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
557
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: ThyDialogHeader, isStandalone: true, selector: "thy-dialog-header", inputs: { thyTitle: { classPropertyName: "thyTitle", publicName: "thyTitle", isSignal: true, isRequired: false, transformFunction: null }, thySize: { classPropertyName: "thySize", publicName: "thySize", isSignal: true, isRequired: false, transformFunction: null }, thyDivided: { classPropertyName: "thyDivided", publicName: "thyDivided", isSignal: true, isRequired: false, transformFunction: null }, thyTitleTranslationKey: { classPropertyName: "thyTitleTranslationKey", publicName: "thyTitleTranslationKey", isSignal: true, isRequired: false, transformFunction: null }, thyIcon: { classPropertyName: "thyIcon", publicName: "thyIcon", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { thyOnClose: "thyOnClose" }, host: { properties: { "class.thy-dialog-header-lg": "thySize() === 'lg'", "class.thy-dialog-header-divided": "thyDivided()" }, classAttribute: "dialog-header thy-dialog-header" }, queries: [{ propertyName: "headerTemplate", first: true, predicate: ["dialogHeader"], descendants: true, isSignal: true }], exportAs: ["thyDialogHeader"], ngImport: i0, template: "@if (headerTemplate()) {\n <template [ngTemplateOutlet]=\"headerTemplate()\"></template>\n} @else {\n <h3 class=\"dialog-title\"><thy-icon [thyIconName]=\"thyIcon()\"></thy-icon>{{ title() }}</h3>\n <a href=\"javascript:;\" class=\"mr-n2\" thyAction thyActionIcon=\"close\" (click)=\"close($event)\"></a>\n}\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "component", type: ThyAction, selector: "thy-action, [thyAction]", inputs: ["thyType", "thyIcon", "thyActionIcon", "thyActive", "thyActionActive", "thyTheme", "thyHoverIcon", "thyDisabled"] }] }); }
558
- }
559
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: ThyDialogHeader, decorators: [{
560
- type: Component,
561
- args: [{ selector: 'thy-dialog-header', exportAs: 'thyDialogHeader', host: {
562
- class: 'dialog-header thy-dialog-header',
563
- '[class.thy-dialog-header-lg]': `thySize() === 'lg'`,
564
- '[class.thy-dialog-header-divided]': `thyDivided()`
565
- }, imports: [NgTemplateOutlet, ThyIcon, ThyAction], template: "@if (headerTemplate()) {\n <template [ngTemplateOutlet]=\"headerTemplate()\"></template>\n} @else {\n <h3 class=\"dialog-title\"><thy-icon [thyIconName]=\"thyIcon()\"></thy-icon>{{ title() }}</h3>\n <a href=\"javascript:;\" class=\"mr-n2\" thyAction thyActionIcon=\"close\" (click)=\"close($event)\"></a>\n}\n" }]
566
- }], propDecorators: { headerTemplate: [{ type: i0.ContentChild, args: ['dialogHeader', { isSignal: true }] }], thyTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyTitle", required: false }] }], thySize: [{ type: i0.Input, args: [{ isSignal: true, alias: "thySize", required: false }] }], thyDivided: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyDivided", required: false }] }], thyTitleTranslationKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyTitleTranslationKey", required: false }] }], thyIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyIcon", required: false }] }], thyOnClose: [{ type: i0.Output, args: ["thyOnClose"] }] } });
567
-
568
586
  /**
569
587
  * @private
570
588
  */
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-tethys-dialog.mjs","sources":["../../../src/dialog/confirm/token.ts","../../../src/dialog/dialog-animations.ts","../../../src/dialog/dialog.config.ts","../../../src/dialog/dialog.options.ts","../../../src/dialog/dialog-container.component.ts","../../../src/dialog/dialog-ref.ts","../../../src/dialog/dialog.service.ts","../../../src/dialog/body/dialog-body.component.ts","../../../src/dialog/confirm.config.ts","../../../src/dialog/header/dialog-header.component.ts","../../../src/dialog/header/dialog-header.component.html","../../../src/dialog/confirm/confirm.component.ts","../../../src/dialog/confirm/confirm.component.html","../../../src/dialog/footer/dialog-footer.component.ts","../../../src/dialog/footer/dialog-footer.component.html","../../../src/dialog/dialog.module.ts","../../../src/dialog/ngx-tethys-dialog.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport interface ThyConfirmAbstractComponent {\n okText: string;\n okType: string;\n cancelText: string;\n okLoadingText: string;\n}\n\nexport const THY_CONFIRM_COMPONENT_TOKEN = new InjectionToken<ThyConfirmAbstractComponent>('thy-confirm-component-token');\n","import { animate, state, style, transition, trigger, AnimationTriggerMetadata } from '@angular/animations';\n\nconst animationBody = [\n // Note: The `enter` animation transitions to `transform: none`, because for some reason\n // specifying the transform explicitly, causes IE both to blur the dialog content and\n // decimate the animation performance. Leaving it as `none` solves both issues. translate(-300px,-100px)\n state('void, exit', style({ opacity: 0, transform: 'scale(0.1)' })),\n state('enter', style({ transform: 'none' })),\n transition('* => enter', animate('200ms cubic-bezier(0, 0, 0.57, 1)', style({ transform: 'none', opacity: 1 }))),\n transition('* => exit', animate('150ms cubic-bezier(0.24, 0.18, 0.96, 0.52)', style({ transform: 'scale(0.3)', opacity: 0 })))\n];\n\n/**\n * Animations used by MatDialog.\n * @docs-private\n */\nexport const thyDialogAnimations: {\n readonly dialogContainer: AnimationTriggerMetadata;\n} = {\n dialogContainer: trigger('dialogContainer', animationBody)\n};\n\n// export const setAnimationStart\n","import { ThyAbstractOverlayConfig, ThyAbstractOverlayPosition } from 'ngx-tethys/core';\n\nimport { ScrollStrategy } from '@angular/cdk/overlay';\nimport { InjectionToken } from '@angular/core';\n\n/** Valid ARIA roles for a dialog element. */\nexport type ThyDialogRole = 'dialog' | 'alertdialog';\n\nexport enum ThyDialogSizes {\n lg = 'lg',\n /**\n * 已废弃,命名错误,请使用 superLg\n * @deprecated\n */\n supperLg = 'supper-lg',\n superLg = 'super-lg',\n maxLg = 'max-lg',\n md = 'md',\n sm = 'sm',\n full = 'full'\n}\n\n/**\n * 通过ThyDialog服务端打开模态框的配置\n * @description.en-us Configuration for opening a modal dialog with the ThyDialog service.\n * @public\n * @order 20\n */\nexport class ThyDialogConfig<TData = unknown> extends ThyAbstractOverlayConfig<TData> {\n /**\n * 对话框元素的 ARIA 角色\n * @description.en-us The ARIA role of the dialog element.\n */\n role?: ThyDialogRole = 'dialog';\n\n /**\n * 定位模态框的弹出位置\n * @description.en-us Position overrides.\n */\n position?: ThyAbstractOverlayPosition;\n\n /**\n * 模态框的大小,ThyDialogSizes: sm (400)、md (660)、lg (800)、maxLg (980)、superLg (94vw)、full (全屏)\n * @default md\n * @description.en-us Dialog size md, lg, sm\n */\n size?: ThyDialogSizes;\n\n /**\n * 用于模态框的滚动策略\n * @description.en-us Scroll strategy to be used for the dialog.\n */\n scrollStrategy?: ScrollStrategy;\n}\n\n/** Injection token that can be used to specify default dialog options. */\nexport const THY_DIALOG_DEFAULT_OPTIONS = new InjectionToken<ThyDialogConfig>('thy-dialog-default-options');\n\nexport const THY_DIALOG_DEFAULT_OPTIONS_PROVIDER = {\n provide: THY_DIALOG_DEFAULT_OPTIONS,\n useValue: {\n role: 'dialog',\n hasBackdrop: true,\n backdropClass: '',\n panelClass: '',\n backdropClosable: true,\n closeOnNavigation: true,\n autoFocus: true,\n restoreFocus: true,\n restoreFocusOptions: {\n preventScroll: true\n },\n hostClass: 'thy-dialog-content'\n }\n};\n\nexport type ThyDialogFooterAlign = 'left' | 'right' | 'center';\n\nexport class ThyDialogLayoutConfig {\n footerAlign?: ThyDialogFooterAlign;\n footerDivided?: boolean;\n}\n\nexport const THY_DIALOG_LAYOUT_CONFIG = new InjectionToken<ThyDialogLayoutConfig>('thy-dialog-layout-config');\n\nexport const THY_DIALOG_LAYOUT_CONFIG_PROVIDER = {\n provide: THY_DIALOG_LAYOUT_CONFIG,\n useValue: {\n footerAlign: 'left',\n footerDivided: false\n }\n};\n","import { ThyAbstractOverlayOptions } from 'ngx-tethys/core';\n\nexport const dialogAbstractOverlayOptions: ThyAbstractOverlayOptions = {\n name: 'dialog',\n animationEnabled: true,\n disposeWhenClose: true\n};\n","import { reqAnimFrame, ThyAbstractOverlayContainer, ThyClickPositioner, ThyPortalOutlet } from 'ngx-tethys/core';\nimport { Observable } from 'rxjs';\nimport { filter } from 'rxjs/operators';\n\nimport { AnimationEvent } from '@angular/animations';\nimport { FocusTrap, FocusTrapFactory } from '@angular/cdk/a11y';\nimport { PortalModule } from '@angular/cdk/portal';\n\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n NgZone,\n OnDestroy,\n Renderer2,\n ViewChild,\n inject,\n DOCUMENT\n} from '@angular/core';\n\nimport { thyDialogAnimations } from './dialog-animations';\nimport { ThyDialogConfig } from './dialog.config';\nimport { dialogAbstractOverlayOptions } from './dialog.options';\n\n/**\n * @private\n */\n@Component({\n selector: 'thy-dialog-container',\n template: ` <ng-template thyPortalOutlet></ng-template> `,\n // Using OnPush for dialogs caused some sync issues, e.g. custom ngModel can't to detect changes\n // Disabled until we can track them down.\n changeDetection: ChangeDetectionStrategy.Default,\n animations: [thyDialogAnimations.dialogContainer],\n host: {\n class: 'thy-dialog-container',\n tabindex: '-1',\n 'aria-modal': 'true',\n '[attr.id]': 'id',\n '[attr.role]': 'config.role',\n '[attr.aria-labelledby]': 'config.ariaLabel ? null : ariaLabelledBy',\n '[attr.aria-label]': 'config.ariaLabel',\n '[attr.aria-describedby]': 'config.ariaDescribedBy || null',\n '[@dialogContainer]': 'animationState',\n '(@dialogContainer.start)': 'onAnimationStart($event)',\n '(@dialogContainer.done)': 'onAnimationDone($event)'\n },\n imports: [PortalModule, ThyPortalOutlet]\n})\nexport class ThyDialogContainer extends ThyAbstractOverlayContainer implements OnDestroy {\n private elementRef = inject(ElementRef);\n private document = inject(DOCUMENT);\n config = inject(ThyDialogConfig);\n private clickPositioner = inject(ThyClickPositioner);\n private focusTrapFactory = inject(FocusTrapFactory);\n private ngZone = inject(NgZone);\n private renderer = inject(Renderer2);\n\n animationOpeningDone!: Observable<AnimationEvent>;\n animationClosingDone!: Observable<AnimationEvent>;\n\n @ViewChild(ThyPortalOutlet, { static: true })\n portalOutlet!: ThyPortalOutlet;\n\n @HostBinding(`attr.id`)\n id!: string;\n\n /** State of the dialog animation. */\n animationState: 'void' | 'enter' | 'exit' = 'void';\n\n /** Emits when an animation state changes. */\n animationStateChanged = new EventEmitter<AnimationEvent>();\n\n /** ID of the element that should be considered as the dialog's label. */\n ariaLabelledBy: string | null = null;\n\n /** Element that was focused before the dialog was opened. Save this to restore upon close. */\n private elementFocusedBeforeDialogWasOpened: HTMLElement | null = null;\n\n /** The class that traps and manages focus within the dialog. */\n private focusTrap!: FocusTrap;\n\n private savePreviouslyFocusedElement() {\n if (this.document) {\n this.elementFocusedBeforeDialogWasOpened = this.document.activeElement as HTMLElement;\n\n // Note that there is no focus method when rendering on the server.\n if (this.elementRef.nativeElement.focus) {\n // Note: this is being run outside of the Angular zone because `element.focus()` doesn't require\n // running change detection.\n this.ngZone.runOutsideAngular(() =>\n // Move focus onto the dialog immediately in order to prevent the user from accidentally\n // opening multiple dialogs at the same time. Needs to be async, because the element\n // may not be focusable immediately.\n\n // Note: `element.focus()` causes re-layout and this may lead to frame drop on slower devices.\n // https://gist.github.com/paulirish/5d52fb081b3570c81e3a#setting-focus\n // `setTimeout` is a macrotask and macrotasks are executed within the current rendering frame.\n // Animation tasks are executed within the next rendering frame.\n reqAnimFrame(() => this.elementRef.nativeElement.focus())\n );\n }\n }\n }\n\n /** Moves the focus inside the focus trap. */\n private trapFocus() {\n const element = this.elementRef.nativeElement;\n\n if (!this.focusTrap) {\n this.focusTrap = this.focusTrapFactory.create(element);\n }\n\n // If we were to attempt to focus immediately, then the content of the dialog would not yet be\n // ready in instances where change detection has to run first. To deal with this, we simply\n // wait for the microtask queue to be empty.\n if (this.config.autoFocus) {\n this.focusTrap.focusInitialElementWhenReady();\n } else {\n const activeElement = this.document.activeElement;\n\n // Otherwise ensure that focus is on the dialog container. It's possible that a different\n // component tried to move focus while the open animation was running. See:\n // https://github.com/angular/components/issues/16215. Note that we only want to do this\n // if the focus isn't inside the dialog already, because it's possible that the consumer\n // turned off `autoFocus` in order to move focus themselves.\n if (activeElement !== element && !element.contains(activeElement)) {\n element.focus();\n }\n }\n }\n\n private restoreFocus() {\n const toFocus = this.elementFocusedBeforeDialogWasOpened;\n\n // We need the extra check, because IE can set the `activeElement` to null in some cases.\n if (this.config.restoreFocus && toFocus && typeof toFocus.focus === 'function') {\n toFocus.focus(this.config.restoreFocusOptions);\n }\n\n if (this.focusTrap) {\n this.focusTrap.destroy();\n }\n }\n\n private setTransformOrigin() {\n this.clickPositioner.runTaskUseLastPosition(lastPosition => {\n if (lastPosition) {\n const containerElement: HTMLElement = this.elementRef.nativeElement;\n const transformOrigin = `${lastPosition.x - containerElement.offsetLeft}px ${\n lastPosition.y - containerElement.offsetTop\n }px 0px`;\n containerElement.style.transformOrigin = transformOrigin;\n // 手动修改动画状态为从 void 到 enter, 开启动画\n }\n this.animationState = 'enter';\n this.changeDetectorRef.markForCheck();\n });\n }\n\n constructor() {\n const changeDetectorRef = inject(ChangeDetectorRef);\n\n super(dialogAbstractOverlayOptions, changeDetectorRef);\n this.animationOpeningDone = this.animationStateChanged.pipe(\n filter((event: AnimationEvent) => {\n return event.phaseName === 'done' && event.toState === 'void';\n })\n );\n this.animationClosingDone = this.animationStateChanged.pipe(\n filter((event: AnimationEvent) => {\n return event.phaseName === 'done' && event.toState === 'exit';\n })\n );\n /* Prohibit operations on elements inside the container during animation execution */\n this.animationStateChanged\n .pipe(\n filter((event: AnimationEvent) => {\n return event.phaseName === 'start' && event.toState === 'exit';\n })\n )\n .subscribe(() => {\n this.renderer.setStyle(this.elementRef.nativeElement, 'pointer-events', 'none');\n });\n }\n\n beforeAttachPortal(): void {\n this.setTransformOrigin();\n this.savePreviouslyFocusedElement();\n }\n\n /** Callback, invoked whenever an animation on the host completes. */\n onAnimationDone(event: AnimationEvent) {\n if (event.toState === 'void') {\n this.trapFocus();\n } else if (event.toState === 'exit') {\n this.restoreFocus();\n }\n this.animationStateChanged.emit(event);\n }\n\n /** Callback, invoked when an animation on the host starts. */\n onAnimationStart(event: AnimationEvent) {\n this.animationStateChanged.emit(event);\n }\n\n ngOnDestroy() {\n super.destroy();\n }\n}\n","import { GlobalPositionStrategy, OverlayRef } from '@angular/cdk/overlay';\nimport {\n ThyAbstractInternalOverlayRef,\n ThyAbstractOverlayOptions,\n ThyAbstractOverlayPosition,\n ThyAbstractOverlayRef\n} from 'ngx-tethys/core';\n\nimport { ThyDialogContainer } from './dialog-container.component';\nimport { ThyDialogConfig } from './dialog.config';\nimport { dialogAbstractOverlayOptions } from './dialog.options';\n\n/**\n * @publicApi\n * @order 30\n */\nexport interface ThyAbstractDialog {\n toTop(id: string): void;\n}\n\nexport abstract class ThyDialogRef<T, TResult = unknown> extends ThyAbstractOverlayRef<T, ThyDialogContainer, TResult> {}\n\nexport class ThyInternalDialogRef<T, TResult = unknown> extends ThyAbstractInternalOverlayRef<T, ThyDialogContainer, TResult> {\n thyDialog!: ThyAbstractDialog;\n\n protected get options(): ThyAbstractOverlayOptions {\n return dialogAbstractOverlayOptions;\n }\n\n constructor() {\n super();\n }\n\n override initialize(\n overlayRef: OverlayRef,\n containerInstance: ThyDialogContainer,\n config: ThyDialogConfig<T>,\n service: ThyAbstractDialog\n ): void {\n super.initialize(overlayRef, containerInstance, config);\n this.thyDialog = service;\n }\n\n /**\n * Updates the dialog's position.\n * @param position New dialog position.\n */\n updatePosition(position?: ThyAbstractOverlayPosition): this {\n this.updateGlobalPosition(position);\n return this;\n }\n\n /**\n * Updates the dialog's width and height.\n * @param width New width of the dialog.\n * @param height New height of the dialog.\n */\n updateSizeAndPosition(width: string = '', height: string = '', position?: ThyAbstractOverlayPosition): this {\n (this.getPositionStrategy() as GlobalPositionStrategy).width(width).height(height);\n this.updatePosition(position);\n return this;\n }\n\n /**\n * Update dialog to top\n */\n toTop() {\n this.thyDialog.toTop(this.id);\n }\n}\n","import { ThyAbstractOverlayRef, ThyAbstractOverlayService, ThyClickPositioner } from 'ngx-tethys/core';\nimport { of } from 'rxjs';\n\nimport { Directionality } from '@angular/cdk/bidi';\nimport { Overlay, OverlayConfig, OverlayContainer, OverlayKeyboardDispatcher, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal, ComponentType } from '@angular/cdk/portal';\nimport { Injectable, Injector, OnDestroy, StaticProvider, TemplateRef, inject } from '@angular/core';\n\nimport { isString } from 'ngx-tethys/util';\nimport { ThyConfirmConfig } from './confirm.config';\nimport { THY_CONFIRM_COMPONENT_TOKEN, ThyConfirmAbstractComponent } from './confirm/token';\nimport { ThyDialogContainer } from './dialog-container.component';\nimport { ThyDialogRef, ThyInternalDialogRef } from './dialog-ref';\nimport { THY_DIALOG_DEFAULT_OPTIONS, ThyDialogConfig, ThyDialogSizes } from './dialog.config';\nimport { dialogAbstractOverlayOptions } from './dialog.options';\n\n/**\n * @public\n * @order 10\n */\n@Injectable()\nexport class ThyDialog extends ThyAbstractOverlayService<ThyDialogConfig, ThyDialogContainer> implements OnDestroy {\n private confirmComponentType = inject<ComponentType<ThyConfirmAbstractComponent>>(THY_CONFIRM_COMPONENT_TOKEN);\n\n private overlayKeyboardDispatcher = inject(OverlayKeyboardDispatcher);\n\n private overlayContainer = inject(OverlayContainer);\n\n protected buildOverlayConfig(config: ThyDialogConfig<any>): OverlayConfig {\n const size = config.size || ThyDialogSizes.md;\n const overlayConfig = this.buildBaseOverlayConfig(config, [`dialog-${size}`]);\n overlayConfig.positionStrategy = this.overlay.position().global();\n overlayConfig.scrollStrategy = config.scrollStrategy || this.overlay.scrollStrategies.block();\n return overlayConfig;\n }\n\n protected attachOverlayContainer(overlay: OverlayRef, config: ThyDialogConfig<any>): ThyDialogContainer {\n const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n const injector = Injector.create({\n parent: userInjector || this.injector,\n providers: [{ provide: ThyDialogConfig, useValue: config }]\n });\n const containerPortal = new ComponentPortal(ThyDialogContainer, config.viewContainerRef, injector);\n const containerRef = overlay.attach<ThyDialogContainer>(containerPortal);\n\n return containerRef.instance;\n }\n\n protected createAbstractOverlayRef<T, TResult>(\n overlayRef: OverlayRef,\n containerInstance: ThyDialogContainer,\n config: ThyDialogConfig<any>\n ): ThyAbstractOverlayRef<T, ThyDialogContainer, TResult> {\n const dialogRef = new ThyInternalDialogRef<T, TResult>();\n dialogRef.initialize(overlayRef, containerInstance, config, this);\n return dialogRef;\n }\n\n protected createInjectorProviders<T>(\n dialogRef: ThyDialogRef<T>, dialogContainer: ThyDialogContainer\n ): StaticProvider[] {\n return [\n { provide: ThyDialogContainer, useValue: dialogContainer },\n {\n provide: ThyDialogRef,\n useValue: dialogRef\n }\n ];\n }\n\n constructor() {\n const overlay = inject(Overlay);\n const injector = inject(Injector);\n const defaultConfig = inject(THY_DIALOG_DEFAULT_OPTIONS, { optional: true })!;\n const clickPositioner = inject(ThyClickPositioner);\n\n super(dialogAbstractOverlayOptions, overlay, injector, defaultConfig);\n clickPositioner.initialize();\n }\n\n /**\n * 打开 Dialog\n */\n open<T, TData = unknown, TResult = unknown>(\n componentOrTemplateRef: ComponentType<T> | TemplateRef<T>,\n config?: ThyDialogConfig<TData>\n ): ThyDialogRef<T, TResult> {\n const dialogRef = this.openOverlay(componentOrTemplateRef, config);\n const dialogRefInternal = dialogRef as ThyInternalDialogRef<T, TResult>;\n dialogRefInternal.updateSizeAndPosition(\n dialogRef.containerInstance.config.width,\n dialogRef.containerInstance.config.height,\n dialogRef.containerInstance.config.position\n );\n return dialogRef as ThyDialogRef<T, TResult>;\n }\n\n /**\n * 打开 Confirm\n */\n confirm(options: ThyConfirmConfig) {\n return this.open(this.confirmComponentType, {\n initialState: {\n options: options\n }\n });\n }\n\n /**\n * 根据 id 获取 Dialog\n */\n getDialogById(id: string): ThyDialogRef<any> | undefined {\n return this.getAbstractOverlayById(id) as ThyDialogRef<any> | undefined;\n }\n\n /**\n * 获取所有打开的 Dialog\n */\n getOpenedDialogs(): ThyDialogRef<any>[] {\n return this.getAbstractOverlays();\n }\n\n /**\n * @description.en-us Finds the closest ThyDialogRef to an element by looking at the DOM.\n * @description 获取与指定元素最接近的 ThyDialogRef\n */\n getClosestDialog(element: HTMLElement): ThyDialogRef<any> | undefined | null {\n let parent: HTMLElement | null = element.parentElement;\n\n while (parent && !parent.classList.contains('thy-dialog-container')) {\n parent = parent.parentElement;\n }\n if (parent && parent.id) {\n return this.getDialogById(parent.id);\n }\n return null;\n }\n\n /**\n * Update dialog to top\n */\n toTop(idOrOverlayRef: string | ThyDialogRef<unknown, ThyDialogContainer>) {\n let dialogRef: ThyAbstractOverlayRef<unknown, ThyDialogContainer> | undefined;\n if (isString(idOrOverlayRef)) {\n dialogRef = this.openedOverlays.find(item => item.id === idOrOverlayRef);\n } else {\n dialogRef = idOrOverlayRef;\n }\n if (dialogRef) {\n const overlayRef = dialogRef.getOverlayRef();\n const containerElement = this.overlayContainer.getContainerElement();\n containerElement.appendChild(overlayRef.backdropElement!);\n containerElement.appendChild(overlayRef.hostElement);\n this.overlayKeyboardDispatcher.remove(overlayRef);\n this.overlayKeyboardDispatcher.add(overlayRef);\n this.openedOverlays = [...(this.openedOverlays || []).filter(item => item.id !== dialogRef?.id), dialogRef];\n }\n }\n\n ngOnDestroy() {\n this.dispose();\n }\n}\n","import { Component, Input, OnInit, HostBinding, inject, input } from '@angular/core';\nimport { ThyDialog } from '../dialog.service';\nimport { CdkScrollable } from '@angular/cdk/scrolling';\nimport { coerceBooleanProperty } from 'ngx-tethys/util';\n\n/**\n * 模态框的主体组件\n * @name thy-dialog-body\n * @order 50\n */\n@Component({\n selector: 'thy-dialog-body',\n template: '<ng-content></ng-content>',\n // changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'thyDialogBody',\n hostDirectives: [CdkScrollable],\n host: {\n class: 'dialog-body',\n '[class.dialog-body-clear-padding]': 'thyClearPadding()'\n }\n})\nexport class ThyDialogBody implements OnInit {\n private dialog = inject(ThyDialog);\n /**\n * 清除间距\n */\n readonly thyClearPadding = input(false, { transform: coerceBooleanProperty });\n\n ngOnInit() {}\n}\n","import { InjectionToken } from '@angular/core';\nimport { ThyFormGroupFooterAlign } from 'ngx-tethys/form';\nimport { injectLocale, ThyI18nService } from 'ngx-tethys/i18n';\nimport { Observable } from 'rxjs';\n\n/**\n * 确认框配置\n * @public\n * @order 70\n */\nexport interface ThyConfirmConfig {\n /**\n * 标题\n */\n title?: string;\n\n /**\n * 提示内容\n */\n content: string;\n\n /**\n * 确认按钮的文案\n */\n okText?: string;\n\n /**\n * 确认按钮的类型,primary | danger\n */\n okType?: 'primary' | 'danger';\n\n /**\n * 确认按钮处于提交状态时的文案\n */\n okLoadingText?: string;\n\n /**\n * 底部对齐方式,left | center | right\n */\n footerAlign?: ThyFormGroupFooterAlign;\n\n /**\n * 确认后的回调事件\n */\n onOk?: () => Observable<boolean> | void;\n\n /**\n * 取消按钮的文案\n */\n cancelText?: string;\n\n /**\n * 取消后的回调事件\n */\n onCancel?: () => void;\n}\n\nexport const THY_CONFIRM_DEFAULT_OPTIONS = new InjectionToken<ThyConfirmConfig>('thy-confirm-default-options');\n\n/**\n * @deprecated\n */\nexport const THY_CONFIRM_DEFAULT_OPTIONS_VALUE = {\n title: '确认删除',\n okText: '确定',\n okType: 'danger',\n cancelText: '取消',\n footerAlign: 'left'\n};\n\nfunction useConfirmDefaultOptions() {\n const locale = injectLocale('dialog');\n return {\n title: locale().title,\n okText: locale().ok,\n okType: 'danger',\n cancelText: locale().cancel,\n footerAlign: 'left'\n };\n}\n\nexport const THY_CONFIRM_DEFAULT_OPTIONS_PROVIDER = {\n provide: THY_CONFIRM_DEFAULT_OPTIONS,\n useFactory: useConfirmDefaultOptions,\n deps: [ThyI18nService]\n};\n","import { Component, TemplateRef, OnInit, ElementRef, inject, input, output, contentChild, computed, Signal } from '@angular/core';\nimport { ThyDialog } from '../dialog.service';\nimport { ThyDialogContainer } from '../dialog-container.component';\nimport { ThyTranslate } from 'ngx-tethys/core';\nimport { ThyInternalDialogRef } from '../dialog-ref';\nimport { ThyAction } from 'ngx-tethys/action';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { coerceBooleanProperty } from 'ngx-tethys/util';\n\n/**\n * 模态框头部组件\n * @name thy-dialog-header\n * @order 40\n */\n@Component({\n selector: 'thy-dialog-header',\n templateUrl: './dialog-header.component.html',\n exportAs: 'thyDialogHeader',\n host: {\n class: 'dialog-header thy-dialog-header',\n '[class.thy-dialog-header-lg]': `thySize() === 'lg'`,\n '[class.thy-dialog-header-divided]': `thyDivided()`\n },\n imports: [NgTemplateOutlet, ThyIcon, ThyAction]\n})\nexport class ThyDialogHeader implements OnInit {\n private elementRef = inject(ElementRef);\n private dialog = inject(ThyDialog);\n private translate = inject(ThyTranslate);\n private dialogContainer: ThyDialogContainer | null = inject(ThyDialogContainer, { optional: true })!;\n\n /**\n * 自定义头部模板\n */\n public readonly headerTemplate = contentChild<TemplateRef<any>>('dialogHeader');\n\n /**\n * 标题\n */\n readonly thyTitle = input<string>();\n\n /**\n * 大小,只有大的详情页场景会使用 lg,左右 padding 缩小至 20px\n * @type lg | md\n */\n readonly thySize = input<'lg' | 'md'>('md');\n\n /**\n * 是否显示分割线\n */\n readonly thyDivided = input(false, { transform: coerceBooleanProperty });\n\n /**\n * 标题的多语言 Key\n */\n readonly thyTitleTranslationKey = input<string>();\n\n readonly title: Signal<string> = computed(() => {\n const title = this.thyTitle();\n const titleTranslationKey = this.thyTitleTranslationKey();\n return title || (titleTranslationKey && this.translate.instant(titleTranslationKey));\n });\n\n /**\n * 头部图标\n */\n readonly thyIcon = input<string>();\n\n /**\n * 关闭事件\n */\n readonly thyOnClose = output<Event | undefined>();\n\n ngOnInit() {\n if (!this.dialogContainer) {\n // When this directive is included in a dialog via TemplateRef (rather than being\n // in a Component), the ThyDialogContainerComponent isn't available via injection because embedded\n // views cannot be given a custom injector. Instead, we look up the ThyDialogContainerComponent by\n // ID. This must occur in `onInit`, as the ID binding for the dialog container won't\n // be resolved at constructor time.\n const dialogRef = this.dialog.getClosestDialog(this.elementRef.nativeElement) as ThyInternalDialogRef<any>;\n this.dialogContainer = dialogRef ? dialogRef.containerInstance : null;\n }\n\n // change in next microtask avoid throw ExpressionChangedAfterItHasBeenCheckedError\n // because sub component change parent's HostBinding property (ariaLabelledBy)\n Promise.resolve().then(() => {\n if (this.dialogContainer) {\n this.dialogContainer.ariaLabelledBy = this.title();\n }\n });\n }\n\n close(event?: Event) {\n this.thyOnClose.emit(event);\n this.dialog.close();\n }\n}\n","@if (headerTemplate()) {\n <template [ngTemplateOutlet]=\"headerTemplate()\"></template>\n} @else {\n <h3 class=\"dialog-title\"><thy-icon [thyIconName]=\"thyIcon()\"></thy-icon>{{ title() }}</h3>\n <a href=\"javascript:;\" class=\"mr-n2\" thyAction thyActionIcon=\"close\" (click)=\"close($event)\"></a>\n}\n","import { ThyFormDirective, ThyFormGroupFooterAlign, ThyFormGroupFooter } from 'ngx-tethys/form';\nimport { finalize } from 'rxjs/operators';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit, Signal, inject, input } from '@angular/core';\nimport { NgClass } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { ThyButton } from 'ngx-tethys/button';\nimport { ThyDialogBody } from '../body/dialog-body.component';\nimport { ThyConfirmConfig, THY_CONFIRM_DEFAULT_OPTIONS } from '../confirm.config';\nimport { ThyDialogRef } from '../dialog-ref';\nimport { ThyDialogHeader } from '../header/dialog-header.component';\nimport { injectLocale, ThyDialogLocale } from 'ngx-tethys/i18n';\n\n/**\n * @private\n */\n@Component({\n selector: 'thy-confirm-default',\n templateUrl: './confirm.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ThyDialogHeader, ThyDialogBody, FormsModule, ThyFormDirective, ThyFormGroupFooter, NgClass, ThyButton]\n})\nexport class ThyConfirm implements OnInit, OnDestroy {\n private dialogRef = inject<ThyDialogRef<ThyConfirm>>(ThyDialogRef);\n private changeDetectorRef = inject(ChangeDetectorRef);\n private defaultConfig = inject(THY_CONFIRM_DEFAULT_OPTIONS);\n private locale: Signal<ThyDialogLocale> = injectLocale('dialog');\n\n loading!: boolean;\n\n readonly options = input<ThyConfirmConfig>();\n\n public title: string | undefined;\n\n public content!: string;\n\n public okText: string | undefined;\n\n public okType: string | undefined;\n\n public cancelText: string | undefined;\n\n public okLoadingText: string | undefined;\n\n public footerAlign: ThyFormGroupFooterAlign | undefined;\n\n constructor() {\n this.defaultConfig = {\n ...{\n title: this.locale().title,\n okText: this.locale().ok,\n okType: 'danger',\n cancelText: this.locale().cancel,\n footerAlign: 'left'\n },\n ...this.defaultConfig\n };\n }\n\n ngOnInit() {\n this.defaultConfig = { ...this.defaultConfig, ...this.options() };\n this.title = this.defaultConfig.title;\n this.content = this.defaultConfig.content;\n this.okText = this.defaultConfig.okText;\n this.okType = this.defaultConfig.okType;\n this.cancelText = this.defaultConfig.cancelText;\n this.okLoadingText = this.defaultConfig.okLoadingText || this.okText;\n this.footerAlign = this.defaultConfig.footerAlign;\n }\n\n confirm() {\n this.loading = true;\n const result = this.options()!.onOk!();\n if (result && result!.subscribe!) {\n result\n .pipe(\n finalize(() => {\n this.loading = false;\n this.changeDetectorRef.markForCheck();\n })\n )\n .subscribe(success => {\n if (success) {\n this.close();\n }\n });\n } else {\n this.close();\n }\n }\n\n close() {\n this.options()?.onCancel?.();\n this.dialogRef.close();\n }\n\n ngOnDestroy() {}\n}\n","<thy-dialog-header [thyTitle]=\"title\" (thyOnClose)=\"close()\"> </thy-dialog-header>\n<thy-dialog-body class=\"thy-form\">\n <form thyForm name=\"thyConfirm\" thyLayout=\"vertical\">\n <div class=\"form-group\">\n <p [innerHTML]=\"content\"></p>\n </div>\n <thy-form-group-footer [thyAlign]=\"footerAlign\">\n <div class=\"thy-confirm-footer\" [ngClass]=\"'thy-confirm-footer-' + footerAlign\">\n <button [thyButton]=\"okType\" (click)=\"confirm()\" [thyLoading]=\"loading\" [thyLoadingText]=\"okLoadingText\">{{ okText }}</button>\n <button thyButton=\"link-secondary\" (click)=\"close()\" class=\"thy-confirm-cancel\">{{ cancelText }}</button>\n </div>\n </thy-form-group-footer>\n </form>\n</thy-dialog-body>\n","import { useHostRenderer } from '@tethys/cdk/dom';\nimport { Component, OnInit, TemplateRef, inject, input, contentChild, computed, WritableSignal, effect, Input } from '@angular/core';\n\nimport { THY_DIALOG_LAYOUT_CONFIG, ThyDialogFooterAlign } from '../dialog.config';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { coerceBooleanProperty } from 'ngx-tethys/util';\n\n/**\n * 模态框底部组件\n * @name thy-dialog-footer\n * @order 60\n */\n@Component({\n selector: 'thy-dialog-footer',\n templateUrl: './dialog-footer.component.html',\n // changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'thyDialogFooter',\n imports: [NgTemplateOutlet]\n})\nexport class ThyDialogFooter implements OnInit {\n private dialogLayoutConfig = inject(THY_DIALOG_LAYOUT_CONFIG);\n\n /**\n * 自定义弹出框底部的描述模板\n * @type TemplateRef\n */\n readonly description = contentChild<TemplateRef<any>>('description');\n\n /**\n * 底部是否有分割线,可全局配置默认值\n * @type boolean\n */\n readonly thyDivided = input(undefined, { transform: coerceBooleanProperty });\n\n divided = computed(() => {\n if (this.thyDivided() === undefined) {\n return this.dialogLayoutConfig.footerDivided;\n }\n return this.thyDivided();\n });\n\n /**\n * 对齐方式,可全局配置默认值\n * @type left | right | center\n */\n readonly thyAlign = input<ThyDialogFooterAlign>();\n\n readonly align = computed(() => (this.thyAlign() ? this.thyAlign() : this.dialogLayoutConfig.footerAlign));\n\n private hostRenderer = useHostRenderer();\n\n constructor() {}\n\n ngOnInit() {\n this.hostRenderer.updateClassByMap({\n 'dialog-footer': true,\n [`dialog-footer-actions-align-${this.align()}`]: true,\n 'dialog-footer-border-top': !!this.divided()\n });\n }\n}\n","<div class=\"dialog-footer-actions btn-pair\">\n <ng-content></ng-content>\n</div>\n@if (description()) {\n <div class=\"dialog-footer-description\">\n <ng-container [ngTemplateOutlet]=\"description()\"></ng-container>\n </div>\n}\n","import { OverlayModule } from '@angular/cdk/overlay';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ThyActionModule } from 'ngx-tethys/action';\nimport { ThyButtonModule } from 'ngx-tethys/button';\nimport { ThyFormModule } from 'ngx-tethys/form';\nimport { ThyIconModule } from 'ngx-tethys/icon';\nimport { ThySharedModule } from 'ngx-tethys/shared';\nimport { ThyDialogBody } from './body/dialog-body.component';\nimport { THY_CONFIRM_DEFAULT_OPTIONS_PROVIDER } from './confirm.config';\nimport { ThyConfirm } from './confirm/confirm.component';\nimport { THY_CONFIRM_COMPONENT_TOKEN } from './confirm/token';\nimport { ThyDialogContainer } from './dialog-container.component';\nimport { THY_DIALOG_DEFAULT_OPTIONS_PROVIDER, THY_DIALOG_LAYOUT_CONFIG_PROVIDER } from './dialog.config';\nimport { ThyDialog } from './dialog.service';\nimport { ThyDialogFooter } from './footer/dialog-footer.component';\nimport { ThyDialogHeader } from './header/dialog-header.component';\n\n@NgModule({\n imports: [\n CommonModule,\n ThySharedModule,\n PortalModule,\n OverlayModule,\n ThyButtonModule,\n ThyIconModule,\n ThyFormModule,\n FormsModule,\n ThyActionModule,\n ThyDialogContainer,\n ThyDialogHeader,\n ThyDialogBody,\n ThyDialogFooter,\n ThyConfirm\n ],\n providers: [\n ThyDialog,\n THY_DIALOG_DEFAULT_OPTIONS_PROVIDER,\n THY_CONFIRM_DEFAULT_OPTIONS_PROVIDER,\n THY_DIALOG_LAYOUT_CONFIG_PROVIDER,\n {\n provide: THY_CONFIRM_COMPONENT_TOKEN,\n useValue: ThyConfirm\n }\n ],\n exports: [ThyDialogContainer, ThyDialogHeader, ThyDialogBody, ThyDialogFooter]\n})\nexport class ThyDialogModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}
1
+ {"version":3,"file":"ngx-tethys-dialog.mjs","sources":["../../../src/dialog/confirm/token.ts","../../../src/dialog/dialog-animations.ts","../../../src/dialog/dialog.config.ts","../../../src/dialog/dialog.options.ts","../../../src/dialog/header/dialog-header.component.ts","../../../src/dialog/header/dialog-header.component.html","../../../src/dialog/dialog-container.component.ts","../../../src/dialog/dialog-ref.ts","../../../src/dialog/dialog.service.ts","../../../src/dialog/body/dialog-body.component.ts","../../../src/dialog/confirm.config.ts","../../../src/dialog/confirm/confirm.component.ts","../../../src/dialog/confirm/confirm.component.html","../../../src/dialog/footer/dialog-footer.component.ts","../../../src/dialog/footer/dialog-footer.component.html","../../../src/dialog/dialog.module.ts","../../../src/dialog/ngx-tethys-dialog.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport interface ThyConfirmAbstractComponent {\n okText: string;\n okType: string;\n cancelText: string;\n okLoadingText: string;\n}\n\nexport const THY_CONFIRM_COMPONENT_TOKEN = new InjectionToken<ThyConfirmAbstractComponent>('thy-confirm-component-token');\n","import { animate, state, style, transition, trigger, AnimationTriggerMetadata } from '@angular/animations';\n\nconst animationBody = [\n // Note: The `enter` animation transitions to `transform: none`, because for some reason\n // specifying the transform explicitly, causes IE both to blur the dialog content and\n // decimate the animation performance. Leaving it as `none` solves both issues. translate(-300px,-100px)\n state('void, exit', style({ opacity: 0, transform: 'scale(0.1)' })),\n state('enter', style({ transform: 'none' })),\n transition('* => enter', animate('200ms cubic-bezier(0, 0, 0.57, 1)', style({ transform: 'none', opacity: 1 }))),\n transition('* => exit', animate('150ms cubic-bezier(0.24, 0.18, 0.96, 0.52)', style({ transform: 'scale(0.3)', opacity: 0 })))\n];\n\n/**\n * Animations used by MatDialog.\n * @docs-private\n */\nexport const thyDialogAnimations: {\n readonly dialogContainer: AnimationTriggerMetadata;\n} = {\n dialogContainer: trigger('dialogContainer', animationBody)\n};\n\n// export const setAnimationStart\n","import { ThyAbstractOverlayConfig, ThyAbstractOverlayPosition } from 'ngx-tethys/core';\n\nimport { ScrollStrategy } from '@angular/cdk/overlay';\nimport { InjectionToken } from '@angular/core';\n\n/** Valid ARIA roles for a dialog element. */\nexport type ThyDialogRole = 'dialog' | 'alertdialog';\n\nexport interface ThyDialogHeaderIcon {\n name: string;\n color?: string;\n}\n\nexport interface ThyDialogHeaderConfig {\n title?: string;\n icon?: string | ThyDialogHeaderIcon;\n}\n\nexport enum ThyDialogSizes {\n lg = 'lg',\n /**\n * 已废弃,命名错误,请使用 superLg\n * @deprecated\n */\n supperLg = 'supper-lg',\n superLg = 'super-lg',\n maxLg = 'max-lg',\n md = 'md',\n sm = 'sm',\n full = 'full'\n}\n\n/**\n * 通过ThyDialog服务端打开模态框的配置\n * @description.en-us Configuration for opening a modal dialog with the ThyDialog service.\n * @public\n * @order 20\n */\nexport class ThyDialogConfig<TData = unknown> extends ThyAbstractOverlayConfig<TData> {\n /**\n * 模态框头部配置,设置后会在内容前显示默认头部\n * @description.en-us Dialog header config. When set, a default header will be rendered before the dialog content.\n */\n header?: ThyDialogHeaderConfig;\n\n /**\n * 对话框元素的 ARIA 角色\n * @description.en-us The ARIA role of the dialog element.\n */\n role?: ThyDialogRole = 'dialog';\n\n /**\n * 定位模态框的弹出位置\n * @description.en-us Position overrides.\n */\n position?: ThyAbstractOverlayPosition;\n\n /**\n * 模态框的大小,ThyDialogSizes: sm (400)、md (660)、lg (800)、maxLg (980)、superLg (94vw)、full (全屏)\n * @default md\n * @description.en-us Dialog size md, lg, sm\n */\n size?: ThyDialogSizes;\n\n /**\n * 用于模态框的滚动策略\n * @description.en-us Scroll strategy to be used for the dialog.\n */\n scrollStrategy?: ScrollStrategy;\n}\n\n/** Injection token that can be used to specify default dialog options. */\nexport const THY_DIALOG_DEFAULT_OPTIONS = new InjectionToken<ThyDialogConfig>('thy-dialog-default-options');\n\nexport const THY_DIALOG_DEFAULT_OPTIONS_PROVIDER = {\n provide: THY_DIALOG_DEFAULT_OPTIONS,\n useValue: {\n role: 'dialog',\n hasBackdrop: true,\n backdropClass: '',\n panelClass: '',\n backdropClosable: true,\n closeOnNavigation: true,\n autoFocus: true,\n restoreFocus: true,\n restoreFocusOptions: {\n preventScroll: true\n },\n hostClass: 'thy-dialog-content'\n }\n};\n\nexport type ThyDialogFooterAlign = 'left' | 'right' | 'center';\n\nexport class ThyDialogLayoutConfig {\n footerAlign?: ThyDialogFooterAlign;\n footerDivided?: boolean;\n}\n\nexport const THY_DIALOG_LAYOUT_CONFIG = new InjectionToken<ThyDialogLayoutConfig>('thy-dialog-layout-config');\n\nexport const THY_DIALOG_LAYOUT_CONFIG_PROVIDER = {\n provide: THY_DIALOG_LAYOUT_CONFIG,\n useValue: {\n footerAlign: 'left',\n footerDivided: false\n }\n};\n","import { ThyAbstractOverlayOptions } from 'ngx-tethys/core';\n\nexport const dialogAbstractOverlayOptions: ThyAbstractOverlayOptions = {\n name: 'dialog',\n animationEnabled: true,\n disposeWhenClose: true\n};\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, computed, contentChild, ElementRef, inject, input, OnInit, output, Signal, TemplateRef } from '@angular/core';\nimport { ThyAction } from 'ngx-tethys/action';\nimport { ThyTranslate } from 'ngx-tethys/core';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { coerceBooleanProperty } from 'ngx-tethys/util';\nimport { ThyDialogContainer } from '../dialog-container.component';\nimport { ThyInternalDialogRef } from '../dialog-ref';\nimport { ThyDialogHeaderIcon } from '../dialog.config';\nimport { ThyDialog } from '../dialog.service';\n\n/**\n * 模态框头部组件\n * @name thy-dialog-header\n * @order 40\n */\n@Component({\n selector: 'thy-dialog-header',\n templateUrl: './dialog-header.component.html',\n exportAs: 'thyDialogHeader',\n host: {\n class: 'dialog-header thy-dialog-header',\n '[class.thy-dialog-header-lg]': `thySize() === 'lg'`,\n '[class.thy-dialog-header-divided]': `thyDivided()`\n },\n imports: [NgTemplateOutlet, ThyIcon, ThyAction]\n})\nexport class ThyDialogHeader implements OnInit {\n private elementRef = inject(ElementRef);\n private dialog = inject(ThyDialog);\n private translate = inject(ThyTranslate);\n private dialogContainer: ThyDialogContainer | null = inject(ThyDialogContainer, { optional: true })!;\n\n /**\n * 自定义头部模板\n */\n public readonly headerTemplate = contentChild<TemplateRef<any>>('dialogHeader');\n\n /**\n * 标题\n */\n readonly thyTitle = input<string>();\n\n /**\n * 大小,只有大的详情页场景会使用 lg,左右 padding 缩小至 20px\n * @type lg | md\n */\n readonly thySize = input<'lg' | 'md'>('md');\n\n /**\n * 是否显示分割线\n */\n readonly thyDivided = input(false, { transform: coerceBooleanProperty });\n\n /**\n * 标题的多语言 Key\n */\n readonly thyTitleTranslationKey = input<string>();\n\n readonly title: Signal<string> = computed(() => {\n const title = this.thyTitle();\n const titleTranslationKey = this.thyTitleTranslationKey();\n return title || (titleTranslationKey && this.translate.instant(titleTranslationKey));\n });\n\n /**\n * 头部图标\n */\n readonly thyIcon = input<string | ThyDialogHeaderIcon>();\n\n readonly iconName: Signal<string> = computed(() => {\n const icon = this.thyIcon();\n return typeof icon === 'string' ? icon : icon?.name || '';\n });\n\n readonly iconColor: Signal<string | undefined> = computed(() => {\n const icon = this.thyIcon();\n return typeof icon === 'string' ? undefined : icon?.color;\n });\n\n /**\n * 关闭事件\n */\n readonly thyOnClose = output<Event | undefined>();\n\n ngOnInit() {\n if (!this.dialogContainer) {\n // When this directive is included in a dialog via TemplateRef (rather than being\n // in a Component), the ThyDialogContainerComponent isn't available via injection because embedded\n // views cannot be given a custom injector. Instead, we look up the ThyDialogContainerComponent by\n // ID. This must occur in `onInit`, as the ID binding for the dialog container won't\n // be resolved at constructor time.\n const dialogRef = this.dialog.getClosestDialog(this.elementRef.nativeElement) as ThyInternalDialogRef<any>;\n this.dialogContainer = dialogRef ? dialogRef.containerInstance : null;\n }\n\n // change in next microtask avoid throw ExpressionChangedAfterItHasBeenCheckedError\n // because sub component change parent's HostBinding property (ariaLabelledBy)\n Promise.resolve().then(() => {\n if (this.dialogContainer) {\n this.dialogContainer.ariaLabelledBy = this.title();\n }\n });\n }\n\n close(event?: Event) {\n this.thyOnClose.emit(event);\n this.dialog.close();\n }\n}\n","@if (headerTemplate()) {\n <template [ngTemplateOutlet]=\"headerTemplate()\"></template>\n} @else {\n <h3 class=\"dialog-title d-flex align-items-center\">\n @if (iconName()) {\n <thy-icon class=\"mr-2\" [thyIconName]=\"iconName()\" [style.color]=\"iconColor()\"></thy-icon>\n }\n <span>{{ title() }}</span>\n </h3>\n <a href=\"javascript:;\" class=\"mr-n2\" thyAction thyActionIcon=\"close\" (click)=\"close($event)\"></a>\n}\n","import { reqAnimFrame, ThyAbstractOverlayContainer, ThyClickPositioner, ThyPortalOutlet } from 'ngx-tethys/core';\nimport { Observable } from 'rxjs';\nimport { filter } from 'rxjs/operators';\n\nimport { AnimationEvent } from '@angular/animations';\nimport { FocusTrap, FocusTrapFactory } from '@angular/cdk/a11y';\nimport { PortalModule } from '@angular/cdk/portal';\n\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DOCUMENT,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostBinding,\n inject,\n NgZone,\n OnDestroy,\n Renderer2,\n ViewChild\n} from '@angular/core';\n\nimport { thyDialogAnimations } from './dialog-animations';\nimport { ThyDialogConfig } from './dialog.config';\nimport { dialogAbstractOverlayOptions } from './dialog.options';\nimport { ThyDialogHeader } from './header/dialog-header.component';\n\n/**\n * @private\n */\n@Component({\n selector: 'thy-dialog-container',\n template: `\n @if (config.header?.title) {\n <thy-dialog-header [thyTitle]=\"config.header?.title\" [thyIcon]=\"config.header?.icon\"></thy-dialog-header>\n }\n <ng-template thyPortalOutlet></ng-template>\n `,\n // Using OnPush for dialogs caused some sync issues, e.g. custom ngModel can't to detect changes\n // Disabled until we can track them down.\n changeDetection: ChangeDetectionStrategy.Default,\n animations: [thyDialogAnimations.dialogContainer],\n host: {\n class: 'thy-dialog-container',\n tabindex: '-1',\n 'aria-modal': 'true',\n '[attr.id]': 'id',\n '[attr.role]': 'config.role',\n '[attr.aria-labelledby]': 'config.ariaLabel ? null : ariaLabelledBy',\n '[attr.aria-label]': 'config.ariaLabel',\n '[attr.aria-describedby]': 'config.ariaDescribedBy || null',\n '[@dialogContainer]': 'animationState',\n '(@dialogContainer.start)': 'onAnimationStart($event)',\n '(@dialogContainer.done)': 'onAnimationDone($event)'\n },\n imports: [PortalModule, ThyPortalOutlet, forwardRef(() => ThyDialogHeader)]\n})\nexport class ThyDialogContainer extends ThyAbstractOverlayContainer implements OnDestroy {\n private elementRef = inject(ElementRef);\n private document = inject(DOCUMENT);\n config = inject(ThyDialogConfig);\n private clickPositioner = inject(ThyClickPositioner);\n private focusTrapFactory = inject(FocusTrapFactory);\n private ngZone = inject(NgZone);\n private renderer = inject(Renderer2);\n\n animationOpeningDone!: Observable<AnimationEvent>;\n animationClosingDone!: Observable<AnimationEvent>;\n\n @ViewChild(ThyPortalOutlet, { static: true })\n portalOutlet!: ThyPortalOutlet;\n\n @HostBinding(`attr.id`)\n id!: string;\n\n /** State of the dialog animation. */\n animationState: 'void' | 'enter' | 'exit' = 'void';\n\n /** Emits when an animation state changes. */\n animationStateChanged = new EventEmitter<AnimationEvent>();\n\n /** ID of the element that should be considered as the dialog's label. */\n ariaLabelledBy: string | null = null;\n\n /** Element that was focused before the dialog was opened. Save this to restore upon close. */\n private elementFocusedBeforeDialogWasOpened: HTMLElement | null = null;\n\n /** The class that traps and manages focus within the dialog. */\n private focusTrap!: FocusTrap;\n\n private savePreviouslyFocusedElement() {\n if (this.document) {\n this.elementFocusedBeforeDialogWasOpened = this.document.activeElement as HTMLElement;\n\n // Note that there is no focus method when rendering on the server.\n if (this.elementRef.nativeElement.focus) {\n // Note: this is being run outside of the Angular zone because `element.focus()` doesn't require\n // running change detection.\n this.ngZone.runOutsideAngular(() =>\n // Move focus onto the dialog immediately in order to prevent the user from accidentally\n // opening multiple dialogs at the same time. Needs to be async, because the element\n // may not be focusable immediately.\n\n // Note: `element.focus()` causes re-layout and this may lead to frame drop on slower devices.\n // https://gist.github.com/paulirish/5d52fb081b3570c81e3a#setting-focus\n // `setTimeout` is a macrotask and macrotasks are executed within the current rendering frame.\n // Animation tasks are executed within the next rendering frame.\n reqAnimFrame(() => this.elementRef.nativeElement.focus())\n );\n }\n }\n }\n\n /** Moves the focus inside the focus trap. */\n private trapFocus() {\n const element = this.elementRef.nativeElement;\n\n if (!this.focusTrap) {\n this.focusTrap = this.focusTrapFactory.create(element);\n }\n\n // If we were to attempt to focus immediately, then the content of the dialog would not yet be\n // ready in instances where change detection has to run first. To deal with this, we simply\n // wait for the microtask queue to be empty.\n if (this.config.autoFocus) {\n this.focusTrap.focusInitialElementWhenReady();\n } else {\n const activeElement = this.document.activeElement;\n\n // Otherwise ensure that focus is on the dialog container. It's possible that a different\n // component tried to move focus while the open animation was running. See:\n // https://github.com/angular/components/issues/16215. Note that we only want to do this\n // if the focus isn't inside the dialog already, because it's possible that the consumer\n // turned off `autoFocus` in order to move focus themselves.\n if (activeElement !== element && !element.contains(activeElement)) {\n element.focus();\n }\n }\n }\n\n private restoreFocus() {\n const toFocus = this.elementFocusedBeforeDialogWasOpened;\n\n // We need the extra check, because IE can set the `activeElement` to null in some cases.\n if (this.config.restoreFocus && toFocus && typeof toFocus.focus === 'function') {\n toFocus.focus(this.config.restoreFocusOptions);\n }\n\n if (this.focusTrap) {\n this.focusTrap.destroy();\n }\n }\n\n private setTransformOrigin() {\n this.clickPositioner.runTaskUseLastPosition(lastPosition => {\n if (lastPosition) {\n const containerElement: HTMLElement = this.elementRef.nativeElement;\n const transformOrigin = `${lastPosition.x - containerElement.offsetLeft}px ${\n lastPosition.y - containerElement.offsetTop\n }px 0px`;\n containerElement.style.transformOrigin = transformOrigin;\n // 手动修改动画状态为从 void 到 enter, 开启动画\n }\n this.animationState = 'enter';\n this.changeDetectorRef.markForCheck();\n });\n }\n\n constructor() {\n const changeDetectorRef = inject(ChangeDetectorRef);\n\n super(dialogAbstractOverlayOptions, changeDetectorRef);\n this.animationOpeningDone = this.animationStateChanged.pipe(\n filter((event: AnimationEvent) => {\n return event.phaseName === 'done' && event.toState === 'void';\n })\n );\n this.animationClosingDone = this.animationStateChanged.pipe(\n filter((event: AnimationEvent) => {\n return event.phaseName === 'done' && event.toState === 'exit';\n })\n );\n /* Prohibit operations on elements inside the container during animation execution */\n this.animationStateChanged\n .pipe(\n filter((event: AnimationEvent) => {\n return event.phaseName === 'start' && event.toState === 'exit';\n })\n )\n .subscribe(() => {\n this.renderer.setStyle(this.elementRef.nativeElement, 'pointer-events', 'none');\n });\n }\n\n beforeAttachPortal(): void {\n this.setTransformOrigin();\n this.savePreviouslyFocusedElement();\n }\n\n /** Callback, invoked whenever an animation on the host completes. */\n onAnimationDone(event: AnimationEvent) {\n if (event.toState === 'void') {\n this.trapFocus();\n } else if (event.toState === 'exit') {\n this.restoreFocus();\n }\n this.animationStateChanged.emit(event);\n }\n\n /** Callback, invoked when an animation on the host starts. */\n onAnimationStart(event: AnimationEvent) {\n this.animationStateChanged.emit(event);\n }\n\n ngOnDestroy() {\n super.destroy();\n }\n}\n","import { GlobalPositionStrategy, OverlayRef } from '@angular/cdk/overlay';\nimport {\n ThyAbstractInternalOverlayRef,\n ThyAbstractOverlayOptions,\n ThyAbstractOverlayPosition,\n ThyAbstractOverlayRef\n} from 'ngx-tethys/core';\n\nimport { ThyDialogContainer } from './dialog-container.component';\nimport { ThyDialogConfig } from './dialog.config';\nimport { dialogAbstractOverlayOptions } from './dialog.options';\n\n/**\n * @publicApi\n * @order 30\n */\nexport interface ThyAbstractDialog {\n toTop(id: string): void;\n}\n\nexport abstract class ThyDialogRef<T, TResult = unknown> extends ThyAbstractOverlayRef<T, ThyDialogContainer, TResult> {}\n\nexport class ThyInternalDialogRef<T, TResult = unknown> extends ThyAbstractInternalOverlayRef<T, ThyDialogContainer, TResult> {\n thyDialog!: ThyAbstractDialog;\n\n protected get options(): ThyAbstractOverlayOptions {\n return dialogAbstractOverlayOptions;\n }\n\n constructor() {\n super();\n }\n\n override initialize(\n overlayRef: OverlayRef,\n containerInstance: ThyDialogContainer,\n config: ThyDialogConfig<T>,\n service: ThyAbstractDialog\n ): void {\n super.initialize(overlayRef, containerInstance, config);\n this.thyDialog = service;\n }\n\n /**\n * Updates the dialog's position.\n * @param position New dialog position.\n */\n updatePosition(position?: ThyAbstractOverlayPosition): this {\n this.updateGlobalPosition(position);\n return this;\n }\n\n /**\n * Updates the dialog's width and height.\n * @param width New width of the dialog.\n * @param height New height of the dialog.\n */\n updateSizeAndPosition(width: string = '', height: string = '', position?: ThyAbstractOverlayPosition): this {\n (this.getPositionStrategy() as GlobalPositionStrategy).width(width).height(height);\n this.updatePosition(position);\n return this;\n }\n\n /**\n * Update dialog to top\n */\n toTop() {\n this.thyDialog.toTop(this.id);\n }\n}\n","import { ThyAbstractOverlayRef, ThyAbstractOverlayService, ThyClickPositioner } from 'ngx-tethys/core';\nimport { of } from 'rxjs';\n\nimport { Directionality } from '@angular/cdk/bidi';\nimport { Overlay, OverlayConfig, OverlayContainer, OverlayKeyboardDispatcher, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal, ComponentType } from '@angular/cdk/portal';\nimport { Injectable, Injector, OnDestroy, StaticProvider, TemplateRef, inject } from '@angular/core';\n\nimport { isString } from 'ngx-tethys/util';\nimport { ThyConfirmConfig } from './confirm.config';\nimport { THY_CONFIRM_COMPONENT_TOKEN, ThyConfirmAbstractComponent } from './confirm/token';\nimport { ThyDialogContainer } from './dialog-container.component';\nimport { ThyDialogRef, ThyInternalDialogRef } from './dialog-ref';\nimport { THY_DIALOG_DEFAULT_OPTIONS, ThyDialogConfig, ThyDialogSizes } from './dialog.config';\nimport { dialogAbstractOverlayOptions } from './dialog.options';\n\n/**\n * @public\n * @order 10\n */\n@Injectable()\nexport class ThyDialog extends ThyAbstractOverlayService<ThyDialogConfig, ThyDialogContainer> implements OnDestroy {\n private confirmComponentType = inject<ComponentType<ThyConfirmAbstractComponent>>(THY_CONFIRM_COMPONENT_TOKEN);\n\n private overlayKeyboardDispatcher = inject(OverlayKeyboardDispatcher);\n\n private overlayContainer = inject(OverlayContainer);\n\n protected buildOverlayConfig(config: ThyDialogConfig<any>): OverlayConfig {\n const size = config.size || ThyDialogSizes.md;\n const overlayConfig = this.buildBaseOverlayConfig(config, [`dialog-${size}`]);\n overlayConfig.positionStrategy = this.overlay.position().global();\n overlayConfig.scrollStrategy = config.scrollStrategy || this.overlay.scrollStrategies.block();\n return overlayConfig;\n }\n\n protected attachOverlayContainer(overlay: OverlayRef, config: ThyDialogConfig<any>): ThyDialogContainer {\n const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n const injector = Injector.create({\n parent: userInjector || this.injector,\n providers: [{ provide: ThyDialogConfig, useValue: config }]\n });\n const containerPortal = new ComponentPortal(ThyDialogContainer, config.viewContainerRef, injector);\n const containerRef = overlay.attach<ThyDialogContainer>(containerPortal);\n\n return containerRef.instance;\n }\n\n protected createAbstractOverlayRef<T, TResult>(\n overlayRef: OverlayRef,\n containerInstance: ThyDialogContainer,\n config: ThyDialogConfig<any>\n ): ThyAbstractOverlayRef<T, ThyDialogContainer, TResult> {\n const dialogRef = new ThyInternalDialogRef<T, TResult>();\n dialogRef.initialize(overlayRef, containerInstance, config, this);\n return dialogRef;\n }\n\n protected createInjectorProviders<T>(\n dialogRef: ThyDialogRef<T>, dialogContainer: ThyDialogContainer\n ): StaticProvider[] {\n return [\n { provide: ThyDialogContainer, useValue: dialogContainer },\n {\n provide: ThyDialogRef,\n useValue: dialogRef\n }\n ];\n }\n\n constructor() {\n const overlay = inject(Overlay);\n const injector = inject(Injector);\n const defaultConfig = inject(THY_DIALOG_DEFAULT_OPTIONS, { optional: true })!;\n const clickPositioner = inject(ThyClickPositioner);\n\n super(dialogAbstractOverlayOptions, overlay, injector, defaultConfig);\n clickPositioner.initialize();\n }\n\n /**\n * 打开 Dialog\n */\n open<T, TData = unknown, TResult = unknown>(\n componentOrTemplateRef: ComponentType<T> | TemplateRef<T>,\n config?: ThyDialogConfig<TData>\n ): ThyDialogRef<T, TResult> {\n const dialogRef = this.openOverlay(componentOrTemplateRef, config);\n const dialogRefInternal = dialogRef as ThyInternalDialogRef<T, TResult>;\n dialogRefInternal.updateSizeAndPosition(\n dialogRef.containerInstance.config.width,\n dialogRef.containerInstance.config.height,\n dialogRef.containerInstance.config.position\n );\n return dialogRef as ThyDialogRef<T, TResult>;\n }\n\n /**\n * 打开 Confirm\n */\n confirm(options: ThyConfirmConfig) {\n return this.open(this.confirmComponentType, {\n initialState: {\n options: options\n }\n });\n }\n\n /**\n * 根据 id 获取 Dialog\n */\n getDialogById(id: string): ThyDialogRef<any> | undefined {\n return this.getAbstractOverlayById(id) as ThyDialogRef<any> | undefined;\n }\n\n /**\n * 获取所有打开的 Dialog\n */\n getOpenedDialogs(): ThyDialogRef<any>[] {\n return this.getAbstractOverlays();\n }\n\n /**\n * @description.en-us Finds the closest ThyDialogRef to an element by looking at the DOM.\n * @description 获取与指定元素最接近的 ThyDialogRef\n */\n getClosestDialog(element: HTMLElement): ThyDialogRef<any> | undefined | null {\n let parent: HTMLElement | null = element.parentElement;\n\n while (parent && !parent.classList.contains('thy-dialog-container')) {\n parent = parent.parentElement;\n }\n if (parent && parent.id) {\n return this.getDialogById(parent.id);\n }\n return null;\n }\n\n /**\n * Update dialog to top\n */\n toTop(idOrOverlayRef: string | ThyDialogRef<unknown, ThyDialogContainer>) {\n let dialogRef: ThyAbstractOverlayRef<unknown, ThyDialogContainer> | undefined;\n if (isString(idOrOverlayRef)) {\n dialogRef = this.openedOverlays.find(item => item.id === idOrOverlayRef);\n } else {\n dialogRef = idOrOverlayRef;\n }\n if (dialogRef) {\n const overlayRef = dialogRef.getOverlayRef();\n const containerElement = this.overlayContainer.getContainerElement();\n containerElement.appendChild(overlayRef.backdropElement!);\n containerElement.appendChild(overlayRef.hostElement);\n this.overlayKeyboardDispatcher.remove(overlayRef);\n this.overlayKeyboardDispatcher.add(overlayRef);\n this.openedOverlays = [...(this.openedOverlays || []).filter(item => item.id !== dialogRef?.id), dialogRef];\n }\n }\n\n ngOnDestroy() {\n this.dispose();\n }\n}\n","import { Component, Input, OnInit, HostBinding, inject, input } from '@angular/core';\nimport { ThyDialog } from '../dialog.service';\nimport { CdkScrollable } from '@angular/cdk/scrolling';\nimport { coerceBooleanProperty } from 'ngx-tethys/util';\n\n/**\n * 模态框的主体组件\n * @name thy-dialog-body\n * @order 50\n */\n@Component({\n selector: 'thy-dialog-body',\n template: '<ng-content></ng-content>',\n // changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'thyDialogBody',\n hostDirectives: [CdkScrollable],\n host: {\n class: 'dialog-body',\n '[class.dialog-body-clear-padding]': 'thyClearPadding()'\n }\n})\nexport class ThyDialogBody implements OnInit {\n private dialog = inject(ThyDialog);\n /**\n * 清除间距\n */\n readonly thyClearPadding = input(false, { transform: coerceBooleanProperty });\n\n ngOnInit() {}\n}\n","import { InjectionToken } from '@angular/core';\nimport { ThyFormGroupFooterAlign } from 'ngx-tethys/form';\nimport { injectLocale, ThyI18nService } from 'ngx-tethys/i18n';\nimport { Observable } from 'rxjs';\n\n/**\n * 确认框配置\n * @public\n * @order 70\n */\nexport interface ThyConfirmConfig {\n /**\n * 标题\n */\n title?: string;\n\n /**\n * 提示内容\n */\n content: string;\n\n /**\n * 确认按钮的文案\n */\n okText?: string;\n\n /**\n * 确认按钮的类型,primary | danger\n */\n okType?: 'primary' | 'danger';\n\n /**\n * 确认按钮处于提交状态时的文案\n */\n okLoadingText?: string;\n\n /**\n * 底部对齐方式,left | center | right\n */\n footerAlign?: ThyFormGroupFooterAlign;\n\n /**\n * 确认后的回调事件\n */\n onOk?: () => Observable<boolean> | void;\n\n /**\n * 取消按钮的文案\n */\n cancelText?: string;\n\n /**\n * 取消后的回调事件\n */\n onCancel?: () => void;\n}\n\nexport const THY_CONFIRM_DEFAULT_OPTIONS = new InjectionToken<ThyConfirmConfig>('thy-confirm-default-options');\n\n/**\n * @deprecated\n */\nexport const THY_CONFIRM_DEFAULT_OPTIONS_VALUE = {\n title: '确认删除',\n okText: '确定',\n okType: 'danger',\n cancelText: '取消',\n footerAlign: 'left'\n};\n\nfunction useConfirmDefaultOptions() {\n const locale = injectLocale('dialog');\n return {\n title: locale().title,\n okText: locale().ok,\n okType: 'danger',\n cancelText: locale().cancel,\n footerAlign: 'left'\n };\n}\n\nexport const THY_CONFIRM_DEFAULT_OPTIONS_PROVIDER = {\n provide: THY_CONFIRM_DEFAULT_OPTIONS,\n useFactory: useConfirmDefaultOptions,\n deps: [ThyI18nService]\n};\n","import { ThyFormDirective, ThyFormGroupFooterAlign, ThyFormGroupFooter } from 'ngx-tethys/form';\nimport { finalize } from 'rxjs/operators';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit, Signal, inject, input } from '@angular/core';\nimport { NgClass } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { ThyButton } from 'ngx-tethys/button';\nimport { ThyDialogBody } from '../body/dialog-body.component';\nimport { ThyConfirmConfig, THY_CONFIRM_DEFAULT_OPTIONS } from '../confirm.config';\nimport { ThyDialogRef } from '../dialog-ref';\nimport { ThyDialogHeader } from '../header/dialog-header.component';\nimport { injectLocale, ThyDialogLocale } from 'ngx-tethys/i18n';\n\n/**\n * @private\n */\n@Component({\n selector: 'thy-confirm-default',\n templateUrl: './confirm.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ThyDialogHeader, ThyDialogBody, FormsModule, ThyFormDirective, ThyFormGroupFooter, NgClass, ThyButton]\n})\nexport class ThyConfirm implements OnInit, OnDestroy {\n private dialogRef = inject<ThyDialogRef<ThyConfirm>>(ThyDialogRef);\n private changeDetectorRef = inject(ChangeDetectorRef);\n private defaultConfig = inject(THY_CONFIRM_DEFAULT_OPTIONS);\n private locale: Signal<ThyDialogLocale> = injectLocale('dialog');\n\n loading!: boolean;\n\n readonly options = input<ThyConfirmConfig>();\n\n public title: string | undefined;\n\n public content!: string;\n\n public okText: string | undefined;\n\n public okType: string | undefined;\n\n public cancelText: string | undefined;\n\n public okLoadingText: string | undefined;\n\n public footerAlign: ThyFormGroupFooterAlign | undefined;\n\n constructor() {\n this.defaultConfig = {\n ...{\n title: this.locale().title,\n okText: this.locale().ok,\n okType: 'danger',\n cancelText: this.locale().cancel,\n footerAlign: 'left'\n },\n ...this.defaultConfig\n };\n }\n\n ngOnInit() {\n this.defaultConfig = { ...this.defaultConfig, ...this.options() };\n this.title = this.defaultConfig.title;\n this.content = this.defaultConfig.content;\n this.okText = this.defaultConfig.okText;\n this.okType = this.defaultConfig.okType;\n this.cancelText = this.defaultConfig.cancelText;\n this.okLoadingText = this.defaultConfig.okLoadingText || this.okText;\n this.footerAlign = this.defaultConfig.footerAlign;\n }\n\n confirm() {\n this.loading = true;\n const result = this.options()!.onOk!();\n if (result && result!.subscribe!) {\n result\n .pipe(\n finalize(() => {\n this.loading = false;\n this.changeDetectorRef.markForCheck();\n })\n )\n .subscribe(success => {\n if (success) {\n this.close();\n }\n });\n } else {\n this.close();\n }\n }\n\n close() {\n this.options()?.onCancel?.();\n this.dialogRef.close();\n }\n\n ngOnDestroy() {}\n}\n","<thy-dialog-header [thyTitle]=\"title\" (thyOnClose)=\"close()\"> </thy-dialog-header>\n<thy-dialog-body class=\"thy-form\">\n <form thyForm name=\"thyConfirm\" thyLayout=\"vertical\">\n <div class=\"form-group\">\n <p [innerHTML]=\"content\"></p>\n </div>\n <thy-form-group-footer [thyAlign]=\"footerAlign\">\n <div class=\"thy-confirm-footer\" [ngClass]=\"'thy-confirm-footer-' + footerAlign\">\n <button [thyButton]=\"okType\" (click)=\"confirm()\" [thyLoading]=\"loading\" [thyLoadingText]=\"okLoadingText\">{{ okText }}</button>\n <button thyButton=\"link-secondary\" (click)=\"close()\" class=\"thy-confirm-cancel\">{{ cancelText }}</button>\n </div>\n </thy-form-group-footer>\n </form>\n</thy-dialog-body>\n","import { useHostRenderer } from '@tethys/cdk/dom';\nimport { Component, OnInit, TemplateRef, inject, input, contentChild, computed, WritableSignal, effect, Input } from '@angular/core';\n\nimport { THY_DIALOG_LAYOUT_CONFIG, ThyDialogFooterAlign } from '../dialog.config';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { coerceBooleanProperty } from 'ngx-tethys/util';\n\n/**\n * 模态框底部组件\n * @name thy-dialog-footer\n * @order 60\n */\n@Component({\n selector: 'thy-dialog-footer',\n templateUrl: './dialog-footer.component.html',\n // changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'thyDialogFooter',\n imports: [NgTemplateOutlet]\n})\nexport class ThyDialogFooter implements OnInit {\n private dialogLayoutConfig = inject(THY_DIALOG_LAYOUT_CONFIG);\n\n /**\n * 自定义弹出框底部的描述模板\n * @type TemplateRef\n */\n readonly description = contentChild<TemplateRef<any>>('description');\n\n /**\n * 底部是否有分割线,可全局配置默认值\n * @type boolean\n */\n readonly thyDivided = input(undefined, { transform: coerceBooleanProperty });\n\n divided = computed(() => {\n if (this.thyDivided() === undefined) {\n return this.dialogLayoutConfig.footerDivided;\n }\n return this.thyDivided();\n });\n\n /**\n * 对齐方式,可全局配置默认值\n * @type left | right | center\n */\n readonly thyAlign = input<ThyDialogFooterAlign>();\n\n readonly align = computed(() => (this.thyAlign() ? this.thyAlign() : this.dialogLayoutConfig.footerAlign));\n\n private hostRenderer = useHostRenderer();\n\n constructor() {}\n\n ngOnInit() {\n this.hostRenderer.updateClassByMap({\n 'dialog-footer': true,\n [`dialog-footer-actions-align-${this.align()}`]: true,\n 'dialog-footer-border-top': !!this.divided()\n });\n }\n}\n","<div class=\"dialog-footer-actions btn-pair\">\n <ng-content></ng-content>\n</div>\n@if (description()) {\n <div class=\"dialog-footer-description\">\n <ng-container [ngTemplateOutlet]=\"description()\"></ng-container>\n </div>\n}\n","import { OverlayModule } from '@angular/cdk/overlay';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ThyActionModule } from 'ngx-tethys/action';\nimport { ThyButtonModule } from 'ngx-tethys/button';\nimport { ThyFormModule } from 'ngx-tethys/form';\nimport { ThyIconModule } from 'ngx-tethys/icon';\nimport { ThySharedModule } from 'ngx-tethys/shared';\nimport { ThyDialogBody } from './body/dialog-body.component';\nimport { THY_CONFIRM_DEFAULT_OPTIONS_PROVIDER } from './confirm.config';\nimport { ThyConfirm } from './confirm/confirm.component';\nimport { THY_CONFIRM_COMPONENT_TOKEN } from './confirm/token';\nimport { ThyDialogContainer } from './dialog-container.component';\nimport { THY_DIALOG_DEFAULT_OPTIONS_PROVIDER, THY_DIALOG_LAYOUT_CONFIG_PROVIDER } from './dialog.config';\nimport { ThyDialog } from './dialog.service';\nimport { ThyDialogFooter } from './footer/dialog-footer.component';\nimport { ThyDialogHeader } from './header/dialog-header.component';\n\n@NgModule({\n imports: [\n CommonModule,\n ThySharedModule,\n PortalModule,\n OverlayModule,\n ThyButtonModule,\n ThyIconModule,\n ThyFormModule,\n FormsModule,\n ThyActionModule,\n ThyDialogContainer,\n ThyDialogHeader,\n ThyDialogBody,\n ThyDialogFooter,\n ThyConfirm\n ],\n providers: [\n ThyDialog,\n THY_DIALOG_DEFAULT_OPTIONS_PROVIDER,\n THY_CONFIRM_DEFAULT_OPTIONS_PROVIDER,\n THY_DIALOG_LAYOUT_CONFIG_PROVIDER,\n {\n provide: THY_CONFIRM_COMPONENT_TOKEN,\n useValue: ThyConfirm\n }\n ],\n exports: [ThyDialogContainer, ThyDialogHeader, ThyDialogBody, ThyDialogFooter]\n})\nexport class ThyDialogModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}
@@ -623,7 +623,7 @@ class ThyNav {
623
623
  }
624
624
  }
625
625
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: ThyNav, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
626
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: ThyNav, isStandalone: true, selector: "thy-nav", inputs: { thyType: { classPropertyName: "thyType", publicName: "thyType", isSignal: true, isRequired: false, transformFunction: null }, thySize: { classPropertyName: "thySize", publicName: "thySize", isSignal: true, isRequired: false, transformFunction: null }, thyHorizontal: { classPropertyName: "thyHorizontal", publicName: "thyHorizontal", isSignal: true, isRequired: false, transformFunction: null }, thyVertical: { classPropertyName: "thyVertical", publicName: "thyVertical", isSignal: true, isRequired: false, transformFunction: null }, thyFill: { classPropertyName: "thyFill", publicName: "thyFill", isSignal: true, isRequired: false, transformFunction: null }, thyResponsive: { classPropertyName: "thyResponsive", publicName: "thyResponsive", isSignal: true, isRequired: false, transformFunction: null }, thyPauseReCalculate: { classPropertyName: "thyPauseReCalculate", publicName: "thyPauseReCalculate", isSignal: true, isRequired: false, transformFunction: null }, thyInsideClosable: { classPropertyName: "thyInsideClosable", publicName: "thyInsideClosable", isSignal: true, isRequired: false, transformFunction: null }, thyPopoverOptions: { classPropertyName: "thyPopoverOptions", publicName: "thyPopoverOptions", isSignal: true, isRequired: false, transformFunction: null }, thyExtra: { classPropertyName: "thyExtra", publicName: "thyExtra", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.thy-nav": "true", "class.thy-nav--vertical": "thyVertical()", "class.thy-nav--fill": "thyFill()" } }, queries: [{ propertyName: "links", predicate: ThyNavItemDirective, descendants: true, isSignal: true }, { propertyName: "routers", predicate: RouterLinkActive, descendants: true, isSignal: true }, { propertyName: "moreOperation", first: true, predicate: ["more"], descendants: true, isSignal: true }, { propertyName: "morePopover", first: true, predicate: ["morePopover"], descendants: true, isSignal: true }, { propertyName: "extra", first: true, predicate: ["extra"], descendants: true, isSignal: true }], viewQueries: [{ propertyName: "defaultMoreOperation", first: true, predicate: ["moreOperationContainer"], descendants: true, isSignal: true }, { propertyName: "inkBar", first: true, predicate: ThyNavInkBarDirective, descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"thy-nav-list\" [ngClass]=\"horizontal() ? 'justify-content-' + horizontal() : ''\" #navList>\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n @if (thyResponsive()) {\n <a\n href=\"javascript:;\"\n class=\"thy-nav-more-container\"\n [class.d-none]=\"!showMore()\"\n [class.invisible]=\"!initialized()\"\n #moreOperationContainer\n thyNavLink\n [thyNavItemActive]=\"moreActive()\"\n (click)=\"openMoreMenu($event, navListPopover)\">\n @if (moreOperation()) {\n <ng-container [ngTemplateOutlet]=\"moreOperation()\"></ng-container>\n } @else {\n {{ locale().more }}\n <thy-icon thyIconName=\"angle-down\" class=\"thy-nav-more-icon\"></thy-icon>\n }\n </a>\n }\n @if (thyExtra() || extra()) {\n <div class=\"thy-nav-extra\">\n <ng-container [ngTemplateOutlet]=\"thyExtra() || extra()\"></ng-container>\n </div>\n }\n <thy-nav-ink-bar [showInkBar]=\"showInkBar()\" [isVertical]=\"thyVertical()\"></thy-nav-ink-bar>\n</div>\n\n<ng-template #navListPopover>\n @if (morePopover()) {\n <ng-container [ngTemplateOutlet]=\"morePopover()\" [ngTemplateOutletContext]=\"{ $implicit: hiddenItems() }\"></ng-container>\n } @else {\n <thy-dropdown-menu thyImmediateRender>\n @for (item of hiddenItems(); track $index) {\n <span\n class=\"thy-nav-item-more\"\n thyDropdownMenuItem\n [thyDropdownMenuItemActive]=\"item.isActive()\"\n (click)=\"navItemClick(item)\"\n [innerHTML]=\"item.elementRef.nativeElement.innerHTML | bypassSecurityTrustHtml\"></span>\n }\n </thy-dropdown-menu>\n }\n</ng-template>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: ThyNavItemDirective, selector: "[thyNavLink],[thyNavItem]", inputs: ["id", "thyNavItemActive", "thyNavLinkActive", "thyNavItemDisabled"] }, { kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "directive", type: ThyNavInkBarDirective, selector: "thy-nav-ink-bar, [thyNavInkBar]", inputs: ["isVertical", "showInkBar"] }, { kind: "component", type: ThyDropdownMenuComponent, selector: "thy-dropdown-menu", inputs: ["thyWidth", "thyImmediateRender"] }, { kind: "directive", type: ThyDropdownMenuItemDirective, selector: "[thyDropdownMenuItem]", inputs: ["thyType", "thyDisabled"] }, { kind: "directive", type: ThyDropdownMenuItemActiveDirective, selector: "[thyDropdownMenuItemActive]", inputs: ["thyDropdownMenuItemActive"] }, { kind: "pipe", type: BypassSecurityTrustHtmlPipe, name: "bypassSecurityTrustHtml" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
626
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: ThyNav, isStandalone: true, selector: "thy-nav", inputs: { thyType: { classPropertyName: "thyType", publicName: "thyType", isSignal: true, isRequired: false, transformFunction: null }, thySize: { classPropertyName: "thySize", publicName: "thySize", isSignal: true, isRequired: false, transformFunction: null }, thyHorizontal: { classPropertyName: "thyHorizontal", publicName: "thyHorizontal", isSignal: true, isRequired: false, transformFunction: null }, thyVertical: { classPropertyName: "thyVertical", publicName: "thyVertical", isSignal: true, isRequired: false, transformFunction: null }, thyFill: { classPropertyName: "thyFill", publicName: "thyFill", isSignal: true, isRequired: false, transformFunction: null }, thyResponsive: { classPropertyName: "thyResponsive", publicName: "thyResponsive", isSignal: true, isRequired: false, transformFunction: null }, thyPauseReCalculate: { classPropertyName: "thyPauseReCalculate", publicName: "thyPauseReCalculate", isSignal: true, isRequired: false, transformFunction: null }, thyInsideClosable: { classPropertyName: "thyInsideClosable", publicName: "thyInsideClosable", isSignal: true, isRequired: false, transformFunction: null }, thyPopoverOptions: { classPropertyName: "thyPopoverOptions", publicName: "thyPopoverOptions", isSignal: true, isRequired: false, transformFunction: null }, thyExtra: { classPropertyName: "thyExtra", publicName: "thyExtra", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.thy-nav": "true", "class.thy-nav--vertical": "thyVertical()", "class.thy-nav--fill": "thyFill()" } }, queries: [{ propertyName: "links", predicate: ThyNavItemDirective, descendants: true, isSignal: true }, { propertyName: "routers", predicate: RouterLinkActive, descendants: true, isSignal: true }, { propertyName: "moreOperation", first: true, predicate: ["more"], descendants: true, isSignal: true }, { propertyName: "morePopover", first: true, predicate: ["morePopover"], descendants: true, isSignal: true }, { propertyName: "extra", first: true, predicate: ["extra"], descendants: true, isSignal: true }], viewQueries: [{ propertyName: "defaultMoreOperation", first: true, predicate: ["moreOperationContainer"], descendants: true, isSignal: true }, { propertyName: "inkBar", first: true, predicate: ThyNavInkBarDirective, descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"thy-nav-list\" [ngClass]=\"horizontal() ? 'justify-content-' + horizontal() : ''\" #navList>\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n @if (thyResponsive()) {\n <a\n href=\"javascript:;\"\n class=\"thy-nav-more-container\"\n [class.d-none]=\"!showMore()\"\n [class.invisible]=\"!initialized()\"\n #moreOperationContainer\n thyNavLink\n [thyNavItemActive]=\"moreActive()\"\n (click)=\"openMoreMenu($event, navListPopover)\">\n @if (moreOperation()) {\n <ng-container [ngTemplateOutlet]=\"moreOperation()\"></ng-container>\n } @else {\n {{ locale().more }}\n <thy-icon thyIconName=\"angle-down\" class=\"thy-nav-more-icon\"></thy-icon>\n }\n </a>\n }\n @if (thyExtra() || extra()) {\n <div class=\"thy-nav-extra\">\n <ng-container [ngTemplateOutlet]=\"thyExtra() || extra()\"></ng-container>\n </div>\n }\n <thy-nav-ink-bar [showInkBar]=\"showInkBar()\" [isVertical]=\"thyVertical()\"></thy-nav-ink-bar>\n</div>\n\n<ng-template #navListPopover>\n @if (morePopover()) {\n <ng-container [ngTemplateOutlet]=\"morePopover()\" [ngTemplateOutletContext]=\"{ $implicit: hiddenItems() }\"></ng-container>\n } @else {\n <thy-dropdown-menu thyImmediateRender>\n @for (item of hiddenItems(); track $index) {\n <span\n thyDropdownMenuItem\n [thyDropdownMenuItemActive]=\"item.isActive()\"\n (click)=\"navItemClick(item)\"\n [innerHTML]=\"item.elementRef.nativeElement.innerHTML | bypassSecurityTrustHtml\"></span>\n }\n </thy-dropdown-menu>\n }\n</ng-template>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: ThyNavItemDirective, selector: "[thyNavLink],[thyNavItem]", inputs: ["id", "thyNavItemActive", "thyNavLinkActive", "thyNavItemDisabled"] }, { kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "directive", type: ThyNavInkBarDirective, selector: "thy-nav-ink-bar, [thyNavInkBar]", inputs: ["isVertical", "showInkBar"] }, { kind: "component", type: ThyDropdownMenuComponent, selector: "thy-dropdown-menu", inputs: ["thyWidth", "thyImmediateRender"] }, { kind: "directive", type: ThyDropdownMenuItemDirective, selector: "[thyDropdownMenuItem]", inputs: ["thyType", "thyDisabled"] }, { kind: "directive", type: ThyDropdownMenuItemActiveDirective, selector: "[thyDropdownMenuItemActive]", inputs: ["thyDropdownMenuItemActive"] }, { kind: "pipe", type: BypassSecurityTrustHtmlPipe, name: "bypassSecurityTrustHtml" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
627
627
  }
628
628
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: ThyNav, decorators: [{
629
629
  type: Component,
@@ -641,7 +641,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImpor
641
641
  ThyDropdownMenuItemDirective,
642
642
  ThyDropdownMenuItemActiveDirective,
643
643
  BypassSecurityTrustHtmlPipe
644
- ], template: "<div class=\"thy-nav-list\" [ngClass]=\"horizontal() ? 'justify-content-' + horizontal() : ''\" #navList>\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n @if (thyResponsive()) {\n <a\n href=\"javascript:;\"\n class=\"thy-nav-more-container\"\n [class.d-none]=\"!showMore()\"\n [class.invisible]=\"!initialized()\"\n #moreOperationContainer\n thyNavLink\n [thyNavItemActive]=\"moreActive()\"\n (click)=\"openMoreMenu($event, navListPopover)\">\n @if (moreOperation()) {\n <ng-container [ngTemplateOutlet]=\"moreOperation()\"></ng-container>\n } @else {\n {{ locale().more }}\n <thy-icon thyIconName=\"angle-down\" class=\"thy-nav-more-icon\"></thy-icon>\n }\n </a>\n }\n @if (thyExtra() || extra()) {\n <div class=\"thy-nav-extra\">\n <ng-container [ngTemplateOutlet]=\"thyExtra() || extra()\"></ng-container>\n </div>\n }\n <thy-nav-ink-bar [showInkBar]=\"showInkBar()\" [isVertical]=\"thyVertical()\"></thy-nav-ink-bar>\n</div>\n\n<ng-template #navListPopover>\n @if (morePopover()) {\n <ng-container [ngTemplateOutlet]=\"morePopover()\" [ngTemplateOutletContext]=\"{ $implicit: hiddenItems() }\"></ng-container>\n } @else {\n <thy-dropdown-menu thyImmediateRender>\n @for (item of hiddenItems(); track $index) {\n <span\n class=\"thy-nav-item-more\"\n thyDropdownMenuItem\n [thyDropdownMenuItemActive]=\"item.isActive()\"\n (click)=\"navItemClick(item)\"\n [innerHTML]=\"item.elementRef.nativeElement.innerHTML | bypassSecurityTrustHtml\"></span>\n }\n </thy-dropdown-menu>\n }\n</ng-template>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n" }]
644
+ ], template: "<div class=\"thy-nav-list\" [ngClass]=\"horizontal() ? 'justify-content-' + horizontal() : ''\" #navList>\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n @if (thyResponsive()) {\n <a\n href=\"javascript:;\"\n class=\"thy-nav-more-container\"\n [class.d-none]=\"!showMore()\"\n [class.invisible]=\"!initialized()\"\n #moreOperationContainer\n thyNavLink\n [thyNavItemActive]=\"moreActive()\"\n (click)=\"openMoreMenu($event, navListPopover)\">\n @if (moreOperation()) {\n <ng-container [ngTemplateOutlet]=\"moreOperation()\"></ng-container>\n } @else {\n {{ locale().more }}\n <thy-icon thyIconName=\"angle-down\" class=\"thy-nav-more-icon\"></thy-icon>\n }\n </a>\n }\n @if (thyExtra() || extra()) {\n <div class=\"thy-nav-extra\">\n <ng-container [ngTemplateOutlet]=\"thyExtra() || extra()\"></ng-container>\n </div>\n }\n <thy-nav-ink-bar [showInkBar]=\"showInkBar()\" [isVertical]=\"thyVertical()\"></thy-nav-ink-bar>\n</div>\n\n<ng-template #navListPopover>\n @if (morePopover()) {\n <ng-container [ngTemplateOutlet]=\"morePopover()\" [ngTemplateOutletContext]=\"{ $implicit: hiddenItems() }\"></ng-container>\n } @else {\n <thy-dropdown-menu thyImmediateRender>\n @for (item of hiddenItems(); track $index) {\n <span\n thyDropdownMenuItem\n [thyDropdownMenuItemActive]=\"item.isActive()\"\n (click)=\"navItemClick(item)\"\n [innerHTML]=\"item.elementRef.nativeElement.innerHTML | bypassSecurityTrustHtml\"></span>\n }\n </thy-dropdown-menu>\n }\n</ng-template>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n" }]
645
645
  }], ctorParameters: () => [], propDecorators: { thyType: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyType", required: false }] }], thySize: [{ type: i0.Input, args: [{ isSignal: true, alias: "thySize", required: false }] }], thyHorizontal: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyHorizontal", required: false }] }], thyVertical: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyVertical", required: false }] }], thyFill: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyFill", required: false }] }], thyResponsive: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyResponsive", required: false }] }], thyPauseReCalculate: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyPauseReCalculate", required: false }] }], thyInsideClosable: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyInsideClosable", required: false }] }], thyPopoverOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyPopoverOptions", required: false }] }], thyExtra: [{ type: i0.Input, args: [{ isSignal: true, alias: "thyExtra", required: false }] }], links: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => ThyNavItemDirective), { ...{ descendants: true }, isSignal: true }] }], routers: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => RouterLinkActive), { ...{ descendants: true }, isSignal: true }] }], moreOperation: [{ type: i0.ContentChild, args: ['more', { isSignal: true }] }], morePopover: [{ type: i0.ContentChild, args: ['morePopover', { isSignal: true }] }], extra: [{ type: i0.ContentChild, args: ['extra', { isSignal: true }] }], defaultMoreOperation: [{ type: i0.ViewChild, args: ['moreOperationContainer', { isSignal: true }] }], inkBar: [{ type: i0.ViewChild, args: [i0.forwardRef(() => ThyNavInkBarDirective), { isSignal: true }] }] } });
646
646
 
647
647
  class ThyNavModule {
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-tethys-nav.mjs","sources":["../../../src/nav/icon-nav/icon-nav-link.directive.ts","../../../src/nav/icon-nav/icon-nav.component.ts","../../../src/nav/icon-nav/icon-nav.component.html","../../../src/nav/nav-item.directive.ts","../../../src/nav/nav-ink-bar.directive.ts","../../../src/nav/nav.pipe.ts","../../../src/nav/nav.component.ts","../../../src/nav/nav.component.html","../../../src/nav/nav.module.ts","../../../src/nav/ngx-tethys-nav.ts"],"sourcesContent":["import { Component, input } from '@angular/core';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { coerceBooleanProperty } from 'ngx-tethys/util';\n\n/**\n * @private\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[thyIconNavLink]',\n template: '<ng-content></ng-content>@if (thyIconNavLinkIcon()) {<thy-icon [thyIconName]=\"thyIconNavLinkIcon()\"></thy-icon>}',\n host: {\n '[class.active]': 'thyIconNavLinkActive()',\n '[class.thy-icon-nav-link]': 'true'\n },\n imports: [ThyIcon]\n})\nexport class ThyIconNavLink {\n readonly thyIconNavLinkIcon = input<string>('');\n\n readonly thyIconNavLinkActive = input(false, { transform: coerceBooleanProperty });\n}\n","import { ChangeDetectionStrategy, Component, effect, HostBinding, input } from '@angular/core';\nimport { useHostRenderer } from '@tethys/cdk/dom';\nimport { warnDeprecation } from 'ngx-tethys/util';\n\ntype IconNavTypes = 'primary' | 'secondary' | 'individual' | '';\n\n/**\n * @private\n */\n@Component({\n selector: 'thy-icon-nav',\n templateUrl: './icon-nav.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ThyIconNav {\n private hostRenderer = useHostRenderer();\n\n @HostBinding(`class.thy-icon-nav`) isIconNav = true;\n\n readonly thyType = input<IconNavTypes>('');\n\n private updateClasses() {\n this.hostRenderer.updateClass(this.thyType() ? [`thy-icon-nav-${this.thyType()}`] : []);\n }\n\n constructor() {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n warnDeprecation('thy-icon-nav has been deprecated, please use thyAction and thy-space components instead of it');\n }\n\n effect(() => {\n this.updateClasses();\n });\n }\n}\n","<ng-content></ng-content>\n","import {\n afterNextRender,\n computed,\n contentChildren,\n DestroyRef,\n Directive,\n ElementRef,\n forwardRef,\n inject,\n input,\n signal,\n WritableSignal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { RouterLinkActive } from '@angular/router';\nimport { useHostRenderer } from '@tethys/cdk/dom';\nimport { coerceBooleanProperty } from 'ngx-tethys/util';\n\nexport type ThyNavLink = '' | 'active';\n\n/**\n * 导航项\n * @name thyNavItem\n * @order 20\n */\n@Directive({\n selector: '[thyNavLink],[thyNavItem]',\n host: {\n class: 'thy-nav-item',\n '[class.active]': 'thyNavItemActive() || thyNavLinkActive()',\n '[class.disabled]': 'thyNavItemDisabled()'\n }\n})\nexport class ThyNavItemDirective {\n public elementRef = inject(ElementRef);\n\n private routerLinkActive = inject(RouterLinkActive, { optional: true })!;\n\n private readonly destroyRef = inject(DestroyRef);\n\n private hostRenderer = useHostRenderer();\n\n /**\n * 唯一标识\n */\n id = input<string>();\n\n /**\n * 是否激活状态\n * @default false\n */\n readonly thyNavItemActive = input(false, { transform: coerceBooleanProperty });\n\n /**\n * 已经废弃,请使用 thyNavItemActive\n * @deprecated please use thyNavItemActive\n * @default false\n */\n readonly thyNavLinkActive = input(false, { transform: coerceBooleanProperty });\n\n /**\n * 是否禁用\n * @default false\n */\n readonly thyNavItemDisabled = input(false, { transform: coerceBooleanProperty });\n\n /**\n * @private\n */\n readonly links = contentChildren(\n forwardRef(() => ThyNavItemDirective),\n { descendants: true }\n );\n\n /**\n * @private\n */\n readonly routers = contentChildren(RouterLinkActive, { descendants: true });\n\n // @HostBinding('attr.href') navLinkHref = 'javascript:;';\n\n public offset: WritableSignal<{\n width: number;\n height: number;\n left: number;\n top: number;\n }> = signal({\n width: 0,\n height: 0,\n left: 0,\n top: 0\n });\n\n // @deprecated please use template()\n public content!: HTMLElement;\n\n public template: WritableSignal<HTMLElement | undefined> = signal(undefined);\n\n private readonly routerLinkIsActive: WritableSignal<boolean> = signal(false);\n\n public readonly isActive = computed(() => {\n return this.linkIsActive();\n });\n\n constructor() {\n afterNextRender(() => {\n this.setOffset();\n\n this.content = this.elementRef.nativeElement.outerHTML;\n this.template.set(this.elementRef.nativeElement.outerHTML);\n this.subscribeRouterLinkIsActive();\n });\n }\n\n // routerLinkActive 支持 signal 后移除\n private subscribeRouterLinkIsActive() {\n if (this.routerLinkActive) {\n this.routerLinkActive.isActiveChange.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((isActive: boolean) => {\n this.routerLinkIsActive.set(isActive);\n });\n }\n if (this.routers().length > 0) {\n this.routers().forEach(router => {\n router.isActiveChange.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((isActive: boolean) => {\n this.routerLinkIsActive.set(isActive);\n });\n });\n }\n }\n\n setOffset() {\n this.offset.set({\n width: this.elementRef.nativeElement.offsetWidth || this.offset().width,\n height: this.elementRef.nativeElement.offsetHeight || this.offset().height,\n left: this.elementRef.nativeElement.offsetLeft || this.offset().left,\n top: this.elementRef.nativeElement.offsetTop || this.offset().top\n });\n }\n\n linkIsActive() {\n const links = this.links();\n return (\n this.thyNavItemActive() ||\n this.thyNavLinkActive() ||\n this.routerLinkIsActive() ||\n links.some(item => item.thyNavItemActive()) ||\n links.some(item => item.thyNavLinkActive())\n );\n }\n\n setNavLinkHidden(value: boolean) {\n if (value) {\n this.hostRenderer.addClass('thy-nav-item-hidden');\n } else {\n this.hostRenderer.removeClass('thy-nav-item-hidden');\n }\n }\n\n addClass(className: string) {\n this.hostRenderer.addClass(className);\n }\n\n removeClass(className: string) {\n this.hostRenderer.removeClass(className);\n }\n}\n","import { ANIMATION_MODULE_TYPE, Directive, ElementRef, computed, inject, input } from '@angular/core';\nimport { coerceBooleanProperty } from 'ngx-tethys/util';\n\n/**\n * @internal\n */\n@Directive({\n selector: 'thy-nav-ink-bar, [thyNavInkBar]',\n host: {\n class: 'thy-nav-ink-bar',\n '[class.thy-nav-ink-bar-animated]': 'animated()'\n }\n})\nexport class ThyNavInkBarDirective {\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n animationMode? = inject(ANIMATION_MODULE_TYPE, { optional: true });\n\n readonly isVertical = input(false, { transform: coerceBooleanProperty });\n\n readonly showInkBar = input(false, { transform: coerceBooleanProperty });\n\n readonly animated = computed(() => this.animationMode !== 'NoopAnimations' && this.showInkBar());\n\n public alignToElement(element: HTMLElement): void {\n this.show();\n\n this.setStyles(element);\n }\n private setStyles(element: HTMLElement): void {\n const inkBar: HTMLElement = this.elementRef.nativeElement;\n if (!this.isVertical()) {\n inkBar.style.top = '';\n inkBar.style.bottom = '0px';\n inkBar.style.height = '2px';\n inkBar.style.left = this.getLeftPosition(element);\n inkBar.style.width = this.getElementWidth(element);\n } else {\n inkBar.style.left = '';\n inkBar.style.width = '2px';\n inkBar.style.top = this.getTopPosition(element);\n inkBar.style.height = this.getElementHeight(element);\n }\n }\n\n private getLeftPosition(element: HTMLElement): string {\n return element ? `${element.offsetLeft || 0}px` : '0';\n }\n\n private getElementWidth(element: HTMLElement): string {\n return element ? `${element.offsetWidth || 0}px` : '0';\n }\n\n private getTopPosition(element: HTMLElement): string {\n return element ? `${element.offsetTop || 0}px` : '0';\n }\n\n private getElementHeight(element: HTMLElement): string {\n return element ? `${element.offsetHeight || 0}px` : '0';\n }\n\n private show() {\n this.elementRef.nativeElement.style.visibility = 'visible';\n }\n\n public hide() {\n this.elementRef.nativeElement.style.visibility = 'hidden';\n }\n}\n","import { Pipe, PipeTransform, inject } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n/**\n * @private\n */\n@Pipe({\n name: 'bypassSecurityTrustHtml'\n})\nexport class BypassSecurityTrustHtmlPipe implements PipeTransform {\n private sanitizer = inject(DomSanitizer);\n\n transform(format: string): any {\n return this.sanitizer.bypassSecurityTrustHtml(format);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n contentChildren,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n OnDestroy,\n OnInit,\n signal,\n Signal,\n TemplateRef,\n viewChild,\n WritableSignal,\n afterNextRender,\n afterEveryRender,\n untracked\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { useHostRenderer } from '@tethys/cdk/dom';\nimport { ThyPopover, ThyPopoverConfig } from 'ngx-tethys/popover';\nimport { from, merge, Observable, of } from 'rxjs';\nimport { tap } from 'rxjs/operators';\n\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { RouterLinkActive } from '@angular/router';\nimport { ThyPlacement } from 'ngx-tethys/core';\nimport { ThyDropdownMenuComponent, ThyDropdownMenuItemActiveDirective, ThyDropdownMenuItemDirective } from 'ngx-tethys/dropdown';\nimport { injectLocale, ThyNavLocale } from 'ngx-tethys/i18n';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { coerceBooleanProperty } from 'ngx-tethys/util';\nimport { ThyNavInkBarDirective } from './nav-ink-bar.directive';\nimport { ThyNavItemDirective } from './nav-item.directive';\nimport { BypassSecurityTrustHtmlPipe } from './nav.pipe';\n\nexport type ThyNavType = 'pulled' | 'tabs' | 'pills' | 'lite' | 'card' | 'primary' | 'secondary' | 'thirdly' | 'secondary-divider';\nexport type ThyNavSize = 'lg' | 'md' | 'sm';\nexport type ThyNavHorizontal = '' | 'start' | 'center' | 'end';\n\nconst navTypeClassesMap = {\n pulled: ['thy-nav-pulled'],\n tabs: ['thy-nav-tabs'],\n pills: ['thy-nav-pills'],\n lite: ['thy-nav-lite'],\n card: ['thy-nav-card'],\n //如下类型已经废弃\n primary: ['thy-nav-primary'],\n secondary: ['thy-nav-secondary'],\n thirdly: ['thy-nav-thirdly'],\n 'secondary-divider': ['thy-nav-secondary-divider']\n};\n\nconst navSizeClassesMap = {\n lg: 'thy-nav-lg',\n md: 'thy-nav-md',\n sm: 'thy-nav-sm'\n};\n\nconst tabItemRight = 20;\n\n/**\n * 导航组件\n * @name thy-nav\n * @order 10\n */\n@Component({\n selector: 'thy-nav',\n templateUrl: './nav.component.html',\n host: {\n '[class.thy-nav]': 'true',\n '[class.thy-nav--vertical]': 'thyVertical()',\n '[class.thy-nav--fill]': 'thyFill()'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NgClass,\n NgTemplateOutlet,\n ThyNavItemDirective,\n ThyIcon,\n ThyNavInkBarDirective,\n ThyDropdownMenuComponent,\n ThyDropdownMenuItemDirective,\n ThyDropdownMenuItemActiveDirective,\n BypassSecurityTrustHtmlPipe\n ]\n})\nexport class ThyNav implements OnDestroy {\n public elementRef = inject(ElementRef);\n\n private popover = inject(ThyPopover);\n\n private readonly destroyRef = inject(DestroyRef);\n\n private hostRenderer = useHostRenderer();\n\n public readonly locale: Signal<ThyNavLocale> = injectLocale('nav');\n\n public readonly initialized: WritableSignal<boolean> = signal(false);\n\n private readonly wrapperOffset: WritableSignal<{ height: number; width: number; left: number; top: number }> = signal({\n height: 0,\n width: 0,\n left: 0,\n top: 0\n });\n\n public readonly hiddenItems: WritableSignal<ThyNavItemDirective[]> = signal([]);\n\n public readonly moreActive = computed(() => {\n return this.calculateMoreIsActive();\n });\n\n public readonly showMore = computed(() => {\n return this.hiddenItems().length > 0;\n });\n\n private readonly moreBtnOffset: WritableSignal<{ height: number; width: number }> = signal({ height: 0, width: 0 });\n\n /**\n * 导航类型\n * @type pulled | tabs | pills | lite | primary | secondary | thirdly | secondary-divider\n * @default pulled\n */\n readonly thyType = input<ThyNavType>();\n\n /**\n * 导航大小\n * @type lg | md | sm\n * @default md\n */\n readonly thySize = input<ThyNavSize>('md');\n\n /**\n * 水平排列\n * @type '' | 'start' | 'center' | 'end'\n * @default false\n */\n readonly thyHorizontal = input<ThyNavHorizontal>('');\n\n /**\n * 是否垂直排列\n * @default false\n */\n readonly thyVertical = input(false, { transform: coerceBooleanProperty });\n\n /**\n * 是否是填充模式\n */\n readonly thyFill = input(false, { transform: coerceBooleanProperty });\n\n /**\n * 是否响应式,自动计算宽度存放 thyNavItem,并添加更多弹框\n * @default false\n */\n readonly thyResponsive = input(undefined, { transform: coerceBooleanProperty });\n\n /**\n * 支持暂停自适应计算\n */\n readonly thyPauseReCalculate = input<boolean>(false);\n\n /**\n * 更多操作的菜单点击内部是否可关闭\n * @deprecated please use thyPopoverOptions\n */\n readonly thyInsideClosable = input(true, { transform: coerceBooleanProperty });\n\n /**\n * 更多菜单弹出框的参数,底层使用 Popover 组件\n * @type ThyPopoverConfig\n */\n readonly thyPopoverOptions = input<ThyPopoverConfig<unknown> | null>(null);\n\n /**\n * 右侧额外区域模板\n * @type TemplateRef\n */\n readonly thyExtra = input<TemplateRef<unknown>>();\n\n /**\n * @private\n */\n public readonly links = contentChildren(ThyNavItemDirective, { descendants: true });\n\n /**\n * @private\n */\n readonly routers = contentChildren(RouterLinkActive, { descendants: true });\n\n /**\n * 响应式模式下更多操作模板\n * @type TemplateRef\n */\n readonly moreOperation = contentChild<TemplateRef<unknown>>('more');\n\n /**\n * 响应式模式下更多弹框模板\n * @type TemplateRef\n */\n readonly morePopover = contentChild<TemplateRef<unknown>>('morePopover');\n\n /**\n * 右侧额外区域模板,支持 thyExtra 传参和 <ng-template #extra></ng-template> 模板\n * @name extra\n * @type TemplateRef\n */\n readonly extra = contentChild<TemplateRef<unknown>>('extra');\n\n readonly defaultMoreOperation = viewChild<ElementRef<HTMLAnchorElement>>('moreOperationContainer');\n\n readonly inkBar = viewChild.required(ThyNavInkBarDirective);\n\n readonly horizontal = computed(() => {\n const horizontalValue = this.thyHorizontal() as string;\n return horizontalValue === 'right' ? 'end' : horizontalValue;\n });\n\n readonly type = computed(() => this.thyType() || 'pulled');\n\n readonly showInkBar = computed(() => {\n const showTypes: ThyNavType[] = ['pulled', 'tabs'];\n return showTypes.includes(this.type());\n });\n\n private updateClasses() {\n let classNames: string[] = [];\n if (navTypeClassesMap[this.type()]) {\n classNames = [...navTypeClassesMap[this.type()]];\n }\n if (navSizeClassesMap[this.thySize()]) {\n classNames.push(navSizeClassesMap[this.thySize()]);\n }\n this.hostRenderer.updateClass(classNames);\n }\n\n private curActiveIndex?: number;\n\n private prevActiveIndex: WritableSignal<number> = signal(NaN);\n\n private navSubscription: { unsubscribe: () => void } | null = null;\n\n constructor() {\n effect(() => {\n this.updateClasses();\n });\n\n effect(() => {\n (this.hiddenItems() || []).forEach(item => {\n item.setNavLinkHidden(true);\n });\n });\n\n effect(() => {\n const thyVertical = this.thyVertical();\n const thyType = this.thyType();\n\n untracked(() => {\n this.alignInkBarToSelectedTab();\n });\n });\n\n effect(() => {\n const links = this.links();\n this.prevActiveIndex.set(NaN);\n const responsive = this.thyResponsive();\n\n untracked(() => {\n if (this.navSubscription) {\n this.navSubscription.unsubscribe();\n }\n\n this.navSubscription = merge(\n this.createResizeObserver(this.elementRef.nativeElement),\n ...links.map(item =>\n this.createResizeObserver(item.elementRef.nativeElement).pipe(\n tap(() => {\n item.setOffset();\n })\n )\n ),\n ...(this.routers() || []).map(router => router?.isActiveChange)\n )\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n tap(() => {\n if (this.thyPauseReCalculate()) {\n return;\n }\n\n if (responsive) {\n this.setMoreBtnOffset();\n this.resetSizes();\n this.setHiddenItems();\n }\n\n if (this.type() === 'card') {\n this.setNavItemDivider();\n }\n })\n )\n .subscribe(() => {\n this.alignInkBarToSelectedTab();\n });\n });\n });\n\n afterNextRender(() => {\n if (this.thyResponsive()) {\n from(Promise.resolve()).subscribe(() => {\n this.setMoreBtnOffset();\n this.links().forEach(link => link.setOffset());\n this.setHiddenItems();\n this.resetSizes();\n this.initialized.set(true);\n });\n } else {\n this.initialized.set(true);\n }\n });\n\n afterEveryRender(() => {\n this.curActiveIndex = this.links() && this.links().length ? this.links().findIndex(item => item.linkIsActive()) : -1;\n if (this.curActiveIndex < 0) {\n this.inkBar().hide();\n } else if (this.curActiveIndex !== this.prevActiveIndex()) {\n this.alignInkBarToSelectedTab();\n }\n });\n }\n\n private setMoreBtnOffset() {\n const defaultMoreOperation = this.defaultMoreOperation();\n const computedStyle = window.getComputedStyle(defaultMoreOperation!.nativeElement!);\n this.moreBtnOffset.set({\n height: defaultMoreOperation!.nativeElement!.offsetHeight! + parseFloat(computedStyle?.marginBottom) || 0,\n width: defaultMoreOperation!.nativeElement!.offsetWidth! + parseFloat(computedStyle?.marginRight) || 0\n });\n }\n\n private setNavItemDivider() {\n const tabs = this.links();\n const activeIndex = tabs.findIndex(item => item.linkIsActive());\n\n for (let i = 0; i < tabs.length; i++) {\n if ((i !== activeIndex && i !== activeIndex - 1 && i !== tabs.length - 1) || (i === activeIndex - 1 && this.moreActive())) {\n tabs[i].addClass('has-right-divider');\n } else {\n tabs[i].removeClass('has-right-divider');\n }\n }\n }\n\n createResizeObserver(element: HTMLElement) {\n return typeof ResizeObserver === 'undefined'\n ? of(null)\n : new Observable(observer => {\n const resize = new ResizeObserver(entries => {\n observer.next(entries);\n });\n resize.observe(element);\n return () => {\n resize.disconnect();\n };\n });\n }\n\n private calculateMoreIsActive() {\n const moreActive = this.hiddenItems().some(item => {\n return item.linkIsActive();\n });\n return moreActive;\n }\n\n private setHiddenItems() {\n const tabs = this.links();\n if (!tabs.length) {\n this.hiddenItems.set([]);\n return;\n }\n\n const endIndex = this.thyVertical()\n ? this.getShowItemsEndIndexWhenVertical(tabs as ThyNavItemDirective[])\n : this.getShowItemsEndIndexWhenHorizontal(tabs as ThyNavItemDirective[]);\n\n const showItems = tabs.slice(0, endIndex + 1);\n (showItems || []).forEach(item => {\n item.setNavLinkHidden(false);\n });\n\n this.hiddenItems.set(endIndex === tabs.length - 1 ? [] : tabs.slice(endIndex + 1));\n }\n\n private getShowItemsEndIndexWhenHorizontal(tabs: ThyNavItemDirective[]) {\n const tabsLength = tabs.length;\n let endIndex = tabsLength;\n let totalWidth = 0;\n\n for (let i = 0; i < tabsLength; i += 1) {\n const _totalWidth =\n i === tabsLength - 1 ? totalWidth + tabs[i].offset().width : totalWidth + tabs[i].offset().width + tabItemRight;\n if (_totalWidth > this.wrapperOffset().width) {\n const moreOperationWidth = this.moreBtnOffset().width;\n if (totalWidth + moreOperationWidth <= this.wrapperOffset().width) {\n endIndex = i - 1;\n } else {\n endIndex = i - 2;\n }\n break;\n } else {\n totalWidth = _totalWidth;\n endIndex = i;\n }\n }\n return endIndex;\n }\n\n private getShowItemsEndIndexWhenVertical(tabs: ThyNavItemDirective[]) {\n const tabsLength = tabs.length;\n let endIndex = tabsLength;\n let totalHeight = 0;\n for (let i = 0; i < tabsLength; i += 1) {\n const _totalHeight = totalHeight + tabs[i].offset().height;\n if (_totalHeight > this.wrapperOffset().height) {\n const moreOperationHeight = this.moreBtnOffset().height;\n if (totalHeight + moreOperationHeight <= this.wrapperOffset().height) {\n endIndex = i - 1;\n } else {\n endIndex = i - 2;\n }\n break;\n } else {\n totalHeight = _totalHeight;\n endIndex = i;\n }\n }\n return endIndex;\n }\n\n private resetSizes() {\n this.wrapperOffset.set({\n height: this.elementRef.nativeElement.clientHeight || 0,\n width: this.elementRef.nativeElement.clientWidth || 0,\n left: this.elementRef.nativeElement.offsetLeft || 0,\n top: this.elementRef.nativeElement.offsetTop || 0\n });\n }\n\n openMoreMenu(event: Event, template: TemplateRef<any>) {\n this.popover.open(\n template,\n Object.assign(\n {\n origin: event.currentTarget as HTMLElement,\n hasBackdrop: true,\n backdropClosable: true,\n insideClosable: true,\n placement: 'bottom' as ThyPlacement,\n panelClass: 'thy-nav-list-popover',\n originActiveClass: 'thy-nav-origin-active'\n },\n this.thyPopoverOptions() ? this.thyPopoverOptions() : {}\n )\n );\n }\n\n navItemClick(item: ThyNavItemDirective) {\n item.elementRef.nativeElement.click();\n }\n\n private alignInkBarToSelectedTab(): void {\n if (!this.showInkBar()) {\n this.inkBar().hide();\n return;\n }\n const tabs = this.links() ?? [];\n const selectedItem = tabs.find(item => item.linkIsActive());\n let selectedItemElement: HTMLElement = selectedItem && selectedItem.elementRef.nativeElement;\n\n if (selectedItem && this.moreActive()) {\n selectedItemElement = this.defaultMoreOperation()!.nativeElement;\n }\n if (selectedItemElement) {\n this.prevActiveIndex.set(this.curActiveIndex!);\n this.inkBar().alignToElement(selectedItemElement);\n }\n }\n\n ngOnDestroy() {\n if (this.navSubscription) {\n this.navSubscription.unsubscribe();\n }\n }\n}\n","<div class=\"thy-nav-list\" [ngClass]=\"horizontal() ? 'justify-content-' + horizontal() : ''\" #navList>\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n @if (thyResponsive()) {\n <a\n href=\"javascript:;\"\n class=\"thy-nav-more-container\"\n [class.d-none]=\"!showMore()\"\n [class.invisible]=\"!initialized()\"\n #moreOperationContainer\n thyNavLink\n [thyNavItemActive]=\"moreActive()\"\n (click)=\"openMoreMenu($event, navListPopover)\">\n @if (moreOperation()) {\n <ng-container [ngTemplateOutlet]=\"moreOperation()\"></ng-container>\n } @else {\n {{ locale().more }}\n <thy-icon thyIconName=\"angle-down\" class=\"thy-nav-more-icon\"></thy-icon>\n }\n </a>\n }\n @if (thyExtra() || extra()) {\n <div class=\"thy-nav-extra\">\n <ng-container [ngTemplateOutlet]=\"thyExtra() || extra()\"></ng-container>\n </div>\n }\n <thy-nav-ink-bar [showInkBar]=\"showInkBar()\" [isVertical]=\"thyVertical()\"></thy-nav-ink-bar>\n</div>\n\n<ng-template #navListPopover>\n @if (morePopover()) {\n <ng-container [ngTemplateOutlet]=\"morePopover()\" [ngTemplateOutletContext]=\"{ $implicit: hiddenItems() }\"></ng-container>\n } @else {\n <thy-dropdown-menu thyImmediateRender>\n @for (item of hiddenItems(); track $index) {\n <span\n class=\"thy-nav-item-more\"\n thyDropdownMenuItem\n [thyDropdownMenuItemActive]=\"item.isActive()\"\n (click)=\"navItemClick(item)\"\n [innerHTML]=\"item.elementRef.nativeElement.innerHTML | bypassSecurityTrustHtml\"></span>\n }\n </thy-dropdown-menu>\n }\n</ng-template>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n","import { ThyDropdownModule } from 'ngx-tethys/dropdown';\nimport { ThyIconModule } from 'ngx-tethys/icon';\nimport { ThyPopoverModule } from 'ngx-tethys/popover';\n\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\n\nimport { ThyIconNavLink } from './icon-nav/icon-nav-link.directive';\nimport { ThyIconNav } from './icon-nav/icon-nav.component';\nimport { ThyNavInkBarDirective } from './nav-ink-bar.directive';\nimport { ThyNavItemDirective } from './nav-item.directive';\nimport { ThyNav } from './nav.component';\nimport { BypassSecurityTrustHtmlPipe } from './nav.pipe';\n\n@NgModule({\n imports: [\n CommonModule,\n ThyIconModule,\n ThyPopoverModule,\n ThyDropdownModule,\n RouterModule,\n ThyNav,\n ThyNavItemDirective,\n ThyIconNav,\n ThyIconNavLink,\n BypassSecurityTrustHtmlPipe,\n ThyNavInkBarDirective\n ],\n exports: [ThyNav, ThyNavItemDirective, ThyIconNav, ThyIconNavLink, BypassSecurityTrustHtmlPipe]\n})\nexport class ThyNavModule {}\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-nav.mjs","sources":["../../../src/nav/icon-nav/icon-nav-link.directive.ts","../../../src/nav/icon-nav/icon-nav.component.ts","../../../src/nav/icon-nav/icon-nav.component.html","../../../src/nav/nav-item.directive.ts","../../../src/nav/nav-ink-bar.directive.ts","../../../src/nav/nav.pipe.ts","../../../src/nav/nav.component.ts","../../../src/nav/nav.component.html","../../../src/nav/nav.module.ts","../../../src/nav/ngx-tethys-nav.ts"],"sourcesContent":["import { Component, input } from '@angular/core';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { coerceBooleanProperty } from 'ngx-tethys/util';\n\n/**\n * @private\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[thyIconNavLink]',\n template: '<ng-content></ng-content>@if (thyIconNavLinkIcon()) {<thy-icon [thyIconName]=\"thyIconNavLinkIcon()\"></thy-icon>}',\n host: {\n '[class.active]': 'thyIconNavLinkActive()',\n '[class.thy-icon-nav-link]': 'true'\n },\n imports: [ThyIcon]\n})\nexport class ThyIconNavLink {\n readonly thyIconNavLinkIcon = input<string>('');\n\n readonly thyIconNavLinkActive = input(false, { transform: coerceBooleanProperty });\n}\n","import { ChangeDetectionStrategy, Component, effect, HostBinding, input } from '@angular/core';\nimport { useHostRenderer } from '@tethys/cdk/dom';\nimport { warnDeprecation } from 'ngx-tethys/util';\n\ntype IconNavTypes = 'primary' | 'secondary' | 'individual' | '';\n\n/**\n * @private\n */\n@Component({\n selector: 'thy-icon-nav',\n templateUrl: './icon-nav.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ThyIconNav {\n private hostRenderer = useHostRenderer();\n\n @HostBinding(`class.thy-icon-nav`) isIconNav = true;\n\n readonly thyType = input<IconNavTypes>('');\n\n private updateClasses() {\n this.hostRenderer.updateClass(this.thyType() ? [`thy-icon-nav-${this.thyType()}`] : []);\n }\n\n constructor() {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n warnDeprecation('thy-icon-nav has been deprecated, please use thyAction and thy-space components instead of it');\n }\n\n effect(() => {\n this.updateClasses();\n });\n }\n}\n","<ng-content></ng-content>\n","import {\n afterNextRender,\n computed,\n contentChildren,\n DestroyRef,\n Directive,\n ElementRef,\n forwardRef,\n inject,\n input,\n signal,\n WritableSignal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { RouterLinkActive } from '@angular/router';\nimport { useHostRenderer } from '@tethys/cdk/dom';\nimport { coerceBooleanProperty } from 'ngx-tethys/util';\n\nexport type ThyNavLink = '' | 'active';\n\n/**\n * 导航项\n * @name thyNavItem\n * @order 20\n */\n@Directive({\n selector: '[thyNavLink],[thyNavItem]',\n host: {\n class: 'thy-nav-item',\n '[class.active]': 'thyNavItemActive() || thyNavLinkActive()',\n '[class.disabled]': 'thyNavItemDisabled()'\n }\n})\nexport class ThyNavItemDirective {\n public elementRef = inject(ElementRef);\n\n private routerLinkActive = inject(RouterLinkActive, { optional: true })!;\n\n private readonly destroyRef = inject(DestroyRef);\n\n private hostRenderer = useHostRenderer();\n\n /**\n * 唯一标识\n */\n id = input<string>();\n\n /**\n * 是否激活状态\n * @default false\n */\n readonly thyNavItemActive = input(false, { transform: coerceBooleanProperty });\n\n /**\n * 已经废弃,请使用 thyNavItemActive\n * @deprecated please use thyNavItemActive\n * @default false\n */\n readonly thyNavLinkActive = input(false, { transform: coerceBooleanProperty });\n\n /**\n * 是否禁用\n * @default false\n */\n readonly thyNavItemDisabled = input(false, { transform: coerceBooleanProperty });\n\n /**\n * @private\n */\n readonly links = contentChildren(\n forwardRef(() => ThyNavItemDirective),\n { descendants: true }\n );\n\n /**\n * @private\n */\n readonly routers = contentChildren(RouterLinkActive, { descendants: true });\n\n // @HostBinding('attr.href') navLinkHref = 'javascript:;';\n\n public offset: WritableSignal<{\n width: number;\n height: number;\n left: number;\n top: number;\n }> = signal({\n width: 0,\n height: 0,\n left: 0,\n top: 0\n });\n\n // @deprecated please use template()\n public content!: HTMLElement;\n\n public template: WritableSignal<HTMLElement | undefined> = signal(undefined);\n\n private readonly routerLinkIsActive: WritableSignal<boolean> = signal(false);\n\n public readonly isActive = computed(() => {\n return this.linkIsActive();\n });\n\n constructor() {\n afterNextRender(() => {\n this.setOffset();\n\n this.content = this.elementRef.nativeElement.outerHTML;\n this.template.set(this.elementRef.nativeElement.outerHTML);\n this.subscribeRouterLinkIsActive();\n });\n }\n\n // routerLinkActive 支持 signal 后移除\n private subscribeRouterLinkIsActive() {\n if (this.routerLinkActive) {\n this.routerLinkActive.isActiveChange.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((isActive: boolean) => {\n this.routerLinkIsActive.set(isActive);\n });\n }\n if (this.routers().length > 0) {\n this.routers().forEach(router => {\n router.isActiveChange.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((isActive: boolean) => {\n this.routerLinkIsActive.set(isActive);\n });\n });\n }\n }\n\n setOffset() {\n this.offset.set({\n width: this.elementRef.nativeElement.offsetWidth || this.offset().width,\n height: this.elementRef.nativeElement.offsetHeight || this.offset().height,\n left: this.elementRef.nativeElement.offsetLeft || this.offset().left,\n top: this.elementRef.nativeElement.offsetTop || this.offset().top\n });\n }\n\n linkIsActive() {\n const links = this.links();\n return (\n this.thyNavItemActive() ||\n this.thyNavLinkActive() ||\n this.routerLinkIsActive() ||\n links.some(item => item.thyNavItemActive()) ||\n links.some(item => item.thyNavLinkActive())\n );\n }\n\n setNavLinkHidden(value: boolean) {\n if (value) {\n this.hostRenderer.addClass('thy-nav-item-hidden');\n } else {\n this.hostRenderer.removeClass('thy-nav-item-hidden');\n }\n }\n\n addClass(className: string) {\n this.hostRenderer.addClass(className);\n }\n\n removeClass(className: string) {\n this.hostRenderer.removeClass(className);\n }\n}\n","import { ANIMATION_MODULE_TYPE, Directive, ElementRef, computed, inject, input } from '@angular/core';\nimport { coerceBooleanProperty } from 'ngx-tethys/util';\n\n/**\n * @internal\n */\n@Directive({\n selector: 'thy-nav-ink-bar, [thyNavInkBar]',\n host: {\n class: 'thy-nav-ink-bar',\n '[class.thy-nav-ink-bar-animated]': 'animated()'\n }\n})\nexport class ThyNavInkBarDirective {\n private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n animationMode? = inject(ANIMATION_MODULE_TYPE, { optional: true });\n\n readonly isVertical = input(false, { transform: coerceBooleanProperty });\n\n readonly showInkBar = input(false, { transform: coerceBooleanProperty });\n\n readonly animated = computed(() => this.animationMode !== 'NoopAnimations' && this.showInkBar());\n\n public alignToElement(element: HTMLElement): void {\n this.show();\n\n this.setStyles(element);\n }\n private setStyles(element: HTMLElement): void {\n const inkBar: HTMLElement = this.elementRef.nativeElement;\n if (!this.isVertical()) {\n inkBar.style.top = '';\n inkBar.style.bottom = '0px';\n inkBar.style.height = '2px';\n inkBar.style.left = this.getLeftPosition(element);\n inkBar.style.width = this.getElementWidth(element);\n } else {\n inkBar.style.left = '';\n inkBar.style.width = '2px';\n inkBar.style.top = this.getTopPosition(element);\n inkBar.style.height = this.getElementHeight(element);\n }\n }\n\n private getLeftPosition(element: HTMLElement): string {\n return element ? `${element.offsetLeft || 0}px` : '0';\n }\n\n private getElementWidth(element: HTMLElement): string {\n return element ? `${element.offsetWidth || 0}px` : '0';\n }\n\n private getTopPosition(element: HTMLElement): string {\n return element ? `${element.offsetTop || 0}px` : '0';\n }\n\n private getElementHeight(element: HTMLElement): string {\n return element ? `${element.offsetHeight || 0}px` : '0';\n }\n\n private show() {\n this.elementRef.nativeElement.style.visibility = 'visible';\n }\n\n public hide() {\n this.elementRef.nativeElement.style.visibility = 'hidden';\n }\n}\n","import { Pipe, PipeTransform, inject } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n/**\n * @private\n */\n@Pipe({\n name: 'bypassSecurityTrustHtml'\n})\nexport class BypassSecurityTrustHtmlPipe implements PipeTransform {\n private sanitizer = inject(DomSanitizer);\n\n transform(format: string): any {\n return this.sanitizer.bypassSecurityTrustHtml(format);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n contentChildren,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n OnDestroy,\n OnInit,\n signal,\n Signal,\n TemplateRef,\n viewChild,\n WritableSignal,\n afterNextRender,\n afterEveryRender,\n untracked\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { useHostRenderer } from '@tethys/cdk/dom';\nimport { ThyPopover, ThyPopoverConfig } from 'ngx-tethys/popover';\nimport { from, merge, Observable, of } from 'rxjs';\nimport { tap } from 'rxjs/operators';\n\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { RouterLinkActive } from '@angular/router';\nimport { ThyPlacement } from 'ngx-tethys/core';\nimport { ThyDropdownMenuComponent, ThyDropdownMenuItemActiveDirective, ThyDropdownMenuItemDirective } from 'ngx-tethys/dropdown';\nimport { injectLocale, ThyNavLocale } from 'ngx-tethys/i18n';\nimport { ThyIcon } from 'ngx-tethys/icon';\nimport { coerceBooleanProperty } from 'ngx-tethys/util';\nimport { ThyNavInkBarDirective } from './nav-ink-bar.directive';\nimport { ThyNavItemDirective } from './nav-item.directive';\nimport { BypassSecurityTrustHtmlPipe } from './nav.pipe';\n\nexport type ThyNavType = 'pulled' | 'tabs' | 'pills' | 'lite' | 'card' | 'primary' | 'secondary' | 'thirdly' | 'secondary-divider';\nexport type ThyNavSize = 'lg' | 'md' | 'sm';\nexport type ThyNavHorizontal = '' | 'start' | 'center' | 'end';\n\nconst navTypeClassesMap = {\n pulled: ['thy-nav-pulled'],\n tabs: ['thy-nav-tabs'],\n pills: ['thy-nav-pills'],\n lite: ['thy-nav-lite'],\n card: ['thy-nav-card'],\n //如下类型已经废弃\n primary: ['thy-nav-primary'],\n secondary: ['thy-nav-secondary'],\n thirdly: ['thy-nav-thirdly'],\n 'secondary-divider': ['thy-nav-secondary-divider']\n};\n\nconst navSizeClassesMap = {\n lg: 'thy-nav-lg',\n md: 'thy-nav-md',\n sm: 'thy-nav-sm'\n};\n\nconst tabItemRight = 20;\n\n/**\n * 导航组件\n * @name thy-nav\n * @order 10\n */\n@Component({\n selector: 'thy-nav',\n templateUrl: './nav.component.html',\n host: {\n '[class.thy-nav]': 'true',\n '[class.thy-nav--vertical]': 'thyVertical()',\n '[class.thy-nav--fill]': 'thyFill()'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NgClass,\n NgTemplateOutlet,\n ThyNavItemDirective,\n ThyIcon,\n ThyNavInkBarDirective,\n ThyDropdownMenuComponent,\n ThyDropdownMenuItemDirective,\n ThyDropdownMenuItemActiveDirective,\n BypassSecurityTrustHtmlPipe\n ]\n})\nexport class ThyNav implements OnDestroy {\n public elementRef = inject(ElementRef);\n\n private popover = inject(ThyPopover);\n\n private readonly destroyRef = inject(DestroyRef);\n\n private hostRenderer = useHostRenderer();\n\n public readonly locale: Signal<ThyNavLocale> = injectLocale('nav');\n\n public readonly initialized: WritableSignal<boolean> = signal(false);\n\n private readonly wrapperOffset: WritableSignal<{ height: number; width: number; left: number; top: number }> = signal({\n height: 0,\n width: 0,\n left: 0,\n top: 0\n });\n\n public readonly hiddenItems: WritableSignal<ThyNavItemDirective[]> = signal([]);\n\n public readonly moreActive = computed(() => {\n return this.calculateMoreIsActive();\n });\n\n public readonly showMore = computed(() => {\n return this.hiddenItems().length > 0;\n });\n\n private readonly moreBtnOffset: WritableSignal<{ height: number; width: number }> = signal({ height: 0, width: 0 });\n\n /**\n * 导航类型\n * @type pulled | tabs | pills | lite | primary | secondary | thirdly | secondary-divider\n * @default pulled\n */\n readonly thyType = input<ThyNavType>();\n\n /**\n * 导航大小\n * @type lg | md | sm\n * @default md\n */\n readonly thySize = input<ThyNavSize>('md');\n\n /**\n * 水平排列\n * @type '' | 'start' | 'center' | 'end'\n * @default false\n */\n readonly thyHorizontal = input<ThyNavHorizontal>('');\n\n /**\n * 是否垂直排列\n * @default false\n */\n readonly thyVertical = input(false, { transform: coerceBooleanProperty });\n\n /**\n * 是否是填充模式\n */\n readonly thyFill = input(false, { transform: coerceBooleanProperty });\n\n /**\n * 是否响应式,自动计算宽度存放 thyNavItem,并添加更多弹框\n * @default false\n */\n readonly thyResponsive = input(undefined, { transform: coerceBooleanProperty });\n\n /**\n * 支持暂停自适应计算\n */\n readonly thyPauseReCalculate = input<boolean>(false);\n\n /**\n * 更多操作的菜单点击内部是否可关闭\n * @deprecated please use thyPopoverOptions\n */\n readonly thyInsideClosable = input(true, { transform: coerceBooleanProperty });\n\n /**\n * 更多菜单弹出框的参数,底层使用 Popover 组件\n * @type ThyPopoverConfig\n */\n readonly thyPopoverOptions = input<ThyPopoverConfig<unknown> | null>(null);\n\n /**\n * 右侧额外区域模板\n * @type TemplateRef\n */\n readonly thyExtra = input<TemplateRef<unknown>>();\n\n /**\n * @private\n */\n public readonly links = contentChildren(ThyNavItemDirective, { descendants: true });\n\n /**\n * @private\n */\n readonly routers = contentChildren(RouterLinkActive, { descendants: true });\n\n /**\n * 响应式模式下更多操作模板\n * @type TemplateRef\n */\n readonly moreOperation = contentChild<TemplateRef<unknown>>('more');\n\n /**\n * 响应式模式下更多弹框模板\n * @type TemplateRef\n */\n readonly morePopover = contentChild<TemplateRef<unknown>>('morePopover');\n\n /**\n * 右侧额外区域模板,支持 thyExtra 传参和 <ng-template #extra></ng-template> 模板\n * @name extra\n * @type TemplateRef\n */\n readonly extra = contentChild<TemplateRef<unknown>>('extra');\n\n readonly defaultMoreOperation = viewChild<ElementRef<HTMLAnchorElement>>('moreOperationContainer');\n\n readonly inkBar = viewChild.required(ThyNavInkBarDirective);\n\n readonly horizontal = computed(() => {\n const horizontalValue = this.thyHorizontal() as string;\n return horizontalValue === 'right' ? 'end' : horizontalValue;\n });\n\n readonly type = computed(() => this.thyType() || 'pulled');\n\n readonly showInkBar = computed(() => {\n const showTypes: ThyNavType[] = ['pulled', 'tabs'];\n return showTypes.includes(this.type());\n });\n\n private updateClasses() {\n let classNames: string[] = [];\n if (navTypeClassesMap[this.type()]) {\n classNames = [...navTypeClassesMap[this.type()]];\n }\n if (navSizeClassesMap[this.thySize()]) {\n classNames.push(navSizeClassesMap[this.thySize()]);\n }\n this.hostRenderer.updateClass(classNames);\n }\n\n private curActiveIndex?: number;\n\n private prevActiveIndex: WritableSignal<number> = signal(NaN);\n\n private navSubscription: { unsubscribe: () => void } | null = null;\n\n constructor() {\n effect(() => {\n this.updateClasses();\n });\n\n effect(() => {\n (this.hiddenItems() || []).forEach(item => {\n item.setNavLinkHidden(true);\n });\n });\n\n effect(() => {\n const thyVertical = this.thyVertical();\n const thyType = this.thyType();\n\n untracked(() => {\n this.alignInkBarToSelectedTab();\n });\n });\n\n effect(() => {\n const links = this.links();\n this.prevActiveIndex.set(NaN);\n const responsive = this.thyResponsive();\n\n untracked(() => {\n if (this.navSubscription) {\n this.navSubscription.unsubscribe();\n }\n\n this.navSubscription = merge(\n this.createResizeObserver(this.elementRef.nativeElement),\n ...links.map(item =>\n this.createResizeObserver(item.elementRef.nativeElement).pipe(\n tap(() => {\n item.setOffset();\n })\n )\n ),\n ...(this.routers() || []).map(router => router?.isActiveChange)\n )\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n tap(() => {\n if (this.thyPauseReCalculate()) {\n return;\n }\n\n if (responsive) {\n this.setMoreBtnOffset();\n this.resetSizes();\n this.setHiddenItems();\n }\n\n if (this.type() === 'card') {\n this.setNavItemDivider();\n }\n })\n )\n .subscribe(() => {\n this.alignInkBarToSelectedTab();\n });\n });\n });\n\n afterNextRender(() => {\n if (this.thyResponsive()) {\n from(Promise.resolve()).subscribe(() => {\n this.setMoreBtnOffset();\n this.links().forEach(link => link.setOffset());\n this.setHiddenItems();\n this.resetSizes();\n this.initialized.set(true);\n });\n } else {\n this.initialized.set(true);\n }\n });\n\n afterEveryRender(() => {\n this.curActiveIndex = this.links() && this.links().length ? this.links().findIndex(item => item.linkIsActive()) : -1;\n if (this.curActiveIndex < 0) {\n this.inkBar().hide();\n } else if (this.curActiveIndex !== this.prevActiveIndex()) {\n this.alignInkBarToSelectedTab();\n }\n });\n }\n\n private setMoreBtnOffset() {\n const defaultMoreOperation = this.defaultMoreOperation();\n const computedStyle = window.getComputedStyle(defaultMoreOperation!.nativeElement!);\n this.moreBtnOffset.set({\n height: defaultMoreOperation!.nativeElement!.offsetHeight! + parseFloat(computedStyle?.marginBottom) || 0,\n width: defaultMoreOperation!.nativeElement!.offsetWidth! + parseFloat(computedStyle?.marginRight) || 0\n });\n }\n\n private setNavItemDivider() {\n const tabs = this.links();\n const activeIndex = tabs.findIndex(item => item.linkIsActive());\n\n for (let i = 0; i < tabs.length; i++) {\n if ((i !== activeIndex && i !== activeIndex - 1 && i !== tabs.length - 1) || (i === activeIndex - 1 && this.moreActive())) {\n tabs[i].addClass('has-right-divider');\n } else {\n tabs[i].removeClass('has-right-divider');\n }\n }\n }\n\n createResizeObserver(element: HTMLElement) {\n return typeof ResizeObserver === 'undefined'\n ? of(null)\n : new Observable(observer => {\n const resize = new ResizeObserver(entries => {\n observer.next(entries);\n });\n resize.observe(element);\n return () => {\n resize.disconnect();\n };\n });\n }\n\n private calculateMoreIsActive() {\n const moreActive = this.hiddenItems().some(item => {\n return item.linkIsActive();\n });\n return moreActive;\n }\n\n private setHiddenItems() {\n const tabs = this.links();\n if (!tabs.length) {\n this.hiddenItems.set([]);\n return;\n }\n\n const endIndex = this.thyVertical()\n ? this.getShowItemsEndIndexWhenVertical(tabs as ThyNavItemDirective[])\n : this.getShowItemsEndIndexWhenHorizontal(tabs as ThyNavItemDirective[]);\n\n const showItems = tabs.slice(0, endIndex + 1);\n (showItems || []).forEach(item => {\n item.setNavLinkHidden(false);\n });\n\n this.hiddenItems.set(endIndex === tabs.length - 1 ? [] : tabs.slice(endIndex + 1));\n }\n\n private getShowItemsEndIndexWhenHorizontal(tabs: ThyNavItemDirective[]) {\n const tabsLength = tabs.length;\n let endIndex = tabsLength;\n let totalWidth = 0;\n\n for (let i = 0; i < tabsLength; i += 1) {\n const _totalWidth =\n i === tabsLength - 1 ? totalWidth + tabs[i].offset().width : totalWidth + tabs[i].offset().width + tabItemRight;\n if (_totalWidth > this.wrapperOffset().width) {\n const moreOperationWidth = this.moreBtnOffset().width;\n if (totalWidth + moreOperationWidth <= this.wrapperOffset().width) {\n endIndex = i - 1;\n } else {\n endIndex = i - 2;\n }\n break;\n } else {\n totalWidth = _totalWidth;\n endIndex = i;\n }\n }\n return endIndex;\n }\n\n private getShowItemsEndIndexWhenVertical(tabs: ThyNavItemDirective[]) {\n const tabsLength = tabs.length;\n let endIndex = tabsLength;\n let totalHeight = 0;\n for (let i = 0; i < tabsLength; i += 1) {\n const _totalHeight = totalHeight + tabs[i].offset().height;\n if (_totalHeight > this.wrapperOffset().height) {\n const moreOperationHeight = this.moreBtnOffset().height;\n if (totalHeight + moreOperationHeight <= this.wrapperOffset().height) {\n endIndex = i - 1;\n } else {\n endIndex = i - 2;\n }\n break;\n } else {\n totalHeight = _totalHeight;\n endIndex = i;\n }\n }\n return endIndex;\n }\n\n private resetSizes() {\n this.wrapperOffset.set({\n height: this.elementRef.nativeElement.clientHeight || 0,\n width: this.elementRef.nativeElement.clientWidth || 0,\n left: this.elementRef.nativeElement.offsetLeft || 0,\n top: this.elementRef.nativeElement.offsetTop || 0\n });\n }\n\n openMoreMenu(event: Event, template: TemplateRef<any>) {\n this.popover.open(\n template,\n Object.assign(\n {\n origin: event.currentTarget as HTMLElement,\n hasBackdrop: true,\n backdropClosable: true,\n insideClosable: true,\n placement: 'bottom' as ThyPlacement,\n panelClass: 'thy-nav-list-popover',\n originActiveClass: 'thy-nav-origin-active'\n },\n this.thyPopoverOptions() ? this.thyPopoverOptions() : {}\n )\n );\n }\n\n navItemClick(item: ThyNavItemDirective) {\n item.elementRef.nativeElement.click();\n }\n\n private alignInkBarToSelectedTab(): void {\n if (!this.showInkBar()) {\n this.inkBar().hide();\n return;\n }\n const tabs = this.links() ?? [];\n const selectedItem = tabs.find(item => item.linkIsActive());\n let selectedItemElement: HTMLElement = selectedItem && selectedItem.elementRef.nativeElement;\n\n if (selectedItem && this.moreActive()) {\n selectedItemElement = this.defaultMoreOperation()!.nativeElement;\n }\n if (selectedItemElement) {\n this.prevActiveIndex.set(this.curActiveIndex!);\n this.inkBar().alignToElement(selectedItemElement);\n }\n }\n\n ngOnDestroy() {\n if (this.navSubscription) {\n this.navSubscription.unsubscribe();\n }\n }\n}\n","<div class=\"thy-nav-list\" [ngClass]=\"horizontal() ? 'justify-content-' + horizontal() : ''\" #navList>\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n @if (thyResponsive()) {\n <a\n href=\"javascript:;\"\n class=\"thy-nav-more-container\"\n [class.d-none]=\"!showMore()\"\n [class.invisible]=\"!initialized()\"\n #moreOperationContainer\n thyNavLink\n [thyNavItemActive]=\"moreActive()\"\n (click)=\"openMoreMenu($event, navListPopover)\">\n @if (moreOperation()) {\n <ng-container [ngTemplateOutlet]=\"moreOperation()\"></ng-container>\n } @else {\n {{ locale().more }}\n <thy-icon thyIconName=\"angle-down\" class=\"thy-nav-more-icon\"></thy-icon>\n }\n </a>\n }\n @if (thyExtra() || extra()) {\n <div class=\"thy-nav-extra\">\n <ng-container [ngTemplateOutlet]=\"thyExtra() || extra()\"></ng-container>\n </div>\n }\n <thy-nav-ink-bar [showInkBar]=\"showInkBar()\" [isVertical]=\"thyVertical()\"></thy-nav-ink-bar>\n</div>\n\n<ng-template #navListPopover>\n @if (morePopover()) {\n <ng-container [ngTemplateOutlet]=\"morePopover()\" [ngTemplateOutletContext]=\"{ $implicit: hiddenItems() }\"></ng-container>\n } @else {\n <thy-dropdown-menu thyImmediateRender>\n @for (item of hiddenItems(); track $index) {\n <span\n thyDropdownMenuItem\n [thyDropdownMenuItemActive]=\"item.isActive()\"\n (click)=\"navItemClick(item)\"\n [innerHTML]=\"item.elementRef.nativeElement.innerHTML | bypassSecurityTrustHtml\"></span>\n }\n </thy-dropdown-menu>\n }\n</ng-template>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n","import { ThyDropdownModule } from 'ngx-tethys/dropdown';\nimport { ThyIconModule } from 'ngx-tethys/icon';\nimport { ThyPopoverModule } from 'ngx-tethys/popover';\n\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\n\nimport { ThyIconNavLink } from './icon-nav/icon-nav-link.directive';\nimport { ThyIconNav } from './icon-nav/icon-nav.component';\nimport { ThyNavInkBarDirective } from './nav-ink-bar.directive';\nimport { ThyNavItemDirective } from './nav-item.directive';\nimport { ThyNav } from './nav.component';\nimport { BypassSecurityTrustHtmlPipe } from './nav.pipe';\n\n@NgModule({\n imports: [\n CommonModule,\n ThyIconModule,\n ThyPopoverModule,\n ThyDropdownModule,\n RouterModule,\n ThyNav,\n ThyNavItemDirective,\n ThyIconNav,\n ThyIconNavLink,\n BypassSecurityTrustHtmlPipe,\n ThyNavInkBarDirective\n ],\n exports: [ThyNav, ThyNavItemDirective, ThyIconNav, ThyIconNavLink, BypassSecurityTrustHtmlPipe]\n})\nexport class ThyNavModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { Version } from '@angular/core';
2
2
 
3
- const VERSION = new Version('21.0.1');
3
+ const VERSION = new Version('21.0.3');
4
4
 
5
5
  /**
6
6
  * Generated bundle index. Do not edit.
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-tethys.mjs","sources":["../../../src/version.ts","../../../src/ngx-tethys.ts"],"sourcesContent":["import { Version } from '@angular/core';\n\nexport const VERSION = new Version('21.0.1');\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;MAEa,OAAO,GAAG,IAAI,OAAO,CAAC,QAAQ;;ACF3C;;AAEG;;;;"}
1
+ {"version":3,"file":"ngx-tethys.mjs","sources":["../../../src/version.ts","../../../src/ngx-tethys.ts"],"sourcesContent":["import { Version } from '@angular/core';\n\nexport const VERSION = new Version('21.0.3');\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;MAEa,OAAO,GAAG,IAAI,OAAO,CAAC,QAAQ;;ACF3C;;AAEG;;;;"}
@@ -293,12 +293,12 @@
293
293
  .thy-nav-item-hidden {
294
294
  display: block;
295
295
  }
296
- .thy-nav-item-more,
297
- .thy-nav-item-more * {
296
+
297
+ a.thy-nav-item {
298
+ color: variables.$nav-item-color;
298
299
  text-decoration: none;
299
- color: variables.$secondary;
300
300
  &:hover {
301
- color: variables.$gray-800;
301
+ color: variables.$nav-item-color;
302
302
  }
303
303
  }
304
304
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngx-tethys",
3
- "version": "21.0.1",
3
+ "version": "21.0.3",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+ssh://git@github.com/atinc/ngx-tethys.git"
@@ -1 +1 @@
1
- export declare const VERSION = "21.0.1";
1
+ export declare const VERSION = "21.0.3";
@@ -1,4 +1,4 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.VERSION = void 0;
4
- exports.VERSION = '21.0.1';
4
+ exports.VERSION = '21.0.3';
@@ -20,6 +20,14 @@ import { ThyI18nService } from 'ngx-tethys/i18n';
20
20
 
21
21
  /** Valid ARIA roles for a dialog element. */
22
22
  type ThyDialogRole = 'dialog' | 'alertdialog';
23
+ interface ThyDialogHeaderIcon {
24
+ name: string;
25
+ color?: string;
26
+ }
27
+ interface ThyDialogHeaderConfig {
28
+ title?: string;
29
+ icon?: string | ThyDialogHeaderIcon;
30
+ }
23
31
  declare enum ThyDialogSizes {
24
32
  lg = "lg",
25
33
  /**
@@ -40,6 +48,11 @@ declare enum ThyDialogSizes {
40
48
  * @order 20
41
49
  */
42
50
  declare class ThyDialogConfig<TData = unknown> extends ThyAbstractOverlayConfig<TData> {
51
+ /**
52
+ * 模态框头部配置,设置后会在内容前显示默认头部
53
+ * @description.en-us Dialog header config. When set, a default header will be rendered before the dialog content.
54
+ */
55
+ header?: ThyDialogHeaderConfig;
43
56
  /**
44
57
  * 对话框元素的 ARIA 角色
45
58
  * @description.en-us The ARIA role of the dialog element.
@@ -171,7 +184,9 @@ declare class ThyDialogHeader implements OnInit {
171
184
  /**
172
185
  * 头部图标
173
186
  */
174
- readonly thyIcon: i0.InputSignal<string | undefined>;
187
+ readonly thyIcon: i0.InputSignal<string | ThyDialogHeaderIcon | undefined>;
188
+ readonly iconName: Signal<string>;
189
+ readonly iconColor: Signal<string | undefined>;
175
190
  /**
176
191
  * 关闭事件
177
192
  */
@@ -390,4 +405,4 @@ declare const thyDialogAnimations: {
390
405
  };
391
406
 
392
407
  export { THY_CONFIRM_DEFAULT_OPTIONS, THY_CONFIRM_DEFAULT_OPTIONS_PROVIDER, THY_CONFIRM_DEFAULT_OPTIONS_VALUE, THY_DIALOG_DEFAULT_OPTIONS, THY_DIALOG_DEFAULT_OPTIONS_PROVIDER, THY_DIALOG_LAYOUT_CONFIG, THY_DIALOG_LAYOUT_CONFIG_PROVIDER, ThyConfirm as ThyConfirmComponent$1, ThyDialog, ThyDialogBody, ThyDialogConfig, ThyDialogContainer, ThyDialogFooter, ThyDialogHeader, ThyDialogLayoutConfig, ThyDialogModule, ThyDialogRef, ThyDialogSizes, thyDialogAnimations };
393
- export type { ThyConfirmConfig, ThyDialogFooterAlign, ThyDialogRole };
408
+ export type { ThyConfirmConfig, ThyDialogFooterAlign, ThyDialogHeaderConfig, ThyDialogHeaderIcon, ThyDialogRole };