@brggroup/share-lib 0.1.43 → 0.1.45

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,25 +1,25 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { inject, Injectable, NgZone, Component, HostListener, ViewContainerRef, Input, ViewChild, EventEmitter, Output, Directive, Optional, Self, HostBinding, Pipe, forwardRef } from '@angular/core';
3
- import * as i1$5 from '@angular/router';
3
+ import * as i1$6 from '@angular/router';
4
4
  import { Router, ActivatedRoute, NavigationEnd, RouterLink, RouterOutlet } from '@angular/router';
5
5
  import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
6
6
  import * as i3 from '@ngx-translate/core';
7
7
  import { TranslateService, TranslateModule } from '@ngx-translate/core';
8
8
  import { firstValueFrom, fromEvent, startWith, map, BehaviorSubject, of, catchError, throwError, finalize, from, switchMap as switchMap$1, take, filter, Subject, takeUntil as takeUntil$1 } from 'rxjs';
9
- import { NzNotificationService } from 'ng-zorro-antd/notification';
10
- import * as i1 from 'ng-zorro-antd/modal';
9
+ import * as i1$1 from 'ng-zorro-antd/modal';
11
10
  import { NzModalService, NzModalComponent, NzModalContentDirective, NzModalTitleDirective, NzModalFooterDirective } from 'ng-zorro-antd/modal';
11
+ import * as i1 from 'ng-zorro-antd/notification';
12
12
  import { jwtDecode } from 'jwt-decode';
13
13
  import { switchMap, distinctUntilChanged, filter as filter$1, takeUntil } from 'rxjs/operators';
14
14
  import * as i2$1 from '@angular/forms';
15
15
  import { FormGroup, FormsModule, ReactiveFormsModule, Validators, NG_VALUE_ACCESSOR, FormBuilder } from '@angular/forms';
16
- import * as i1$3 from '@angular/common';
16
+ import * as i1$4 from '@angular/common';
17
17
  import { Location, CommonModule, NgTemplateOutlet, DecimalPipe } from '@angular/common';
18
18
  import { Overlay } from '@angular/cdk/overlay';
19
19
  import { TemplatePortal } from '@angular/cdk/portal';
20
- import * as i1$1 from 'ng-zorro-antd/breadcrumb';
20
+ import * as i1$2 from 'ng-zorro-antd/breadcrumb';
21
21
  import { NzBreadCrumbModule } from 'ng-zorro-antd/breadcrumb';
22
- import * as i1$2 from 'ng-zorro-antd/icon';
22
+ import * as i1$3 from 'ng-zorro-antd/icon';
23
23
  import { NzIconModule } from 'ng-zorro-antd/icon';
24
24
  import { Chart, registerables } from 'chart.js';
25
25
  import * as i4 from 'ng-zorro-antd/grid';
@@ -42,9 +42,9 @@ import { NzTableModule } from 'ng-zorro-antd/table';
42
42
  import * as i8 from 'ng-zorro-antd/button';
43
43
  import { NzButtonModule } from 'ng-zorro-antd/button';
44
44
  import * as i4$1 from 'ng-zorro-antd/core/transition-patch';
45
- import * as i1$4 from 'ng-zorro-antd/pagination';
45
+ import * as i1$5 from 'ng-zorro-antd/pagination';
46
46
  import { NzPaginationModule } from 'ng-zorro-antd/pagination';
47
- import * as i1$6 from 'ngx-extended-pdf-viewer';
47
+ import * as i1$7 from 'ngx-extended-pdf-viewer';
48
48
  import { NgxExtendedPdfViewerModule } from 'ngx-extended-pdf-viewer';
49
49
  import { trigger, transition, style, animate } from '@angular/animations';
50
50
  import * as i2$3 from 'ng-zorro-antd/spin';
@@ -272,12 +272,84 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImpor
272
272
  args: [{ providedIn: 'root' }]
273
273
  }] });
274
274
 
275
+ class CustomNotiService {
276
+ notification;
277
+ static defaultDuration = 2000;
278
+ static defaultPlacement = 'topRight';
279
+ globalTemplate;
280
+ constructor(notification) {
281
+ this.notification = notification;
282
+ }
283
+ registerTemplate(tpl) {
284
+ this.globalTemplate = tpl;
285
+ }
286
+ success(title, content, options) {
287
+ this.show('success', title, content, options);
288
+ }
289
+ warning(title, content, options) {
290
+ this.show('warning', title, content, options);
291
+ }
292
+ error(title, content, options) {
293
+ this.show('error', title, content, options);
294
+ }
295
+ show(type, title, content, options) {
296
+ if (!this.globalTemplate) {
297
+ console.error('AppNotificationService: Template chưa được đăng ký!');
298
+ return;
299
+ }
300
+ const config = this.getConfigByType(type);
301
+ const finalDuration = options?.duration ?? CustomNotiService.defaultDuration;
302
+ const finalPlacement = options?.placement ?? CustomNotiService.defaultPlacement;
303
+ const notiRef = this.notification.template(this.globalTemplate, {
304
+ nzDuration: finalDuration,
305
+ nzPlacement: finalPlacement,
306
+ nzClass: 'notification-with-progress',
307
+ nzData: {
308
+ title,
309
+ description: content,
310
+ duration: finalDuration,
311
+ icon: config.icon,
312
+ color: config.color,
313
+ showDetail: options?.showDetail || false,
314
+ onDetailClick: () => {
315
+ if (options?.onDetail) {
316
+ options.onDetail();
317
+ }
318
+ // đóng popup sau khi bấm "Chi tiết"
319
+ this.notification.remove(notiRef.messageId);
320
+ },
321
+ },
322
+ });
323
+ }
324
+ getConfigByType(type) {
325
+ switch (type) {
326
+ case 'success':
327
+ return { icon: 'check-circle', color: '#52c41a' };
328
+ case 'warning':
329
+ return { icon: 'exclamation-circle', color: '#faad14' };
330
+ case 'error':
331
+ return { icon: 'close-circle', color: '#ff4d4f' };
332
+ default:
333
+ return { icon: 'info-circle', color: '#1890ff' };
334
+ }
335
+ }
336
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: CustomNotiService, deps: [{ token: i1.NzNotificationService }], target: i0.ɵɵFactoryTarget.Injectable });
337
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: CustomNotiService, providedIn: 'root' });
338
+ }
339
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: CustomNotiService, decorators: [{
340
+ type: Injectable,
341
+ args: [{
342
+ providedIn: 'root',
343
+ }]
344
+ }], ctorParameters: () => [{ type: i1.NzNotificationService }] });
345
+
275
346
  function escapeHtml(str) {
276
347
  return str.replace(/</g, '&lt;').replace(/>/g, '&gt;');
277
348
  }
278
349
  class NotiService {
279
350
  modal = inject(NzModalService);
280
- notification = inject(NzNotificationService);
351
+ // notification = inject(NzNotificationService);
352
+ notification = inject(CustomNotiService);
281
353
  translate = inject(TranslateService);
282
354
  device = inject(DeviceService);
283
355
  async success(title, content = '', showPopup = false) {
@@ -292,9 +364,6 @@ class NotiService {
292
364
  }
293
365
  else {
294
366
  const notiRef = this.notification.success(title ?? this.translate.instant(TranslateKey.SUCCESS), content);
295
- if (notiRef?.onClose) {
296
- await firstValueFrom(notiRef.onClose);
297
- }
298
367
  }
299
368
  }
300
369
  async warning(title, content = '', showPopup = false) {
@@ -309,9 +378,6 @@ class NotiService {
309
378
  }
310
379
  else {
311
380
  const notiRef = this.notification.warning(title, content);
312
- if (notiRef?.onClose) {
313
- await firstValueFrom(notiRef.onClose);
314
- }
315
381
  }
316
382
  }
317
383
  async error(title, content = '', showPopup = false) {
@@ -326,9 +392,6 @@ class NotiService {
326
392
  }
327
393
  else {
328
394
  const notiRef = this.notification.error(title, content);
329
- if (notiRef?.onClose) {
330
- await firstValueFrom(notiRef.onClose);
331
- }
332
395
  }
333
396
  }
334
397
  handleError(err) {
@@ -410,15 +473,9 @@ class NotiService {
410
473
  errorMsg = _data.ErrorMessage;
411
474
  }
412
475
  }
413
- const modalRef = this.modal.error({
414
- nzTitle: 'Lỗi phát sinh',
415
- nzContent: errorMsg,
416
- nzWidth: this.modalWidth,
417
- nzClosable: false,
418
- nzCancelText: 'Đóng',
419
- nzOkText: 'Chi tiết',
420
- nzOnOk: () => {
421
- modalRef.destroy();
476
+ this.notification.error('Lỗi phát sinh', errorMsg, {
477
+ showDetail: true,
478
+ onDetail: () => {
422
479
  this.modal.error({
423
480
  nzTitle: 'Chi tiết lỗi',
424
481
  nzContent: escapeHtml(JSON.stringify(_data, null, 2)),
@@ -1186,13 +1243,13 @@ class CustomModalService {
1186
1243
  error(options) {
1187
1244
  return this.modal.error(options);
1188
1245
  }
1189
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: CustomModalService, deps: [{ token: i1.NzModalService }], target: i0.ɵɵFactoryTarget.Injectable });
1246
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: CustomModalService, deps: [{ token: i1$1.NzModalService }], target: i0.ɵɵFactoryTarget.Injectable });
1190
1247
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: CustomModalService, providedIn: 'root' });
1191
1248
  }
1192
1249
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: CustomModalService, decorators: [{
1193
1250
  type: Injectable,
1194
1251
  args: [{ providedIn: 'root' }]
1195
- }], ctorParameters: () => [{ type: i1.NzModalService }] });
1252
+ }], ctorParameters: () => [{ type: i1$1.NzModalService }] });
1196
1253
 
1197
1254
  class BaseComponent {
1198
1255
  AppGlobals = AppGlobals;
@@ -1503,7 +1560,7 @@ class Breadcrumb extends BaseComponent {
1503
1560
  }
1504
1561
  }
1505
1562
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: Breadcrumb, deps: null, target: i0.ɵɵFactoryTarget.Component });
1506
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: Breadcrumb, isStandalone: true, selector: "app-breadcrumb", usesInheritance: true, ngImport: i0, template: "<nz-breadcrumb>\n <nz-breadcrumb-item (click)=\"gohome()\">\n <nz-icon nzType=\"home\" nzTheme=\"outline\" />\n </nz-breadcrumb-item>\n @for (item of Breadcrumb.lstBreadcrumb; track $index) {\n <nz-breadcrumb-item (click)=\"onclick(item)\">{{ item.Name }}</nz-breadcrumb-item>\n }\n</nz-breadcrumb>\n", dependencies: [{ kind: "ngmodule", type: NzBreadCrumbModule }, { kind: "component", type: i1$1.NzBreadCrumbComponent, selector: "nz-breadcrumb", inputs: ["nzAutoGenerate", "nzSeparator", "nzRouteLabel", "nzRouteLabelFn", "nzRouteFn"], exportAs: ["nzBreadcrumb"] }, { kind: "component", type: i1$1.NzBreadCrumbItemComponent, selector: "nz-breadcrumb-item", inputs: ["nzOverlay"], exportAs: ["nzBreadcrumbItem"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$2.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }] });
1563
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: Breadcrumb, isStandalone: true, selector: "app-breadcrumb", usesInheritance: true, ngImport: i0, template: "<nz-breadcrumb>\n <nz-breadcrumb-item (click)=\"gohome()\">\n <nz-icon nzType=\"home\" nzTheme=\"outline\" />\n </nz-breadcrumb-item>\n @for (item of Breadcrumb.lstBreadcrumb; track $index) {\n <nz-breadcrumb-item (click)=\"onclick(item)\">{{ item.Name }}</nz-breadcrumb-item>\n }\n</nz-breadcrumb>\n", dependencies: [{ kind: "ngmodule", type: NzBreadCrumbModule }, { kind: "component", type: i1$2.NzBreadCrumbComponent, selector: "nz-breadcrumb", inputs: ["nzAutoGenerate", "nzSeparator", "nzRouteLabel", "nzRouteLabelFn", "nzRouteFn"], exportAs: ["nzBreadcrumb"] }, { kind: "component", type: i1$2.NzBreadCrumbItemComponent, selector: "nz-breadcrumb-item", inputs: ["nzOverlay"], exportAs: ["nzBreadcrumbItem"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$3.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }] });
1507
1564
  }
1508
1565
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: Breadcrumb, decorators: [{
1509
1566
  type: Component,
@@ -1641,7 +1698,7 @@ class BarGraphComponent {
1641
1698
  });
1642
1699
  }
1643
1700
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: BarGraphComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1644
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.7", type: BarGraphComponent, isStandalone: true, selector: "cdk-bar-graph", inputs: { height: "height", id: "id" }, ngImport: i0, template: "<div class=\"dash-bar-graph-holder mat-elevation-z4\" [ngStyle]=\"{ height: height + 'px' }\">\n <canvas [id]=\"id\"></canvas>\n</div>\n", styles: [".dash-bar-graph-holder{margin:10px 5px;background-color:#fff}.nav-item{transition:all .6s cubic-bezier(.165,.84,.44,1);cursor:default}.nav-item:hover{transform:translateY(-8px);box-shadow:0 20px 20px #00000029}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
1701
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.7", type: BarGraphComponent, isStandalone: true, selector: "cdk-bar-graph", inputs: { height: "height", id: "id" }, ngImport: i0, template: "<div class=\"dash-bar-graph-holder mat-elevation-z4\" [ngStyle]=\"{ height: height + 'px' }\">\n <canvas [id]=\"id\"></canvas>\n</div>\n", styles: [".dash-bar-graph-holder{margin:10px 5px;background-color:#fff}.nav-item{transition:all .6s cubic-bezier(.165,.84,.44,1);cursor:default}.nav-item:hover{transform:translateY(-8px);box-shadow:0 20px 20px #00000029}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
1645
1702
  }
1646
1703
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: BarGraphComponent, decorators: [{
1647
1704
  type: Component,
@@ -1657,7 +1714,7 @@ class DashcardComponent {
1657
1714
  constructor() { }
1658
1715
  ngOnInit() { }
1659
1716
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: DashcardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1660
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.7", type: DashcardComponent, isStandalone: true, selector: "cdk-dashcard", inputs: { dashData: "dashData" }, ngImport: i0, template: "<div nz-row class=\"dashcard mat-elevation-z2\" style=\"height: 100%\">\n <div nz-col [nzSpan]=\"8\" class=\"text-center\" [style.background]=\"dashData?.colorLight\">\n <nz-icon class=\"mat-icon\" style=\"padding-top: 50px\" [nzType]=\"dashData?.icon\" nzTheme=\"outline\" />\n </div>\n <div nz-col [nzSpan]=\"16\" [style.background]=\"dashData?.colorDark\">\n <div class=\"text-center animated-digit\">\n <animated-digit [digit]=\"dashData?.number\"></animated-digit>\n </div>\n <p\n class=\"text-center mat-body-1 border-top text-bold\"\n style=\"font-size: 16px; margin-bottom: 8px; padding-top: 3px\"\n >\n {{ dashData?.title }}\n </p>\n </div>\n</div>\n", styles: [".dashcard .dashcard{margin:10px 5px;height:100px;background-color:#fff}.dashcard .mat-icon{font-size:40px;height:40px;width:40px;color:#fff}.dashcard .border-top{border-top:1px solid white}.dashcard .mat-headline,.dashcard .mat-body-1{margin:0;color:#fff}.dashcard .animated-digit{color:#fff;font-size:40px;font-weight:700}.nav-item{transition:all .6s cubic-bezier(.165,.84,.44,1);cursor:default}.nav-item:hover{transform:translateY(-8px);box-shadow:0 20px 20px #00000029}\n"], dependencies: [{ kind: "ngmodule", type: NzGridModule }, { kind: "directive", type: i4.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i4.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$2.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "component", type: AnimatedDigitComponent, selector: "animated-digit", inputs: ["duration", "digit", "steps"] }] });
1717
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.7", type: DashcardComponent, isStandalone: true, selector: "cdk-dashcard", inputs: { dashData: "dashData" }, ngImport: i0, template: "<div nz-row class=\"dashcard mat-elevation-z2\" style=\"height: 100%\">\n <div nz-col [nzSpan]=\"8\" class=\"text-center\" [style.background]=\"dashData?.colorLight\">\n <nz-icon class=\"mat-icon\" style=\"padding-top: 50px\" [nzType]=\"dashData?.icon\" nzTheme=\"outline\" />\n </div>\n <div nz-col [nzSpan]=\"16\" [style.background]=\"dashData?.colorDark\">\n <div class=\"text-center animated-digit\">\n <animated-digit [digit]=\"dashData?.number\"></animated-digit>\n </div>\n <p\n class=\"text-center mat-body-1 border-top text-bold\"\n style=\"font-size: 16px; margin-bottom: 8px; padding-top: 3px\"\n >\n {{ dashData?.title }}\n </p>\n </div>\n</div>\n", styles: [".dashcard .dashcard{margin:10px 5px;height:100px;background-color:#fff}.dashcard .mat-icon{font-size:40px;height:40px;width:40px;color:#fff}.dashcard .border-top{border-top:1px solid white}.dashcard .mat-headline,.dashcard .mat-body-1{margin:0;color:#fff}.dashcard .animated-digit{color:#fff;font-size:40px;font-weight:700}.nav-item{transition:all .6s cubic-bezier(.165,.84,.44,1);cursor:default}.nav-item:hover{transform:translateY(-8px);box-shadow:0 20px 20px #00000029}\n"], dependencies: [{ kind: "ngmodule", type: NzGridModule }, { kind: "directive", type: i4.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i4.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$3.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "component", type: AnimatedDigitComponent, selector: "animated-digit", inputs: ["duration", "digit", "steps"] }] });
1661
1718
  }
1662
1719
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: DashcardComponent, decorators: [{
1663
1720
  type: Component,
@@ -1727,7 +1784,7 @@ class DoughnutGraphComponent {
1727
1784
  });
1728
1785
  }
1729
1786
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: DoughnutGraphComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1730
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.7", type: DoughnutGraphComponent, isStandalone: true, selector: "cdk-doughnut-graph", inputs: { height: "height", id: "id" }, ngImport: i0, template: "<div class=\"doughnut-graph-graph-holder mat-elevation-z4 \" [ngStyle]=\"{'height': height + 'px'}\">\n <canvas [id]=\"id\"></canvas>\n</div>", styles: [".doughnut-graph-graph-holder{margin:10px 5px;background-color:#fff}.nav-item{transition:all .6s cubic-bezier(.165,.84,.44,1);cursor:default}.nav-item:hover{transform:translateY(-8px);box-shadow:0 20px 20px #00000029}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
1787
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.7", type: DoughnutGraphComponent, isStandalone: true, selector: "cdk-doughnut-graph", inputs: { height: "height", id: "id" }, ngImport: i0, template: "<div class=\"doughnut-graph-graph-holder mat-elevation-z4 \" [ngStyle]=\"{'height': height + 'px'}\">\n <canvas [id]=\"id\"></canvas>\n</div>", styles: [".doughnut-graph-graph-holder{margin:10px 5px;background-color:#fff}.nav-item{transition:all .6s cubic-bezier(.165,.84,.44,1);cursor:default}.nav-item:hover{transform:translateY(-8px);box-shadow:0 20px 20px #00000029}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
1731
1788
  }
1732
1789
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: DoughnutGraphComponent, decorators: [{
1733
1790
  type: Component,
@@ -1789,7 +1846,7 @@ class LineGraphComponent {
1789
1846
  });
1790
1847
  }
1791
1848
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: LineGraphComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1792
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.7", type: LineGraphComponent, isStandalone: true, selector: "cdk-line-graph", inputs: { height: "height", id: "id" }, ngImport: i0, template: "<div class=\"line-graph-holder mat-elevation-z4 \" [ngStyle]=\"{'height': height + 'px'}\">\n <canvas [id]=\"id\"></canvas>\n</div>", styles: [".line-graph-holder{margin:10px 5px;background-color:#fff}.nav-item{transition:all .6s cubic-bezier(.165,.84,.44,1);cursor:default}.nav-item:hover{transform:translateY(-8px);box-shadow:0 20px 20px #00000029}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
1849
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.7", type: LineGraphComponent, isStandalone: true, selector: "cdk-line-graph", inputs: { height: "height", id: "id" }, ngImport: i0, template: "<div class=\"line-graph-holder mat-elevation-z4 \" [ngStyle]=\"{'height': height + 'px'}\">\n <canvas [id]=\"id\"></canvas>\n</div>", styles: [".line-graph-holder{margin:10px 5px;background-color:#fff}.nav-item{transition:all .6s cubic-bezier(.165,.84,.44,1);cursor:default}.nav-item:hover{transform:translateY(-8px);box-shadow:0 20px 20px #00000029}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
1793
1850
  }
1794
1851
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: LineGraphComponent, decorators: [{
1795
1852
  type: Component,
@@ -2326,19 +2383,58 @@ class ExtendDatePicker {
2326
2383
  }
2327
2384
  isTouched = false;
2328
2385
  inputErrorMessage = '';
2329
- get customValidateStatus() {
2330
- const msg = this.errorMessage;
2331
- if (msg) {
2332
- return msg;
2333
- }
2334
- return '';
2335
- }
2336
2386
  errorMessages = {
2337
2387
  required: 'Trường yêu cầu nhập',
2338
2388
  invalidDate: 'Ngày không hợp lệ',
2339
2389
  };
2390
+ // Gom chung logic kiểm tra lỗi vào customValidateStatus
2391
+ get customValidateStatus() {
2392
+ // 1. Không hiển thị lỗi nếu chưa thao tác (blur) và form chưa được submit
2393
+ if (!this.isTouched && !this.isSubmited) {
2394
+ return '';
2395
+ }
2396
+ // 2. Ưu tiên lỗi truyền trực tiếp từ bên ngoài vào
2397
+ if (this.inputErrorMessage) {
2398
+ return this.inputErrorMessage;
2399
+ }
2400
+ // 3. Kiểm tra rỗng -> Map lỗi 'required'
2401
+ const isEmpty = this._ngModel === null ||
2402
+ this._ngModel === undefined ||
2403
+ this._ngModel === '' ||
2404
+ (Array.isArray(this._ngModel) && this._ngModel.length === 0);
2405
+ if (isEmpty) {
2406
+ return this.required ? this.errorMessages['required'] || 'Trường yêu cầu nhập' : '';
2407
+ }
2408
+ // 4. Kiểm tra ngày không hợp lệ (Invalid Date) -> Map lỗi 'invalidDate'
2409
+ let isInvalidDate = false;
2410
+ if (Array.isArray(this._ngModel)) {
2411
+ // Trường hợp Range Picker (Mảng)
2412
+ isInvalidDate = this._ngModel.some((date) => !date || isNaN(new Date(date).getTime()));
2413
+ }
2414
+ else {
2415
+ // Trường hợp Date Picker thường
2416
+ isInvalidDate = isNaN(new Date(this._ngModel).getTime());
2417
+ }
2418
+ if (isInvalidDate) {
2419
+ return this.errorMessages['invalidDate'] || 'Ngày không hợp lệ';
2420
+ }
2421
+ // 5. Kiểm tra Min Date / Max Date
2422
+ if (!Array.isArray(this._ngModel)) {
2423
+ const value = new Date(this._ngModel);
2424
+ if (this.minDate && value < new Date(new Date(this.minDate).setHours(0, 0, 0, 0))) {
2425
+ // Tận dụng errorMessages nếu bạn muốn truyền từ ngoài, nếu không dùng default
2426
+ return this.errorMessages['minDate'] || `Ngày không được nhỏ hơn ${this.formatDate(this.minDate)}`;
2427
+ }
2428
+ if (this.maxDate && value > new Date(new Date(this.maxDate).setHours(23, 59, 59, 999))) {
2429
+ // Tận dụng errorMessages nếu bạn muốn truyền từ ngoài, nếu không dùng default
2430
+ return this.errorMessages['maxDate'] || `Ngày không được lớn hơn ${this.formatDate(this.maxDate)}`;
2431
+ }
2432
+ }
2433
+ // Nếu vượt qua mọi cửa kiểm tra thì hợp lệ
2434
+ return '';
2435
+ }
2340
2436
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: ExtendDatePicker, deps: [], target: i0.ɵɵFactoryTarget.Component });
2341
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: ExtendDatePicker, isStandalone: true, selector: "extend-date-picker", inputs: { dateFormat: "dateFormat", label: "label", placeHolder: "placeHolder", labelAlign: "labelAlign", floatingLabel: "floatingLabel", showTime: "showTime", labelSpan: "labelSpan", labelFlex: "labelFlex", inputFlex: "inputFlex", disabled: "disabled", required: "required", isSubmited: "isSubmited", noBottom: "noBottom", selectModeType: "selectModeType", inputWidth: "inputWidth", inputHeight: "inputHeight", borderBottomOnly: "borderBottomOnly", displayInline: "displayInline", size: "size", minDate: "minDate", maxDate: "maxDate", lstItem: "lstItem", displayField: "displayField", valueField: "valueField", formData: "formData", controlName: "controlName", _ngModel: "_ngModel", isTouched: "isTouched", inputErrorMessage: "inputErrorMessage", errorMessages: "errorMessages" }, outputs: { _ngModelChange: "_ngModelChange" }, ngImport: i0, template: "<div\n class=\"extend-date-picker-wrapper\"\n [ngClass]=\"[floatingLabel ? 'floating-label' : '']\"\n [ngStyle]=\"{ display: displayInline ? 'inline' : null }\"\n>\n @if (controlName) {\n <div [formGroup]=\"formData\">\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"floatingLabel || labelFlex ? null : 24 - labelSpan\"\n [nzFlex]=\"inputFlex\"\n [ngClass]=\"{ 'full-width': floatingLabel }\"\n [nzErrorTip]=\"dynamicErrorTemplate\"\n >\n <nz-date-picker\n class=\"full-width\"\n [nzPlaceHolder]=\"placeHolder || ' '\"\n [nzFormat]=\"dateFormat\"\n [nzSize]=\"size\"\n [formControlName]=\"controlName\"\n [ngStyle]=\"{\n width: inputWidth,\n height: inputHeight,\n }\"\n [ngClass]=\"{\n 'border-bottom-only': borderBottomOnly,\n }\"\n [nzShowTime]=\"showTime\"\n ></nz-date-picker>\n </nz-form-control>\n </nz-form-item>\n\n <ng-template #dynamicErrorTemplate let-control>\n <ng-container *ngFor=\"let error of errorMessages | keyvalue\">\n <ng-container *ngIf=\"control.hasError(error.key)\">\n {{ error.value }}\n </ng-container>\n </ng-container>\n </ng-template>\n </div>\n } @else {\n @if (label) {\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"floatingLabel || labelFlex ? null : 24 - labelSpan\"\n [nzFlex]=\"inputFlex\"\n [ngClass]=\"{ 'full-width': floatingLabel }\"\n [nzErrorTip]=\"customValidateStatus\"\n [nzValidateStatus]=\"customValidateStatus ? 'error' : ''\"\n >\n <nz-date-picker\n class=\"full-width\"\n [nzPlaceHolder]=\"placeHolder || ' '\"\n [nzFormat]=\"dateFormat\"\n [nzSize]=\"size\"\n [disabled]=\"disabled\"\n [nzDisabledDate]=\"disabledDate\"\n [nzShowTime]=\"showTime\"\n [ngStyle]=\"{\n width: inputWidth,\n height: inputHeight,\n }\"\n [ngClass]=\"{\n 'border-bottom-only': borderBottomOnly,\n }\"\n [(ngModel)]=\"_ngModel\"\n (ngModelChange)=\"onNgModelChange($event)\"\n (blur)=\"onBlur()\"\n ></nz-date-picker>\n </nz-form-control>\n </nz-form-item>\n } @else {\n <nz-date-picker\n class=\"full-width\"\n [ngStyle]=\"{\n width: inputWidth,\n height: inputHeight,\n }\"\n [ngClass]=\"{\n 'border-bottom-only': borderBottomOnly,\n }\"\n [nzSize]=\"size\"\n [nzPlaceHolder]=\"placeHolder || ' '\"\n [nzFormat]=\"dateFormat\"\n [nzShowTime]=\"showTime\"\n [disabled]=\"disabled\"\n [(ngModel)]=\"_ngModel\"\n (ngModelChange)=\"onNgModelChange($event)\"\n ></nz-date-picker>\n }\n }\n</div>\n", styles: ["::ng-deep .extend-date-picker-wrapper.floating-label{position:relative;padding-top:14px}::ng-deep .extend-date-picker-wrapper nz-form-item nz-form-label{position:absolute;top:12px;left:10px;transform:translateY(-50%);background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 80%,#ffffff 80%);z-index:1;height:auto;line-height:normal;padding:0 4px}::ng-deep .extend-date-picker-wrapper nz-form-item nz-form-label label{font-size:12px;color:#969696;font-weight:700;height:auto;line-height:normal;padding:0;display:flex;align-items:center}::ng-deep .extend-date-picker-wrapper .full-width{width:100%}.extend-date-picker-wrapper.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label,.extend-date-picker-wrapper.floating-label nz-form-item:has(input[disabled]) nz-form-label,.extend-date-picker-wrapper.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label{background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 75%,#f5f5f5 50%)}.extend-date-picker-wrapper.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label label,.extend-date-picker-wrapper.floating-label nz-form-item:has(input[disabled]) nz-form-label label,.extend-date-picker-wrapper.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label label{color:#bfbfbf}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: i1$3.KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: NzFormModule }, { kind: "directive", type: i4.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i4.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "component", type: i5.NzFormItemComponent, selector: "nz-form-item", exportAs: ["nzFormItem"] }, { kind: "component", type: i5.NzFormLabelComponent, selector: "nz-form-label", inputs: ["nzFor", "nzRequired", "nzNoColon", "nzTooltipTitle", "nzTooltipIcon", "nzLabelAlign", "nzLabelWrap"], exportAs: ["nzFormLabel"] }, { kind: "component", type: i5.NzFormControlComponent, selector: "nz-form-control", inputs: ["nzSuccessTip", "nzWarningTip", "nzErrorTip", "nzValidatingTip", "nzExtra", "nzAutoTips", "nzDisableAutoTips", "nzHasFeedback", "nzValidateStatus"], exportAs: ["nzFormControl"] }, { kind: "ngmodule", type: NzDatePickerModule }, { kind: "component", type: i5$1.NzDatePickerComponent, selector: "nz-date-picker,nz-week-picker,nz-month-picker,nz-quarter-picker,nz-year-picker,nz-range-picker", inputs: ["nzAllowClear", "nzAutoFocus", "nzDisabled", "nzBorderless", "nzInputReadOnly", "nzInline", "nzOpen", "nzDisabledDate", "nzLocale", "nzPlaceHolder", "nzPopupStyle", "nzDropdownClassName", "nzSize", "nzStatus", "nzFormat", "nzDateRender", "nzDisabledTime", "nzRenderExtraFooter", "nzShowToday", "nzMode", "nzShowNow", "nzRanges", "nzDefaultPickerValue", "nzSeparator", "nzSuffixIcon", "nzBackdrop", "nzId", "nzPlacement", "nzShowWeekNumber", "nzShowTime"], outputs: ["nzOnPanelChange", "nzOnCalendarChange", "nzOnOk", "nzOnOpenChange"], exportAs: ["nzDatePicker"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: DateInputParserDirective, selector: "nz-date-picker", inputs: ["nzFormat"] }] });
2437
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: ExtendDatePicker, isStandalone: true, selector: "extend-date-picker", inputs: { dateFormat: "dateFormat", label: "label", placeHolder: "placeHolder", labelAlign: "labelAlign", floatingLabel: "floatingLabel", showTime: "showTime", labelSpan: "labelSpan", labelFlex: "labelFlex", inputFlex: "inputFlex", disabled: "disabled", required: "required", isSubmited: "isSubmited", noBottom: "noBottom", selectModeType: "selectModeType", inputWidth: "inputWidth", inputHeight: "inputHeight", borderBottomOnly: "borderBottomOnly", displayInline: "displayInline", size: "size", minDate: "minDate", maxDate: "maxDate", lstItem: "lstItem", displayField: "displayField", valueField: "valueField", formData: "formData", controlName: "controlName", _ngModel: "_ngModel", isTouched: "isTouched", inputErrorMessage: "inputErrorMessage", errorMessages: "errorMessages" }, outputs: { _ngModelChange: "_ngModelChange" }, ngImport: i0, template: "<div\n class=\"extend-date-picker-wrapper\"\n [ngClass]=\"[floatingLabel && label ? 'floating-label' : '']\"\n [ngStyle]=\"{ display: displayInline ? 'inline' : null }\"\n>\n @if (controlName) {\n <div [formGroup]=\"formData\">\n <nz-form-item>\n @if (label) {\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n }\n <nz-form-control\n [nzSpan]=\"label ? (floatingLabel || labelFlex ? null : 24 - labelSpan) : null\"\n [nzFlex]=\"inputFlex\"\n [ngClass]=\"{ 'full-width': floatingLabel || !label }\"\n [nzErrorTip]=\"customValidateStatus\"\n [nzValidateStatus]=\"customValidateStatus ? 'error' : ''\"\n >\n <nz-date-picker\n class=\"full-width\"\n [nzPlaceHolder]=\"placeHolder || ' '\"\n [nzFormat]=\"dateFormat\"\n [nzSize]=\"size\"\n [formControlName]=\"controlName\"\n [nzDisabledDate]=\"disabledDate\"\n [nzShowTime]=\"showTime\"\n [ngStyle]=\"{\n width: inputWidth,\n height: inputHeight,\n }\"\n [ngClass]=\"{\n 'border-bottom-only': borderBottomOnly,\n }\"\n ></nz-date-picker>\n </nz-form-control>\n </nz-form-item>\n </div>\n } @else {\n <nz-form-item>\n @if (label) {\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n }\n <nz-form-control\n [nzSpan]=\"label ? (floatingLabel || labelFlex ? null : 24 - labelSpan) : null\"\n [nzFlex]=\"inputFlex\"\n [ngClass]=\"{ 'full-width': floatingLabel || !label }\"\n [nzErrorTip]=\"customValidateStatus\"\n [nzValidateStatus]=\"customValidateStatus ? 'error' : ''\"\n >\n <nz-date-picker\n class=\"full-width\"\n [nzPlaceHolder]=\"placeHolder || ' '\"\n [nzFormat]=\"dateFormat\"\n [nzSize]=\"size\"\n [disabled]=\"disabled\"\n [nzDisabledDate]=\"disabledDate\"\n [nzShowTime]=\"showTime\"\n [ngStyle]=\"{\n width: inputWidth,\n height: inputHeight,\n }\"\n [ngClass]=\"{\n 'border-bottom-only': borderBottomOnly,\n }\"\n [(ngModel)]=\"_ngModel\"\n (ngModelChange)=\"onNgModelChange($event)\"\n (blur)=\"onBlur()\"\n ></nz-date-picker>\n </nz-form-control>\n </nz-form-item>\n }\n</div>\n\n<ng-template #dynamicErrorTemplate let-control>\n <ng-container *ngFor=\"let error of errorMessages | keyvalue\">\n <ng-container *ngIf=\"control.hasError(error.key)\">\n {{ error.value }}\n </ng-container>\n </ng-container>\n</ng-template>\n", styles: ["::ng-deep .extend-date-picker-wrapper.floating-label{position:relative;padding-top:14px}::ng-deep .extend-date-picker-wrapper nz-form-item nz-form-label{position:absolute;top:12px;left:10px;transform:translateY(-50%);background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 80%,#ffffff 80%);z-index:1;height:auto;line-height:normal;padding:0 4px}::ng-deep .extend-date-picker-wrapper nz-form-item nz-form-label label{font-size:12px;color:#969696;font-weight:700;height:auto;line-height:normal;padding:0;display:flex;align-items:center}::ng-deep .extend-date-picker-wrapper .full-width{width:100%}.extend-date-picker-wrapper.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label,.extend-date-picker-wrapper.floating-label nz-form-item:has(input[disabled]) nz-form-label,.extend-date-picker-wrapper.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label{background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 75%,#f5f5f5 50%)}.extend-date-picker-wrapper.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label label,.extend-date-picker-wrapper.floating-label nz-form-item:has(input[disabled]) nz-form-label label,.extend-date-picker-wrapper.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label label{color:#bfbfbf}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: i1$4.KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: NzFormModule }, { kind: "directive", type: i4.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i4.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "component", type: i5.NzFormItemComponent, selector: "nz-form-item", exportAs: ["nzFormItem"] }, { kind: "component", type: i5.NzFormLabelComponent, selector: "nz-form-label", inputs: ["nzFor", "nzRequired", "nzNoColon", "nzTooltipTitle", "nzTooltipIcon", "nzLabelAlign", "nzLabelWrap"], exportAs: ["nzFormLabel"] }, { kind: "component", type: i5.NzFormControlComponent, selector: "nz-form-control", inputs: ["nzSuccessTip", "nzWarningTip", "nzErrorTip", "nzValidatingTip", "nzExtra", "nzAutoTips", "nzDisableAutoTips", "nzHasFeedback", "nzValidateStatus"], exportAs: ["nzFormControl"] }, { kind: "ngmodule", type: NzDatePickerModule }, { kind: "component", type: i5$1.NzDatePickerComponent, selector: "nz-date-picker,nz-week-picker,nz-month-picker,nz-quarter-picker,nz-year-picker,nz-range-picker", inputs: ["nzAllowClear", "nzAutoFocus", "nzDisabled", "nzBorderless", "nzInputReadOnly", "nzInline", "nzOpen", "nzDisabledDate", "nzLocale", "nzPlaceHolder", "nzPopupStyle", "nzDropdownClassName", "nzSize", "nzStatus", "nzFormat", "nzDateRender", "nzDisabledTime", "nzRenderExtraFooter", "nzShowToday", "nzMode", "nzShowNow", "nzRanges", "nzDefaultPickerValue", "nzSeparator", "nzSuffixIcon", "nzBackdrop", "nzId", "nzPlacement", "nzShowWeekNumber", "nzShowTime"], outputs: ["nzOnPanelChange", "nzOnCalendarChange", "nzOnOk", "nzOnOpenChange"], exportAs: ["nzDatePicker"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: DateInputParserDirective, selector: "nz-date-picker", inputs: ["nzFormat"] }] });
2342
2438
  }
2343
2439
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: ExtendDatePicker, decorators: [{
2344
2440
  type: Component,
@@ -2350,7 +2446,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImpor
2350
2446
  NzDatePickerModule,
2351
2447
  TranslateModule,
2352
2448
  DateInputParserDirective,
2353
- ], template: "<div\n class=\"extend-date-picker-wrapper\"\n [ngClass]=\"[floatingLabel ? 'floating-label' : '']\"\n [ngStyle]=\"{ display: displayInline ? 'inline' : null }\"\n>\n @if (controlName) {\n <div [formGroup]=\"formData\">\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"floatingLabel || labelFlex ? null : 24 - labelSpan\"\n [nzFlex]=\"inputFlex\"\n [ngClass]=\"{ 'full-width': floatingLabel }\"\n [nzErrorTip]=\"dynamicErrorTemplate\"\n >\n <nz-date-picker\n class=\"full-width\"\n [nzPlaceHolder]=\"placeHolder || ' '\"\n [nzFormat]=\"dateFormat\"\n [nzSize]=\"size\"\n [formControlName]=\"controlName\"\n [ngStyle]=\"{\n width: inputWidth,\n height: inputHeight,\n }\"\n [ngClass]=\"{\n 'border-bottom-only': borderBottomOnly,\n }\"\n [nzShowTime]=\"showTime\"\n ></nz-date-picker>\n </nz-form-control>\n </nz-form-item>\n\n <ng-template #dynamicErrorTemplate let-control>\n <ng-container *ngFor=\"let error of errorMessages | keyvalue\">\n <ng-container *ngIf=\"control.hasError(error.key)\">\n {{ error.value }}\n </ng-container>\n </ng-container>\n </ng-template>\n </div>\n } @else {\n @if (label) {\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"floatingLabel || labelFlex ? null : 24 - labelSpan\"\n [nzFlex]=\"inputFlex\"\n [ngClass]=\"{ 'full-width': floatingLabel }\"\n [nzErrorTip]=\"customValidateStatus\"\n [nzValidateStatus]=\"customValidateStatus ? 'error' : ''\"\n >\n <nz-date-picker\n class=\"full-width\"\n [nzPlaceHolder]=\"placeHolder || ' '\"\n [nzFormat]=\"dateFormat\"\n [nzSize]=\"size\"\n [disabled]=\"disabled\"\n [nzDisabledDate]=\"disabledDate\"\n [nzShowTime]=\"showTime\"\n [ngStyle]=\"{\n width: inputWidth,\n height: inputHeight,\n }\"\n [ngClass]=\"{\n 'border-bottom-only': borderBottomOnly,\n }\"\n [(ngModel)]=\"_ngModel\"\n (ngModelChange)=\"onNgModelChange($event)\"\n (blur)=\"onBlur()\"\n ></nz-date-picker>\n </nz-form-control>\n </nz-form-item>\n } @else {\n <nz-date-picker\n class=\"full-width\"\n [ngStyle]=\"{\n width: inputWidth,\n height: inputHeight,\n }\"\n [ngClass]=\"{\n 'border-bottom-only': borderBottomOnly,\n }\"\n [nzSize]=\"size\"\n [nzPlaceHolder]=\"placeHolder || ' '\"\n [nzFormat]=\"dateFormat\"\n [nzShowTime]=\"showTime\"\n [disabled]=\"disabled\"\n [(ngModel)]=\"_ngModel\"\n (ngModelChange)=\"onNgModelChange($event)\"\n ></nz-date-picker>\n }\n }\n</div>\n", styles: ["::ng-deep .extend-date-picker-wrapper.floating-label{position:relative;padding-top:14px}::ng-deep .extend-date-picker-wrapper nz-form-item nz-form-label{position:absolute;top:12px;left:10px;transform:translateY(-50%);background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 80%,#ffffff 80%);z-index:1;height:auto;line-height:normal;padding:0 4px}::ng-deep .extend-date-picker-wrapper nz-form-item nz-form-label label{font-size:12px;color:#969696;font-weight:700;height:auto;line-height:normal;padding:0;display:flex;align-items:center}::ng-deep .extend-date-picker-wrapper .full-width{width:100%}.extend-date-picker-wrapper.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label,.extend-date-picker-wrapper.floating-label nz-form-item:has(input[disabled]) nz-form-label,.extend-date-picker-wrapper.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label{background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 75%,#f5f5f5 50%)}.extend-date-picker-wrapper.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label label,.extend-date-picker-wrapper.floating-label nz-form-item:has(input[disabled]) nz-form-label label,.extend-date-picker-wrapper.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label label{color:#bfbfbf}\n"] }]
2449
+ ], template: "<div\n class=\"extend-date-picker-wrapper\"\n [ngClass]=\"[floatingLabel && label ? 'floating-label' : '']\"\n [ngStyle]=\"{ display: displayInline ? 'inline' : null }\"\n>\n @if (controlName) {\n <div [formGroup]=\"formData\">\n <nz-form-item>\n @if (label) {\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n }\n <nz-form-control\n [nzSpan]=\"label ? (floatingLabel || labelFlex ? null : 24 - labelSpan) : null\"\n [nzFlex]=\"inputFlex\"\n [ngClass]=\"{ 'full-width': floatingLabel || !label }\"\n [nzErrorTip]=\"customValidateStatus\"\n [nzValidateStatus]=\"customValidateStatus ? 'error' : ''\"\n >\n <nz-date-picker\n class=\"full-width\"\n [nzPlaceHolder]=\"placeHolder || ' '\"\n [nzFormat]=\"dateFormat\"\n [nzSize]=\"size\"\n [formControlName]=\"controlName\"\n [nzDisabledDate]=\"disabledDate\"\n [nzShowTime]=\"showTime\"\n [ngStyle]=\"{\n width: inputWidth,\n height: inputHeight,\n }\"\n [ngClass]=\"{\n 'border-bottom-only': borderBottomOnly,\n }\"\n ></nz-date-picker>\n </nz-form-control>\n </nz-form-item>\n </div>\n } @else {\n <nz-form-item>\n @if (label) {\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n }\n <nz-form-control\n [nzSpan]=\"label ? (floatingLabel || labelFlex ? null : 24 - labelSpan) : null\"\n [nzFlex]=\"inputFlex\"\n [ngClass]=\"{ 'full-width': floatingLabel || !label }\"\n [nzErrorTip]=\"customValidateStatus\"\n [nzValidateStatus]=\"customValidateStatus ? 'error' : ''\"\n >\n <nz-date-picker\n class=\"full-width\"\n [nzPlaceHolder]=\"placeHolder || ' '\"\n [nzFormat]=\"dateFormat\"\n [nzSize]=\"size\"\n [disabled]=\"disabled\"\n [nzDisabledDate]=\"disabledDate\"\n [nzShowTime]=\"showTime\"\n [ngStyle]=\"{\n width: inputWidth,\n height: inputHeight,\n }\"\n [ngClass]=\"{\n 'border-bottom-only': borderBottomOnly,\n }\"\n [(ngModel)]=\"_ngModel\"\n (ngModelChange)=\"onNgModelChange($event)\"\n (blur)=\"onBlur()\"\n ></nz-date-picker>\n </nz-form-control>\n </nz-form-item>\n }\n</div>\n\n<ng-template #dynamicErrorTemplate let-control>\n <ng-container *ngFor=\"let error of errorMessages | keyvalue\">\n <ng-container *ngIf=\"control.hasError(error.key)\">\n {{ error.value }}\n </ng-container>\n </ng-container>\n</ng-template>\n", styles: ["::ng-deep .extend-date-picker-wrapper.floating-label{position:relative;padding-top:14px}::ng-deep .extend-date-picker-wrapper nz-form-item nz-form-label{position:absolute;top:12px;left:10px;transform:translateY(-50%);background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 80%,#ffffff 80%);z-index:1;height:auto;line-height:normal;padding:0 4px}::ng-deep .extend-date-picker-wrapper nz-form-item nz-form-label label{font-size:12px;color:#969696;font-weight:700;height:auto;line-height:normal;padding:0;display:flex;align-items:center}::ng-deep .extend-date-picker-wrapper .full-width{width:100%}.extend-date-picker-wrapper.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label,.extend-date-picker-wrapper.floating-label nz-form-item:has(input[disabled]) nz-form-label,.extend-date-picker-wrapper.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label{background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 75%,#f5f5f5 50%)}.extend-date-picker-wrapper.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label label,.extend-date-picker-wrapper.floating-label nz-form-item:has(input[disabled]) nz-form-label label,.extend-date-picker-wrapper.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label label{color:#bfbfbf}\n"] }]
2354
2450
  }], propDecorators: { dateFormat: [{
2355
2451
  type: Input
2356
2452
  }], label: [{
@@ -2472,7 +2568,7 @@ class ExtendDateRangePicker {
2472
2568
  this.date2Change.emit(this.date2);
2473
2569
  }
2474
2570
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: ExtendDateRangePicker, deps: [], target: i0.ɵɵFactoryTarget.Component });
2475
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: ExtendDateRangePicker, isStandalone: true, selector: "extend-date-range-picker", inputs: { dateFormat: "dateFormat", layOutType: "layOutType", label: "label", placeHolder: "placeHolder", labelAlign: "labelAlign", labelSpan: "labelSpan", labelFlex: "labelFlex", disabled: "disabled", required: "required", noBottom: "noBottom", selectModeType: "selectModeType", inputWidth: "inputWidth", inputHeight: "inputHeight", borderBottomOnly: "borderBottomOnly", displayInline: "displayInline", size: "size", lstItem: "lstItem", displayField: "displayField", valueField: "valueField", formData: "formData", controlName: "controlName", date1: "date1", date2: "date2" }, outputs: { date1Change: "date1Change", date2Change: "date2Change" }, ngImport: i0, template: "<div class=\"extend-wrapper\" [ngStyle]=\"{ display: displayInline ? 'inline' : null }\">\n @if (controlName) {\n <!-- <div [formGroup]=\"formData\">\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"layOutType == 'horizontal' ? labelSpan : null\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"layOutType == 'horizontal' ? inputSpan : null\"\n [ngClass]=\"{ 'full-width': layOutType == 'vertical' }\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <nz-date-picker\n class=\"full-width\"\n [nzPlaceHolder]=\"placeHolder || ' '\"\n [nzFormat]=\"dateFormat\"\n [nzSize]=\"size\"\n [formControlName]=\"controlName\"\n [ngStyle]=\"{\n width: inputWidth,\n height: inputHeight,\n }\"\n [ngClass]=\"{\n 'border-bottom-only': borderBottomOnly,\n }\"\n ></nz-date-picker>\n </nz-form-control>\n </nz-form-item>\n </div> -->\n } @else {\n @if (label) {\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"layOutType == 'horizontal' && !labelFlex ? labelSpan : null\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-range-picker\n [nzSize]=\"size\"\n [nzFormat]=\"dateFormat\"\n [nzPlaceHolder]=\"['T\u1EEB ng\u00E0y', '\u0111\u1EBFn ng\u00E0y']\"\n [nzRanges]=\"ranges\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"ngModelChange($event)\"\n ></nz-range-picker>\n </nz-form-item>\n } @else {\n <nz-range-picker\n [nzSize]=\"size\"\n [nzFormat]=\"dateFormat\"\n [nzPlaceHolder]=\"['T\u1EEB ng\u00E0y', '\u0111\u1EBFn ng\u00E0y']\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"ngModelChange($event)\"\n ></nz-range-picker>\n }\n }\n</div>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: NzFormModule }, { kind: "directive", type: i4.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i4.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "component", type: i5.NzFormItemComponent, selector: "nz-form-item", exportAs: ["nzFormItem"] }, { kind: "component", type: i5.NzFormLabelComponent, selector: "nz-form-label", inputs: ["nzFor", "nzRequired", "nzNoColon", "nzTooltipTitle", "nzTooltipIcon", "nzLabelAlign", "nzLabelWrap"], exportAs: ["nzFormLabel"] }, { kind: "ngmodule", type: NzDatePickerModule }, { kind: "component", type: i5$1.NzDatePickerComponent, selector: "nz-date-picker,nz-week-picker,nz-month-picker,nz-quarter-picker,nz-year-picker,nz-range-picker", inputs: ["nzAllowClear", "nzAutoFocus", "nzDisabled", "nzBorderless", "nzInputReadOnly", "nzInline", "nzOpen", "nzDisabledDate", "nzLocale", "nzPlaceHolder", "nzPopupStyle", "nzDropdownClassName", "nzSize", "nzStatus", "nzFormat", "nzDateRender", "nzDisabledTime", "nzRenderExtraFooter", "nzShowToday", "nzMode", "nzShowNow", "nzRanges", "nzDefaultPickerValue", "nzSeparator", "nzSuffixIcon", "nzBackdrop", "nzId", "nzPlacement", "nzShowWeekNumber", "nzShowTime"], outputs: ["nzOnPanelChange", "nzOnCalendarChange", "nzOnOk", "nzOnOpenChange"], exportAs: ["nzDatePicker"] }, { kind: "directive", type: i5$1.NzRangePickerComponent, selector: "nz-range-picker", exportAs: ["nzRangePicker"] }, { kind: "ngmodule", type: TranslateModule }] });
2571
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: ExtendDateRangePicker, isStandalone: true, selector: "extend-date-range-picker", inputs: { dateFormat: "dateFormat", layOutType: "layOutType", label: "label", placeHolder: "placeHolder", labelAlign: "labelAlign", labelSpan: "labelSpan", labelFlex: "labelFlex", disabled: "disabled", required: "required", noBottom: "noBottom", selectModeType: "selectModeType", inputWidth: "inputWidth", inputHeight: "inputHeight", borderBottomOnly: "borderBottomOnly", displayInline: "displayInline", size: "size", lstItem: "lstItem", displayField: "displayField", valueField: "valueField", formData: "formData", controlName: "controlName", date1: "date1", date2: "date2" }, outputs: { date1Change: "date1Change", date2Change: "date2Change" }, ngImport: i0, template: "<div class=\"extend-wrapper\" [ngStyle]=\"{ display: displayInline ? 'inline' : null }\">\n @if (controlName) {\n <!-- <div [formGroup]=\"formData\">\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"layOutType == 'horizontal' ? labelSpan : null\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"layOutType == 'horizontal' ? inputSpan : null\"\n [ngClass]=\"{ 'full-width': layOutType == 'vertical' }\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <nz-date-picker\n class=\"full-width\"\n [nzPlaceHolder]=\"placeHolder || ' '\"\n [nzFormat]=\"dateFormat\"\n [nzSize]=\"size\"\n [formControlName]=\"controlName\"\n [ngStyle]=\"{\n width: inputWidth,\n height: inputHeight,\n }\"\n [ngClass]=\"{\n 'border-bottom-only': borderBottomOnly,\n }\"\n ></nz-date-picker>\n </nz-form-control>\n </nz-form-item>\n </div> -->\n } @else {\n @if (label) {\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"layOutType == 'horizontal' && !labelFlex ? labelSpan : null\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-range-picker\n [nzSize]=\"size\"\n [nzFormat]=\"dateFormat\"\n [nzPlaceHolder]=\"['T\u1EEB ng\u00E0y', '\u0111\u1EBFn ng\u00E0y']\"\n [nzRanges]=\"ranges\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"ngModelChange($event)\"\n ></nz-range-picker>\n </nz-form-item>\n } @else {\n <nz-range-picker\n [nzSize]=\"size\"\n [nzFormat]=\"dateFormat\"\n [nzPlaceHolder]=\"['T\u1EEB ng\u00E0y', '\u0111\u1EBFn ng\u00E0y']\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"ngModelChange($event)\"\n ></nz-range-picker>\n }\n }\n</div>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: NzFormModule }, { kind: "directive", type: i4.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i4.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "component", type: i5.NzFormItemComponent, selector: "nz-form-item", exportAs: ["nzFormItem"] }, { kind: "component", type: i5.NzFormLabelComponent, selector: "nz-form-label", inputs: ["nzFor", "nzRequired", "nzNoColon", "nzTooltipTitle", "nzTooltipIcon", "nzLabelAlign", "nzLabelWrap"], exportAs: ["nzFormLabel"] }, { kind: "ngmodule", type: NzDatePickerModule }, { kind: "component", type: i5$1.NzDatePickerComponent, selector: "nz-date-picker,nz-week-picker,nz-month-picker,nz-quarter-picker,nz-year-picker,nz-range-picker", inputs: ["nzAllowClear", "nzAutoFocus", "nzDisabled", "nzBorderless", "nzInputReadOnly", "nzInline", "nzOpen", "nzDisabledDate", "nzLocale", "nzPlaceHolder", "nzPopupStyle", "nzDropdownClassName", "nzSize", "nzStatus", "nzFormat", "nzDateRender", "nzDisabledTime", "nzRenderExtraFooter", "nzShowToday", "nzMode", "nzShowNow", "nzRanges", "nzDefaultPickerValue", "nzSeparator", "nzSuffixIcon", "nzBackdrop", "nzId", "nzPlacement", "nzShowWeekNumber", "nzShowTime"], outputs: ["nzOnPanelChange", "nzOnCalendarChange", "nzOnOk", "nzOnOpenChange"], exportAs: ["nzDatePicker"] }, { kind: "directive", type: i5$1.NzRangePickerComponent, selector: "nz-range-picker", exportAs: ["nzRangePicker"] }, { kind: "ngmodule", type: TranslateModule }] });
2476
2572
  }
2477
2573
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: ExtendDateRangePicker, decorators: [{
2478
2574
  type: Component,
@@ -2633,11 +2729,11 @@ class ExtendInputNumber {
2633
2729
  return '';
2634
2730
  }
2635
2731
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: ExtendInputNumber, deps: [], target: i0.ɵɵFactoryTarget.Component });
2636
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: ExtendInputNumber, isStandalone: true, selector: "extend-input-number", inputs: { label: "label", placeHolder: "placeHolder", labelAlign: "labelAlign", floatingLabel: "floatingLabel", hiddenUpDown: "hiddenUpDown", labelSpan: "labelSpan", labelFlex: "labelFlex", inputFlex: "inputFlex", disabled: "disabled", required: "required", noBottom: "noBottom", size: "size", min: "min", max: "max", precision: "precision", inputWidth: "inputWidth", inputHeight: "inputHeight", borderBottomOnly: "borderBottomOnly", displayInline: "displayInline", isSubmited: "isSubmited", separatorType: "separatorType", formData: "formData", controlName: "controlName", _ngModel: "_ngModel" }, outputs: { _ngModelChange: "_ngModelChange" }, viewQueries: [{ propertyName: "inputnumber", first: true, predicate: ["inputnumber"], descendants: true }, { propertyName: "inputElement", first: true, predicate: ["inputElement"], descendants: true }], ngImport: i0, template: "<div\n class=\"extend-input-number-wrapper\"\n [ngClass]=\"[floatingLabel ? 'floating-label' : '', hiddenUpDown ? 'hidden-up-down' : '']\"\n [ngStyle]=\"{ display: displayInline ? 'inline' : null }\"\n>\n @if (controlName) {\n <div [formGroup]=\"formData\">\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"floatingLabel || labelFlex ? null : 24 - labelSpan\"\n [nzFlex]=\"inputFlex\"\n [ngClass]=\"{ 'full-width': floatingLabel }\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [formControlName]=\"controlName\"\n />\n </nz-form-control>\n </nz-form-item>\n </div>\n } @else {\n @if (label) {\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"floatingLabel || labelFlex ? null : 24 - labelSpan\"\n [nzFlex]=\"inputFlex\"\n [ngClass]=\"{ 'full-width': floatingLabel }\"\n [nzValidateStatus]=\"customValidateStatus\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n @if (min != null && max != null) {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzMin]=\"min\"\n [nzMax]=\"max\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n />\n } @else if (min != null) {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzMin]=\"min\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n />\n } @else if (max != null) {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzMax]=\"max\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n />\n } @else {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n />\n }\n </nz-form-control>\n </nz-form-item>\n } @else {\n @if (min != null && max != null) {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzMin]=\"min\"\n [nzMax]=\"max\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n />\n } @else if (min != null) {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzMin]=\"min\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n />\n } @else if (max != null) {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzMax]=\"max\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n />\n } @else {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n [ngStyle]=\"{\n width: inputWidth,\n height: inputHeight,\n border: borderBottomOnly ? 'none' : '',\n 'border-bottom': borderBottomOnly ? '1px dashed' : '',\n }\"\n />\n }\n }\n }\n</div>\n", styles: ["::ng-deep .extend-input-number-wrapper.floating-label{position:relative;padding-top:14px}::ng-deep .extend-input-number-wrapper.hidden-up-down .ant-input-number-handler-wrap{display:none}::ng-deep .extend-input-number-wrapper nz-form-item nz-form-label{position:absolute;top:12px;left:10px;transform:translateY(-50%);background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 80%,#ffffff 80%);z-index:1;height:auto;line-height:normal;padding:0 4px}::ng-deep .extend-input-number-wrapper nz-form-item nz-form-label label{font-size:12px;color:#969696;font-weight:700;height:auto;line-height:normal;padding:0;display:flex;align-items:center}::ng-deep .extend-input-number-wrapper .full-width{width:100%}.extend-input-number-wrapper.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label,.extend-input-number-wrapper.floating-label nz-form-item:has(input[disabled]) nz-form-label,.extend-input-number-wrapper.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label{background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 75%,#f5f5f5 50%)}.extend-input-number-wrapper.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label label,.extend-input-number-wrapper.floating-label nz-form-item:has(input[disabled]) nz-form-label label,.extend-input-number-wrapper.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label label{color:#bfbfbf}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: NzFormModule }, { kind: "directive", type: i4.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i4.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "component", type: i5.NzFormItemComponent, selector: "nz-form-item", exportAs: ["nzFormItem"] }, { kind: "component", type: i5.NzFormLabelComponent, selector: "nz-form-label", inputs: ["nzFor", "nzRequired", "nzNoColon", "nzTooltipTitle", "nzTooltipIcon", "nzLabelAlign", "nzLabelWrap"], exportAs: ["nzFormLabel"] }, { kind: "component", type: i5.NzFormControlComponent, selector: "nz-form-control", inputs: ["nzSuccessTip", "nzWarningTip", "nzErrorTip", "nzValidatingTip", "nzExtra", "nzAutoTips", "nzDisableAutoTips", "nzHasFeedback", "nzValidateStatus"], exportAs: ["nzFormControl"] }, { kind: "ngmodule", type: NzInputNumberModule }, { kind: "component", type: i6.NzInputNumberComponent, selector: "nz-input-number", inputs: ["nzId", "nzSize", "nzPlaceHolder", "nzStatus", "nzStep", "nzMin", "nzMax", "nzPrecision", "nzParser", "nzFormatter", "nzDisabled", "nzReadOnly", "nzAutoFocus", "nzBordered", "nzKeyboard", "nzControls"], outputs: ["nzOnStep"], exportAs: ["nzInputNumber"] }] });
2732
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: ExtendInputNumber, isStandalone: true, selector: "extend-input-number", inputs: { label: "label", placeHolder: "placeHolder", labelAlign: "labelAlign", floatingLabel: "floatingLabel", hiddenUpDown: "hiddenUpDown", labelSpan: "labelSpan", labelFlex: "labelFlex", inputFlex: "inputFlex", disabled: "disabled", required: "required", noBottom: "noBottom", size: "size", min: "min", max: "max", precision: "precision", inputWidth: "inputWidth", inputHeight: "inputHeight", borderBottomOnly: "borderBottomOnly", displayInline: "displayInline", isSubmited: "isSubmited", separatorType: "separatorType", formData: "formData", controlName: "controlName", _ngModel: "_ngModel" }, outputs: { _ngModelChange: "_ngModelChange" }, viewQueries: [{ propertyName: "inputnumber", first: true, predicate: ["inputnumber"], descendants: true }, { propertyName: "inputElement", first: true, predicate: ["inputElement"], descendants: true }], ngImport: i0, template: "<div\n class=\"extend-input-number-wrapper\"\n [ngClass]=\"[floatingLabel && label ? 'floating-label' : '', hiddenUpDown ? 'hidden-up-down' : '']\"\n [ngStyle]=\"{ display: displayInline ? 'inline' : null }\"\n>\n @if (controlName) {\n <div [formGroup]=\"formData\">\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"floatingLabel || labelFlex ? null : 24 - labelSpan\"\n [nzFlex]=\"inputFlex\"\n [ngClass]=\"{ 'full-width': floatingLabel }\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzPlaceHolder]=\"placeHolder\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [formControlName]=\"controlName\"\n />\n </nz-form-control>\n </nz-form-item>\n </div>\n } @else {\n @if (label) {\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"floatingLabel || labelFlex ? null : 24 - labelSpan\"\n [nzFlex]=\"inputFlex\"\n [ngClass]=\"{ 'full-width': floatingLabel }\"\n [nzValidateStatus]=\"customValidateStatus\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n @if (min != null && max != null) {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzMin]=\"min\"\n [nzMax]=\"max\"\n [nzPlaceHolder]=\"placeHolder\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n />\n } @else if (min != null) {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzMin]=\"min\"\n [nzPlaceHolder]=\"placeHolder\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n />\n } @else if (max != null) {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzMax]=\"max\"\n [nzPlaceHolder]=\"placeHolder\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n />\n } @else {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzPlaceHolder]=\"placeHolder\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n />\n }\n </nz-form-control>\n </nz-form-item>\n } @else {\n @if (min != null && max != null) {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzMin]=\"min\"\n [nzMax]=\"max\"\n [nzPlaceHolder]=\"placeHolder\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n />\n } @else if (min != null) {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzMin]=\"min\"\n [nzPlaceHolder]=\"placeHolder\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n />\n } @else if (max != null) {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzMax]=\"max\"\n [nzPlaceHolder]=\"placeHolder\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n />\n } @else {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzPlaceHolder]=\"placeHolder\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n [ngStyle]=\"{\n width: inputWidth,\n height: inputHeight,\n border: borderBottomOnly ? 'none' : '',\n 'border-bottom': borderBottomOnly ? '1px dashed' : '',\n }\"\n />\n }\n }\n }\n</div>\n", styles: ["::ng-deep .extend-input-number-wrapper.floating-label{position:relative;padding-top:14px}::ng-deep .extend-input-number-wrapper.hidden-up-down .ant-input-number-handler-wrap{display:none}::ng-deep .extend-input-number-wrapper nz-form-item nz-form-label{position:absolute;top:12px;left:10px;transform:translateY(-50%);background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 80%,#ffffff 80%);z-index:1;height:auto;line-height:normal;padding:0 4px}::ng-deep .extend-input-number-wrapper nz-form-item nz-form-label label{font-size:12px;color:#969696;font-weight:700;height:auto;line-height:normal;padding:0;display:flex;align-items:center}::ng-deep .extend-input-number-wrapper .full-width{width:100%}.extend-input-number-wrapper.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label,.extend-input-number-wrapper.floating-label nz-form-item:has(input[disabled]) nz-form-label,.extend-input-number-wrapper.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label{background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 75%,#f5f5f5 50%)}.extend-input-number-wrapper.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label label,.extend-input-number-wrapper.floating-label nz-form-item:has(input[disabled]) nz-form-label label,.extend-input-number-wrapper.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label label{color:#bfbfbf}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: NzFormModule }, { kind: "directive", type: i4.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i4.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "component", type: i5.NzFormItemComponent, selector: "nz-form-item", exportAs: ["nzFormItem"] }, { kind: "component", type: i5.NzFormLabelComponent, selector: "nz-form-label", inputs: ["nzFor", "nzRequired", "nzNoColon", "nzTooltipTitle", "nzTooltipIcon", "nzLabelAlign", "nzLabelWrap"], exportAs: ["nzFormLabel"] }, { kind: "component", type: i5.NzFormControlComponent, selector: "nz-form-control", inputs: ["nzSuccessTip", "nzWarningTip", "nzErrorTip", "nzValidatingTip", "nzExtra", "nzAutoTips", "nzDisableAutoTips", "nzHasFeedback", "nzValidateStatus"], exportAs: ["nzFormControl"] }, { kind: "ngmodule", type: NzInputNumberModule }, { kind: "component", type: i6.NzInputNumberComponent, selector: "nz-input-number", inputs: ["nzId", "nzSize", "nzPlaceHolder", "nzStatus", "nzStep", "nzMin", "nzMax", "nzPrecision", "nzParser", "nzFormatter", "nzDisabled", "nzReadOnly", "nzAutoFocus", "nzBordered", "nzKeyboard", "nzControls"], outputs: ["nzOnStep"], exportAs: ["nzInputNumber"] }] });
2637
2733
  }
2638
2734
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: ExtendInputNumber, decorators: [{
2639
2735
  type: Component,
2640
- args: [{ selector: 'extend-input-number', imports: [CommonModule, FormsModule, ReactiveFormsModule, TranslateModule, NzFormModule, NzInputNumberModule], template: "<div\n class=\"extend-input-number-wrapper\"\n [ngClass]=\"[floatingLabel ? 'floating-label' : '', hiddenUpDown ? 'hidden-up-down' : '']\"\n [ngStyle]=\"{ display: displayInline ? 'inline' : null }\"\n>\n @if (controlName) {\n <div [formGroup]=\"formData\">\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"floatingLabel || labelFlex ? null : 24 - labelSpan\"\n [nzFlex]=\"inputFlex\"\n [ngClass]=\"{ 'full-width': floatingLabel }\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [formControlName]=\"controlName\"\n />\n </nz-form-control>\n </nz-form-item>\n </div>\n } @else {\n @if (label) {\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"floatingLabel || labelFlex ? null : 24 - labelSpan\"\n [nzFlex]=\"inputFlex\"\n [ngClass]=\"{ 'full-width': floatingLabel }\"\n [nzValidateStatus]=\"customValidateStatus\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n @if (min != null && max != null) {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzMin]=\"min\"\n [nzMax]=\"max\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n />\n } @else if (min != null) {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzMin]=\"min\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n />\n } @else if (max != null) {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzMax]=\"max\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n />\n } @else {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n />\n }\n </nz-form-control>\n </nz-form-item>\n } @else {\n @if (min != null && max != null) {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzMin]=\"min\"\n [nzMax]=\"max\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n />\n } @else if (min != null) {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzMin]=\"min\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n />\n } @else if (max != null) {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzMax]=\"max\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n />\n } @else {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n [ngStyle]=\"{\n width: inputWidth,\n height: inputHeight,\n border: borderBottomOnly ? 'none' : '',\n 'border-bottom': borderBottomOnly ? '1px dashed' : '',\n }\"\n />\n }\n }\n }\n</div>\n", styles: ["::ng-deep .extend-input-number-wrapper.floating-label{position:relative;padding-top:14px}::ng-deep .extend-input-number-wrapper.hidden-up-down .ant-input-number-handler-wrap{display:none}::ng-deep .extend-input-number-wrapper nz-form-item nz-form-label{position:absolute;top:12px;left:10px;transform:translateY(-50%);background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 80%,#ffffff 80%);z-index:1;height:auto;line-height:normal;padding:0 4px}::ng-deep .extend-input-number-wrapper nz-form-item nz-form-label label{font-size:12px;color:#969696;font-weight:700;height:auto;line-height:normal;padding:0;display:flex;align-items:center}::ng-deep .extend-input-number-wrapper .full-width{width:100%}.extend-input-number-wrapper.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label,.extend-input-number-wrapper.floating-label nz-form-item:has(input[disabled]) nz-form-label,.extend-input-number-wrapper.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label{background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 75%,#f5f5f5 50%)}.extend-input-number-wrapper.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label label,.extend-input-number-wrapper.floating-label nz-form-item:has(input[disabled]) nz-form-label label,.extend-input-number-wrapper.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label label{color:#bfbfbf}\n"] }]
2736
+ args: [{ selector: 'extend-input-number', imports: [CommonModule, FormsModule, ReactiveFormsModule, TranslateModule, NzFormModule, NzInputNumberModule], template: "<div\n class=\"extend-input-number-wrapper\"\n [ngClass]=\"[floatingLabel && label ? 'floating-label' : '', hiddenUpDown ? 'hidden-up-down' : '']\"\n [ngStyle]=\"{ display: displayInline ? 'inline' : null }\"\n>\n @if (controlName) {\n <div [formGroup]=\"formData\">\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"floatingLabel || labelFlex ? null : 24 - labelSpan\"\n [nzFlex]=\"inputFlex\"\n [ngClass]=\"{ 'full-width': floatingLabel }\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzPlaceHolder]=\"placeHolder\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [formControlName]=\"controlName\"\n />\n </nz-form-control>\n </nz-form-item>\n </div>\n } @else {\n @if (label) {\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"floatingLabel || labelFlex ? null : 24 - labelSpan\"\n [nzFlex]=\"inputFlex\"\n [ngClass]=\"{ 'full-width': floatingLabel }\"\n [nzValidateStatus]=\"customValidateStatus\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n @if (min != null && max != null) {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzMin]=\"min\"\n [nzMax]=\"max\"\n [nzPlaceHolder]=\"placeHolder\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n />\n } @else if (min != null) {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzMin]=\"min\"\n [nzPlaceHolder]=\"placeHolder\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n />\n } @else if (max != null) {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzMax]=\"max\"\n [nzPlaceHolder]=\"placeHolder\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n />\n } @else {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzPlaceHolder]=\"placeHolder\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n />\n }\n </nz-form-control>\n </nz-form-item>\n } @else {\n @if (min != null && max != null) {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzMin]=\"min\"\n [nzMax]=\"max\"\n [nzPlaceHolder]=\"placeHolder\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n />\n } @else if (min != null) {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzMin]=\"min\"\n [nzPlaceHolder]=\"placeHolder\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n />\n } @else if (max != null) {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzMax]=\"max\"\n [nzPlaceHolder]=\"placeHolder\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n />\n } @else {\n <nz-input-number\n #inputnumber\n class=\"full-width\"\n [nzSize]=\"size\"\n [nzPlaceHolder]=\"placeHolder\"\n [nzFormatter]=\"formatterNumber\"\n [nzParser]=\"parserNumber\"\n [nzPrecision]=\"precision\"\n [nzDisabled]=\"disabled\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n [ngStyle]=\"{\n width: inputWidth,\n height: inputHeight,\n border: borderBottomOnly ? 'none' : '',\n 'border-bottom': borderBottomOnly ? '1px dashed' : '',\n }\"\n />\n }\n }\n }\n</div>\n", styles: ["::ng-deep .extend-input-number-wrapper.floating-label{position:relative;padding-top:14px}::ng-deep .extend-input-number-wrapper.hidden-up-down .ant-input-number-handler-wrap{display:none}::ng-deep .extend-input-number-wrapper nz-form-item nz-form-label{position:absolute;top:12px;left:10px;transform:translateY(-50%);background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 80%,#ffffff 80%);z-index:1;height:auto;line-height:normal;padding:0 4px}::ng-deep .extend-input-number-wrapper nz-form-item nz-form-label label{font-size:12px;color:#969696;font-weight:700;height:auto;line-height:normal;padding:0;display:flex;align-items:center}::ng-deep .extend-input-number-wrapper .full-width{width:100%}.extend-input-number-wrapper.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label,.extend-input-number-wrapper.floating-label nz-form-item:has(input[disabled]) nz-form-label,.extend-input-number-wrapper.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label{background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 75%,#f5f5f5 50%)}.extend-input-number-wrapper.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label label,.extend-input-number-wrapper.floating-label nz-form-item:has(input[disabled]) nz-form-label label,.extend-input-number-wrapper.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label label{color:#bfbfbf}\n"] }]
2641
2737
  }], propDecorators: { label: [{
2642
2738
  type: Input
2643
2739
  }], placeHolder: [{
@@ -2773,11 +2869,11 @@ class ExtendInput {
2773
2869
  return '';
2774
2870
  }
2775
2871
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: ExtendInput, deps: [], target: i0.ɵɵFactoryTarget.Component });
2776
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: ExtendInput, isStandalone: true, selector: "extend-input", inputs: { label: "label", floatingLabel: "floatingLabel", placeHolder: "placeHolder", labelAlign: "labelAlign", inputClass: "inputClass", labelSpan: "labelSpan", labelFlex: "labelFlex", inputFlex: "inputFlex", allowClear: "allowClear", disabled: "disabled", readOnly: "readOnly", required: "required", noBottom: "noBottom", selectModeType: "selectModeType", autocomplete: "autocomplete", autofocus: "autofocus", inputWidth: "inputWidth", inputHeight: "inputHeight", borderBottomOnly: "borderBottomOnly", displayInline: "displayInline", size: "size", lstItem: "lstItem", displayField: "displayField", valueField: "valueField", formData: "formData", controlName: "controlName", _ngModel: "_ngModel", isSubmited: "isSubmited" }, outputs: { _ngModelChange: "_ngModelChange", onclickClearIcon: "onclickClearIcon", onenter: "onenter" }, viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["inputElement"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"extend-input-wrapper\"\n [ngClass]=\"[floatingLabel ? 'floating-label' : '']\"\n [ngStyle]=\"{ display: displayInline ? 'inline' : null }\"\n>\n @if (controlName) {\n <div [formGroup]=\"formData\">\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"floatingLabel || labelFlex ? null : 24 - labelSpan\"\n [nzFlex]=\"inputFlex\"\n [ngClass]=\"{ 'full-width': floatingLabel }\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <input\n #inputElement\n nz-input\n [nzSize]=\"size\"\n [id]=\"controlName\"\n [name]=\"controlName\"\n [formControlName]=\"controlName\"\n [autocomplete]=\"autocomplete\"\n [placeholder]=\"placeHolder\"\n [ngClass]=\"inputClass\"\n (keyup.enter)=\"onenter.emit()\"\n />\n </nz-form-control>\n </nz-form-item>\n </div>\n } @else {\n @if (label) {\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"floatingLabel || labelFlex ? null : 24 - labelSpan\"\n [nzFlex]=\"inputFlex\"\n [ngClass]=\"{ 'full-width': floatingLabel }\"\n [nzValidateStatus]=\"customValidateStatus\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <nz-input-group [nzSize]=\"size\" [nzSuffix]=\"allowClear ? clearIcon : undefined\">\n <input\n #inputElement\n nz-input\n [nzSize]=\"size\"\n [id]=\"controlName\"\n [name]=\"controlName\"\n [(ngModel)]=\"_ngModel\"\n [autocomplete]=\"autocomplete\"\n (ngModelChange)=\"_onNgModelChange()\"\n [disabled]=\"disabled\"\n [readOnly]=\"readOnly\"\n [placeholder]=\"placeHolder\"\n [ngClass]=\"inputClass\"\n (keyup.enter)=\"onenter.emit()\"\n />\n </nz-input-group>\n </nz-form-control>\n </nz-form-item>\n } @else {\n <input\n #inputElement\n nz-input\n [nzSize]=\"size\"\n [ngStyle]=\"{\n width: inputWidth,\n height: inputHeight,\n }\"\n [id]=\"controlName\"\n [name]=\"controlName\"\n [(ngModel)]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n [autocomplete]=\"autocomplete\"\n [disabled]=\"disabled\"\n [readOnly]=\"readOnly\"\n [placeholder]=\"placeHolder\"\n [ngClass]=\"inputClass + ' ' + (borderBottomOnly ? 'border-bottom-only' : '')\"\n (keyup.enter)=\"onenter.emit()\"\n />\n }\n }\n</div>\n\n<ng-template #clearIcon>\n <i\n nz-icon\n nzType=\"close-circle\"\n nzTheme=\"twotone\"\n nzTwotoneColor=\"#999\"\n *ngIf=\"_ngModel\"\n (click)=\"_ngModel = null; _onNgModelChange(); onclickClearIcon.emit()\"\n style=\"cursor: pointer\"\n ></i>\n</ng-template>\n", styles: ["::ng-deep .extend-input-wrapper.floating-label{position:relative;padding-top:14px}::ng-deep .extend-input-wrapper nz-form-item nz-form-label{position:absolute;top:12px;left:10px;transform:translateY(-50%);background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 80%,#ffffff 80%);z-index:2;height:auto;line-height:normal;padding:0 4px}::ng-deep .extend-input-wrapper nz-form-item nz-form-label label{font-size:12px;color:#969696;font-weight:700;height:auto;line-height:normal;padding:0;display:flex;align-items:center}::ng-deep .extend-input-wrapper .full-width{width:100%}.extend-input-wrapper.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label,.extend-input-wrapper.floating-label nz-form-item:has(input[disabled]) nz-form-label,.extend-input-wrapper.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label{background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 75%,#f5f5f5 50%)}.extend-input-wrapper.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label label,.extend-input-wrapper.floating-label nz-form-item:has(input[disabled]) nz-form-label label,.extend-input-wrapper.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label label{color:#bfbfbf}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: NzFormModule }, { kind: "directive", type: i4.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i4.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "component", type: i5.NzFormItemComponent, selector: "nz-form-item", exportAs: ["nzFormItem"] }, { kind: "component", type: i5.NzFormLabelComponent, selector: "nz-form-label", inputs: ["nzFor", "nzRequired", "nzNoColon", "nzTooltipTitle", "nzTooltipIcon", "nzLabelAlign", "nzLabelWrap"], exportAs: ["nzFormLabel"] }, { kind: "component", type: i5.NzFormControlComponent, selector: "nz-form-control", inputs: ["nzSuccessTip", "nzWarningTip", "nzErrorTip", "nzValidatingTip", "nzExtra", "nzAutoTips", "nzDisableAutoTips", "nzHasFeedback", "nzValidateStatus"], exportAs: ["nzFormControl"] }, { kind: "ngmodule", type: NzInputModule }, { kind: "directive", type: i6$1.NzInputDirective, selector: "input[nz-input],textarea[nz-input]", inputs: ["nzBorderless", "nzSize", "nzStepperless", "nzStatus", "disabled"], exportAs: ["nzInput"] }, { kind: "component", type: i6$1.NzInputGroupComponent, selector: "nz-input-group", inputs: ["nzAddOnBeforeIcon", "nzAddOnAfterIcon", "nzPrefixIcon", "nzSuffixIcon", "nzAddOnBefore", "nzAddOnAfter", "nzPrefix", "nzStatus", "nzSuffix", "nzSize", "nzSearch", "nzCompact"], exportAs: ["nzInputGroup"] }, { kind: "directive", type: i6$1.NzInputGroupWhitSuffixOrPrefixDirective, selector: "nz-input-group[nzSuffix], nz-input-group[nzPrefix]" }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$2.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }] });
2872
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: ExtendInput, isStandalone: true, selector: "extend-input", inputs: { label: "label", floatingLabel: "floatingLabel", placeHolder: "placeHolder", labelAlign: "labelAlign", inputClass: "inputClass", labelSpan: "labelSpan", labelFlex: "labelFlex", inputFlex: "inputFlex", allowClear: "allowClear", disabled: "disabled", readOnly: "readOnly", required: "required", noBottom: "noBottom", selectModeType: "selectModeType", autocomplete: "autocomplete", autofocus: "autofocus", inputWidth: "inputWidth", inputHeight: "inputHeight", borderBottomOnly: "borderBottomOnly", displayInline: "displayInline", size: "size", lstItem: "lstItem", displayField: "displayField", valueField: "valueField", formData: "formData", controlName: "controlName", _ngModel: "_ngModel", isSubmited: "isSubmited" }, outputs: { _ngModelChange: "_ngModelChange", onclickClearIcon: "onclickClearIcon", onenter: "onenter" }, viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["inputElement"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"extend-input-wrapper\"\n [ngClass]=\"[floatingLabel && label ? 'floating-label' : '']\"\n [ngStyle]=\"{ display: displayInline ? 'inline' : null }\"\n>\n @if (controlName) {\n <div [formGroup]=\"formData\">\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"floatingLabel || labelFlex ? null : 24 - labelSpan\"\n [nzFlex]=\"inputFlex\"\n [ngClass]=\"{ 'full-width': floatingLabel }\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <input\n #inputElement\n nz-input\n [nzSize]=\"size\"\n [id]=\"controlName\"\n [name]=\"controlName\"\n [formControlName]=\"controlName\"\n [autocomplete]=\"autocomplete\"\n [placeholder]=\"placeHolder\"\n [ngClass]=\"inputClass\"\n (keyup.enter)=\"onenter.emit()\"\n />\n </nz-form-control>\n </nz-form-item>\n </div>\n } @else {\n @if (label) {\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"floatingLabel || labelFlex ? null : 24 - labelSpan\"\n [nzFlex]=\"inputFlex\"\n [ngClass]=\"{ 'full-width': floatingLabel }\"\n [nzValidateStatus]=\"customValidateStatus\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <nz-input-group [nzSize]=\"size\" [nzSuffix]=\"allowClear ? clearIcon : undefined\">\n <input\n #inputElement\n nz-input\n [nzSize]=\"size\"\n [id]=\"controlName\"\n [name]=\"controlName\"\n [(ngModel)]=\"_ngModel\"\n [autocomplete]=\"autocomplete\"\n (ngModelChange)=\"_onNgModelChange()\"\n [disabled]=\"disabled\"\n [readOnly]=\"readOnly\"\n [placeholder]=\"placeHolder\"\n [ngClass]=\"inputClass\"\n (keyup.enter)=\"onenter.emit()\"\n />\n </nz-input-group>\n </nz-form-control>\n </nz-form-item>\n } @else {\n <input\n #inputElement\n nz-input\n [nzSize]=\"size\"\n [ngStyle]=\"{\n width: inputWidth,\n height: inputHeight,\n }\"\n [id]=\"controlName\"\n [name]=\"controlName\"\n [(ngModel)]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n [autocomplete]=\"autocomplete\"\n [disabled]=\"disabled\"\n [readOnly]=\"readOnly\"\n [placeholder]=\"placeHolder\"\n [ngClass]=\"inputClass + ' ' + (borderBottomOnly ? 'border-bottom-only' : '')\"\n (keyup.enter)=\"onenter.emit()\"\n />\n }\n }\n</div>\n\n<ng-template #clearIcon>\n <i\n nz-icon\n nzType=\"close-circle\"\n nzTheme=\"twotone\"\n nzTwotoneColor=\"#999\"\n *ngIf=\"_ngModel\"\n (click)=\"_ngModel = null; _onNgModelChange(); onclickClearIcon.emit()\"\n style=\"cursor: pointer\"\n ></i>\n</ng-template>\n", styles: ["::ng-deep .extend-input-wrapper.floating-label{position:relative;padding-top:14px}::ng-deep .extend-input-wrapper nz-form-item nz-form-label{position:absolute;top:12px;left:10px;transform:translateY(-50%);background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 80%,#ffffff 80%);z-index:2;height:auto;line-height:normal;padding:0 4px}::ng-deep .extend-input-wrapper nz-form-item nz-form-label label{font-size:12px;color:#969696;font-weight:700;height:auto;line-height:normal;padding:0;display:flex;align-items:center}::ng-deep .extend-input-wrapper .full-width{width:100%}.extend-input-wrapper.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label,.extend-input-wrapper.floating-label nz-form-item:has(input[disabled]) nz-form-label,.extend-input-wrapper.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label{background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 75%,#f5f5f5 50%)}.extend-input-wrapper.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label label,.extend-input-wrapper.floating-label nz-form-item:has(input[disabled]) nz-form-label label,.extend-input-wrapper.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label label{color:#bfbfbf}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: NzFormModule }, { kind: "directive", type: i4.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i4.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "component", type: i5.NzFormItemComponent, selector: "nz-form-item", exportAs: ["nzFormItem"] }, { kind: "component", type: i5.NzFormLabelComponent, selector: "nz-form-label", inputs: ["nzFor", "nzRequired", "nzNoColon", "nzTooltipTitle", "nzTooltipIcon", "nzLabelAlign", "nzLabelWrap"], exportAs: ["nzFormLabel"] }, { kind: "component", type: i5.NzFormControlComponent, selector: "nz-form-control", inputs: ["nzSuccessTip", "nzWarningTip", "nzErrorTip", "nzValidatingTip", "nzExtra", "nzAutoTips", "nzDisableAutoTips", "nzHasFeedback", "nzValidateStatus"], exportAs: ["nzFormControl"] }, { kind: "ngmodule", type: NzInputModule }, { kind: "directive", type: i6$1.NzInputDirective, selector: "input[nz-input],textarea[nz-input]", inputs: ["nzBorderless", "nzSize", "nzStepperless", "nzStatus", "disabled"], exportAs: ["nzInput"] }, { kind: "component", type: i6$1.NzInputGroupComponent, selector: "nz-input-group", inputs: ["nzAddOnBeforeIcon", "nzAddOnAfterIcon", "nzPrefixIcon", "nzSuffixIcon", "nzAddOnBefore", "nzAddOnAfter", "nzPrefix", "nzStatus", "nzSuffix", "nzSize", "nzSearch", "nzCompact"], exportAs: ["nzInputGroup"] }, { kind: "directive", type: i6$1.NzInputGroupWhitSuffixOrPrefixDirective, selector: "nz-input-group[nzSuffix], nz-input-group[nzPrefix]" }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$3.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }] });
2777
2873
  }
2778
2874
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: ExtendInput, decorators: [{
2779
2875
  type: Component,
2780
- args: [{ selector: 'extend-input', imports: [CommonModule, FormsModule, ReactiveFormsModule, TranslateModule, NzFormModule, NzInputModule, NzIconModule], template: "<div\n class=\"extend-input-wrapper\"\n [ngClass]=\"[floatingLabel ? 'floating-label' : '']\"\n [ngStyle]=\"{ display: displayInline ? 'inline' : null }\"\n>\n @if (controlName) {\n <div [formGroup]=\"formData\">\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"floatingLabel || labelFlex ? null : 24 - labelSpan\"\n [nzFlex]=\"inputFlex\"\n [ngClass]=\"{ 'full-width': floatingLabel }\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <input\n #inputElement\n nz-input\n [nzSize]=\"size\"\n [id]=\"controlName\"\n [name]=\"controlName\"\n [formControlName]=\"controlName\"\n [autocomplete]=\"autocomplete\"\n [placeholder]=\"placeHolder\"\n [ngClass]=\"inputClass\"\n (keyup.enter)=\"onenter.emit()\"\n />\n </nz-form-control>\n </nz-form-item>\n </div>\n } @else {\n @if (label) {\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"floatingLabel || labelFlex ? null : 24 - labelSpan\"\n [nzFlex]=\"inputFlex\"\n [ngClass]=\"{ 'full-width': floatingLabel }\"\n [nzValidateStatus]=\"customValidateStatus\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <nz-input-group [nzSize]=\"size\" [nzSuffix]=\"allowClear ? clearIcon : undefined\">\n <input\n #inputElement\n nz-input\n [nzSize]=\"size\"\n [id]=\"controlName\"\n [name]=\"controlName\"\n [(ngModel)]=\"_ngModel\"\n [autocomplete]=\"autocomplete\"\n (ngModelChange)=\"_onNgModelChange()\"\n [disabled]=\"disabled\"\n [readOnly]=\"readOnly\"\n [placeholder]=\"placeHolder\"\n [ngClass]=\"inputClass\"\n (keyup.enter)=\"onenter.emit()\"\n />\n </nz-input-group>\n </nz-form-control>\n </nz-form-item>\n } @else {\n <input\n #inputElement\n nz-input\n [nzSize]=\"size\"\n [ngStyle]=\"{\n width: inputWidth,\n height: inputHeight,\n }\"\n [id]=\"controlName\"\n [name]=\"controlName\"\n [(ngModel)]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n [autocomplete]=\"autocomplete\"\n [disabled]=\"disabled\"\n [readOnly]=\"readOnly\"\n [placeholder]=\"placeHolder\"\n [ngClass]=\"inputClass + ' ' + (borderBottomOnly ? 'border-bottom-only' : '')\"\n (keyup.enter)=\"onenter.emit()\"\n />\n }\n }\n</div>\n\n<ng-template #clearIcon>\n <i\n nz-icon\n nzType=\"close-circle\"\n nzTheme=\"twotone\"\n nzTwotoneColor=\"#999\"\n *ngIf=\"_ngModel\"\n (click)=\"_ngModel = null; _onNgModelChange(); onclickClearIcon.emit()\"\n style=\"cursor: pointer\"\n ></i>\n</ng-template>\n", styles: ["::ng-deep .extend-input-wrapper.floating-label{position:relative;padding-top:14px}::ng-deep .extend-input-wrapper nz-form-item nz-form-label{position:absolute;top:12px;left:10px;transform:translateY(-50%);background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 80%,#ffffff 80%);z-index:2;height:auto;line-height:normal;padding:0 4px}::ng-deep .extend-input-wrapper nz-form-item nz-form-label label{font-size:12px;color:#969696;font-weight:700;height:auto;line-height:normal;padding:0;display:flex;align-items:center}::ng-deep .extend-input-wrapper .full-width{width:100%}.extend-input-wrapper.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label,.extend-input-wrapper.floating-label nz-form-item:has(input[disabled]) nz-form-label,.extend-input-wrapper.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label{background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 75%,#f5f5f5 50%)}.extend-input-wrapper.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label label,.extend-input-wrapper.floating-label nz-form-item:has(input[disabled]) nz-form-label label,.extend-input-wrapper.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label label{color:#bfbfbf}\n"] }]
2876
+ args: [{ selector: 'extend-input', imports: [CommonModule, FormsModule, ReactiveFormsModule, TranslateModule, NzFormModule, NzInputModule, NzIconModule], template: "<div\n class=\"extend-input-wrapper\"\n [ngClass]=\"[floatingLabel && label ? 'floating-label' : '']\"\n [ngStyle]=\"{ display: displayInline ? 'inline' : null }\"\n>\n @if (controlName) {\n <div [formGroup]=\"formData\">\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"floatingLabel || labelFlex ? null : 24 - labelSpan\"\n [nzFlex]=\"inputFlex\"\n [ngClass]=\"{ 'full-width': floatingLabel }\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <input\n #inputElement\n nz-input\n [nzSize]=\"size\"\n [id]=\"controlName\"\n [name]=\"controlName\"\n [formControlName]=\"controlName\"\n [autocomplete]=\"autocomplete\"\n [placeholder]=\"placeHolder\"\n [ngClass]=\"inputClass\"\n (keyup.enter)=\"onenter.emit()\"\n />\n </nz-form-control>\n </nz-form-item>\n </div>\n } @else {\n @if (label) {\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"floatingLabel || labelFlex ? null : 24 - labelSpan\"\n [nzFlex]=\"inputFlex\"\n [ngClass]=\"{ 'full-width': floatingLabel }\"\n [nzValidateStatus]=\"customValidateStatus\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <nz-input-group [nzSize]=\"size\" [nzSuffix]=\"allowClear ? clearIcon : undefined\">\n <input\n #inputElement\n nz-input\n [nzSize]=\"size\"\n [id]=\"controlName\"\n [name]=\"controlName\"\n [(ngModel)]=\"_ngModel\"\n [autocomplete]=\"autocomplete\"\n (ngModelChange)=\"_onNgModelChange()\"\n [disabled]=\"disabled\"\n [readOnly]=\"readOnly\"\n [placeholder]=\"placeHolder\"\n [ngClass]=\"inputClass\"\n (keyup.enter)=\"onenter.emit()\"\n />\n </nz-input-group>\n </nz-form-control>\n </nz-form-item>\n } @else {\n <input\n #inputElement\n nz-input\n [nzSize]=\"size\"\n [ngStyle]=\"{\n width: inputWidth,\n height: inputHeight,\n }\"\n [id]=\"controlName\"\n [name]=\"controlName\"\n [(ngModel)]=\"_ngModel\"\n (ngModelChange)=\"_onNgModelChange()\"\n [autocomplete]=\"autocomplete\"\n [disabled]=\"disabled\"\n [readOnly]=\"readOnly\"\n [placeholder]=\"placeHolder\"\n [ngClass]=\"inputClass + ' ' + (borderBottomOnly ? 'border-bottom-only' : '')\"\n (keyup.enter)=\"onenter.emit()\"\n />\n }\n }\n</div>\n\n<ng-template #clearIcon>\n <i\n nz-icon\n nzType=\"close-circle\"\n nzTheme=\"twotone\"\n nzTwotoneColor=\"#999\"\n *ngIf=\"_ngModel\"\n (click)=\"_ngModel = null; _onNgModelChange(); onclickClearIcon.emit()\"\n style=\"cursor: pointer\"\n ></i>\n</ng-template>\n", styles: ["::ng-deep .extend-input-wrapper.floating-label{position:relative;padding-top:14px}::ng-deep .extend-input-wrapper nz-form-item nz-form-label{position:absolute;top:12px;left:10px;transform:translateY(-50%);background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 80%,#ffffff 80%);z-index:2;height:auto;line-height:normal;padding:0 4px}::ng-deep .extend-input-wrapper nz-form-item nz-form-label label{font-size:12px;color:#969696;font-weight:700;height:auto;line-height:normal;padding:0;display:flex;align-items:center}::ng-deep .extend-input-wrapper .full-width{width:100%}.extend-input-wrapper.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label,.extend-input-wrapper.floating-label nz-form-item:has(input[disabled]) nz-form-label,.extend-input-wrapper.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label{background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 75%,#f5f5f5 50%)}.extend-input-wrapper.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label label,.extend-input-wrapper.floating-label nz-form-item:has(input[disabled]) nz-form-label label,.extend-input-wrapper.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label label{color:#bfbfbf}\n"] }]
2781
2877
  }], propDecorators: { label: [{
2782
2878
  type: Input
2783
2879
  }], floatingLabel: [{
@@ -2958,11 +3054,11 @@ class ExtendSelectComponent {
2958
3054
  return '';
2959
3055
  }
2960
3056
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: ExtendSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2961
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: ExtendSelectComponent, isStandalone: true, selector: "extend-select", inputs: { label: "label", floatingLabel: "floatingLabel", placeHolder: "placeHolder", labelAlign: "labelAlign", dropdownMatchSelectWidth: "dropdownMatchSelectWidth", labelSpan: "labelSpan", labelFlex: "labelFlex", disabled: "disabled", required: "required", noBottom: "noBottom", multiple: "multiple", showSelectAll: "showSelectAll", maxTagCount: "maxTagCount", inputWidth: "inputWidth", inputHeight: "inputHeight", borderBottomOnly: "borderBottomOnly", displayInline: "displayInline", size: "size", lstItem: "lstItem", displayField: "displayField", displayFields: "displayFields", valueField: "valueField", formData: "formData", controlName: "controlName", _ngModel: "_ngModel", isSubmited: "isSubmited" }, outputs: { _ngModelChange: "_ngModelChange", itemChange: "itemChange", onFocus: "onFocus" }, host: { properties: { "style.--custom-select-height": "this.cssHeight" } }, ngImport: i0, template: "<div\n class=\"extend-select-wrapper\"\n [ngClass]=\"[floatingLabel && label ? 'floating-label' : '']\"\n [ngStyle]=\"{ display: displayInline ? 'inline' : null }\"\n>\n @if (!multiple) {\n @if (controlName) {\n <div [formGroup]=\"formData\">\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n nzNoColon\n [nzLabelWrap]=\"floatingLabel ? false : true\"\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"floatingLabel || labelFlex ? null : 24 - labelSpan\"\n [ngClass]=\"{ 'full-width': floatingLabel }\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <nz-select\n nzShowSearch\n nzAllowClear\n [nzSize]=\"size\"\n [nzAllowClear]=\"true\"\n [nzShowSearch]=\"true\"\n [nzDropdownMatchSelectWidth]=\"dropdownMatchSelectWidth\"\n [formControlName]=\"controlName\"\n (nzFocus)=\"onFocus.emit()\"\n >\n @if (showSelectAll) {\n <nz-option [nzLabel]=\"'-- Ch\u1ECDn t\u1EA5t c\u1EA3 --'\" [nzValue]=\"'__all__'\"></nz-option>\n }\n @for (item of lstItem; track $index) {\n <nz-option [nzLabel]=\"getDisplay(item)\" [nzValue]=\"valueField ? item[valueField] : item\"></nz-option>\n }\n </nz-select>\n </nz-form-control>\n </nz-form-item>\n </div>\n } @else {\n @if (label) {\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n nzNoColon\n [nzLabelWrap]=\"floatingLabel ? false : true\"\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"floatingLabel || labelFlex ? null : 24 - labelSpan\"\n [ngClass]=\"{ 'full-width': floatingLabel }\"\n [nzValidateStatus]=\"customValidateStatus\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <nz-select\n nzShowSearch\n nzAllowClear\n [nzSize]=\"size\"\n [nzAllowClear]=\"true\"\n [nzShowSearch]=\"true\"\n [nzDropdownMatchSelectWidth]=\"dropdownMatchSelectWidth\"\n [ngModel]=\"_ngModel\"\n [disabled]=\"disabled\"\n (ngModelChange)=\"onSelectChange($event)\"\n (nzFocus)=\"onFocus.emit()\"\n >\n @if (showSelectAll) {\n <nz-option [nzLabel]=\"'-- Ch\u1ECDn t\u1EA5t c\u1EA3 --'\" [nzValue]=\"'__all__'\"></nz-option>\n }\n @for (item of lstItem; track $index) {\n <nz-option [nzLabel]=\"getDisplay(item)\" [nzValue]=\"valueField ? item[valueField] : item\"></nz-option>\n }\n </nz-select>\n </nz-form-control>\n </nz-form-item>\n } @else {\n <nz-select\n class=\"full-width\"\n nzShowSearch\n nzAllowClear\n [nzSize]=\"size\"\n [nzPlaceHolder]=\"placeHolder\"\n [nzDropdownMatchSelectWidth]=\"dropdownMatchSelectWidth\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"onSelectChange($event)\"\n (nzFocus)=\"onFocus.emit()\"\n [disabled]=\"disabled\"\n [ngStyle]=\"{\n width: inputWidth,\n height: inputHeight,\n }\"\n [ngClass]=\"{\n 'border-bottom-only': borderBottomOnly,\n 'custom-height-select': inputHeight ? true : false,\n }\"\n >\n @if (showSelectAll) {\n <nz-option [nzLabel]=\"'-- Ch\u1ECDn t\u1EA5t c\u1EA3 --'\" [nzValue]=\"'__all__'\"></nz-option>\n }\n @for (item of lstItem; track $index) {\n <nz-option [nzLabel]=\"getDisplay(item)\" [nzValue]=\"valueField ? item[valueField] : item\"></nz-option>\n }\n </nz-select>\n }\n }\n } @else {\n @if (controlName) {\n <div [formGroup]=\"formData\">\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n nzNoColon\n [nzLabelWrap]=\"floatingLabel ? false : true\"\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"floatingLabel || labelFlex ? null : 24 - labelSpan\"\n [ngClass]=\"{ 'full-width': floatingLabel }\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <nz-select\n nzShowSearch\n nzAllowClear\n [nzSize]=\"size\"\n [nzMode]=\"'multiple'\"\n [nzMaxMultipleCount]=\"lstItem.length\"\n [nzMaxTagCount]=\"maxTagCount\"\n [nzAllowClear]=\"true\"\n [nzShowSearch]=\"true\"\n [nzDropdownMatchSelectWidth]=\"dropdownMatchSelectWidth\"\n [formControlName]=\"controlName\"\n (nzFocus)=\"onFocus.emit()\"\n >\n @if (showSelectAll) {\n <nz-option [nzLabel]=\"'-- Ch\u1ECDn t\u1EA5t c\u1EA3 --'\" [nzValue]=\"'__all__'\"></nz-option>\n }\n @for (item of lstItem; track $index) {\n <nz-option [nzLabel]=\"getDisplay(item)\" [nzValue]=\"valueField ? item[valueField] : item\"></nz-option>\n }\n </nz-select>\n </nz-form-control>\n </nz-form-item>\n </div>\n } @else {\n @if (label) {\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n nzNoColon\n [nzLabelWrap]=\"floatingLabel ? false : true\"\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"floatingLabel || labelFlex ? null : 24 - labelSpan\"\n [ngClass]=\"{ 'full-width': floatingLabel }\"\n [nzValidateStatus]=\"customValidateStatus\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <nz-select\n nzShowSearch\n nzAllowClear\n [nzSize]=\"size\"\n [nzMode]=\"'multiple'\"\n [nzMaxMultipleCount]=\"lstItem.length\"\n [nzMaxTagCount]=\"maxTagCount\"\n [nzAllowClear]=\"true\"\n [nzShowSearch]=\"true\"\n [nzDropdownMatchSelectWidth]=\"dropdownMatchSelectWidth\"\n [ngModel]=\"_ngModel\"\n [disabled]=\"disabled\"\n (ngModelChange)=\"onSelectChange($event)\"\n (nzFocus)=\"onFocus.emit()\"\n >\n @if (showSelectAll) {\n <nz-option [nzLabel]=\"'-- Ch\u1ECDn t\u1EA5t c\u1EA3 --'\" [nzValue]=\"'__all__'\"></nz-option>\n }\n @for (item of lstItem; track $index) {\n <nz-option [nzLabel]=\"getDisplay(item)\" [nzValue]=\"valueField ? item[valueField] : item\"></nz-option>\n }\n </nz-select>\n </nz-form-control>\n </nz-form-item>\n } @else {\n <nz-select\n class=\"full-width\"\n nzShowSearch\n nzAllowClear\n [nzSize]=\"size\"\n [nzPlaceHolder]=\"placeHolder\"\n [nzMode]=\"'multiple'\"\n [nzMaxMultipleCount]=\"lstItem.length\"\n [nzMaxTagCount]=\"maxTagCount\"\n [nzDropdownMatchSelectWidth]=\"dropdownMatchSelectWidth\"\n [ngModel]=\"_ngModel\"\n [disabled]=\"disabled\"\n (ngModelChange)=\"onSelectChange($event)\"\n (nzFocus)=\"onFocus.emit()\"\n >\n @if (showSelectAll) {\n <nz-option [nzLabel]=\"'-- Ch\u1ECDn t\u1EA5t c\u1EA3 --'\" [nzValue]=\"'__all__'\"></nz-option>\n }\n @for (item of lstItem; track $index) {\n <nz-option [nzLabel]=\"getDisplay(item)\" [nzValue]=\"valueField ? item[valueField] : item\"></nz-option>\n }\n </nz-select>\n }\n }\n }\n</div>\n", styles: ["::ng-deep .extend-select-wrapper.floating-label{position:relative;padding-top:14px}::ng-deep .extend-select-wrapper.floating-label nz-form-item nz-form-label{position:absolute;top:12px;left:10px;transform:translateY(-50%);background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 80%,#ffffff 80%);z-index:1;height:auto;line-height:normal;padding:0 4px}::ng-deep .extend-select-wrapper.floating-label nz-form-item nz-form-label label{font-size:12px;color:#969696;font-weight:700;height:auto;line-height:normal;padding:0;display:flex;align-items:center}::ng-deep .extend-select-wrapper .full-width{width:100%}.extend-select-wrapper.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label,.extend-select-wrapper.floating-label nz-form-item:has(input[disabled]) nz-form-label,.extend-select-wrapper.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label{background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 75%,#f5f5f5 50%)}.extend-select-wrapper.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label label,.extend-select-wrapper.floating-label nz-form-item:has(input[disabled]) nz-form-label label,.extend-select-wrapper.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label label{color:#bfbfbf}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: NzFormModule }, { kind: "directive", type: i4.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i4.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "component", type: i5.NzFormItemComponent, selector: "nz-form-item", exportAs: ["nzFormItem"] }, { kind: "component", type: i5.NzFormLabelComponent, selector: "nz-form-label", inputs: ["nzFor", "nzRequired", "nzNoColon", "nzTooltipTitle", "nzTooltipIcon", "nzLabelAlign", "nzLabelWrap"], exportAs: ["nzFormLabel"] }, { kind: "component", type: i5.NzFormControlComponent, selector: "nz-form-control", inputs: ["nzSuccessTip", "nzWarningTip", "nzErrorTip", "nzValidatingTip", "nzExtra", "nzAutoTips", "nzDisableAutoTips", "nzHasFeedback", "nzValidateStatus"], exportAs: ["nzFormControl"] }, { kind: "ngmodule", type: NzSelectModule }, { kind: "component", type: i6$2.NzOptionComponent, selector: "nz-option", inputs: ["nzTitle", "nzLabel", "nzValue", "nzKey", "nzDisabled", "nzHide", "nzCustomContent"], exportAs: ["nzOption"] }, { kind: "component", type: i6$2.NzSelectComponent, selector: "nz-select", inputs: ["nzId", "nzSize", "nzStatus", "nzOptionHeightPx", "nzOptionOverflowSize", "nzDropdownClassName", "nzDropdownMatchSelectWidth", "nzDropdownStyle", "nzNotFoundContent", "nzPlaceHolder", "nzPlacement", "nzMaxTagCount", "nzDropdownRender", "nzCustomTemplate", "nzSuffixIcon", "nzClearIcon", "nzRemoveIcon", "nzMenuItemSelectedIcon", "nzTokenSeparators", "nzMaxTagPlaceholder", "nzMaxMultipleCount", "nzMode", "nzFilterOption", "compareWith", "nzAllowClear", "nzBorderless", "nzShowSearch", "nzLoading", "nzAutoFocus", "nzAutoClearSearchValue", "nzServerSearch", "nzDisabled", "nzOpen", "nzSelectOnTab", "nzBackdrop", "nzOptions", "nzShowArrow"], outputs: ["nzOnSearch", "nzScrollToBottom", "nzOpenChange", "nzBlur", "nzFocus"], exportAs: ["nzSelect"] }] });
3057
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: ExtendSelectComponent, isStandalone: true, selector: "extend-select", inputs: { label: "label", floatingLabel: "floatingLabel", placeHolder: "placeHolder", labelAlign: "labelAlign", dropdownMatchSelectWidth: "dropdownMatchSelectWidth", labelSpan: "labelSpan", labelFlex: "labelFlex", disabled: "disabled", required: "required", noBottom: "noBottom", multiple: "multiple", showSelectAll: "showSelectAll", maxTagCount: "maxTagCount", inputWidth: "inputWidth", inputHeight: "inputHeight", borderBottomOnly: "borderBottomOnly", displayInline: "displayInline", size: "size", lstItem: "lstItem", displayField: "displayField", displayFields: "displayFields", valueField: "valueField", formData: "formData", controlName: "controlName", _ngModel: "_ngModel", isSubmited: "isSubmited" }, outputs: { _ngModelChange: "_ngModelChange", itemChange: "itemChange", onFocus: "onFocus" }, host: { properties: { "style.--custom-select-height": "this.cssHeight" } }, ngImport: i0, template: "<div\n class=\"extend-select-wrapper\"\n [ngClass]=\"[floatingLabel && label ? 'floating-label' : '']\"\n [ngStyle]=\"{ display: displayInline ? 'inline' : null }\"\n>\n @if (!multiple) {\n @if (controlName) {\n <div [formGroup]=\"formData\">\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n nzNoColon\n [nzLabelWrap]=\"floatingLabel ? false : true\"\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"floatingLabel || labelFlex ? null : 24 - labelSpan\"\n [ngClass]=\"{ 'full-width': floatingLabel }\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <nz-select\n nzShowSearch\n nzAllowClear\n [nzSize]=\"size\"\n [nzAllowClear]=\"true\"\n [nzShowSearch]=\"true\"\n [nzPlaceHolder]=\"placeHolder\"\n [nzDropdownMatchSelectWidth]=\"dropdownMatchSelectWidth\"\n [formControlName]=\"controlName\"\n (nzFocus)=\"onFocus.emit()\"\n >\n @if (showSelectAll) {\n <nz-option [nzLabel]=\"'-- Ch\u1ECDn t\u1EA5t c\u1EA3 --'\" [nzValue]=\"'__all__'\"></nz-option>\n }\n @for (item of lstItem; track $index) {\n <nz-option [nzLabel]=\"getDisplay(item)\" [nzValue]=\"valueField ? item[valueField] : item\"></nz-option>\n }\n </nz-select>\n </nz-form-control>\n </nz-form-item>\n </div>\n } @else {\n @if (label) {\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n nzNoColon\n [nzLabelWrap]=\"floatingLabel ? false : true\"\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"floatingLabel || labelFlex ? null : 24 - labelSpan\"\n [ngClass]=\"{ 'full-width': floatingLabel }\"\n [nzValidateStatus]=\"customValidateStatus\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <nz-select\n nzShowSearch\n nzAllowClear\n [nzSize]=\"size\"\n [nzAllowClear]=\"true\"\n [nzShowSearch]=\"true\"\n [nzPlaceHolder]=\"placeHolder\"\n [nzDropdownMatchSelectWidth]=\"dropdownMatchSelectWidth\"\n [ngModel]=\"_ngModel\"\n [disabled]=\"disabled\"\n (ngModelChange)=\"onSelectChange($event)\"\n (nzFocus)=\"onFocus.emit()\"\n >\n @if (showSelectAll) {\n <nz-option [nzLabel]=\"'-- Ch\u1ECDn t\u1EA5t c\u1EA3 --'\" [nzValue]=\"'__all__'\"></nz-option>\n }\n @for (item of lstItem; track $index) {\n <nz-option [nzLabel]=\"getDisplay(item)\" [nzValue]=\"valueField ? item[valueField] : item\"></nz-option>\n }\n </nz-select>\n </nz-form-control>\n </nz-form-item>\n } @else {\n <nz-select\n class=\"full-width\"\n nzShowSearch\n nzAllowClear\n [nzSize]=\"size\"\n [nzPlaceHolder]=\"placeHolder\"\n [nzDropdownMatchSelectWidth]=\"dropdownMatchSelectWidth\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"onSelectChange($event)\"\n (nzFocus)=\"onFocus.emit()\"\n [disabled]=\"disabled\"\n [ngStyle]=\"{\n width: inputWidth,\n height: inputHeight,\n }\"\n [ngClass]=\"{\n 'border-bottom-only': borderBottomOnly,\n 'custom-height-select': inputHeight ? true : false,\n }\"\n >\n @if (showSelectAll) {\n <nz-option [nzLabel]=\"'-- Ch\u1ECDn t\u1EA5t c\u1EA3 --'\" [nzValue]=\"'__all__'\"></nz-option>\n }\n @for (item of lstItem; track $index) {\n <nz-option [nzLabel]=\"getDisplay(item)\" [nzValue]=\"valueField ? item[valueField] : item\"></nz-option>\n }\n </nz-select>\n }\n }\n } @else {\n @if (controlName) {\n <div [formGroup]=\"formData\">\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n nzNoColon\n [nzLabelWrap]=\"floatingLabel ? false : true\"\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"floatingLabel || labelFlex ? null : 24 - labelSpan\"\n [ngClass]=\"{ 'full-width': floatingLabel }\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <nz-select\n nzShowSearch\n nzAllowClear\n [nzSize]=\"size\"\n [nzMode]=\"'multiple'\"\n [nzMaxMultipleCount]=\"lstItem.length\"\n [nzMaxTagCount]=\"maxTagCount\"\n [nzAllowClear]=\"true\"\n [nzShowSearch]=\"true\"\n [nzPlaceHolder]=\"placeHolder\"\n [nzDropdownMatchSelectWidth]=\"dropdownMatchSelectWidth\"\n [formControlName]=\"controlName\"\n (nzFocus)=\"onFocus.emit()\"\n >\n @if (showSelectAll) {\n <nz-option [nzLabel]=\"'-- Ch\u1ECDn t\u1EA5t c\u1EA3 --'\" [nzValue]=\"'__all__'\"></nz-option>\n }\n @for (item of lstItem; track $index) {\n <nz-option [nzLabel]=\"getDisplay(item)\" [nzValue]=\"valueField ? item[valueField] : item\"></nz-option>\n }\n </nz-select>\n </nz-form-control>\n </nz-form-item>\n </div>\n } @else {\n @if (label) {\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n nzNoColon\n [nzLabelWrap]=\"floatingLabel ? false : true\"\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"floatingLabel || labelFlex ? null : 24 - labelSpan\"\n [ngClass]=\"{ 'full-width': floatingLabel }\"\n [nzValidateStatus]=\"customValidateStatus\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <nz-select\n nzShowSearch\n nzAllowClear\n [nzSize]=\"size\"\n [nzMode]=\"'multiple'\"\n [nzMaxMultipleCount]=\"lstItem.length\"\n [nzMaxTagCount]=\"maxTagCount\"\n [nzAllowClear]=\"true\"\n [nzShowSearch]=\"true\"\n [nzPlaceHolder]=\"placeHolder\"\n [nzDropdownMatchSelectWidth]=\"dropdownMatchSelectWidth\"\n [ngModel]=\"_ngModel\"\n [disabled]=\"disabled\"\n (ngModelChange)=\"onSelectChange($event)\"\n (nzFocus)=\"onFocus.emit()\"\n >\n @if (showSelectAll) {\n <nz-option [nzLabel]=\"'-- Ch\u1ECDn t\u1EA5t c\u1EA3 --'\" [nzValue]=\"'__all__'\"></nz-option>\n }\n @for (item of lstItem; track $index) {\n <nz-option [nzLabel]=\"getDisplay(item)\" [nzValue]=\"valueField ? item[valueField] : item\"></nz-option>\n }\n </nz-select>\n </nz-form-control>\n </nz-form-item>\n } @else {\n <nz-select\n class=\"full-width\"\n nzShowSearch\n nzAllowClear\n [nzSize]=\"size\"\n [nzPlaceHolder]=\"placeHolder\"\n [nzMode]=\"'multiple'\"\n [nzMaxMultipleCount]=\"lstItem.length\"\n [nzMaxTagCount]=\"maxTagCount\"\n [nzDropdownMatchSelectWidth]=\"dropdownMatchSelectWidth\"\n [ngModel]=\"_ngModel\"\n [disabled]=\"disabled\"\n (ngModelChange)=\"onSelectChange($event)\"\n (nzFocus)=\"onFocus.emit()\"\n >\n @if (showSelectAll) {\n <nz-option [nzLabel]=\"'-- Ch\u1ECDn t\u1EA5t c\u1EA3 --'\" [nzValue]=\"'__all__'\"></nz-option>\n }\n @for (item of lstItem; track $index) {\n <nz-option [nzLabel]=\"getDisplay(item)\" [nzValue]=\"valueField ? item[valueField] : item\"></nz-option>\n }\n </nz-select>\n }\n }\n }\n</div>\n", styles: ["::ng-deep .extend-select-wrapper.floating-label{position:relative;padding-top:14px}::ng-deep .extend-select-wrapper.floating-label nz-form-item nz-form-label{position:absolute;top:12px;left:10px;transform:translateY(-50%);background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 80%,#ffffff 80%);z-index:1;height:auto;line-height:normal;padding:0 4px}::ng-deep .extend-select-wrapper.floating-label nz-form-item nz-form-label label{font-size:12px;color:#969696;font-weight:700;height:auto;line-height:normal;padding:0;display:flex;align-items:center}::ng-deep .extend-select-wrapper .full-width{width:100%}.extend-select-wrapper.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label,.extend-select-wrapper.floating-label nz-form-item:has(input[disabled]) nz-form-label,.extend-select-wrapper.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label{background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 75%,#f5f5f5 50%)}.extend-select-wrapper.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label label,.extend-select-wrapper.floating-label nz-form-item:has(input[disabled]) nz-form-label label,.extend-select-wrapper.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label label{color:#bfbfbf}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: NzFormModule }, { kind: "directive", type: i4.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i4.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "component", type: i5.NzFormItemComponent, selector: "nz-form-item", exportAs: ["nzFormItem"] }, { kind: "component", type: i5.NzFormLabelComponent, selector: "nz-form-label", inputs: ["nzFor", "nzRequired", "nzNoColon", "nzTooltipTitle", "nzTooltipIcon", "nzLabelAlign", "nzLabelWrap"], exportAs: ["nzFormLabel"] }, { kind: "component", type: i5.NzFormControlComponent, selector: "nz-form-control", inputs: ["nzSuccessTip", "nzWarningTip", "nzErrorTip", "nzValidatingTip", "nzExtra", "nzAutoTips", "nzDisableAutoTips", "nzHasFeedback", "nzValidateStatus"], exportAs: ["nzFormControl"] }, { kind: "ngmodule", type: NzSelectModule }, { kind: "component", type: i6$2.NzOptionComponent, selector: "nz-option", inputs: ["nzTitle", "nzLabel", "nzValue", "nzKey", "nzDisabled", "nzHide", "nzCustomContent"], exportAs: ["nzOption"] }, { kind: "component", type: i6$2.NzSelectComponent, selector: "nz-select", inputs: ["nzId", "nzSize", "nzStatus", "nzOptionHeightPx", "nzOptionOverflowSize", "nzDropdownClassName", "nzDropdownMatchSelectWidth", "nzDropdownStyle", "nzNotFoundContent", "nzPlaceHolder", "nzPlacement", "nzMaxTagCount", "nzDropdownRender", "nzCustomTemplate", "nzSuffixIcon", "nzClearIcon", "nzRemoveIcon", "nzMenuItemSelectedIcon", "nzTokenSeparators", "nzMaxTagPlaceholder", "nzMaxMultipleCount", "nzMode", "nzFilterOption", "compareWith", "nzAllowClear", "nzBorderless", "nzShowSearch", "nzLoading", "nzAutoFocus", "nzAutoClearSearchValue", "nzServerSearch", "nzDisabled", "nzOpen", "nzSelectOnTab", "nzBackdrop", "nzOptions", "nzShowArrow"], outputs: ["nzOnSearch", "nzScrollToBottom", "nzOpenChange", "nzBlur", "nzFocus"], exportAs: ["nzSelect"] }] });
2962
3058
  }
2963
3059
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: ExtendSelectComponent, decorators: [{
2964
3060
  type: Component,
2965
- args: [{ selector: 'extend-select', imports: [CommonModule, FormsModule, ReactiveFormsModule, TranslateModule, NzFormModule, NzSelectModule], template: "<div\n class=\"extend-select-wrapper\"\n [ngClass]=\"[floatingLabel && label ? 'floating-label' : '']\"\n [ngStyle]=\"{ display: displayInline ? 'inline' : null }\"\n>\n @if (!multiple) {\n @if (controlName) {\n <div [formGroup]=\"formData\">\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n nzNoColon\n [nzLabelWrap]=\"floatingLabel ? false : true\"\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"floatingLabel || labelFlex ? null : 24 - labelSpan\"\n [ngClass]=\"{ 'full-width': floatingLabel }\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <nz-select\n nzShowSearch\n nzAllowClear\n [nzSize]=\"size\"\n [nzAllowClear]=\"true\"\n [nzShowSearch]=\"true\"\n [nzDropdownMatchSelectWidth]=\"dropdownMatchSelectWidth\"\n [formControlName]=\"controlName\"\n (nzFocus)=\"onFocus.emit()\"\n >\n @if (showSelectAll) {\n <nz-option [nzLabel]=\"'-- Ch\u1ECDn t\u1EA5t c\u1EA3 --'\" [nzValue]=\"'__all__'\"></nz-option>\n }\n @for (item of lstItem; track $index) {\n <nz-option [nzLabel]=\"getDisplay(item)\" [nzValue]=\"valueField ? item[valueField] : item\"></nz-option>\n }\n </nz-select>\n </nz-form-control>\n </nz-form-item>\n </div>\n } @else {\n @if (label) {\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n nzNoColon\n [nzLabelWrap]=\"floatingLabel ? false : true\"\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"floatingLabel || labelFlex ? null : 24 - labelSpan\"\n [ngClass]=\"{ 'full-width': floatingLabel }\"\n [nzValidateStatus]=\"customValidateStatus\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <nz-select\n nzShowSearch\n nzAllowClear\n [nzSize]=\"size\"\n [nzAllowClear]=\"true\"\n [nzShowSearch]=\"true\"\n [nzDropdownMatchSelectWidth]=\"dropdownMatchSelectWidth\"\n [ngModel]=\"_ngModel\"\n [disabled]=\"disabled\"\n (ngModelChange)=\"onSelectChange($event)\"\n (nzFocus)=\"onFocus.emit()\"\n >\n @if (showSelectAll) {\n <nz-option [nzLabel]=\"'-- Ch\u1ECDn t\u1EA5t c\u1EA3 --'\" [nzValue]=\"'__all__'\"></nz-option>\n }\n @for (item of lstItem; track $index) {\n <nz-option [nzLabel]=\"getDisplay(item)\" [nzValue]=\"valueField ? item[valueField] : item\"></nz-option>\n }\n </nz-select>\n </nz-form-control>\n </nz-form-item>\n } @else {\n <nz-select\n class=\"full-width\"\n nzShowSearch\n nzAllowClear\n [nzSize]=\"size\"\n [nzPlaceHolder]=\"placeHolder\"\n [nzDropdownMatchSelectWidth]=\"dropdownMatchSelectWidth\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"onSelectChange($event)\"\n (nzFocus)=\"onFocus.emit()\"\n [disabled]=\"disabled\"\n [ngStyle]=\"{\n width: inputWidth,\n height: inputHeight,\n }\"\n [ngClass]=\"{\n 'border-bottom-only': borderBottomOnly,\n 'custom-height-select': inputHeight ? true : false,\n }\"\n >\n @if (showSelectAll) {\n <nz-option [nzLabel]=\"'-- Ch\u1ECDn t\u1EA5t c\u1EA3 --'\" [nzValue]=\"'__all__'\"></nz-option>\n }\n @for (item of lstItem; track $index) {\n <nz-option [nzLabel]=\"getDisplay(item)\" [nzValue]=\"valueField ? item[valueField] : item\"></nz-option>\n }\n </nz-select>\n }\n }\n } @else {\n @if (controlName) {\n <div [formGroup]=\"formData\">\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n nzNoColon\n [nzLabelWrap]=\"floatingLabel ? false : true\"\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"floatingLabel || labelFlex ? null : 24 - labelSpan\"\n [ngClass]=\"{ 'full-width': floatingLabel }\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <nz-select\n nzShowSearch\n nzAllowClear\n [nzSize]=\"size\"\n [nzMode]=\"'multiple'\"\n [nzMaxMultipleCount]=\"lstItem.length\"\n [nzMaxTagCount]=\"maxTagCount\"\n [nzAllowClear]=\"true\"\n [nzShowSearch]=\"true\"\n [nzDropdownMatchSelectWidth]=\"dropdownMatchSelectWidth\"\n [formControlName]=\"controlName\"\n (nzFocus)=\"onFocus.emit()\"\n >\n @if (showSelectAll) {\n <nz-option [nzLabel]=\"'-- Ch\u1ECDn t\u1EA5t c\u1EA3 --'\" [nzValue]=\"'__all__'\"></nz-option>\n }\n @for (item of lstItem; track $index) {\n <nz-option [nzLabel]=\"getDisplay(item)\" [nzValue]=\"valueField ? item[valueField] : item\"></nz-option>\n }\n </nz-select>\n </nz-form-control>\n </nz-form-item>\n </div>\n } @else {\n @if (label) {\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n nzNoColon\n [nzLabelWrap]=\"floatingLabel ? false : true\"\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"floatingLabel || labelFlex ? null : 24 - labelSpan\"\n [ngClass]=\"{ 'full-width': floatingLabel }\"\n [nzValidateStatus]=\"customValidateStatus\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <nz-select\n nzShowSearch\n nzAllowClear\n [nzSize]=\"size\"\n [nzMode]=\"'multiple'\"\n [nzMaxMultipleCount]=\"lstItem.length\"\n [nzMaxTagCount]=\"maxTagCount\"\n [nzAllowClear]=\"true\"\n [nzShowSearch]=\"true\"\n [nzDropdownMatchSelectWidth]=\"dropdownMatchSelectWidth\"\n [ngModel]=\"_ngModel\"\n [disabled]=\"disabled\"\n (ngModelChange)=\"onSelectChange($event)\"\n (nzFocus)=\"onFocus.emit()\"\n >\n @if (showSelectAll) {\n <nz-option [nzLabel]=\"'-- Ch\u1ECDn t\u1EA5t c\u1EA3 --'\" [nzValue]=\"'__all__'\"></nz-option>\n }\n @for (item of lstItem; track $index) {\n <nz-option [nzLabel]=\"getDisplay(item)\" [nzValue]=\"valueField ? item[valueField] : item\"></nz-option>\n }\n </nz-select>\n </nz-form-control>\n </nz-form-item>\n } @else {\n <nz-select\n class=\"full-width\"\n nzShowSearch\n nzAllowClear\n [nzSize]=\"size\"\n [nzPlaceHolder]=\"placeHolder\"\n [nzMode]=\"'multiple'\"\n [nzMaxMultipleCount]=\"lstItem.length\"\n [nzMaxTagCount]=\"maxTagCount\"\n [nzDropdownMatchSelectWidth]=\"dropdownMatchSelectWidth\"\n [ngModel]=\"_ngModel\"\n [disabled]=\"disabled\"\n (ngModelChange)=\"onSelectChange($event)\"\n (nzFocus)=\"onFocus.emit()\"\n >\n @if (showSelectAll) {\n <nz-option [nzLabel]=\"'-- Ch\u1ECDn t\u1EA5t c\u1EA3 --'\" [nzValue]=\"'__all__'\"></nz-option>\n }\n @for (item of lstItem; track $index) {\n <nz-option [nzLabel]=\"getDisplay(item)\" [nzValue]=\"valueField ? item[valueField] : item\"></nz-option>\n }\n </nz-select>\n }\n }\n }\n</div>\n", styles: ["::ng-deep .extend-select-wrapper.floating-label{position:relative;padding-top:14px}::ng-deep .extend-select-wrapper.floating-label nz-form-item nz-form-label{position:absolute;top:12px;left:10px;transform:translateY(-50%);background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 80%,#ffffff 80%);z-index:1;height:auto;line-height:normal;padding:0 4px}::ng-deep .extend-select-wrapper.floating-label nz-form-item nz-form-label label{font-size:12px;color:#969696;font-weight:700;height:auto;line-height:normal;padding:0;display:flex;align-items:center}::ng-deep .extend-select-wrapper .full-width{width:100%}.extend-select-wrapper.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label,.extend-select-wrapper.floating-label nz-form-item:has(input[disabled]) nz-form-label,.extend-select-wrapper.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label{background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 75%,#f5f5f5 50%)}.extend-select-wrapper.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label label,.extend-select-wrapper.floating-label nz-form-item:has(input[disabled]) nz-form-label label,.extend-select-wrapper.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label label{color:#bfbfbf}\n"] }]
3061
+ args: [{ selector: 'extend-select', imports: [CommonModule, FormsModule, ReactiveFormsModule, TranslateModule, NzFormModule, NzSelectModule], template: "<div\n class=\"extend-select-wrapper\"\n [ngClass]=\"[floatingLabel && label ? 'floating-label' : '']\"\n [ngStyle]=\"{ display: displayInline ? 'inline' : null }\"\n>\n @if (!multiple) {\n @if (controlName) {\n <div [formGroup]=\"formData\">\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n nzNoColon\n [nzLabelWrap]=\"floatingLabel ? false : true\"\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"floatingLabel || labelFlex ? null : 24 - labelSpan\"\n [ngClass]=\"{ 'full-width': floatingLabel }\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <nz-select\n nzShowSearch\n nzAllowClear\n [nzSize]=\"size\"\n [nzAllowClear]=\"true\"\n [nzShowSearch]=\"true\"\n [nzPlaceHolder]=\"placeHolder\"\n [nzDropdownMatchSelectWidth]=\"dropdownMatchSelectWidth\"\n [formControlName]=\"controlName\"\n (nzFocus)=\"onFocus.emit()\"\n >\n @if (showSelectAll) {\n <nz-option [nzLabel]=\"'-- Ch\u1ECDn t\u1EA5t c\u1EA3 --'\" [nzValue]=\"'__all__'\"></nz-option>\n }\n @for (item of lstItem; track $index) {\n <nz-option [nzLabel]=\"getDisplay(item)\" [nzValue]=\"valueField ? item[valueField] : item\"></nz-option>\n }\n </nz-select>\n </nz-form-control>\n </nz-form-item>\n </div>\n } @else {\n @if (label) {\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n nzNoColon\n [nzLabelWrap]=\"floatingLabel ? false : true\"\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"floatingLabel || labelFlex ? null : 24 - labelSpan\"\n [ngClass]=\"{ 'full-width': floatingLabel }\"\n [nzValidateStatus]=\"customValidateStatus\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <nz-select\n nzShowSearch\n nzAllowClear\n [nzSize]=\"size\"\n [nzAllowClear]=\"true\"\n [nzShowSearch]=\"true\"\n [nzPlaceHolder]=\"placeHolder\"\n [nzDropdownMatchSelectWidth]=\"dropdownMatchSelectWidth\"\n [ngModel]=\"_ngModel\"\n [disabled]=\"disabled\"\n (ngModelChange)=\"onSelectChange($event)\"\n (nzFocus)=\"onFocus.emit()\"\n >\n @if (showSelectAll) {\n <nz-option [nzLabel]=\"'-- Ch\u1ECDn t\u1EA5t c\u1EA3 --'\" [nzValue]=\"'__all__'\"></nz-option>\n }\n @for (item of lstItem; track $index) {\n <nz-option [nzLabel]=\"getDisplay(item)\" [nzValue]=\"valueField ? item[valueField] : item\"></nz-option>\n }\n </nz-select>\n </nz-form-control>\n </nz-form-item>\n } @else {\n <nz-select\n class=\"full-width\"\n nzShowSearch\n nzAllowClear\n [nzSize]=\"size\"\n [nzPlaceHolder]=\"placeHolder\"\n [nzDropdownMatchSelectWidth]=\"dropdownMatchSelectWidth\"\n [ngModel]=\"_ngModel\"\n (ngModelChange)=\"onSelectChange($event)\"\n (nzFocus)=\"onFocus.emit()\"\n [disabled]=\"disabled\"\n [ngStyle]=\"{\n width: inputWidth,\n height: inputHeight,\n }\"\n [ngClass]=\"{\n 'border-bottom-only': borderBottomOnly,\n 'custom-height-select': inputHeight ? true : false,\n }\"\n >\n @if (showSelectAll) {\n <nz-option [nzLabel]=\"'-- Ch\u1ECDn t\u1EA5t c\u1EA3 --'\" [nzValue]=\"'__all__'\"></nz-option>\n }\n @for (item of lstItem; track $index) {\n <nz-option [nzLabel]=\"getDisplay(item)\" [nzValue]=\"valueField ? item[valueField] : item\"></nz-option>\n }\n </nz-select>\n }\n }\n } @else {\n @if (controlName) {\n <div [formGroup]=\"formData\">\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n nzNoColon\n [nzLabelWrap]=\"floatingLabel ? false : true\"\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"floatingLabel || labelFlex ? null : 24 - labelSpan\"\n [ngClass]=\"{ 'full-width': floatingLabel }\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <nz-select\n nzShowSearch\n nzAllowClear\n [nzSize]=\"size\"\n [nzMode]=\"'multiple'\"\n [nzMaxMultipleCount]=\"lstItem.length\"\n [nzMaxTagCount]=\"maxTagCount\"\n [nzAllowClear]=\"true\"\n [nzShowSearch]=\"true\"\n [nzPlaceHolder]=\"placeHolder\"\n [nzDropdownMatchSelectWidth]=\"dropdownMatchSelectWidth\"\n [formControlName]=\"controlName\"\n (nzFocus)=\"onFocus.emit()\"\n >\n @if (showSelectAll) {\n <nz-option [nzLabel]=\"'-- Ch\u1ECDn t\u1EA5t c\u1EA3 --'\" [nzValue]=\"'__all__'\"></nz-option>\n }\n @for (item of lstItem; track $index) {\n <nz-option [nzLabel]=\"getDisplay(item)\" [nzValue]=\"valueField ? item[valueField] : item\"></nz-option>\n }\n </nz-select>\n </nz-form-control>\n </nz-form-item>\n </div>\n } @else {\n @if (label) {\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n nzNoColon\n [nzLabelWrap]=\"floatingLabel ? false : true\"\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"floatingLabel || labelFlex ? null : 24 - labelSpan\"\n [ngClass]=\"{ 'full-width': floatingLabel }\"\n [nzValidateStatus]=\"customValidateStatus\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <nz-select\n nzShowSearch\n nzAllowClear\n [nzSize]=\"size\"\n [nzMode]=\"'multiple'\"\n [nzMaxMultipleCount]=\"lstItem.length\"\n [nzMaxTagCount]=\"maxTagCount\"\n [nzAllowClear]=\"true\"\n [nzShowSearch]=\"true\"\n [nzPlaceHolder]=\"placeHolder\"\n [nzDropdownMatchSelectWidth]=\"dropdownMatchSelectWidth\"\n [ngModel]=\"_ngModel\"\n [disabled]=\"disabled\"\n (ngModelChange)=\"onSelectChange($event)\"\n (nzFocus)=\"onFocus.emit()\"\n >\n @if (showSelectAll) {\n <nz-option [nzLabel]=\"'-- Ch\u1ECDn t\u1EA5t c\u1EA3 --'\" [nzValue]=\"'__all__'\"></nz-option>\n }\n @for (item of lstItem; track $index) {\n <nz-option [nzLabel]=\"getDisplay(item)\" [nzValue]=\"valueField ? item[valueField] : item\"></nz-option>\n }\n </nz-select>\n </nz-form-control>\n </nz-form-item>\n } @else {\n <nz-select\n class=\"full-width\"\n nzShowSearch\n nzAllowClear\n [nzSize]=\"size\"\n [nzPlaceHolder]=\"placeHolder\"\n [nzMode]=\"'multiple'\"\n [nzMaxMultipleCount]=\"lstItem.length\"\n [nzMaxTagCount]=\"maxTagCount\"\n [nzDropdownMatchSelectWidth]=\"dropdownMatchSelectWidth\"\n [ngModel]=\"_ngModel\"\n [disabled]=\"disabled\"\n (ngModelChange)=\"onSelectChange($event)\"\n (nzFocus)=\"onFocus.emit()\"\n >\n @if (showSelectAll) {\n <nz-option [nzLabel]=\"'-- Ch\u1ECDn t\u1EA5t c\u1EA3 --'\" [nzValue]=\"'__all__'\"></nz-option>\n }\n @for (item of lstItem; track $index) {\n <nz-option [nzLabel]=\"getDisplay(item)\" [nzValue]=\"valueField ? item[valueField] : item\"></nz-option>\n }\n </nz-select>\n }\n }\n }\n</div>\n", styles: ["::ng-deep .extend-select-wrapper.floating-label{position:relative;padding-top:14px}::ng-deep .extend-select-wrapper.floating-label nz-form-item nz-form-label{position:absolute;top:12px;left:10px;transform:translateY(-50%);background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 80%,#ffffff 80%);z-index:1;height:auto;line-height:normal;padding:0 4px}::ng-deep .extend-select-wrapper.floating-label nz-form-item nz-form-label label{font-size:12px;color:#969696;font-weight:700;height:auto;line-height:normal;padding:0;display:flex;align-items:center}::ng-deep .extend-select-wrapper .full-width{width:100%}.extend-select-wrapper.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label,.extend-select-wrapper.floating-label nz-form-item:has(input[disabled]) nz-form-label,.extend-select-wrapper.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label{background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 75%,#f5f5f5 50%)}.extend-select-wrapper.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label label,.extend-select-wrapper.floating-label nz-form-item:has(input[disabled]) nz-form-label label,.extend-select-wrapper.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label label{color:#bfbfbf}\n"] }]
2966
3062
  }], propDecorators: { label: [{
2967
3063
  type: Input
2968
3064
  }], floatingLabel: [{
@@ -3054,29 +3150,44 @@ class ExtendTextArea {
3054
3150
  controlName;
3055
3151
  _ngModel = null;
3056
3152
  _ngModelChange = new EventEmitter();
3153
+ // Thêm các Input cho việc xử lý lỗi
3154
+ isTouched = false;
3155
+ inputErrorMessage = '';
3156
+ errorMessages = {
3157
+ required: 'Trường yêu cầu nhập',
3158
+ };
3057
3159
  ngAfterViewInit() { }
3058
3160
  onChange() {
3059
3161
  this._ngModelChange.emit(this._ngModel);
3060
3162
  }
3061
- get isInvalidNgModel() {
3062
- if (!this.required)
3063
- return false;
3064
- // Kiểm tra rỗng cho cả trường hợp chuỗi, null, undefined và mảng (multiple)
3163
+ // Bắt sự kiện blur (người dùng chạm vào ô textarea rồi trỏ ra ngoài)
3164
+ onBlur() {
3165
+ this.isTouched = true;
3166
+ }
3167
+ // Gom chung logic hiển thị lỗi cho ngModel
3168
+ get customValidateStatus() {
3169
+ // 1. Nếu chưa thao tác và chưa ấn submit form thì không hiện lỗi
3170
+ if (!this.isTouched && !this.isSubmited) {
3171
+ return '';
3172
+ }
3173
+ // 2. Ưu tiên lỗi ép từ bên ngoài vào (nếu có)
3174
+ if (this.inputErrorMessage) {
3175
+ return this.inputErrorMessage;
3176
+ }
3177
+ // 3. Kiểm tra rỗng
3178
+ // Dùng String(...).trim() để tránh trường hợp người dùng nhập toàn dấu cách (space)
3065
3179
  const isEmpty = this._ngModel === null ||
3066
3180
  this._ngModel === undefined ||
3067
- this._ngModel === '' ||
3181
+ String(this._ngModel).trim() === '' ||
3068
3182
  (Array.isArray(this._ngModel) && this._ngModel.length === 0);
3069
- return isEmpty;
3070
- }
3071
- get customValidateStatus() {
3072
- // Sẽ báo đỏ nếu field trống VÀ (component cha đã ấn submit)
3073
- if (this.isInvalidNgModel && this.isSubmited) {
3074
- return 'error';
3183
+ if (isEmpty) {
3184
+ return this.required ? this.errorMessages['required'] || 'Trường yêu cầu nhập' : '';
3075
3185
  }
3186
+ // Nếu hợp lệ
3076
3187
  return '';
3077
3188
  }
3078
3189
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: ExtendTextArea, deps: [], target: i0.ɵɵFactoryTarget.Component });
3079
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: ExtendTextArea, isStandalone: true, selector: "extend-textarea", inputs: { label: "label", placeHolder: "placeHolder", labelAlign: "labelAlign", floatingLabel: "floatingLabel", displayInline: "displayInline", labelSpan: "labelSpan", labelFlex: "labelFlex", inputFlex: "inputFlex", disabled: "disabled", required: "required", noBottom: "noBottom", selectModeType: "selectModeType", inputClass: "inputClass", size: "size", isSubmited: "isSubmited", minRows: "minRows", maxRows: "maxRows", lstItem: "lstItem", displayField: "displayField", valueField: "valueField", formData: "formData", controlName: "controlName", _ngModel: "_ngModel" }, outputs: { _ngModelChange: "_ngModelChange" }, ngImport: i0, template: "<div\n class=\"extend-textarea-wrapper\"\n [ngClass]=\"[floatingLabel ? 'floating-label' : '']\"\n [ngStyle]=\"{ display: displayInline ? 'inline' : null }\"\n>\n @if (controlName) {\n <div [formGroup]=\"formData\">\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"floatingLabel || labelFlex ? null : 24 - labelSpan\"\n [nzFlex]=\"inputFlex\"\n [ngClass]=\"{ 'full-width': floatingLabel }\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <textarea\n nz-input\n [nzAutosize]=\"{ minRows: minRows || 3, maxRows: maxRows || 5 }\"\n [formControlName]=\"controlName\"\n [ngClass]=\"inputClass\"\n [nzSize]=\"size\"\n ></textarea>\n </nz-form-control>\n </nz-form-item>\n </div>\n } @else {\n @if (label) {\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"floatingLabel || labelFlex ? null : 24 - labelSpan\"\n [nzFlex]=\"inputFlex\"\n [ngClass]=\"{ 'full-width': floatingLabel }\"\n [nzValidateStatus]=\"customValidateStatus\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <textarea\n nz-input\n [nzAutosize]=\"{ minRows: minRows || 3, maxRows: maxRows || 5 }\"\n [(ngModel)]=\"_ngModel\"\n (ngModelChange)=\"onChange()\"\n [disabled]=\"disabled\"\n [ngClass]=\"inputClass\"\n [nzSize]=\"size\"\n ></textarea>\n </nz-form-control>\n </nz-form-item>\n } @else {\n <textarea\n nz-input\n [nzAutosize]=\"{ minRows: minRows || 3, maxRows: maxRows || 5 }\"\n [(ngModel)]=\"_ngModel\"\n (ngModelChange)=\"onChange()\"\n [disabled]=\"disabled\"\n [ngClass]=\"inputClass\"\n [nzSize]=\"size\"\n ></textarea>\n }\n }\n</div>\n", styles: ["::ng-deep .extend-textarea-wrapper.floating-label{position:relative;padding-top:14px}::ng-deep .extend-textarea-wrapper nz-form-item nz-form-label{position:absolute;top:12px;left:10px;transform:translateY(-50%);background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 80%,#ffffff 80%);z-index:1;height:auto;line-height:normal;padding:0 4px}::ng-deep .extend-textarea-wrapper nz-form-item nz-form-label label{font-size:12px;color:#969696;font-weight:700;height:auto;line-height:normal;padding:0;display:flex;align-items:center}::ng-deep .extend-textarea-wrapper .full-width{width:100%}.extend-textarea-wrapper.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label,.extend-textarea-wrapper.floating-label nz-form-item:has(input[disabled]) nz-form-label,.extend-textarea-wrapper.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label{background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 75%,#f5f5f5 50%)}.extend-textarea-wrapper.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label label,.extend-textarea-wrapper.floating-label nz-form-item:has(input[disabled]) nz-form-label label,.extend-textarea-wrapper.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label label{color:#bfbfbf}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: NzFormModule }, { kind: "directive", type: i4.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i4.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "component", type: i5.NzFormItemComponent, selector: "nz-form-item", exportAs: ["nzFormItem"] }, { kind: "component", type: i5.NzFormLabelComponent, selector: "nz-form-label", inputs: ["nzFor", "nzRequired", "nzNoColon", "nzTooltipTitle", "nzTooltipIcon", "nzLabelAlign", "nzLabelWrap"], exportAs: ["nzFormLabel"] }, { kind: "component", type: i5.NzFormControlComponent, selector: "nz-form-control", inputs: ["nzSuccessTip", "nzWarningTip", "nzErrorTip", "nzValidatingTip", "nzExtra", "nzAutoTips", "nzDisableAutoTips", "nzHasFeedback", "nzValidateStatus"], exportAs: ["nzFormControl"] }, { kind: "ngmodule", type: NzDatePickerModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: NzInputModule }, { kind: "directive", type: i6$1.NzInputDirective, selector: "input[nz-input],textarea[nz-input]", inputs: ["nzBorderless", "nzSize", "nzStepperless", "nzStatus", "disabled"], exportAs: ["nzInput"] }, { kind: "directive", type: i6$1.NzAutosizeDirective, selector: "textarea[nzAutosize]", inputs: ["nzAutosize"], exportAs: ["nzAutosize"] }] });
3190
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: ExtendTextArea, isStandalone: true, selector: "extend-textarea", inputs: { label: "label", placeHolder: "placeHolder", labelAlign: "labelAlign", floatingLabel: "floatingLabel", displayInline: "displayInline", labelSpan: "labelSpan", labelFlex: "labelFlex", inputFlex: "inputFlex", disabled: "disabled", required: "required", noBottom: "noBottom", selectModeType: "selectModeType", inputClass: "inputClass", size: "size", isSubmited: "isSubmited", minRows: "minRows", maxRows: "maxRows", lstItem: "lstItem", displayField: "displayField", valueField: "valueField", formData: "formData", controlName: "controlName", _ngModel: "_ngModel", isTouched: "isTouched", inputErrorMessage: "inputErrorMessage", errorMessages: "errorMessages" }, outputs: { _ngModelChange: "_ngModelChange" }, ngImport: i0, template: "<div\n class=\"extend-textarea-wrapper\"\n [ngClass]=\"[floatingLabel && label ? 'floating-label' : '']\"\n [ngStyle]=\"{ display: displayInline ? 'inline' : null }\"\n>\n @if (controlName) {\n <div [formGroup]=\"formData\">\n <nz-form-item>\n @if (label) {\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n }\n <nz-form-control\n [nzSpan]=\"label ? (floatingLabel || labelFlex ? null : 24 - labelSpan) : null\"\n [nzFlex]=\"inputFlex\"\n [ngClass]=\"{ 'full-width': floatingLabel || !label }\"\n [nzErrorTip]=\"dynamicErrorTemplate\"\n >\n <textarea\n nz-input\n [nzAutosize]=\"{ minRows: minRows || 3, maxRows: maxRows || 5 }\"\n [formControlName]=\"controlName\"\n [ngClass]=\"inputClass\"\n [nzSize]=\"size\"\n ></textarea>\n </nz-form-control>\n </nz-form-item>\n\n <ng-template #dynamicErrorTemplate let-control>\n <ng-container *ngFor=\"let error of errorMessages | keyvalue\">\n <ng-container *ngIf=\"control.hasError(error.key)\">\n {{ error.value }}\n </ng-container>\n </ng-container>\n </ng-template>\n </div>\n } @else {\n <nz-form-item>\n @if (label) {\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n }\n <nz-form-control\n [nzSpan]=\"label ? (floatingLabel || labelFlex ? null : 24 - labelSpan) : null\"\n [nzFlex]=\"inputFlex\"\n [ngClass]=\"{ 'full-width': floatingLabel || !label }\"\n [nzErrorTip]=\"customValidateStatus\"\n [nzValidateStatus]=\"customValidateStatus ? 'error' : ''\"\n >\n <textarea\n nz-input\n [nzAutosize]=\"{ minRows: minRows || 3, maxRows: maxRows || 5 }\"\n [(ngModel)]=\"_ngModel\"\n (ngModelChange)=\"onChange()\"\n (blur)=\"onBlur()\"\n [disabled]=\"disabled\"\n [ngClass]=\"inputClass\"\n [nzSize]=\"size\"\n ></textarea>\n </nz-form-control>\n </nz-form-item>\n }\n</div>\n", styles: ["::ng-deep .extend-textarea-wrapper.floating-label{position:relative;padding-top:14px}::ng-deep .extend-textarea-wrapper nz-form-item nz-form-label{position:absolute;top:12px;left:10px;transform:translateY(-50%);background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 80%,#ffffff 80%);z-index:1;height:auto;line-height:normal;padding:0 4px}::ng-deep .extend-textarea-wrapper nz-form-item nz-form-label label{font-size:12px;color:#969696;font-weight:700;height:auto;line-height:normal;padding:0;display:flex;align-items:center}::ng-deep .extend-textarea-wrapper .full-width{width:100%}.extend-textarea-wrapper.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label,.extend-textarea-wrapper.floating-label nz-form-item:has(input[disabled]) nz-form-label,.extend-textarea-wrapper.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label{background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 75%,#f5f5f5 50%)}.extend-textarea-wrapper.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label label,.extend-textarea-wrapper.floating-label nz-form-item:has(input[disabled]) nz-form-label label,.extend-textarea-wrapper.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label label{color:#bfbfbf}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: i1$4.KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: NzFormModule }, { kind: "directive", type: i4.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i4.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "component", type: i5.NzFormItemComponent, selector: "nz-form-item", exportAs: ["nzFormItem"] }, { kind: "component", type: i5.NzFormLabelComponent, selector: "nz-form-label", inputs: ["nzFor", "nzRequired", "nzNoColon", "nzTooltipTitle", "nzTooltipIcon", "nzLabelAlign", "nzLabelWrap"], exportAs: ["nzFormLabel"] }, { kind: "component", type: i5.NzFormControlComponent, selector: "nz-form-control", inputs: ["nzSuccessTip", "nzWarningTip", "nzErrorTip", "nzValidatingTip", "nzExtra", "nzAutoTips", "nzDisableAutoTips", "nzHasFeedback", "nzValidateStatus"], exportAs: ["nzFormControl"] }, { kind: "ngmodule", type: NzDatePickerModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "ngmodule", type: NzInputModule }, { kind: "directive", type: i6$1.NzInputDirective, selector: "input[nz-input],textarea[nz-input]", inputs: ["nzBorderless", "nzSize", "nzStepperless", "nzStatus", "disabled"], exportAs: ["nzInput"] }, { kind: "directive", type: i6$1.NzAutosizeDirective, selector: "textarea[nzAutosize]", inputs: ["nzAutosize"], exportAs: ["nzAutosize"] }] });
3080
3191
  }
3081
3192
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: ExtendTextArea, decorators: [{
3082
3193
  type: Component,
@@ -3088,7 +3199,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImpor
3088
3199
  NzDatePickerModule,
3089
3200
  TranslateModule,
3090
3201
  NzInputModule,
3091
- ], template: "<div\n class=\"extend-textarea-wrapper\"\n [ngClass]=\"[floatingLabel ? 'floating-label' : '']\"\n [ngStyle]=\"{ display: displayInline ? 'inline' : null }\"\n>\n @if (controlName) {\n <div [formGroup]=\"formData\">\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"floatingLabel || labelFlex ? null : 24 - labelSpan\"\n [nzFlex]=\"inputFlex\"\n [ngClass]=\"{ 'full-width': floatingLabel }\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <textarea\n nz-input\n [nzAutosize]=\"{ minRows: minRows || 3, maxRows: maxRows || 5 }\"\n [formControlName]=\"controlName\"\n [ngClass]=\"inputClass\"\n [nzSize]=\"size\"\n ></textarea>\n </nz-form-control>\n </nz-form-item>\n </div>\n } @else {\n @if (label) {\n <nz-form-item>\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n <nz-form-control\n [nzSpan]=\"floatingLabel || labelFlex ? null : 24 - labelSpan\"\n [nzFlex]=\"inputFlex\"\n [ngClass]=\"{ 'full-width': floatingLabel }\"\n [nzValidateStatus]=\"customValidateStatus\"\n [nzErrorTip]=\"'REQUIRED_FIELD' | translate\"\n >\n <textarea\n nz-input\n [nzAutosize]=\"{ minRows: minRows || 3, maxRows: maxRows || 5 }\"\n [(ngModel)]=\"_ngModel\"\n (ngModelChange)=\"onChange()\"\n [disabled]=\"disabled\"\n [ngClass]=\"inputClass\"\n [nzSize]=\"size\"\n ></textarea>\n </nz-form-control>\n </nz-form-item>\n } @else {\n <textarea\n nz-input\n [nzAutosize]=\"{ minRows: minRows || 3, maxRows: maxRows || 5 }\"\n [(ngModel)]=\"_ngModel\"\n (ngModelChange)=\"onChange()\"\n [disabled]=\"disabled\"\n [ngClass]=\"inputClass\"\n [nzSize]=\"size\"\n ></textarea>\n }\n }\n</div>\n", styles: ["::ng-deep .extend-textarea-wrapper.floating-label{position:relative;padding-top:14px}::ng-deep .extend-textarea-wrapper nz-form-item nz-form-label{position:absolute;top:12px;left:10px;transform:translateY(-50%);background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 80%,#ffffff 80%);z-index:1;height:auto;line-height:normal;padding:0 4px}::ng-deep .extend-textarea-wrapper nz-form-item nz-form-label label{font-size:12px;color:#969696;font-weight:700;height:auto;line-height:normal;padding:0;display:flex;align-items:center}::ng-deep .extend-textarea-wrapper .full-width{width:100%}.extend-textarea-wrapper.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label,.extend-textarea-wrapper.floating-label nz-form-item:has(input[disabled]) nz-form-label,.extend-textarea-wrapper.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label{background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 75%,#f5f5f5 50%)}.extend-textarea-wrapper.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label label,.extend-textarea-wrapper.floating-label nz-form-item:has(input[disabled]) nz-form-label label,.extend-textarea-wrapper.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label label{color:#bfbfbf}\n"] }]
3202
+ ], template: "<div\n class=\"extend-textarea-wrapper\"\n [ngClass]=\"[floatingLabel && label ? 'floating-label' : '']\"\n [ngStyle]=\"{ display: displayInline ? 'inline' : null }\"\n>\n @if (controlName) {\n <div [formGroup]=\"formData\">\n <nz-form-item>\n @if (label) {\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n [nzFor]=\"controlName\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n }\n <nz-form-control\n [nzSpan]=\"label ? (floatingLabel || labelFlex ? null : 24 - labelSpan) : null\"\n [nzFlex]=\"inputFlex\"\n [ngClass]=\"{ 'full-width': floatingLabel || !label }\"\n [nzErrorTip]=\"dynamicErrorTemplate\"\n >\n <textarea\n nz-input\n [nzAutosize]=\"{ minRows: minRows || 3, maxRows: maxRows || 5 }\"\n [formControlName]=\"controlName\"\n [ngClass]=\"inputClass\"\n [nzSize]=\"size\"\n ></textarea>\n </nz-form-control>\n </nz-form-item>\n\n <ng-template #dynamicErrorTemplate let-control>\n <ng-container *ngFor=\"let error of errorMessages | keyvalue\">\n <ng-container *ngIf=\"control.hasError(error.key)\">\n {{ error.value }}\n </ng-container>\n </ng-container>\n </ng-template>\n </div>\n } @else {\n <nz-form-item>\n @if (label) {\n <nz-form-label\n [nzSpan]=\"floatingLabel || labelFlex ? null : labelSpan\"\n [nzFlex]=\"labelFlex\"\n [nzLabelAlign]=\"labelAlign\"\n [nzRequired]=\"required\"\n nzNoColon\n nzLabelWrap\n >\n {{ label }}\n </nz-form-label>\n }\n <nz-form-control\n [nzSpan]=\"label ? (floatingLabel || labelFlex ? null : 24 - labelSpan) : null\"\n [nzFlex]=\"inputFlex\"\n [ngClass]=\"{ 'full-width': floatingLabel || !label }\"\n [nzErrorTip]=\"customValidateStatus\"\n [nzValidateStatus]=\"customValidateStatus ? 'error' : ''\"\n >\n <textarea\n nz-input\n [nzAutosize]=\"{ minRows: minRows || 3, maxRows: maxRows || 5 }\"\n [(ngModel)]=\"_ngModel\"\n (ngModelChange)=\"onChange()\"\n (blur)=\"onBlur()\"\n [disabled]=\"disabled\"\n [ngClass]=\"inputClass\"\n [nzSize]=\"size\"\n ></textarea>\n </nz-form-control>\n </nz-form-item>\n }\n</div>\n", styles: ["::ng-deep .extend-textarea-wrapper.floating-label{position:relative;padding-top:14px}::ng-deep .extend-textarea-wrapper nz-form-item nz-form-label{position:absolute;top:12px;left:10px;transform:translateY(-50%);background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 80%,#ffffff 80%);z-index:1;height:auto;line-height:normal;padding:0 4px}::ng-deep .extend-textarea-wrapper nz-form-item nz-form-label label{font-size:12px;color:#969696;font-weight:700;height:auto;line-height:normal;padding:0;display:flex;align-items:center}::ng-deep .extend-textarea-wrapper .full-width{width:100%}.extend-textarea-wrapper.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label,.extend-textarea-wrapper.floating-label nz-form-item:has(input[disabled]) nz-form-label,.extend-textarea-wrapper.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label{background:linear-gradient(to bottom,var(--form-bg-color, #ffffff) 75%,#f5f5f5 50%)}.extend-textarea-wrapper.floating-label nz-form-item:has(.ant-select-disabled) nz-form-label label,.extend-textarea-wrapper.floating-label nz-form-item:has(input[disabled]) nz-form-label label,.extend-textarea-wrapper.floating-label nz-form-item:has(.ant-input-disabled) nz-form-label label{color:#bfbfbf}\n"] }]
3092
3203
  }], propDecorators: { label: [{
3093
3204
  type: Input
3094
3205
  }], placeHolder: [{
@@ -3137,6 +3248,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImpor
3137
3248
  type: Input
3138
3249
  }], _ngModelChange: [{
3139
3250
  type: Output
3251
+ }], isTouched: [{
3252
+ type: Input
3253
+ }], inputErrorMessage: [{
3254
+ type: Input
3255
+ }], errorMessages: [{
3256
+ type: Input
3140
3257
  }] } });
3141
3258
 
3142
3259
  class HighlightPipe {
@@ -3375,7 +3492,7 @@ class ReadMoreProComponent {
3375
3492
  this.maxHeight = this.expanded ? fullHeight + 'px' : collapsedHeight + 'px';
3376
3493
  }
3377
3494
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: ReadMoreProComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3378
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: ReadMoreProComponent, isStandalone: true, selector: "read-more", inputs: { text: "text", lines: "lines" }, viewQueries: [{ propertyName: "content", first: true, predicate: ["content"], descendants: true }], ngImport: i0, template: "<div class=\"wrapper\">\n <div\n #content\n class=\"content\"\n [class.clamp]=\"!expanded && overflow\"\n [style.-webkit-line-clamp]=\"!expanded && overflow ? lines : 'none'\"\n [style.maxHeight]=\"maxHeight\"\n [innerHTML]=\"text\"\n ></div>\n\n @if (overflow) {\n <div class=\"toggle-container\" [class.expanded]=\"expanded\">\n <span class=\"toggle text-italic\" (click)=\"toggle()\">\n {{ expanded ? \"Thu g\u1ECDn\" : \"Xem th\u00EAm\" }}\n <nz-icon [nzType]=\"expanded ? 'up' : 'down'\" nzTheme=\"outline\" />\n </span>\n </div>\n }\n</div>\n", styles: [".wrapper{position:relative;width:100%}.content{overflow:hidden;transition:max-height .35s cubic-bezier(.4,0,.2,1);white-space:pre-line}.clamp{display:-webkit-box;-webkit-box-orient:vertical}.toggle-container{text-align:right}.toggle{color:#1677ffa9;cursor:pointer;font-weight:500;display:inline-flex;align-items:center;gap:4px;font-size:.85em}.toggle:hover{text-decoration:underline}\n"], dependencies: [{ kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$2.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }] });
3495
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: ReadMoreProComponent, isStandalone: true, selector: "read-more", inputs: { text: "text", lines: "lines" }, viewQueries: [{ propertyName: "content", first: true, predicate: ["content"], descendants: true }], ngImport: i0, template: "<div class=\"wrapper\">\n <div\n #content\n class=\"content\"\n [class.clamp]=\"!expanded && overflow\"\n [style.-webkit-line-clamp]=\"!expanded && overflow ? lines : 'none'\"\n [style.maxHeight]=\"maxHeight\"\n [innerHTML]=\"text\"\n ></div>\n\n @if (overflow) {\n <div class=\"toggle-container\" [class.expanded]=\"expanded\">\n <span class=\"toggle text-italic\" (click)=\"toggle()\">\n {{ expanded ? \"Thu g\u1ECDn\" : \"Xem th\u00EAm\" }}\n <nz-icon [nzType]=\"expanded ? 'up' : 'down'\" nzTheme=\"outline\" />\n </span>\n </div>\n }\n</div>\n", styles: [".wrapper{position:relative;width:100%}.content{overflow:hidden;transition:max-height .35s cubic-bezier(.4,0,.2,1);white-space:pre-line}.clamp{display:-webkit-box;-webkit-box-orient:vertical}.toggle-container{text-align:right}.toggle{color:#1677ffa9;cursor:pointer;font-weight:500;display:inline-flex;align-items:center;gap:4px;font-size:.85em}.toggle:hover{text-decoration:underline}\n"], dependencies: [{ kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$3.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }] });
3379
3496
  }
3380
3497
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: ReadMoreProComponent, decorators: [{
3381
3498
  type: Component,
@@ -3414,7 +3531,7 @@ class ExtendTableComponent extends BaseComponent {
3414
3531
  this.filterChange.emit(this.filter);
3415
3532
  }
3416
3533
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: ExtendTableComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
3417
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: ExtendTableComponent, isStandalone: true, selector: "extend-table", inputs: { data: "data", filter: "filter", isLoading: "isLoading", idKey: "idKey", detailKey: "detailKey", selectedIdKey: "selectedIdKey", actionTemplate: "actionTemplate" }, outputs: { filterChange: "filterChange", ondblclickrow: "ondblclickrow" }, usesInheritance: true, ngImport: i0, template: "<nz-table\n class=\"extend-table\"\n [nzData]=\"data.LstItem || []\"\n [nzBordered]=\"true\"\n [nzSize]=\"'small'\"\n [nzLoading]=\"isLoading\"\n [nzFrontPagination]=\"false\"\n [nzShowPagination]=\"false\"\n [nzTotal]=\"data.TotalCount || 0\"\n [(nzPageIndex)]=\"filter.PageIndex\"\n [(nzPageSize)]=\"filter.PageSize\"\n (nzPageIndexChange)=\"onPageIndexChange($event)\"\n (nzPageSizeChange)=\"onPageSizeChange($event)\"\n>\n <thead>\n <tr>\n @for (item of data.LstHeader; track $index) {\n <th\n [nzWidth]=\"item.Width\"\n [nzShowSort]=\"item.ShowSort\"\n [nzSortOrder]=\"item.SortOrder\"\n (nzSortOrderChange)=\"onSortChange(item.Code, $event)\"\n >\n {{ item.Name }}\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of data.LstItem; track $index; let i = $index) {\n <tr\n tabindex=\"0\"\n class=\"selectable-row\"\n [ngClass]=\"selectedIdKey && row[idKey] == selectedIdKey ? 'selected-row' : ''\"\n (dblclick)=\"ondblclickrow.emit(row)\"\n >\n @for (col of data.LstHeader; track $index) {\n @if (col.Code === \"NO\") {\n <td [class]=\"col.Class\">\n {{ i + 1 + filter.PageIndex * filter.PageSize }}\n </td>\n } @else if (col.Code === \"ACTION\") {\n <td [class]=\"col.Class\">\n @if (actionTemplate) {\n <ng-container *ngTemplateOutlet=\"actionTemplate; context: { $implicit: row, index: i }\"> </ng-container>\n }\n </td>\n } @else if (col.Type === \"CHECKBOX\") {\n <td [class]=\"col.Class\">\n @if (row[col.Code]) {\n <nz-icon nzType=\"check-circle\" nzTheme=\"outline\" class=\"color-primary\" />\n }\n <!-- @else {\n <nz-icon nzType=\"close\" nzTheme=\"outline\" class=\"color-warn\" />\n } -->\n </td>\n } @else if (col.Code == detailKey) {\n <td [class]=\"col.Class\">\n <span\n class=\"link-detail\"\n (click)=\"goto(row[idKey])\"\n [innerHTML]=\"row[col.Code] | highlight: filter.Keyword || ''\"\n ></span>\n </td>\n } @else {\n @if (col.DomainCode) {\n <td\n [class]=\"col.Class\"\n [innerHTML]=\"row[col.Code] | dicDomain: col.DomainCode | async | highlight: filter.Keyword || ''\"\n ></td>\n } @else if (col.MaxLines) {\n <td>\n <read-more [text]=\"row[col.Code]\" [lines]=\"col.MaxLines\"></read-more>\n </td>\n } @else {\n <td [class]=\"col.Class\" [innerHTML]=\"row[col.Code] | highlight: filter.Keyword || ''\"></td>\n }\n }\n }\n </tr>\n }\n </tbody>\n</nz-table>\n", styles: ["@charset \"UTF-8\";.extend-table .ant-table-tbody>tr:nth-child(odd)>td{background-color:#fff}.extend-table .ant-table-tbody>tr:nth-child(2n)>td{background-color:#f6f6f6}.extend-table .selectable-row:hover td{background-color:#bae8fd!important}.extend-table .selectable-row:focus td{background-color:#bae8fd!important}.extend-table .link-detail{color:var(--primary-color);cursor:pointer}.extend-table .link-detail:hover{text-decoration:underline}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "ngmodule", type: NzTableModule }, { kind: "component", type: i2$2.NzTableComponent, selector: "nz-table", inputs: ["nzTableLayout", "nzShowTotal", "nzItemRender", "nzTitle", "nzFooter", "nzNoResult", "nzPageSizeOptions", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualForTrackBy", "nzLoadingDelay", "nzPageIndex", "nzPageSize", "nzTotal", "nzWidthConfig", "nzData", "nzCustomColumn", "nzPaginationPosition", "nzScroll", "noDataVirtualHeight", "nzPaginationType", "nzFrontPagination", "nzTemplateMode", "nzShowPagination", "nzLoading", "nzOuterBordered", "nzLoadingIndicator", "nzBordered", "nzSize", "nzShowSizeChanger", "nzHideOnSinglePage", "nzShowQuickJumper", "nzSimple"], outputs: ["nzPageSizeChange", "nzPageIndexChange", "nzQueryParams", "nzCurrentPageDataChange", "nzCustomColumnChange"], exportAs: ["nzTable"] }, { kind: "component", type: i2$2.NzThAddOnComponent, selector: "th[nzColumnKey], th[nzSortFn], th[nzSortOrder], th[nzFilters], th[nzShowSort], th[nzShowFilter], th[nzCustomFilter]", inputs: ["nzColumnKey", "nzFilterMultiple", "nzSortOrder", "nzSortPriority", "nzSortDirections", "nzFilters", "nzSortFn", "nzFilterFn", "nzShowSort", "nzShowFilter", "nzCustomFilter"], outputs: ["nzCheckedChange", "nzSortOrderChange", "nzFilterChange"] }, { kind: "directive", type: i2$2.NzTableCellDirective, selector: "th:not(.nz-disable-th):not([mat-cell]), td:not(.nz-disable-td):not([mat-cell])" }, { kind: "directive", type: i2$2.NzThMeasureDirective, selector: "th", inputs: ["nzWidth", "colspan", "colSpan", "rowspan", "rowSpan"] }, { kind: "component", type: i2$2.NzTheadComponent, selector: "thead:not(.ant-table-thead)", outputs: ["nzSortOrderChange"] }, { kind: "component", type: i2$2.NzTbodyComponent, selector: "tbody" }, { kind: "directive", type: i2$2.NzTrDirective, selector: "tr:not([mat-row]):not([mat-header-row]):not([nz-table-measure-row]):not([nzExpand]):not([nz-table-fixed-row])" }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$2.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "ngmodule", type: NzButtonModule }, { kind: "directive", type: i4$1.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], nz-icon, [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "pipe", type: HighlightPipe, name: "highlight" }, { kind: "pipe", type: DicDomainPipe, name: "dicDomain" }, { kind: "component", type: ReadMoreProComponent, selector: "read-more", inputs: ["text", "lines"] }] });
3534
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: ExtendTableComponent, isStandalone: true, selector: "extend-table", inputs: { data: "data", filter: "filter", isLoading: "isLoading", idKey: "idKey", detailKey: "detailKey", selectedIdKey: "selectedIdKey", actionTemplate: "actionTemplate" }, outputs: { filterChange: "filterChange", ondblclickrow: "ondblclickrow" }, usesInheritance: true, ngImport: i0, template: "<nz-table\n class=\"extend-table\"\n [nzData]=\"data.LstItem || []\"\n [nzBordered]=\"true\"\n [nzSize]=\"'small'\"\n [nzLoading]=\"isLoading\"\n [nzFrontPagination]=\"false\"\n [nzShowPagination]=\"false\"\n [nzTotal]=\"data.TotalCount || 0\"\n [(nzPageIndex)]=\"filter.PageIndex\"\n [(nzPageSize)]=\"filter.PageSize\"\n (nzPageIndexChange)=\"onPageIndexChange($event)\"\n (nzPageSizeChange)=\"onPageSizeChange($event)\"\n>\n <thead>\n <tr>\n @for (item of data.LstHeader; track $index) {\n <th\n [nzWidth]=\"item.Width\"\n [nzShowSort]=\"item.ShowSort\"\n [nzSortOrder]=\"item.SortOrder\"\n (nzSortOrderChange)=\"onSortChange(item.Code, $event)\"\n >\n {{ item.Name }}\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of data.LstItem; track $index; let i = $index) {\n <tr\n tabindex=\"0\"\n class=\"selectable-row\"\n [ngClass]=\"selectedIdKey && row[idKey] == selectedIdKey ? 'selected-row' : ''\"\n (dblclick)=\"ondblclickrow.emit(row)\"\n >\n @for (col of data.LstHeader; track $index) {\n @if (col.Code === \"NO\") {\n <td [class]=\"col.Class\">\n {{ i + 1 + filter.PageIndex * filter.PageSize }}\n </td>\n } @else if (col.Code === \"ACTION\") {\n <td [class]=\"col.Class\">\n @if (actionTemplate) {\n <ng-container *ngTemplateOutlet=\"actionTemplate; context: { $implicit: row, index: i }\"> </ng-container>\n }\n </td>\n } @else if (col.Type === \"CHECKBOX\") {\n <td [class]=\"col.Class\">\n @if (row[col.Code]) {\n <nz-icon nzType=\"check-circle\" nzTheme=\"outline\" class=\"color-primary\" />\n }\n <!-- @else {\n <nz-icon nzType=\"close\" nzTheme=\"outline\" class=\"color-warn\" />\n } -->\n </td>\n } @else if (col.Code == detailKey) {\n <td [class]=\"col.Class\">\n <span\n class=\"link-detail\"\n (click)=\"goto(row[idKey])\"\n [innerHTML]=\"row[col.Code] | highlight: filter.Keyword || ''\"\n ></span>\n </td>\n } @else {\n @if (col.DomainCode) {\n <td\n [class]=\"col.Class\"\n [innerHTML]=\"row[col.Code] | dicDomain: col.DomainCode | async | highlight: filter.Keyword || ''\"\n ></td>\n } @else if (col.MaxLines) {\n <td>\n <read-more [text]=\"row[col.Code]\" [lines]=\"col.MaxLines\"></read-more>\n </td>\n } @else {\n <td [class]=\"col.Class\" [innerHTML]=\"row[col.Code] | highlight: filter.Keyword || ''\"></td>\n }\n }\n }\n </tr>\n }\n </tbody>\n</nz-table>\n", styles: ["@charset \"UTF-8\";.extend-table .ant-table-tbody>tr:nth-child(odd)>td{background-color:#fff}.extend-table .ant-table-tbody>tr:nth-child(2n)>td{background-color:#f6f6f6}.extend-table .selectable-row:hover td{background-color:#bae8fd!important}.extend-table .selectable-row:focus td{background-color:#bae8fd!important}.extend-table .selected-rowtd{background-color:#bae8fd!important;font-weight:700}.extend-table .link-detail{color:var(--primary-color);cursor:pointer}.extend-table .link-detail:hover{text-decoration:underline}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1$4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: NzTableModule }, { kind: "component", type: i2$2.NzTableComponent, selector: "nz-table", inputs: ["nzTableLayout", "nzShowTotal", "nzItemRender", "nzTitle", "nzFooter", "nzNoResult", "nzPageSizeOptions", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualForTrackBy", "nzLoadingDelay", "nzPageIndex", "nzPageSize", "nzTotal", "nzWidthConfig", "nzData", "nzCustomColumn", "nzPaginationPosition", "nzScroll", "noDataVirtualHeight", "nzPaginationType", "nzFrontPagination", "nzTemplateMode", "nzShowPagination", "nzLoading", "nzOuterBordered", "nzLoadingIndicator", "nzBordered", "nzSize", "nzShowSizeChanger", "nzHideOnSinglePage", "nzShowQuickJumper", "nzSimple"], outputs: ["nzPageSizeChange", "nzPageIndexChange", "nzQueryParams", "nzCurrentPageDataChange", "nzCustomColumnChange"], exportAs: ["nzTable"] }, { kind: "component", type: i2$2.NzThAddOnComponent, selector: "th[nzColumnKey], th[nzSortFn], th[nzSortOrder], th[nzFilters], th[nzShowSort], th[nzShowFilter], th[nzCustomFilter]", inputs: ["nzColumnKey", "nzFilterMultiple", "nzSortOrder", "nzSortPriority", "nzSortDirections", "nzFilters", "nzSortFn", "nzFilterFn", "nzShowSort", "nzShowFilter", "nzCustomFilter"], outputs: ["nzCheckedChange", "nzSortOrderChange", "nzFilterChange"] }, { kind: "directive", type: i2$2.NzTableCellDirective, selector: "th:not(.nz-disable-th):not([mat-cell]), td:not(.nz-disable-td):not([mat-cell])" }, { kind: "directive", type: i2$2.NzThMeasureDirective, selector: "th", inputs: ["nzWidth", "colspan", "colSpan", "rowspan", "rowSpan"] }, { kind: "component", type: i2$2.NzTheadComponent, selector: "thead:not(.ant-table-thead)", outputs: ["nzSortOrderChange"] }, { kind: "component", type: i2$2.NzTbodyComponent, selector: "tbody" }, { kind: "directive", type: i2$2.NzTrDirective, selector: "tr:not([mat-row]):not([mat-header-row]):not([nz-table-measure-row]):not([nzExpand]):not([nz-table-fixed-row])" }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$3.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "ngmodule", type: NzButtonModule }, { kind: "directive", type: i4$1.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], nz-icon, [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "pipe", type: HighlightPipe, name: "highlight" }, { kind: "pipe", type: DicDomainPipe, name: "dicDomain" }, { kind: "component", type: ReadMoreProComponent, selector: "read-more", inputs: ["text", "lines"] }] });
3418
3535
  }
3419
3536
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: ExtendTableComponent, decorators: [{
3420
3537
  type: Component,
@@ -3427,7 +3544,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImpor
3427
3544
  HighlightPipe,
3428
3545
  DicDomainPipe,
3429
3546
  ReadMoreProComponent,
3430
- ], template: "<nz-table\n class=\"extend-table\"\n [nzData]=\"data.LstItem || []\"\n [nzBordered]=\"true\"\n [nzSize]=\"'small'\"\n [nzLoading]=\"isLoading\"\n [nzFrontPagination]=\"false\"\n [nzShowPagination]=\"false\"\n [nzTotal]=\"data.TotalCount || 0\"\n [(nzPageIndex)]=\"filter.PageIndex\"\n [(nzPageSize)]=\"filter.PageSize\"\n (nzPageIndexChange)=\"onPageIndexChange($event)\"\n (nzPageSizeChange)=\"onPageSizeChange($event)\"\n>\n <thead>\n <tr>\n @for (item of data.LstHeader; track $index) {\n <th\n [nzWidth]=\"item.Width\"\n [nzShowSort]=\"item.ShowSort\"\n [nzSortOrder]=\"item.SortOrder\"\n (nzSortOrderChange)=\"onSortChange(item.Code, $event)\"\n >\n {{ item.Name }}\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of data.LstItem; track $index; let i = $index) {\n <tr\n tabindex=\"0\"\n class=\"selectable-row\"\n [ngClass]=\"selectedIdKey && row[idKey] == selectedIdKey ? 'selected-row' : ''\"\n (dblclick)=\"ondblclickrow.emit(row)\"\n >\n @for (col of data.LstHeader; track $index) {\n @if (col.Code === \"NO\") {\n <td [class]=\"col.Class\">\n {{ i + 1 + filter.PageIndex * filter.PageSize }}\n </td>\n } @else if (col.Code === \"ACTION\") {\n <td [class]=\"col.Class\">\n @if (actionTemplate) {\n <ng-container *ngTemplateOutlet=\"actionTemplate; context: { $implicit: row, index: i }\"> </ng-container>\n }\n </td>\n } @else if (col.Type === \"CHECKBOX\") {\n <td [class]=\"col.Class\">\n @if (row[col.Code]) {\n <nz-icon nzType=\"check-circle\" nzTheme=\"outline\" class=\"color-primary\" />\n }\n <!-- @else {\n <nz-icon nzType=\"close\" nzTheme=\"outline\" class=\"color-warn\" />\n } -->\n </td>\n } @else if (col.Code == detailKey) {\n <td [class]=\"col.Class\">\n <span\n class=\"link-detail\"\n (click)=\"goto(row[idKey])\"\n [innerHTML]=\"row[col.Code] | highlight: filter.Keyword || ''\"\n ></span>\n </td>\n } @else {\n @if (col.DomainCode) {\n <td\n [class]=\"col.Class\"\n [innerHTML]=\"row[col.Code] | dicDomain: col.DomainCode | async | highlight: filter.Keyword || ''\"\n ></td>\n } @else if (col.MaxLines) {\n <td>\n <read-more [text]=\"row[col.Code]\" [lines]=\"col.MaxLines\"></read-more>\n </td>\n } @else {\n <td [class]=\"col.Class\" [innerHTML]=\"row[col.Code] | highlight: filter.Keyword || ''\"></td>\n }\n }\n }\n </tr>\n }\n </tbody>\n</nz-table>\n", styles: ["@charset \"UTF-8\";.extend-table .ant-table-tbody>tr:nth-child(odd)>td{background-color:#fff}.extend-table .ant-table-tbody>tr:nth-child(2n)>td{background-color:#f6f6f6}.extend-table .selectable-row:hover td{background-color:#bae8fd!important}.extend-table .selectable-row:focus td{background-color:#bae8fd!important}.extend-table .link-detail{color:var(--primary-color);cursor:pointer}.extend-table .link-detail:hover{text-decoration:underline}\n"] }]
3547
+ ], template: "<nz-table\n class=\"extend-table\"\n [nzData]=\"data.LstItem || []\"\n [nzBordered]=\"true\"\n [nzSize]=\"'small'\"\n [nzLoading]=\"isLoading\"\n [nzFrontPagination]=\"false\"\n [nzShowPagination]=\"false\"\n [nzTotal]=\"data.TotalCount || 0\"\n [(nzPageIndex)]=\"filter.PageIndex\"\n [(nzPageSize)]=\"filter.PageSize\"\n (nzPageIndexChange)=\"onPageIndexChange($event)\"\n (nzPageSizeChange)=\"onPageSizeChange($event)\"\n>\n <thead>\n <tr>\n @for (item of data.LstHeader; track $index) {\n <th\n [nzWidth]=\"item.Width\"\n [nzShowSort]=\"item.ShowSort\"\n [nzSortOrder]=\"item.SortOrder\"\n (nzSortOrderChange)=\"onSortChange(item.Code, $event)\"\n >\n {{ item.Name }}\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of data.LstItem; track $index; let i = $index) {\n <tr\n tabindex=\"0\"\n class=\"selectable-row\"\n [ngClass]=\"selectedIdKey && row[idKey] == selectedIdKey ? 'selected-row' : ''\"\n (dblclick)=\"ondblclickrow.emit(row)\"\n >\n @for (col of data.LstHeader; track $index) {\n @if (col.Code === \"NO\") {\n <td [class]=\"col.Class\">\n {{ i + 1 + filter.PageIndex * filter.PageSize }}\n </td>\n } @else if (col.Code === \"ACTION\") {\n <td [class]=\"col.Class\">\n @if (actionTemplate) {\n <ng-container *ngTemplateOutlet=\"actionTemplate; context: { $implicit: row, index: i }\"> </ng-container>\n }\n </td>\n } @else if (col.Type === \"CHECKBOX\") {\n <td [class]=\"col.Class\">\n @if (row[col.Code]) {\n <nz-icon nzType=\"check-circle\" nzTheme=\"outline\" class=\"color-primary\" />\n }\n <!-- @else {\n <nz-icon nzType=\"close\" nzTheme=\"outline\" class=\"color-warn\" />\n } -->\n </td>\n } @else if (col.Code == detailKey) {\n <td [class]=\"col.Class\">\n <span\n class=\"link-detail\"\n (click)=\"goto(row[idKey])\"\n [innerHTML]=\"row[col.Code] | highlight: filter.Keyword || ''\"\n ></span>\n </td>\n } @else {\n @if (col.DomainCode) {\n <td\n [class]=\"col.Class\"\n [innerHTML]=\"row[col.Code] | dicDomain: col.DomainCode | async | highlight: filter.Keyword || ''\"\n ></td>\n } @else if (col.MaxLines) {\n <td>\n <read-more [text]=\"row[col.Code]\" [lines]=\"col.MaxLines\"></read-more>\n </td>\n } @else {\n <td [class]=\"col.Class\" [innerHTML]=\"row[col.Code] | highlight: filter.Keyword || ''\"></td>\n }\n }\n }\n </tr>\n }\n </tbody>\n</nz-table>\n", styles: ["@charset \"UTF-8\";.extend-table .ant-table-tbody>tr:nth-child(odd)>td{background-color:#fff}.extend-table .ant-table-tbody>tr:nth-child(2n)>td{background-color:#f6f6f6}.extend-table .selectable-row:hover td{background-color:#bae8fd!important}.extend-table .selectable-row:focus td{background-color:#bae8fd!important}.extend-table .selected-rowtd{background-color:#bae8fd!important;font-weight:700}.extend-table .link-detail{color:var(--primary-color);cursor:pointer}.extend-table .link-detail:hover{text-decoration:underline}\n"] }]
3431
3548
  }], propDecorators: { data: [{
3432
3549
  type: Input
3433
3550
  }], filter: [{
@@ -3454,7 +3571,7 @@ class ExtendPaginationComponent {
3454
3571
  onQueryParamsChange = new EventEmitter();
3455
3572
  AppGlobals = AppGlobals;
3456
3573
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: ExtendPaginationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3457
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.7", type: ExtendPaginationComponent, isStandalone: true, selector: "extend-pagination", inputs: { totalCount: "totalCount", filter: "filter" }, outputs: { onQueryParamsChange: "onQueryParamsChange" }, ngImport: i0, template: "<nz-pagination\n [nzSize]=\"'small'\"\n [nzPageIndex]=\"filter.PageIndex + 1\"\n [nzPageSize]=\"filter.PageSize\"\n [nzTotal]=\"totalCount || 0\"\n [nzShowSizeChanger]=\"true\"\n [nzShowTotal]=\"showTotalTpl\"\n [nzPageSizeOptions]=\"AppGlobals.pageSizeOptions\"\n (nzPageIndexChange)=\"onQueryParamsChange.emit({ PageIndex: $event - 1, PageSize: filter.PageSize })\"\n (nzPageSizeChange)=\"onQueryParamsChange.emit({ PageIndex: filter.PageIndex, PageSize: $event })\"\n>\n</nz-pagination>\n\n<ng-template #showTotalTpl let-total let-range=\"range\">\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: NzPaginationModule }, { kind: "component", type: i1$4.NzPaginationComponent, selector: "nz-pagination", inputs: ["nzShowTotal", "nzItemRender", "nzSize", "nzPageSizeOptions", "nzShowSizeChanger", "nzShowQuickJumper", "nzSimple", "nzDisabled", "nzResponsive", "nzHideOnSinglePage", "nzTotal", "nzPageIndex", "nzPageSize"], outputs: ["nzPageSizeChange", "nzPageIndexChange"], exportAs: ["nzPagination"] }, { kind: "pipe", type: DecimalPipe, name: "number" }] });
3574
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.7", type: ExtendPaginationComponent, isStandalone: true, selector: "extend-pagination", inputs: { totalCount: "totalCount", filter: "filter" }, outputs: { onQueryParamsChange: "onQueryParamsChange" }, ngImport: i0, template: "<nz-pagination\n [nzSize]=\"'small'\"\n [nzPageIndex]=\"filter.PageIndex + 1\"\n [nzPageSize]=\"filter.PageSize\"\n [nzTotal]=\"totalCount || 0\"\n [nzShowSizeChanger]=\"true\"\n [nzShowTotal]=\"showTotalTpl\"\n [nzPageSizeOptions]=\"AppGlobals.pageSizeOptions\"\n (nzPageIndexChange)=\"onQueryParamsChange.emit({ PageIndex: $event - 1, PageSize: filter.PageSize })\"\n (nzPageSizeChange)=\"onQueryParamsChange.emit({ PageIndex: filter.PageIndex, PageSize: $event })\"\n>\n</nz-pagination>\n\n<ng-template #showTotalTpl let-total let-range=\"range\">\n {{ range[0] | number }} - {{ range[1] | number }} / {{ total | number }}\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: NzPaginationModule }, { kind: "component", type: i1$5.NzPaginationComponent, selector: "nz-pagination", inputs: ["nzShowTotal", "nzItemRender", "nzSize", "nzPageSizeOptions", "nzShowSizeChanger", "nzShowQuickJumper", "nzSimple", "nzDisabled", "nzResponsive", "nzHideOnSinglePage", "nzTotal", "nzPageIndex", "nzPageSize"], outputs: ["nzPageSizeChange", "nzPageIndexChange"], exportAs: ["nzPagination"] }, { kind: "pipe", type: DecimalPipe, name: "number" }] });
3458
3575
  }
3459
3576
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: ExtendPaginationComponent, decorators: [{
3460
3577
  type: Component,
@@ -3480,14 +3597,14 @@ class NoPermission {
3480
3597
  this.message = state?.message || null;
3481
3598
  console.log('Lấy từ history.state:', state);
3482
3599
  }
3483
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: NoPermission, deps: [{ token: i1$5.Router }], target: i0.ɵɵFactoryTarget.Component });
3600
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: NoPermission, deps: [{ token: i1$6.Router }], target: i0.ɵɵFactoryTarget.Component });
3484
3601
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.7", type: NoPermission, isStandalone: true, selector: "ng-component", ngImport: i0, template: `
3485
3602
  <h2>Không có quyền truy cập</h2>
3486
3603
  <p *ngIf="message">{{ message }}</p>
3487
3604
  <p *ngIf="deniedUrl">
3488
3605
  Bạn đã cố gắng truy cập: <strong>{{ deniedUrl }}</strong>
3489
3606
  </p>
3490
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
3607
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
3491
3608
  }
3492
3609
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: NoPermission, decorators: [{
3493
3610
  type: Component,
@@ -3501,7 +3618,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImpor
3501
3618
  `,
3502
3619
  imports: [CommonModule],
3503
3620
  }]
3504
- }], ctorParameters: () => [{ type: i1$5.Router }] });
3621
+ }], ctorParameters: () => [{ type: i1$6.Router }] });
3505
3622
 
3506
3623
  class PdfViewerComponent {
3507
3624
  // data = inject(NZ_MODAL_DATA);
@@ -3536,7 +3653,7 @@ class PdfViewerComponent {
3536
3653
  }
3537
3654
  }
3538
3655
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: PdfViewerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3539
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: PdfViewerComponent, isStandalone: true, selector: "pdf-viewer", inputs: { dataType: "dataType", pdfData: "pdfData" }, ngImport: i0, template: "@if (dataType == \"base64\") {\n <ngx-extended-pdf-viewer\n [zoom]=\"100\"\n [base64Src]=\"this.pdfData\"\n [showPrintButton]=\"false\"\n [showOpenFileButton]=\"false\"\n [showDownloadButton]=\"false\"\n ></ngx-extended-pdf-viewer>\n}\n\n@if (dataType == \"bytes\") {\n <ngx-extended-pdf-viewer\n [zoom]=\"100\"\n [src]=\"this.pdfData\"\n [showPrintButton]=\"false\"\n [showOpenFileButton]=\"false\"\n [showDownloadButton]=\"false\"\n ></ngx-extended-pdf-viewer>\n}\n", dependencies: [{ kind: "ngmodule", type: NgxExtendedPdfViewerModule }, { kind: "component", type: i1$6.NgxExtendedPdfViewerComponent, selector: "ngx-extended-pdf-viewer", inputs: ["customFindbarInputArea", "customToolbar", "customFindbar", "customFindbarButtons", "customPdfViewer", "customSecondaryToolbar", "customSidebar", "customThumbnail", "customFreeFloatingBar", "showFreeFloatingBar", "enableDragAndDrop", "forceUsingLegacyES5", "formData", "disableForms", "pageViewMode", "scrollMode", "authorization", "httpHeaders", "contextMenuAllowed", "enablePrint", "enablePrintAutoRotate", "forceFullReloadOfJavaScriptCode", "showTextEditor", "showStampEditor", "showDrawEditor", "showHighlightEditor", "logLevel", "relativeCoordsOptions", "minifiedJSLibraries", "printResolution", "rotation", "src", "base64Src", "minHeight", "height", "backgroundColor", "filenameForDownload", "ignoreKeyboard", "ignoreKeys", "acceptKeys", "imageResourcesPath", "localeFolderPath", "language", "listenToURL", "nameddest", "password", "replaceBrowserPrint", "useInlineScripts", "showUnverifiedSignatures", "startTabindex", "showSidebarButton", "sidebarVisible", "activeSidebarView", "findbarVisible", "propertiesDialogVisible", "showFindButton", "showFindHighlightAll", "showFindMatchCase", "showFindMultiple", "showFindRegexp", "showFindEntireWord", "showFindMatchDiacritics", "showFindResultsCount", "showFindMessages", "showPagingButtons", "showFirstAndLastPageButtons", "showPreviousAndNextPageButtons", "showPageNumber", "showPageLabel", "showZoomButtons", "showZoomDropdown", "showPresentationModeButton", "showOpenFileButton", "showPrintButton", "showDownloadButton", "theme", "showToolbar", "showSecondaryToolbarButton", "showSinglePageModeButton", "showVerticalScrollButton", "showHorizontalScrollButton", "showWrappedScrollButton", "showInfiniteScrollButton", "showBookModeButton", "showRotateButton", "showRotateCwButton", "showRotateCcwButton", "handTool", "showHandToolButton", "showSpreadButton", "showPropertiesButton", "showBorders", "spread", "showScrollingButtons", "page", "pageLabel", "textLayer", "zoom", "zoomLevels", "maxZoom", "minZoom", "mobileFriendlyZoom"], outputs: ["annotationEditorEvent", "formDataChange", "pageViewModeChange", "progress", "srcChange", "scrollModeChange", "afterPrint", "beforePrint", "currentZoomFactor", "rotationChange", "annotationLayerRendered", "annotationEditorLayerRendered", "xfaLayerRendered", "outlineLoaded", "attachmentsloaded", "layersloaded", "sidebarVisibleChange", "activeSidebarViewChange", "findbarVisibleChange", "propertiesDialogVisibleChange", "handToolChange", "spreadChange", "thumbnailDrawn", "pageChange", "pageLabelChange", "pagesLoaded", "pageRender", "pageRendered", "pdfDownloaded", "pdfLoaded", "pdfLoadingStarts", "pdfLoadingFailed", "textLayerRendered", "annotationEditorModeChanged", "updateFindMatchesCount", "updateFindState", "zoomChange"] }] });
3656
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: PdfViewerComponent, isStandalone: true, selector: "pdf-viewer", inputs: { dataType: "dataType", pdfData: "pdfData" }, ngImport: i0, template: "@if (dataType == \"base64\") {\n <ngx-extended-pdf-viewer\n [zoom]=\"100\"\n [base64Src]=\"this.pdfData\"\n [showPrintButton]=\"false\"\n [showOpenFileButton]=\"false\"\n [showDownloadButton]=\"false\"\n ></ngx-extended-pdf-viewer>\n}\n\n@if (dataType == \"bytes\") {\n <ngx-extended-pdf-viewer\n [zoom]=\"100\"\n [src]=\"this.pdfData\"\n [showPrintButton]=\"false\"\n [showOpenFileButton]=\"false\"\n [showDownloadButton]=\"false\"\n ></ngx-extended-pdf-viewer>\n}\n", dependencies: [{ kind: "ngmodule", type: NgxExtendedPdfViewerModule }, { kind: "component", type: i1$7.NgxExtendedPdfViewerComponent, selector: "ngx-extended-pdf-viewer", inputs: ["customFindbarInputArea", "customToolbar", "customFindbar", "customFindbarButtons", "customPdfViewer", "customSecondaryToolbar", "customSidebar", "customThumbnail", "customFreeFloatingBar", "showFreeFloatingBar", "enableDragAndDrop", "forceUsingLegacyES5", "formData", "disableForms", "pageViewMode", "scrollMode", "authorization", "httpHeaders", "contextMenuAllowed", "enablePrint", "enablePrintAutoRotate", "forceFullReloadOfJavaScriptCode", "showTextEditor", "showStampEditor", "showDrawEditor", "showHighlightEditor", "logLevel", "relativeCoordsOptions", "minifiedJSLibraries", "printResolution", "rotation", "src", "base64Src", "minHeight", "height", "backgroundColor", "filenameForDownload", "ignoreKeyboard", "ignoreKeys", "acceptKeys", "imageResourcesPath", "localeFolderPath", "language", "listenToURL", "nameddest", "password", "replaceBrowserPrint", "useInlineScripts", "showUnverifiedSignatures", "startTabindex", "showSidebarButton", "sidebarVisible", "activeSidebarView", "findbarVisible", "propertiesDialogVisible", "showFindButton", "showFindHighlightAll", "showFindMatchCase", "showFindMultiple", "showFindRegexp", "showFindEntireWord", "showFindMatchDiacritics", "showFindResultsCount", "showFindMessages", "showPagingButtons", "showFirstAndLastPageButtons", "showPreviousAndNextPageButtons", "showPageNumber", "showPageLabel", "showZoomButtons", "showZoomDropdown", "showPresentationModeButton", "showOpenFileButton", "showPrintButton", "showDownloadButton", "theme", "showToolbar", "showSecondaryToolbarButton", "showSinglePageModeButton", "showVerticalScrollButton", "showHorizontalScrollButton", "showWrappedScrollButton", "showInfiniteScrollButton", "showBookModeButton", "showRotateButton", "showRotateCwButton", "showRotateCcwButton", "handTool", "showHandToolButton", "showSpreadButton", "showPropertiesButton", "showBorders", "spread", "showScrollingButtons", "page", "pageLabel", "textLayer", "zoom", "zoomLevels", "maxZoom", "minZoom", "mobileFriendlyZoom"], outputs: ["annotationEditorEvent", "formDataChange", "pageViewModeChange", "progress", "srcChange", "scrollModeChange", "afterPrint", "beforePrint", "currentZoomFactor", "rotationChange", "annotationLayerRendered", "annotationEditorLayerRendered", "xfaLayerRendered", "outlineLoaded", "attachmentsloaded", "layersloaded", "sidebarVisibleChange", "activeSidebarViewChange", "findbarVisibleChange", "propertiesDialogVisibleChange", "handToolChange", "spreadChange", "thumbnailDrawn", "pageChange", "pageLabelChange", "pagesLoaded", "pageRender", "pageRendered", "pdfDownloaded", "pdfLoaded", "pdfLoadingStarts", "pdfLoadingFailed", "textLayerRendered", "annotationEditorModeChanged", "updateFindMatchesCount", "updateFindState", "zoomChange"] }] });
3540
3657
  }
3541
3658
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: PdfViewerComponent, decorators: [{
3542
3659
  type: Component,
@@ -3598,7 +3715,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImpor
3598
3715
  class Height {
3599
3716
  height = 0;
3600
3717
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: Height, deps: [], target: i0.ɵɵFactoryTarget.Component });
3601
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.7", type: Height, isStandalone: true, selector: "height", inputs: { height: "height" }, ngImport: i0, template: `<div [ngStyle]="{ height: height + 'px' }"></div>`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
3718
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.7", type: Height, isStandalone: true, selector: "height", inputs: { height: "height" }, ngImport: i0, template: `<div [ngStyle]="{ height: height + 'px' }"></div>`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
3602
3719
  }
3603
3720
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: Height, decorators: [{
3604
3721
  type: Component,
@@ -3614,7 +3731,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImpor
3614
3731
  class Width {
3615
3732
  width = 0;
3616
3733
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: Width, deps: [], target: i0.ɵɵFactoryTarget.Component });
3617
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.7", type: Width, isStandalone: true, selector: "width", inputs: { width: "width" }, ngImport: i0, template: `<div style="display: inline" [ngStyle]="{ 'padding-left': width + 'px' }"></div>`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
3734
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.7", type: Width, isStandalone: true, selector: "width", inputs: { width: "width" }, ngImport: i0, template: `<div style="display: inline" [ngStyle]="{ 'padding-left': width + 'px' }"></div>`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
3618
3735
  }
3619
3736
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: Width, decorators: [{
3620
3737
  type: Component,
@@ -3638,7 +3755,7 @@ class Box {
3638
3755
  'padding-left': width + 'px',
3639
3756
  display: display ? display : width && height ? 'block' : height ? 'block' : width ? 'inline' : display,
3640
3757
  }"
3641
- ></div>`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
3758
+ ></div>`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
3642
3759
  }
3643
3760
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: Box, decorators: [{
3644
3761
  type: Component,
@@ -3834,7 +3951,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImpor
3834
3951
 
3835
3952
  class H3Icon {
3836
3953
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: H3Icon, deps: [], target: i0.ɵɵFactoryTarget.Component });
3837
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.7", type: H3Icon, isStandalone: true, selector: "h3-icon", ngImport: i0, template: ` <h3 nz-col><nz-icon nzType="send" nzTheme="outline" />&nbsp;<ng-content></ng-content></h3> `, isInline: true, dependencies: [{ kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$2.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }] });
3954
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.7", type: H3Icon, isStandalone: true, selector: "h3-icon", ngImport: i0, template: ` <h3 nz-col><nz-icon nzType="send" nzTheme="outline" />&nbsp;<ng-content></ng-content></h3> `, isInline: true, dependencies: [{ kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$3.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }] });
3838
3955
  }
3839
3956
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: H3Icon, decorators: [{
3840
3957
  type: Component,
@@ -3859,7 +3976,7 @@ class IconAdd {
3859
3976
  [ngStyle]="{ 'font-size.px': size }"
3860
3977
  (click)="$event.stopPropagation(); click.emit()"
3861
3978
  ></nz-icon>
3862
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$2.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }] });
3979
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$3.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }] });
3863
3980
  }
3864
3981
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: IconAdd, decorators: [{
3865
3982
  type: Component,
@@ -3896,7 +4013,7 @@ class IconEdit {
3896
4013
  [ngStyle]="{ 'font-size.px': size }"
3897
4014
  (click)="$event.stopPropagation(); click.emit()"
3898
4015
  ></nz-icon>
3899
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$2.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }] });
4016
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$3.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }] });
3900
4017
  }
3901
4018
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: IconEdit, decorators: [{
3902
4019
  type: Component,
@@ -3933,7 +4050,7 @@ class IconSave {
3933
4050
  [ngStyle]="{ 'font-size.px': size }"
3934
4051
  (click)="$event.stopPropagation(); click.emit()"
3935
4052
  ></nz-icon>
3936
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$2.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }] });
4053
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$3.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }] });
3937
4054
  }
3938
4055
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: IconSave, decorators: [{
3939
4056
  type: Component,
@@ -3970,7 +4087,7 @@ class IconDelete {
3970
4087
  [ngStyle]="{ 'font-size.px': size }"
3971
4088
  (click)="$event.stopPropagation(); click.emit()"
3972
4089
  ></nz-icon>
3973
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$2.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }] });
4090
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$3.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }] });
3974
4091
  }
3975
4092
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: IconDelete, decorators: [{
3976
4093
  type: Component,
@@ -4007,7 +4124,7 @@ class IconView {
4007
4124
  [ngStyle]="{ 'font-size.px': size }"
4008
4125
  (click)="$event.stopPropagation(); click.emit()"
4009
4126
  ></nz-icon>
4010
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$2.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }] });
4127
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$3.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }] });
4011
4128
  }
4012
4129
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: IconView, decorators: [{
4013
4130
  type: Component,
@@ -4044,7 +4161,7 @@ class IconSearch {
4044
4161
  [ngStyle]="{ 'font-size.px': size }"
4045
4162
  (click)="$event.stopPropagation(); click.emit()"
4046
4163
  ></nz-icon>
4047
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$2.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }] });
4164
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$3.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }] });
4048
4165
  }
4049
4166
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: IconSearch, decorators: [{
4050
4167
  type: Component,
@@ -6043,7 +6160,7 @@ class WorkflowEditorComponent extends BaseComponent {
6043
6160
  }
6044
6161
  }
6045
6162
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: WorkflowEditorComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
6046
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: WorkflowEditorComponent, isStandalone: true, selector: "app-workflow-editor", inputs: { lstOrg: "lstOrg", lstRole: "lstRole", lstEmailTemplate: "lstEmailTemplate" }, outputs: { onSave: "onSave", onDeleteStage: "onDeleteStage", onDeleteAction: "onDeleteAction", onDeleteRule: "onDeleteRule", onDeleteRuleLine: "onDeleteRuleLine" }, host: { listeners: { "window:keydown": "onKeyDown($event)" } }, viewQueries: [{ propertyName: "canvasRef", first: true, predicate: ["canvas"], descendants: true, static: true }, { propertyName: "svgRef", first: true, predicate: ["svg"], descendants: true, static: true }, { propertyName: "inputStageStatusElement", first: true, predicate: ["inputStageStatusElement"], descendants: true }, { propertyName: "inputActionTypeElement", first: true, predicate: ["inputActionTypeElement"], descendants: true }, { propertyName: "inputElement", first: true, predicate: ["inputElement"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div\r\n #canvasRef\r\n class=\"workflow-canvas\"\r\n [class.connecting]=\"!!connectingFrom\"\r\n [class.dragging-point]=\"!!draggingPoint\"\r\n [style.width.px]=\"getCanvasWidth()\"\r\n [style.height.px]=\"getCanvasHeight()\"\r\n (mousedown)=\"onMouseDownCanvas($event)\"\r\n (mousemove)=\"onMouseMoveCanvas($event)\"\r\n (mouseup)=\"onMouseUpCanvas($event)\"\r\n (click)=\"onClickCanvas($event)\"\r\n>\r\n <!-- \r\n\r\n [style.width.px]=\"getCanvasWidth()\"\r\n [style.height.px]=\"getCanvasHeight()\" \r\n\r\n [style.width.px]=\"CANVAS_WIDTH\"\r\n [style.height.px]=\"CANVAS_HEIGHT\"\r\n\r\n style=\"width: 100%; height: calc(100vh - 120px)\"\r\n \r\n -->\r\n\r\n <div class=\"toolbar\" (mousedown)=\"$event.stopPropagation()\" (click)=\"$event.stopPropagation()\">\r\n <button nz-button nzSize=\"small\" nz-tooltip=\"Editor setting\" (click)=\"settingVisible = true\">\r\n <nz-icon nzType=\"setting\"></nz-icon>\r\n </button>\r\n\r\n <button nz-button nzSize=\"small\" nz-tooltip=\"Infomation\" (click)=\"infoVisible = true\">\r\n <nz-icon nzType=\"info-circle\"></nz-icon>\r\n </button>\r\n\r\n <box [width]=\"1\"></box>\r\n <span class=\"divider\"></span>\r\n <box [width]=\"1\"></box>\r\n\r\n <button nz-button nzSize=\"small\" nz-tooltip=\"Template setting\" (click)=\"drawTemplateVisibel = true\">\r\n <nz-icon nzType=\"setting\"></nz-icon> T\r\n </button>\r\n\r\n <box [width]=\"1\"></box>\r\n <span class=\"divider\"></span>\r\n <box [width]=\"1\"></box>\r\n\r\n <button nz-button nzSize=\"small\" nzDanger [nzLoading]=\"!ready\" nz-tooltip=\"Save (Ctrl + S)\" (click)=\"save()\">\r\n <nz-icon nzType=\"save\"></nz-icon>\r\n </button>\r\n <button nz-button nzSize=\"small\" nz-tooltip=\"Add stage\" (click)=\"addStage()\">\r\n <nz-icon nzType=\"plus\" class=\"color-primary\"></nz-icon>\r\n </button>\r\n\r\n <box [width]=\"1\"></box>\r\n <span class=\"divider\"></span>\r\n <box [width]=\"1\"></box>\r\n\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n [nzType]=\"isMoveMode ? 'primary' : 'default'\"\r\n nz-tooltip=\"Move mode\"\r\n (click)=\"isMoveMode = true\"\r\n >\r\n <nz-icon><img src=\"/assets/icon/hand-palm.png\" width=\"19\" height=\"19\" /></nz-icon>\r\n </button>\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n [nzType]=\"!isMoveMode ? 'primary' : 'default'\"\r\n nz-tooltip=\"Select mode\"\r\n (click)=\"isMoveMode = false\"\r\n >\r\n <nz-icon><img src=\"/assets/icon/cursor.png\" width=\"19\" height=\"19\" /></nz-icon>\r\n </button>\r\n\r\n <box [width]=\"1\"></box>\r\n <span class=\"divider\"></span>\r\n <box [width]=\"1\"></box>\r\n\r\n <!-- UNDO / REDO -->\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n nzType=\"default\"\r\n [disabled]=\"undoStack.length === 0\"\r\n nz-tooltip=\"Undo\"\r\n (click)=\"undo()\"\r\n >\r\n <nz-icon nzType=\"undo\"></nz-icon>\r\n </button>\r\n\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n nzType=\"default\"\r\n [disabled]=\"redoStack.length === 0\"\r\n nz-tooltip=\"Redo\"\r\n (click)=\"redo()\"\r\n >\r\n <nz-icon nzType=\"redo\"></nz-icon>\r\n </button>\r\n\r\n <box [width]=\"1\"></box>\r\n <span class=\"divider\"></span>\r\n <box [width]=\"1\"></box>\r\n\r\n <!-- ALIGN -->\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 2\" (click)=\"alignLeft()\">\u27F8</button>\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 2\" (click)=\"alignCenter()\">\u2261</button>\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 2\" (click)=\"alignRight()\">\u27F9</button>\r\n\r\n <span class=\"divider\"></span>\r\n\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 2\" (click)=\"alignTop()\">\u21D1</button>\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 2\" (click)=\"alignMiddle()\">\u2550</button>\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 2\" (click)=\"alignBottom()\">\u21D3</button>\r\n\r\n <span class=\"divider\"></span>\r\n\r\n <!-- DISTRIBUTE -->\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 3\" (click)=\"distributeHorizontal()\">\r\n \u21C4\r\n </button>\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 3\" (click)=\"distributeVertical()\">\u21C5</button>\r\n </div>\r\n\r\n <div\r\n class=\"canvas-content\"\r\n [class.panning]=\"isMoveMode\"\r\n [style.transform]=\"'translate(' + template.editorOption.panX + 'px,' + template.editorOption.panY + 'px)'\"\r\n >\r\n <!-- GRID -->\r\n <div *ngIf=\"wfcSetting.ShowGrid\" class=\"grid-layer\"></div>\r\n\r\n <!-- <div class=\"zoom-toolbar\">\r\n <button nz-button nzSize=\"small\" (click)=\"zoomOut()\">\u2212</button>\r\n <span>{{ zoom * 100 | number: \"1.0-0\" }}%</span>\r\n <button nz-button nzSize=\"small\" (click)=\"zoomIn()\">+</button>\r\n </div> -->\r\n\r\n <!-- SVG EDGES -->\r\n <svg #svg class=\"edges-layer\" width=\"100%\" height=\"100%\" preserveAspectRatio=\"none\">\r\n <g [attr.transform]=\"svgTransform\">\r\n <!-- DEFS -->\r\n <defs>\r\n <!-- glow effect -->\r\n <filter id=\"edge-glow\" x=\"-50%\" y=\"-50%\" width=\"200%\" height=\"200%\">\r\n <feGaussianBlur stdDeviation=\"2\" result=\"blur\" />\r\n <feMerge>\r\n <feMergeNode in=\"blur\" />\r\n <feMergeNode in=\"SourceGraphic\" />\r\n </feMerge>\r\n </filter>\r\n\r\n <!-- arrow markers -->\r\n <marker\r\n id=\"arrow-blue\"\r\n markerWidth=\"10\"\r\n markerHeight=\"10\"\r\n refX=\"10\"\r\n refY=\"5\"\r\n orient=\"auto\"\r\n markerUnits=\"strokeWidth\"\r\n >\r\n <path class=\"blue\" d=\"M0,0 L10,5 L0,10\"></path>\r\n </marker>\r\n\r\n <marker\r\n id=\"arrow-red\"\r\n markerWidth=\"10\"\r\n markerHeight=\"10\"\r\n refX=\"10\"\r\n refY=\"5\"\r\n orient=\"auto\"\r\n markerUnits=\"strokeWidth\"\r\n >\r\n <path class=\"red\" d=\"M0,0 L10,5 L0,10\"></path>\r\n </marker>\r\n\r\n <marker\r\n id=\"arrow-blue-start\"\r\n markerWidth=\"10\"\r\n markerHeight=\"10\"\r\n viewBox=\"0 0 10 10\"\r\n refX=\"0\"\r\n refY=\"5\"\r\n orient=\"auto\"\r\n markerUnits=\"strokeWidth\"\r\n >\r\n <path class=\"blue\" d=\"M10,0 L0,5 L10,10\"></path>\r\n </marker>\r\n\r\n <marker\r\n id=\"arrow-red-start\"\r\n markerWidth=\"10\"\r\n markerHeight=\"10\"\r\n viewBox=\"0 0 10 10\"\r\n refX=\"0\"\r\n refY=\"5\"\r\n orient=\"auto\"\r\n markerUnits=\"strokeWidth\"\r\n >\r\n <path class=\"red\" d=\"M10,0 L0,5 L10,10\"></path>\r\n </marker>\r\n </defs>\r\n\r\n <!-- EDGES B\u00CCNH TH\u01AF\u1EDCNG -->\r\n <ng-container *ngFor=\"let e of normalEdges; let i = index\">\r\n <path\r\n class=\"edge\"\r\n [attr.id]=\"'edge-path-' + i\"\r\n [attr.d]=\"buildPath(e)\"\r\n marker-end=\"url(#arrow-blue)\"\r\n [attr.marker-start]=\"e.allowBack ? 'url(#arrow-blue-start)' : ''\"\r\n ></path>\r\n\r\n <path\r\n class=\"edge-hit\"\r\n [attr.d]=\"buildPath(e)\"\r\n (mouseenter)=\"onMouseEnterEdge(e)\"\r\n (mouseleave)=\"onMouseLeaveEdge(e)\"\r\n (click)=\"onClickEdge(e, $event)\"\r\n ></path>\r\n\r\n <!-- LABEL -->\r\n <!-- text b\u00E1m theo line -->\r\n <!-- \r\n <text *ngIf=\"e.ActionText\" class=\"edge-label\" dy=\"-6\">\r\n <textPath [attr.href]=\"'#edge-path-' + i\" startOffset=\"50%\" text-anchor=\"middle\">\r\n {{ e.ActionText }}\r\n </textPath>\r\n </text> \r\n \r\n <text *ngIf=\"e.allowBack && e.labelBack\" class=\"edge-label\" dy=\"14\">\r\n <textPath [attr.href]=\"'#edge-path-' + i\" startOffset=\"50%\" text-anchor=\"middle\">\r\n {{ e.labelBack }}\r\n </textPath>\r\n </text>\r\n -->\r\n\r\n <!-- text th\u1EB3ng n\u1EB1m ngang -->\r\n <text\r\n *ngIf=\"e.ActionText\"\r\n class=\"edge-label\"\r\n [attr.x]=\"getEdgeLabelPosition(e).x\"\r\n [attr.y]=\"getEdgeLabelPosition(e).y - 8\"\r\n [attr.text-anchor]=\"'middle'\"\r\n >\r\n {{ e.ActionText }}\r\n </text>\r\n\r\n <text\r\n *ngIf=\"e.allowBack && e.labelBack\"\r\n class=\"edge-label\"\r\n [attr.x]=\"getEdgeLabelPosition(e).x\"\r\n [attr.y]=\"getEdgeLabelPosition(e).y + 14\"\r\n [attr.text-anchor]=\"'middle'\"\r\n >\r\n {{ e.labelBack }}\r\n </text>\r\n </ng-container>\r\n\r\n <!-- EDGE \u0110ANG HOVER (LU\u00D4N TR\u00CAN C\u00D9NG) -->\r\n <ng-container *ngFor=\"let e of hoverEdges; let i = index\">\r\n <path\r\n class=\"edge red\"\r\n [attr.id]=\"'edge-path-hover-' + i\"\r\n [attr.d]=\"buildPath(e)\"\r\n marker-end=\"url(#arrow-red)\"\r\n [attr.marker-start]=\"e.allowBack ? 'url(#arrow-red-start)' : ''\"\r\n ></path>\r\n\r\n <path\r\n class=\"edge-hit\"\r\n [attr.d]=\"buildPath(e)\"\r\n (mouseleave)=\"onMouseLeaveEdge(e)\"\r\n (click)=\"onClickEdge(e, $event)\"\r\n ></path>\r\n\r\n <!-- LABEL -->\r\n <!-- <text *ngIf=\"e.ActionText\" class=\"edge-label\" dy=\"-6\">\r\n <textPath [attr.href]=\"'#edge-path-hover-' + i\" startOffset=\"50%\" text-anchor=\"middle\">\r\n {{ e.ActionText }}\r\n </textPath>\r\n </text>\r\n\r\n <text *ngIf=\"e.allowBack && e.labelBack\" class=\"edge-label\" dy=\"14\">\r\n <textPath [attr.href]=\"'#edge-path-hover-' + i\" startOffset=\"50%\" text-anchor=\"middle\">\r\n {{ e.labelBack }}\r\n </textPath>\r\n </text> -->\r\n\r\n <text\r\n *ngIf=\"e.ActionText\"\r\n class=\"edge-label\"\r\n [attr.x]=\"getEdgeLabelPosition(e).x\"\r\n [attr.y]=\"getEdgeLabelPosition(e).y - 8\"\r\n [attr.text-anchor]=\"'middle'\"\r\n >\r\n {{ e.ActionText }}\r\n </text>\r\n\r\n <text\r\n *ngIf=\"e.allowBack && e.labelBack\"\r\n class=\"edge-label\"\r\n [attr.x]=\"getEdgeLabelPosition(e).x\"\r\n [attr.y]=\"getEdgeLabelPosition(e).y + 14\"\r\n [attr.text-anchor]=\"'middle'\"\r\n >\r\n {{ e.labelBack }}\r\n </text>\r\n </ng-container>\r\n\r\n <!-- preview -->\r\n <path\r\n *ngIf=\"connectingFrom\"\r\n class=\"edge\"\r\n [attr.d]=\"buildPreviewPath()\"\r\n stroke-dasharray=\"5,5\"\r\n marker-end=\"url(#arrow-blue)\"\r\n ></path>\r\n </g>\r\n </svg>\r\n\r\n <div\r\n *ngIf=\"isSelecting && selectStart && selectEnd\"\r\n class=\"selection-box\"\r\n [style.left.px]=\"Math.min(selectStart.x, selectEnd.x)\"\r\n [style.top.px]=\"Math.min(selectStart.y, selectEnd.y)\"\r\n [style.width.px]=\"Math.abs(selectEnd.x - selectStart.x)\"\r\n [style.height.px]=\"Math.abs(selectEnd.y - selectStart.y)\"\r\n ></div>\r\n\r\n <!-- lstStage -->\r\n @for (n of lstStage; track $index) {\r\n <!-- START NODE -->\r\n @if (n.StageType === \"_start_\") {\r\n <nz-card\r\n class=\"workflow-node workflow-node-start\"\r\n [attr.data-id]=\"n.Code\"\r\n [class.selected]=\"n == selectedStage || n == hoverStage || lstSelectedStageId.has(n.WF_TemplateStage_Id)\"\r\n [style.left.px]=\"n.editorOption.x\"\r\n [style.top.px]=\"n.editorOption.y\"\r\n [class.connecting-source]=\"isConnectingFrom(n) || isDraggingFrom(n) || isSelectedNode(n)\"\r\n nzSize=\"small\"\r\n (mousedown)=\"onMouseDownNode($event, n)\"\r\n (click)=\"$event.stopPropagation(); onClickStage(n)\"\r\n >\r\n <nz-tag [nzColor]=\"'green'\"> START </nz-tag>\r\n\r\n @if (!n.editorOption.isReverse) {\r\n <!-- connector RIGHT: output -->\r\n <div class=\"connector connector-right connector-start\" (click)=\"onClickConnector($event, n, 'right')\"></div>\r\n } @else {\r\n <div\r\n class=\"connector connector-right connector-start reverse\"\r\n (click)=\"onClickConnector($event, n, 'right')\"\r\n ></div>\r\n }\r\n </nz-card>\r\n }\r\n <!-- END NODE -->\r\n @else if (n.StageType === \"_end_\") {\r\n <nz-card\r\n class=\"workflow-node workflow-node-end\"\r\n [attr.data-id]=\"n.Code\"\r\n [class.selected]=\"n == selectedStage || n == hoverStage || lstSelectedStageId.has(n.WF_TemplateStage_Id)\"\r\n [style.left.px]=\"n.editorOption.x\"\r\n [style.top.px]=\"n.editorOption.y\"\r\n [class.connecting-source]=\"isConnectingFrom(n) || isDraggingFrom(n) || isSelectedNode(n)\"\r\n nzSize=\"small\"\r\n (mousedown)=\"onMouseDownNode($event, n)\"\r\n (click)=\"$event.stopPropagation(); onClickStage(n)\"\r\n >\r\n <nz-tag [nzColor]=\"'red'\"> END </nz-tag>\r\n\r\n @if (!n.editorOption.isReverse) {\r\n <!-- connector LEFT: input -->\r\n <div class=\"connector connector-left connector-end\" (click)=\"onClickConnector($event, n, 'left')\"></div>\r\n } @else {\r\n <div\r\n class=\"connector connector-left connector-end reverse\"\r\n (click)=\"onClickConnector($event, n, 'left')\"\r\n ></div>\r\n }\r\n </nz-card>\r\n } @else {\r\n <nz-card\r\n class=\"workflow-node\"\r\n [attr.data-id]=\"n.Code\"\r\n [class.selected]=\"n == selectedStage || n == hoverStage || lstSelectedStageId.has(n.WF_TemplateStage_Id)\"\r\n [style.left.px]=\"n.editorOption.x\"\r\n [style.top.px]=\"n.editorOption.y\"\r\n [class.connecting-source]=\"isConnectingFrom(n) || isDraggingFrom(n) || isSelectedNode(n)\"\r\n nzSize=\"small\"\r\n (mousedown)=\"onMouseDownNode($event, n)\"\r\n (click)=\"$event.stopPropagation(); onClickStage(n)\"\r\n >\r\n <div class=\"title\">{{ n.Code }}</div>\r\n\r\n <div>{{ n.Name }}</div>\r\n\r\n @if (!n.editorOption.isReverse) {\r\n <!-- connector RIGHT: output -->\r\n <div class=\"connector connector-right\" (click)=\"onClickConnector($event, n, 'right')\"></div>\r\n\r\n <!-- connector LEFT: input -->\r\n <div class=\"connector connector-left\" (click)=\"onClickConnector($event, n, 'left')\"></div>\r\n } @else {\r\n <div class=\"connector connector-right reverse\" (click)=\"onClickConnector($event, n, 'right')\"></div>\r\n <div class=\"connector connector-left reverse\" (click)=\"onClickConnector($event, n, 'left')\"></div>\r\n }\r\n </nz-card>\r\n }\r\n }\r\n\r\n <!-- POINTS -->\r\n @for (p of connectingPoints; track $index) {\r\n @if (p != draggingPoint) {\r\n <div\r\n class=\"waypoint\"\r\n [style.left.px]=\"p.x\"\r\n [style.top.px]=\"p.y\"\r\n (mousedown)=\"onmousedownPoint($event, p)\"\r\n (contextmenu)=\"onRightClickPoint($event, hoverAction!, $index)\"\r\n ></div>\r\n } @else {\r\n <div\r\n class=\"waypoint dragging\"\r\n [style.left.px]=\"p.x\"\r\n [style.top.px]=\"p.y\"\r\n (mousedown)=\"onmousedownPoint($event, p)\"\r\n ></div>\r\n }\r\n }\r\n </div>\r\n</div>\r\n\r\n<!-- drawer TEMPLATE -->\r\n<nz-drawer\r\n [nzTitle]=\"drawTemplateTitle\"\r\n nzPlacement=\"right\"\r\n [nzWidth]=\"500\"\r\n [nzClosable]=\"false\"\r\n [nzVisible]=\"drawTemplateVisibel\"\r\n [nzFooter]=\"footerTplTemplate\"\r\n (nzOnClose)=\"drawTemplateVisibel = false\"\r\n>\r\n <ng-template #drawTemplateTitle> <nz-icon nzType=\"setting\"></nz-icon> &nbsp; Template </ng-template>\r\n <ng-container *nzDrawerContent>\r\n <extend-select\r\n [label]=\"'Org'\"\r\n [lstItem]=\"lstOrg\"\r\n [valueField]=\"'App_Org_Id'\"\r\n [displayFields]=\"['Name', 'Code']\"\r\n [(_ngModel)]=\"template.App_Org_Id\"\r\n ></extend-select>\r\n <extend-input [label]=\"'Code'\" [(_ngModel)]=\"template.Code\"></extend-input>\r\n <extend-input [label]=\"'Name'\" [(_ngModel)]=\"template.Name\"></extend-input>\r\n <extend-select\r\n [label]=\"'Type'\"\r\n [lstItem]=\"template.lstTemplateType\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"template.DocType\"\r\n ></extend-select>\r\n <extend-textarea [label]=\"'Desscription'\" [(_ngModel)]=\"template.Description\"></extend-textarea>\r\n <extend-select\r\n [label]=\"'Print template'\"\r\n [lstItem]=\"template.lstTemplatePrint\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"template.TemplatePrint\"\r\n ></extend-select>\r\n <extend-select\r\n [label]=\"'Apply to'\"\r\n [lstItem]=\"template.lstApplyTo\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"template.ApplyTo\"\r\n ></extend-select>\r\n\r\n <extend-checkbox [label]=\"'Active'\" [(_ngModel)]=\"template.IsActive\"></extend-checkbox>\r\n <extend-checkbox [label]=\"'Use Allow back'\" [(_ngModel)]=\"template.editorOption.AllowbackInUse\"></extend-checkbox>\r\n\r\n <h3 nz-col><nz-icon nzType=\"send\" nzTheme=\"outline\" />&nbsp;Stage</h3>\r\n\r\n <div nz-row [nzGutter]=\"[0, 5]\">\r\n @for (tag of getLstStage; track tag) {\r\n <div nz-col>\r\n <nz-tag (click)=\"hoverStage = tag\">\r\n {{ sliceTagName(tag.Code + (tag.Name ? \" - \" + tag.Name : \"\")) }}\r\n </nz-tag>\r\n </div>\r\n }\r\n </div>\r\n\r\n <box [height]=\"16\"></box>\r\n\r\n <h3 nz-col><nz-icon nzType=\"send\" nzTheme=\"outline\" />&nbsp;Stage status</h3>\r\n\r\n <div nz-row [nzGutter]=\"[0, 5]\">\r\n @for (tag of template.lstStageStatus; track tag) {\r\n <div nz-col>\r\n <nz-tag\r\n [nzMode]=\"checkRemoveableStageStatus(tag) ? 'closeable' : 'default'\"\r\n (nzOnClose)=\"handleCloseStageStatus(tag)\"\r\n >\r\n {{ sliceTagName(tag.Code + (tag.Name ? \" - \" + tag.Name : \"\")) }}\r\n </nz-tag>\r\n </div>\r\n }\r\n\r\n <div nz-col>\r\n @if (!inputStageStatusVisible) {\r\n <nz-tag class=\"editable-tag\" nzNoAnimation (click)=\"showInputStageStatus()\">\r\n <nz-icon nzType=\"plus\" />\r\n New Action type\r\n </nz-tag>\r\n } @else {\r\n <input\r\n #inputStageStatusElement\r\n nz-input\r\n nzSize=\"small\"\r\n type=\"text\"\r\n style=\"width: 150px\"\r\n placeholder=\"Code\"\r\n [(ngModel)]=\"inputStageStatusCode\"\r\n (keydown.enter)=\"inputStageStatusNameElement.select()\"\r\n />\r\n <input\r\n #inputStageStatusNameElement\r\n nz-input\r\n nzSize=\"small\"\r\n type=\"text\"\r\n style=\"width: 150px\"\r\n placeholder=\"Name\"\r\n [(ngModel)]=\"inputStageStatusName\"\r\n (blur)=\"handleInputStageStatusConfirm()\"\r\n (keydown.enter)=\"handleInputStageStatusConfirm()\"\r\n />\r\n }\r\n </div>\r\n </div>\r\n\r\n <box [height]=\"16\"></box>\r\n\r\n <h3 nz-col><nz-icon nzType=\"send\" nzTheme=\"outline\" />&nbsp;Action type</h3>\r\n\r\n <div nz-row [nzGutter]=\"[0, 5]\">\r\n @for (tag of template.lstActionType; track tag) {\r\n <div nz-col>\r\n <nz-tag\r\n [nzMode]=\"checkRemoveableActionType(tag) ? 'closeable' : 'default'\"\r\n (nzOnClose)=\"handleCloseActionType(tag)\"\r\n >\r\n {{ sliceTagName(tag.Code + (tag.Name ? \" - \" + tag.Name : \"\")) }}\r\n </nz-tag>\r\n </div>\r\n }\r\n\r\n <div nz-col>\r\n @if (!inputActionTypeVisible) {\r\n <nz-tag class=\"editable-tag\" nzNoAnimation (click)=\"showInputActionType()\">\r\n <nz-icon nzType=\"plus\" />\r\n New Action type\r\n </nz-tag>\r\n } @else {\r\n <input\r\n #inputActionTypeElement\r\n nz-input\r\n nzSize=\"small\"\r\n type=\"text\"\r\n style=\"width: 150px\"\r\n placeholder=\"Code\"\r\n [(ngModel)]=\"inputActionTypeCode\"\r\n (keydown.enter)=\"inputActionTypeNameElement.select()\"\r\n />\r\n <input\r\n #inputActionTypeNameElement\r\n nz-input\r\n nzSize=\"small\"\r\n type=\"text\"\r\n style=\"width: 150px\"\r\n placeholder=\"Name\"\r\n [(ngModel)]=\"inputActionTypeName\"\r\n (blur)=\"handleInputActionTypeConfirm()\"\r\n (keydown.enter)=\"handleInputActionTypeConfirm()\"\r\n />\r\n }\r\n </div>\r\n </div>\r\n\r\n <box [height]=\"16\"></box>\r\n\r\n <h3 nz-col><nz-icon nzType=\"send\" nzTheme=\"outline\" />&nbsp;Action status</h3>\r\n\r\n <div nz-row [nzGutter]=\"[0, 5]\">\r\n @for (tag of template.lstActionStatus; track tag) {\r\n <div nz-col>\r\n @if (template.editingActionStatus != tag) {\r\n <nz-tag\r\n [nzMode]=\"checkRemoveableActionStatus(tag.Code) ? 'closeable' : 'default'\"\r\n (nzOnClose)=\"handleClose(tag.Code)\"\r\n (click)=\"template.editingActionStatus = checkRemoveableActionStatus(tag.Code) ? tag : undefined\"\r\n >\r\n {{ sliceTagName(tag.Code + (tag.Name ? \" - \" + tag.Name : \"\")) }}\r\n </nz-tag>\r\n } @else {\r\n <input\r\n nz-input\r\n nzSize=\"small\"\r\n type=\"text\"\r\n style=\"width: 150px\"\r\n [appAutoFocus]=\"true\"\r\n [(ngModel)]=\"tag.Code\"\r\n (blur)=\"template.editingActionStatus = undefined\"\r\n (keydown.enter)=\"template.editingActionStatus = undefined\"\r\n />&nbsp;&nbsp;\r\n }\r\n </div>\r\n }\r\n\r\n <div nz-col>\r\n @if (!inputVisible) {\r\n <nz-tag class=\"editable-tag\" nzNoAnimation (click)=\"showInput()\">\r\n <nz-icon nzType=\"plus\" />\r\n New Action status\r\n </nz-tag>\r\n } @else {\r\n <input\r\n #inputElement\r\n nz-input\r\n nzSize=\"small\"\r\n type=\"text\"\r\n style=\"width: 150px\"\r\n placeholder=\"+ New Action status\"\r\n [(ngModel)]=\"inputValue\"\r\n (blur)=\"handleInputConfirm()\"\r\n (keydown.enter)=\"handleInputConfirm()\"\r\n />\r\n }\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-template #footerTplTemplate>\r\n <div nz-flex [nzGap]=\"6\" [nzJustify]=\"'end'\">\r\n <button nz-button nzDanger [nzLoading]=\"!ready\" (click)=\"save()\">Save</button>\r\n <button nz-button (click)=\"drawTemplateVisibel = false\">Close</button>\r\n </div>\r\n </ng-template>\r\n</nz-drawer>\r\n\r\n<!-- drawer STAGE -->\r\n<nz-drawer\r\n [nzTitle]=\"drawerTitleStage\"\r\n [nzPlacement]=\"selectedStage?.editorOption?.drawerPosition == 'left' ? 'left' : 'right'\"\r\n [nzVisible]=\"!!selectedStage\"\r\n [nzWidth]=\"'calc(50vw)'\"\r\n [nzClosable]=\"false\"\r\n [nzFooter]=\"footerTplNode\"\r\n (nzOnClose)=\"selectedStage = undefined\"\r\n>\r\n <ng-template #drawerTitleStage>\r\n <div nz-row nzJustify=\"space-between\">\r\n @if (selectedStage && selectedStage.editorOption) {\r\n @if (selectedStage.editorOption.drawerPosition == \"left\") {\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n nz-tooltip=\"To the right\"\r\n (click)=\"selectedStage.editorOption.drawerPosition = 'right'\"\r\n >\r\n <nz-icon nzType=\"double-right\"></nz-icon>\r\n </button>\r\n STAGE\r\n } @else {\r\n STAGE\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n nz-tooltip=\"To the left\"\r\n (click)=\"selectedStage.editorOption.drawerPosition = 'left'\"\r\n >\r\n <nz-icon nzType=\"double-left\"></nz-icon>\r\n </button>\r\n }\r\n }\r\n </div>\r\n </ng-template>\r\n <ng-container *nzDrawerContent>\r\n <ng-container *ngIf=\"selectedStage\">\r\n <nz-radio-group [(ngModel)]=\"selectedStage.StageType\">\r\n <label nz-radio nzValue=\"_start_\">UI start</label>\r\n <label nz-radio nzValue=\"_end_\">UI end</label>\r\n <label nz-radio nzValue=\"start\">START</label>\r\n <label nz-radio nzValue=\"node\">NODE</label>\r\n <label nz-radio nzValue=\"end\">END</label>\r\n </nz-radio-group>\r\n\r\n <box [height]=\"16\"></box>\r\n\r\n <div nz-row [nzGutter]=\"32\" class=\"form-item-no-bottom\">\r\n <extend-input\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Code'\"\r\n [floatingLabel]=\"true\"\r\n [required]=\"true\"\r\n [(_ngModel)]=\"selectedStage.Code\"\r\n ></extend-input>\r\n\r\n <extend-input\r\n nz-col\r\n [nzSpan]=\"16\"\r\n [label]=\"'Name'\"\r\n [floatingLabel]=\"true\"\r\n [required]=\"true\"\r\n [(_ngModel)]=\"selectedStage.Name\"\r\n ></extend-input>\r\n </div>\r\n\r\n <div nz-row [nzGutter]=\"32\" class=\"form-item-no-bottom\">\r\n <extend-input-number\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Sequence'\"\r\n [floatingLabel]=\"true\"\r\n [(_ngModel)]=\"selectedStage.SeqValue\"\r\n ></extend-input-number>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"16\"\r\n [label]=\"'Org implement'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"lstOrg\"\r\n [valueField]=\"'App_Org_Id'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedStage.App_Org_Id\"\r\n ></extend-select>\r\n </div>\r\n\r\n <div nz-row [nzGutter]=\"32\" class=\"form-item-no-bottom\">\r\n <extend-input-number\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Number Day'\"\r\n [floatingLabel]=\"true\"\r\n [precision]=\"1\"\r\n [(_ngModel)]=\"selectedStage.NumberDay\"\r\n ></extend-input-number>\r\n </div>\r\n\r\n @if (selectedStage.editorOption) {\r\n @if ([\"start\", \"node\", \"end\"].includes(selectedStage.StageType.toLowerCase())) {\r\n <extend-checkbox\r\n [label]=\"'Reverse'\"\r\n [labelSpan]=\"0\"\r\n [(_ngModel)]=\"selectedStage.editorOption.isReverse\"\r\n ></extend-checkbox>\r\n }\r\n\r\n <extend-checkbox\r\n [label]=\"'Require user action'\"\r\n [labelSpan]=\"0\"\r\n [(_ngModel)]=\"selectedStage.IsRequireUser\"\r\n ></extend-checkbox>\r\n }\r\n\r\n <box [height]=\"16\"></box>\r\n\r\n <div nz-row [nzGutter]=\"16\">\r\n <h3 nz-col><nz-icon nzType=\"send\" nzTheme=\"outline\" />&nbsp;List Action</h3>\r\n <div nz-col>\r\n <button nz-button nzType=\"primary\" nzSize=\"small\" (click)=\"addAction()\">\r\n <nz-icon nzType=\"plus\"></nz-icon>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <nz-table nzSize=\"small\" [nzData]=\"lstActionOfCurrentStage\" [nzShowPagination]=\"false\" [nzNoResult]=\"'&nbsp;'\">\r\n <thead>\r\n <tr [hidden]=\"true\">\r\n <th nzWidth=\"40px\"></th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (action of lstActionOfCurrentStage; track $index) {\r\n <tr [class.text-bold]=\"action == hoverAction\" (click)=\"onclickaction(action)\">\r\n <td style=\"border-bottom: solid 1px orange\">\r\n ({{ $index + 1 }})\r\n <nz-icon\r\n nzType=\"delete\"\r\n nzTheme=\"outline\"\r\n class=\"color-warn cursor-pointer icon-size-16\"\r\n (click)=\"$event.stopPropagation(); deleteAction(action)\"\r\n ></nz-icon>\r\n </td>\r\n <td style=\"border-bottom: solid 1px orange\">\r\n <div nz-row [nzGutter]=\"16\" class=\"form-item-no-bottom\">\r\n <div nz-col [nzSpan]=\"8\">\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"24\" style=\"height: 32px\">Action status</nz-form-label>\r\n <nz-form-control [nzSpan]=\"24\">\r\n <nz-input-group class=\"full-width\">\r\n <input\r\n nz-input\r\n [(ngModel)]=\"action.ActionStatus\"\r\n [nzAutocomplete]=\"auto\"\r\n (ngModelChange)=\"nzAutocompletechange($event, template.lstActionStatus)\"\r\n (click)=\"lstActionStatusFiltered = template.lstActionStatus\"\r\n (keyup.enter)=\"onenterAotu(action.ActionStatus)\"\r\n (blur)=\"onenterAotu(action.ActionStatus)\"\r\n />\r\n <nz-autocomplete #auto [compareWith]=\"compareFun\">\r\n @for (option of lstActionStatusFiltered; track $index) {\r\n <nz-auto-option [nzValue]=\"option.Code\" [nzLabel]=\"option.Code\">\r\n {{ option.Code }}\r\n <icon-delete\r\n *ngIf=\"checkRemoveableActionStatus(option.Code)\"\r\n style=\"float: right\"\r\n [size]=\"12\"\r\n (click)=\"handleClose(option.Code)\"\r\n ></icon-delete>\r\n </nz-auto-option>\r\n }\r\n </nz-autocomplete>\r\n </nz-input-group>\r\n </nz-form-control>\r\n </nz-form-item>\r\n </div>\r\n\r\n <extend-input\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Action text'\"\r\n [floatingLabel]=\"true\"\r\n [(_ngModel)]=\"action.ActionText\"\r\n (_ngModelChange)=\"onchangeActionText(action)\"\r\n ></extend-input>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Action type'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstActionType\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"action.ActionType\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Stage status'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstStageStatus\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"action.StageStatus\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Next stage'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"getlstStage\"\r\n [valueField]=\"'WF_TemplateStage_Id'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"action.To_WF_TemplateStage_Id\"\r\n (_ngModelChange)=\"onchangeNextStage(action)\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Next stage status'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstStageStatus\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"action.To_StageStatus\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Process status'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstProcessStatus\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"action.DocProcessStatus\"\r\n ></extend-select>\r\n </div>\r\n <box [height]=\"8\"></box>\r\n <div nz-row>Role</div>\r\n <div nz-row>\r\n <extend-select\r\n nz-col\r\n nzSpan=\"24\"\r\n [size]=\"'small'\"\r\n [lstItem]=\"lstRole\"\r\n [valueField]=\"'App_Role_Id'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [multiple]=\"true\"\r\n [(_ngModel)]=\"action._lstRoleId\"\r\n (_ngModelChange)=\"onselectedRoleEmail(action)\"\r\n ></extend-select>\r\n </div>\r\n <box [height]=\"8\"></box>\r\n <div nz-row>Email action</div>\r\n <div nz-row>\r\n <extend-select\r\n nz-col\r\n nzSpan=\"24\"\r\n [size]=\"'small'\"\r\n [lstItem]=\"lstEmailAction\"\r\n [valueField]=\"'ID'\"\r\n [displayField]=\"'Name'\"\r\n [multiple]=\"true\"\r\n [(_ngModel)]=\"action._lstEmailActionId\"\r\n (_ngModelChange)=\"onselectedRoleEmail(action)\"\r\n ></extend-select>\r\n </div>\r\n <box [height]=\"8\"></box>\r\n <div *ngIf=\"action._lstEmailActionId && action._lstEmailActionId.length\" nz-row>Email template</div>\r\n <div *ngIf=\"action._lstEmailActionId && action._lstEmailActionId.length\" nz-row>\r\n <div nz-col nzSpan=\"1\"></div>\r\n <div nz-col nzSpan=\"23\" class=\"form-item-no-bottom\" style=\"font-weight: normal\">\r\n @for (actionRef of lstActionRefOf(action); track $index) {\r\n <div nz-row>\r\n <extend-select\r\n nz-col\r\n nzSpan=\"24\"\r\n [labelSpan]=\"12\"\r\n [size]=\"'small'\"\r\n [label]=\"emailActionText(actionRef.To_WF_TemplateStageAction_Id)\"\r\n [lstItem]=\"lstEmailTemplate\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"actionRef.TemplateMail\"\r\n ></extend-select>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <box [height]=\"8\"></box>\r\n <div nz-row [nzGutter]=\"8\">\r\n Action rule\r\n <button nz-button nzType=\"text\" nzSize=\"small\" (click)=\"actionRuleModalVisible = true\">\r\n <nz-icon nzType=\"export\" nzTheme=\"outline\" class=\"color-primary\" />\r\n </button>\r\n <button\r\n *ngIf=\"action.WF_TransitionsRule_Id\"\r\n nz-button\r\n nzType=\"text\"\r\n nzSize=\"small\"\r\n (click)=\"deleteActionRule(action)\"\r\n >\r\n <nz-icon nzType=\"delete\" nzTheme=\"outline\" class=\"color-warn\" />\r\n </button>\r\n </div>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </nz-table>\r\n\r\n <box [height]=\"16\"></box>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-template #footerTplNode>\r\n <div\r\n nz-flex\r\n [nzGap]=\"6\"\r\n [nzJustify]=\"\r\n selectedStage && selectedStage.editorOption && selectedStage.editorOption.drawerPosition == 'left'\r\n ? 'start'\r\n : 'end'\r\n \"\r\n >\r\n <button nz-button nzDanger nzDanger [nzLoading]=\"!ready\" (click)=\"save()\">Save</button>\r\n <button nz-button (click)=\"selectedStage = undefined\">Close</button>\r\n <button\r\n *ngIf=\"selectedStage && ['START', 'END'].indexOf(selectedStage.StageType) < 0\"\r\n nz-button\r\n nzDanger\r\n (click)=\"deleteStage()\"\r\n >\r\n Delete\r\n </button>\r\n </div>\r\n </ng-template>\r\n</nz-drawer>\r\n\r\n<!-- drawer ACTION -->\r\n<nz-drawer\r\n [nzTitle]=\"drawerTitleAction\"\r\n nzTitle=\"ACTION\"\r\n [nzPlacement]=\"selectedAction?.editorOption?.drawerPosition == 'left' ? 'left' : 'right'\"\r\n [nzClosable]=\"false\"\r\n [nzWidth]=\"750\"\r\n [nzVisible]=\"!!selectedAction\"\r\n [nzFooter]=\"footerTplAction\"\r\n (nzOnClose)=\"selectedAction = undefined\"\r\n>\r\n <ng-template #drawerTitleAction>\r\n <div nz-row nzJustify=\"space-between\">\r\n @if (selectedAction && selectedAction.editorOption) {\r\n @if (selectedAction.editorOption.drawerPosition == \"left\") {\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n nz-tooltip=\"To the right\"\r\n (click)=\"selectedAction.editorOption.drawerPosition = 'right'\"\r\n >\r\n <nz-icon nzType=\"double-right\"></nz-icon>\r\n </button>\r\n ACTION\r\n } @else {\r\n ACTION\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n nz-tooltip=\"To the left\"\r\n (click)=\"selectedAction.editorOption.drawerPosition = 'left'\"\r\n >\r\n <nz-icon nzType=\"double-left\"></nz-icon>\r\n </button>\r\n }\r\n }\r\n </div>\r\n </ng-template>\r\n <ng-container *nzDrawerContent>\r\n <ng-container *ngIf=\"selectedAction\">\r\n <div>\r\n <strong\r\n >{{ selectedAction.getFromStageCode(lstStage) }} -> {{ selectedAction.getToStageCode(lstStage) }}</strong\r\n >\r\n </div>\r\n <div>{{ selectedAction.getFromStageName(lstStage) }} -> {{ selectedAction.getToStageName(lstStage) }}</div>\r\n\r\n <box [height]=\"16\"></box>\r\n\r\n <div nz-row [nzGutter]=\"16\" class=\"form-item-no-bottom\">\r\n <div nz-col [nzSpan]=\"8\">\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"24\" style=\"height: 32px\">Action status</nz-form-label>\r\n <nz-form-control [nzSpan]=\"24\">\r\n <nz-input-group class=\"full-width\">\r\n <input\r\n nz-input\r\n [(ngModel)]=\"selectedAction.ActionStatus\"\r\n [nzAutocomplete]=\"auto\"\r\n (ngModelChange)=\"nzAutocompletechange($event, template.lstActionStatus)\"\r\n (click)=\"lstActionStatusFiltered = template.lstActionStatus\"\r\n (keyup.enter)=\"onenterAotu(selectedAction.ActionStatus)\"\r\n (blur)=\"onenterAotu(selectedAction.ActionStatus)\"\r\n />\r\n <nz-autocomplete #auto [compareWith]=\"compareFun\">\r\n @for (option of lstActionStatusFiltered; track $index) {\r\n <nz-auto-option [nzValue]=\"option.Code\" [nzLabel]=\"option.Code\">\r\n {{ option.Code }}\r\n <icon-delete\r\n *ngIf=\"checkRemoveableActionStatus(option.Code)\"\r\n style=\"float: right\"\r\n [size]=\"12\"\r\n (click)=\"handleClose(option.Code)\"\r\n ></icon-delete>\r\n </nz-auto-option>\r\n }\r\n </nz-autocomplete>\r\n </nz-input-group>\r\n </nz-form-control>\r\n </nz-form-item>\r\n </div>\r\n\r\n <extend-input\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Action text'\"\r\n [floatingLabel]=\"true\"\r\n [(_ngModel)]=\"selectedAction.ActionText\"\r\n (_ngModelChange)=\"onchangeActionText(selectedAction)\"\r\n ></extend-input>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Action type'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstActionType\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedAction.ActionType\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Stage status'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstStageStatus\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedAction.StageStatus\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Next stage'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"lstStage\"\r\n [valueField]=\"'WF_TemplateStage_Id'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedAction.To_WF_TemplateStage_Id\"\r\n (_ngModelChange)=\"onchangeNextStage(selectedAction)\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Next stage status'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstStageStatus\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedAction.To_StageStatus\"\r\n ></extend-select>\r\n </div>\r\n\r\n <!-- <box [height]=\"16\"></box> -->\r\n <nz-divider></nz-divider>\r\n\r\n @if (template.editorOption.AllowbackInUse) {\r\n <extend-checkbox\r\n [label]=\"'Allow back'\"\r\n [labelSpan]=\"0\"\r\n [(_ngModel)]=\"selectedAction.allowBack\"\r\n (_ngModelChange)=\"onchangeAllowBack(selectedAction)\"\r\n ></extend-checkbox>\r\n }\r\n\r\n <box [height]=\"16\"></box>\r\n\r\n @if (selectedAction.allowBack) {\r\n <div>\r\n <strong\r\n >{{ selectedAction.getToStageCode(lstStage) }} -> {{ selectedAction.getFromStageCode(lstStage) }}</strong\r\n >\r\n </div>\r\n <div>{{ selectedAction.getToStageName(lstStage) }} -> {{ selectedAction.getFromStageName(lstStage) }}</div>\r\n\r\n @if (selectedBackAction) {\r\n <div nz-row [nzGutter]=\"16\" class=\"form-item-no-bottom\">\r\n <div nz-col [nzSpan]=\"8\">\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"24\" style=\"height: 32px\">Action status</nz-form-label>\r\n <nz-form-control [nzSpan]=\"24\">\r\n <nz-input-group class=\"full-width\">\r\n <input\r\n nz-input\r\n [(ngModel)]=\"selectedBackAction.ActionStatus\"\r\n [nzAutocomplete]=\"auto\"\r\n (ngModelChange)=\"nzAutocompletechange($event, template.lstActionStatus)\"\r\n (click)=\"lstActionStatusFiltered = template.lstActionStatus\"\r\n (keyup.enter)=\"onenterAotu(selectedBackAction.ActionStatus)\"\r\n (blur)=\"onenterAotu(selectedBackAction.ActionStatus)\"\r\n />\r\n <nz-autocomplete #auto [compareWith]=\"compareFun\">\r\n @for (option of lstActionStatusFiltered; track $index) {\r\n <nz-auto-option [nzValue]=\"option.Code\" [nzLabel]=\"option.Code\">\r\n {{ option.Code }}\r\n <icon-delete\r\n *ngIf=\"checkRemoveableActionStatus(option.Code)\"\r\n style=\"float: right\"\r\n [size]=\"12\"\r\n (click)=\"handleClose(option.Code)\"\r\n ></icon-delete>\r\n </nz-auto-option>\r\n }\r\n </nz-autocomplete>\r\n </nz-input-group>\r\n </nz-form-control>\r\n </nz-form-item>\r\n </div>\r\n\r\n <extend-input\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Action text'\"\r\n [floatingLabel]=\"true\"\r\n [(_ngModel)]=\"selectedBackAction.ActionText\"\r\n (_ngModelChange)=\"onchangeActionText(selectedBackAction)\"\r\n ></extend-input>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Action type'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstActionType\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedBackAction.ActionType\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Stage status'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstStageStatus\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedBackAction.StageStatus\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Next stage'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"lstStage\"\r\n [valueField]=\"'WF_TemplateStage_Id'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedBackAction.To_WF_TemplateStage_Id\"\r\n (_ngModelChange)=\"onchangeNextStage(selectedBackAction)\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Next stage status'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstStageStatus\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedBackAction.To_StageStatus\"\r\n ></extend-select>\r\n </div>\r\n }\r\n }\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #footerTplAction>\r\n <div\r\n nz-flex\r\n [nzGap]=\"6\"\r\n [nzJustify]=\"selectedAction && selectedAction.editorOption.drawerPosition == 'left' ? 'start' : 'end'\"\r\n >\r\n <button nz-button nzDanger nzDanger [nzLoading]=\"!ready\" (click)=\"save()\">Save</button>\r\n <button nz-button nzDanger (click)=\"deleteAction(selectedAction!)\">Delete</button>\r\n <button nz-button (click)=\"selectedAction = undefined\">Close</button>\r\n </div>\r\n </ng-template>\r\n</nz-drawer>\r\n\r\n<!-- setting editor -->\r\n<nz-drawer\r\n [nzTitle]=\"drawSettingTitle\"\r\n nzPlacement=\"right\"\r\n [nzClosable]=\"false\"\r\n [nzVisible]=\"settingVisible\"\r\n (nzOnClose)=\"settingVisible = false\"\r\n>\r\n <ng-template #drawSettingTitle> <nz-icon nzType=\"setting\"></nz-icon> &nbsp; Editor </ng-template>\r\n <ng-container *nzDrawerContent>\r\n <div class=\"form-item-no-bottom\">\r\n <extend-checkbox [label]=\"'Show grid'\" [labelSpan]=\"0\" [(_ngModel)]=\"wfcSetting.ShowGrid\"></extend-checkbox>\r\n\r\n <box [height]=\"16\"></box>\r\n </div>\r\n </ng-container>\r\n</nz-drawer>\r\n\r\n<!-- editor infomation -->\r\n<nz-drawer\r\n [nzTitle]=\"drawInfoTitle\"\r\n nzPlacement=\"right\"\r\n [nzClosable]=\"false\"\r\n [nzVisible]=\"infoVisible\"\r\n (nzOnClose)=\"infoVisible = false\"\r\n>\r\n <ng-template #drawInfoTitle> <nz-icon nzType=\"info-circle\"></nz-icon> &nbsp; Infomation </ng-template>\r\n <ng-container *nzDrawerContent>\r\n <p>1. C\u00E1c th\u00E0nh ph\u1EA7n: Stage or Node (stag, node quy tr\u00ECnh), Action or Connector (\u0111\u01B0\u1EDDng n\u1ED1i gi\u1EEFa c\u00E1c stage)</p>\r\n <p>2. Save \u0111\u1EC3 load c\u00E1c th\u00F4ng tin: Stage status, Action type</p>\r\n <p>\r\n 3. N\u1ED1i 2 node (t\u1EA1o connector t\u01B0\u01A1ng \u0111\u01B0\u01A1ng t\u1EA1o action):\r\n <br />- Click ch\u1EA5m cam t\u1EEB Node ngu\u1ED3n \u0111\u1EBFn ch\u1EA5m xanh c\u1EE7a Node \u0111\u00EDch (ho\u1EB7c click v\u00E0o Node \u0111\u00EDch), c\u00F3 th\u1EC3 click th\u00E0nh\r\n nhi\u1EC1u \u0111i\u1EC3m \u0111\u1EC3 t\u1EA1o \u0111\u01B0\u1EDDng n\u1ED1i cong<br />- Khi hover connector chuy\u1EC3n sang m\u1EA7u \u0111\u1ECF c\u00F3 th\u1EC3 click \u0111\u00FAp \u0111\u1EC3 th\u00EAm m\u1ED9t \u0111i\u1EC3m\r\n c\u1EE7a connector<br />- Khi hover l\u00EAn \u0111i\u1EC3m c\u1EE7a connector c\u00F3 th\u1EC3 di chuy\u1EC3n \u0111i\u1EC3m \u0111\u00F3 b\u1EB1ng c\u00E1ch nh\u1EA5n gi\u1EEF chu\u1ED9t v\u00E0 k\u00E9o th\u1EA3\r\n \u0111\u1EBFn v\u1ECB tr\u00ED m\u1EDBi<br />- Chu\u1ED9t ph\u1EA3i v\u00E0o \u0111i\u1EC3m n\u1ED1i connector \u0111\u1EC3 xo\u00E1 \u0111i\u1EC3m \u0111\u00F3\r\n </p>\r\n </ng-container>\r\n</nz-drawer>\r\n\r\n<!-- action rule modal -->\r\n<nz-modal\r\n [(nzVisible)]=\"actionRuleModalVisible\"\r\n [nzMaskClosable]=\"false\"\r\n [nzClosable]=\"false\"\r\n [nzKeyboard]=\"true\"\r\n [nzWidth]=\"'50vw'\"\r\n>\r\n <ng-container *nzModalTitle>\r\n ACTION RULE: [{{ selectedStage?.Code }}] {{ selectedStage?.Name }} > [{{ hoverAction?.ActionStatus }}]\r\n {{ hoverAction?.ActionText }}\r\n </ng-container>\r\n <ng-container *nzModalContent>\r\n @if (hoverAction && hoverAction.actionRule) {\r\n <div nz-row [nzGutter]=\"32\">\r\n <extend-input nz-col nzSpan=\"12\" [label]=\"'Code'\" [(_ngModel)]=\"hoverAction.actionRule.Code\"></extend-input>\r\n <extend-input nz-col nzSpan=\"12\" [label]=\"'Name'\" [(_ngModel)]=\"hoverAction.actionRule.Name\"></extend-input>\r\n <extend-input nz-col nzSpan=\"12\" [label]=\"'Note'\" [(_ngModel)]=\"hoverAction.actionRule.Note\"></extend-input>\r\n <extend-checkbox\r\n nz-col\r\n nzSpan=\"12\"\r\n [label]=\"'IsActive'\"\r\n [(_ngModel)]=\"hoverAction.actionRule.IsActive\"\r\n ></extend-checkbox>\r\n </div>\r\n <div nz-row [nzGutter]=\"16\">\r\n <div nz-col nzSpan=\"24\">\r\n <nz-table nzSize=\"small\" [nzData]=\"hoverAction.actionRule.lstLine\" [nzShowPagination]=\"false\">\r\n <thead>\r\n <tr>\r\n <th [nzWidth]=\"'50px'\"><icon-add (click)=\"addActionRuleLine()\"></icon-add></th>\r\n <th [nzWidth]=\"'25%'\">Template</th>\r\n <th [nzWidth]=\"'25%'\">Template stage</th>\r\n <th [nzWidth]=\"'25%'\">Template action</th>\r\n <th [nzWidth]=\"'50px'\">IsActive</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (item of hoverAction.actionRule.lstLine; track $index) {\r\n <tr>\r\n <td><icon-delete (click)=\"deleteActionRuleLine(hoverAction.actionRule, item)\"></icon-delete></td>\r\n <td>\r\n <extend-select\r\n #xxx\r\n [size]=\"'small'\"\r\n [lstItem]=\"lstTemplateForRule(item)\"\r\n [valueField]=\"'WF_Template_Id'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"item.WF_Template_Id\"\r\n (_ngModelChange)=\"item.WF_TemplateStage_Id = 0; item.WF_TemplateStageAction_Id = 0\"\r\n ></extend-select>\r\n </td>\r\n <td>\r\n <extend-select\r\n #yyy\r\n [size]=\"'small'\"\r\n [lstItem]=\"lstStageForRule(xxx._ngModel)\"\r\n [valueField]=\"'WF_TemplateStage_Id'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"item.WF_TemplateStage_Id\"\r\n (_ngModelChange)=\"item.WF_TemplateStageAction_Id = 0\"\r\n ></extend-select>\r\n </td>\r\n <td>\r\n <extend-select\r\n [size]=\"'small'\"\r\n [lstItem]=\"lstActionForRule(yyy._ngModel)\"\r\n [valueField]=\"'WF_TemplateStageAction_Id'\"\r\n [displayFields]=\"['ActionStatus', 'ActionText']\"\r\n [(_ngModel)]=\"item.WF_TemplateStageAction_Id\"\r\n ></extend-select>\r\n </td>\r\n <td class=\"text-center\">\r\n <extend-checkbox [(_ngModel)]=\"item.IsActive\"></extend-checkbox>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n </div>\r\n }\r\n </ng-container>\r\n <ng-container *nzModalFooter>\r\n <button nz-button nzType=\"primary\" (click)=\"actionRuleModalVisible = false\">OK</button>\r\n </ng-container>\r\n</nz-modal>\r\n", styles: ["@charset \"UTF-8\";::ng-deep .workflow-wrapper{border:solid 1px lightgray;overflow:hidden;width:100%}.workflow-canvas{position:relative;background:#f0f2f5;cursor:default;overflow:hidden;outline:1px dashed rgba(0,0,0,.1)}.workflow-canvas .edges-layer{position:absolute;inset:0;width:100%;height:100%;z-index:1}.workflow-canvas .edges-layer path{stroke-width:2;fill:none}.canvas-content{transform-origin:0 0;width:100%;height:100%}.canvas-content{outline:1px dashed red}.canvas-content.panning{cursor:grab}.canvas-content.panning:active{cursor:grabbing}.workflow-canvas.panning{cursor:grab}.workflow-canvas.panning:active{cursor:grabbing}.workflow-canvas.connecting,.workflow-canvas.connecting .workflow-node{cursor:crosshair}.workflow-node{position:absolute;width:160px;cursor:grab;-webkit-user-select:none;user-select:none;z-index:2}.workflow-node:active{cursor:grabbing}.workflow-node.connecting-source,.workflow-node.selected,.workflow-node:hover:not(.workflow-node-start,.workflow-node-end){outline:2px dashed #1890ff}.workflow-node .title{font-weight:600;margin-bottom:6px}.workflow-node-start{width:0px}.workflow-node-start.connecting-source,.workflow-node-start.selected,.workflow-node-start:hover{outline:unset}.workflow-node-start.connecting-source nz-tag,.workflow-node-start.selected nz-tag,.workflow-node-start:hover nz-tag{outline:2px dashed}.workflow-node-start nz-tag{position:relative;top:45px;right:35px}.workflow-node-end{width:0px}.workflow-node-end.connecting-source,.workflow-node-end.selected,.workflow-node-end:hover{outline:unset}.workflow-node-end.connecting-source nz-tag,.workflow-node-end.selected nz-tag,.workflow-node-end:hover nz-tag{outline:2px dashed}.workflow-node-end nz-tag{position:relative;top:45px;right:32px}.connector{position:absolute;top:39px;width:12px;height:12px;background:#1890ff;border-radius:50%;transform:translateY(-50%);cursor:crosshair;transition:box-shadow .15s ease-out,transform .15s ease-out}.connector:hover{box-shadow:0 0 0 3px #1890ff4d;transform:translateY(-50%) scale(1.15)}.connector-right{right:-8px;background:orange}.connector-right.reverse,.connector-left{left:-8px}.connector-left.reverse{left:unset;right:-8px}.connector-start{width:16px;height:16px;right:-8px;background:green;box-shadow:0 0 0 3px #1890ff4d}.connector-end{width:16px;height:16px;left:-8px;background:#000;box-shadow:0 0 0 3px #1890ff4d}.edge{cursor:pointer;stroke:#1890ff;stroke-linecap:round;stroke-linejoin:round;stroke-width:2;fill:none;transition:stroke .15s ease}.edge-hit{stroke:transparent;stroke-width:18px!important;fill:none;cursor:pointer}.edge-hit:hover+.edge{stroke:#ff4d4f;stroke-width:2}.workflow-canvas.dragging-point .edge-hit{pointer-events:none}.edge:hover+.edge-label{fill:#1890ff;font-weight:500}.edge-label{font-size:12px;fill:#555;pointer-events:none;-webkit-user-select:none;user-select:none}.blue{stroke:#1890ff!important}.red{stroke:#ff4d4f!important;box-shadow:0 0 0 3px #1890ff4d!important}.workflow-svg{background:transparent;overflow:visible}.waypoint{position:absolute;width:10px;height:10px;background:#ff4d4f;border-radius:50%;transform:translate(-50%,-50%) scale(1);cursor:move;z-index:1;transition:transform .12s ease-out,background-color .12s ease-out,box-shadow .12s ease-out}.waypoint:hover{background:#ff7875;transform:translate(-50%,-50%) scale(1.25);box-shadow:0 0 0 4px #ff787559}.waypoint.dragging{transition:none;transform:translate(-50%,-50%) scale(1.15);pointer-events:none}.workflow-canvas.dragging-point svg{cursor:grabbing}.selection-box{position:absolute;border:1px dashed #1890ff;background:#1890ff1a;pointer-events:none}.toolbar{position:absolute;top:8px;left:8px;display:flex;gap:4px;padding:6px;background:#fff;border-radius:6px;box-shadow:0 2px 8px #00000026;z-index:100}.toolbar .divider{width:1px;background:#e5e5e5;margin:0 2px}.zoom-toolbar{position:absolute;top:8px;left:8px;z-index:10;display:flex;align-items:center;gap:6px;background:#fff;padding:4px 6px;border-radius:6px;box-shadow:0 2px 6px #00000026}.zoom-toolbar span{min-width:40px;text-align:center;font-size:12px}nz-tag.selected{outline:2px dashed #1890ff}.grid-layer{position:absolute;inset:0;pointer-events:none;z-index:0;background-image:radial-gradient(rgba(0,0,0,.08) 1px,transparent 1px);background-size:20px 20px}.grid-layer{background-image:linear-gradient(to right,rgba(0,0,0,.06) 1px,transparent 1px),linear-gradient(to bottom,rgba(0,0,0,.06) 1px,transparent 1px);background-size:20px 20px}.editable-tag{background:#fff;border-style:dashed}::ng-deep .minimap{position:fixed;width:180px;height:125px;top:60px;right:15px;background-color:#eee;border:1px solid #aaa;opacity:.9;z-index:1}::ng-deep .minimap-node{position:absolute;background-color:#607a86}::ng-deep .minimap-node-round{position:absolute;background-color:#607a86;border-radius:10px}::ng-deep .minimap-node-round-start{background-color:green}::ng-deep .minimap-node-round-end{background-color:#000}::ng-deep .minimap-viewport{position:absolute;box-sizing:border-box;background-color:#4f6f7e66;z-index:1;cursor:move}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: NzCardModule }, { kind: "component", type: i3$1.NzCardComponent, selector: "nz-card", inputs: ["nzBordered", "nzLoading", "nzHoverable", "nzBodyStyle", "nzCover", "nzActions", "nzType", "nzSize", "nzTitle", "nzExtra"], exportAs: ["nzCard"] }, { kind: "ngmodule", type: NzDrawerModule }, { kind: "component", type: i4$2.NzDrawerComponent, selector: "nz-drawer", inputs: ["nzContent", "nzCloseIcon", "nzClosable", "nzMaskClosable", "nzMask", "nzCloseOnNavigation", "nzNoAnimation", "nzKeyboard", "nzTitle", "nzExtra", "nzFooter", "nzPlacement", "nzSize", "nzMaskStyle", "nzBodyStyle", "nzWrapClassName", "nzWidth", "nzHeight", "nzZIndex", "nzOffsetX", "nzOffsetY", "nzVisible"], outputs: ["nzOnViewInit", "nzOnClose", "nzVisibleChange"], exportAs: ["nzDrawer"] }, { kind: "directive", type: i4$2.NzDrawerContentDirective, selector: "[nzDrawerContent]", exportAs: ["nzDrawerContent"] }, { kind: "ngmodule", type: NzTagModule }, { kind: "component", type: i5$2.NzTagComponent, selector: "nz-tag", inputs: ["nzMode", "nzColor", "nzChecked", "nzBordered"], outputs: ["nzOnClose", "nzCheckedChange"], exportAs: ["nzTag"] }, { kind: "ngmodule", type: NzRadioModule }, { kind: "component", type: i6$3.NzRadioComponent, selector: "[nz-radio],[nz-radio-button]", inputs: ["nzValue", "nzDisabled", "nzAutoFocus", "nz-radio-button"], exportAs: ["nzRadio"] }, { kind: "component", type: i6$3.NzRadioGroupComponent, selector: "nz-radio-group", inputs: ["nzDisabled", "nzButtonStyle", "nzSize", "nzName"], exportAs: ["nzRadioGroup"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$2.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "component", type: Box, selector: "box", inputs: ["display", "width", "height"] }, { kind: "ngmodule", type: NzButtonModule }, { kind: "component", type: i8.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { kind: "directive", type: i4$1.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], nz-icon, [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i10.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }, { kind: "ngmodule", type: NzToolTipModule }, { kind: "directive", type: i11.NzTooltipDirective, selector: "[nz-tooltip]", inputs: ["nzTooltipTitle", "nzTooltipTitleContext", "nz-tooltip", "nzTooltipTrigger", "nzTooltipPlacement", "nzTooltipOrigin", "nzTooltipVisible", "nzTooltipMouseEnterDelay", "nzTooltipMouseLeaveDelay", "nzTooltipOverlayClassName", "nzTooltipOverlayStyle", "nzTooltipArrowPointAtCenter", "cdkConnectedOverlayPush", "nzTooltipColor"], outputs: ["nzTooltipVisibleChange"], exportAs: ["nzTooltip"] }, { kind: "component", type: ExtendInput, selector: "extend-input", inputs: ["label", "floatingLabel", "placeHolder", "labelAlign", "inputClass", "labelSpan", "labelFlex", "inputFlex", "allowClear", "disabled", "readOnly", "required", "noBottom", "selectModeType", "autocomplete", "autofocus", "inputWidth", "inputHeight", "borderBottomOnly", "displayInline", "size", "lstItem", "displayField", "valueField", "formData", "controlName", "_ngModel", "isSubmited"], outputs: ["_ngModelChange", "onclickClearIcon", "onenter"] }, { kind: "component", type: ExtendSelectComponent, selector: "extend-select", inputs: ["label", "floatingLabel", "placeHolder", "labelAlign", "dropdownMatchSelectWidth", "labelSpan", "labelFlex", "disabled", "required", "noBottom", "multiple", "showSelectAll", "maxTagCount", "inputWidth", "inputHeight", "borderBottomOnly", "displayInline", "size", "lstItem", "displayField", "displayFields", "valueField", "formData", "controlName", "_ngModel", "isSubmited"], outputs: ["_ngModelChange", "itemChange", "onFocus"] }, { kind: "component", type: ExtendCheckbox, selector: "extend-checkbox", inputs: ["label", "labelSpan", "labelFlex", "disabled", "formData", "controlName", "valueType", "_ngModel"], outputs: ["_ngModelChange"] }, { kind: "component", type: ExtendTextArea, selector: "extend-textarea", inputs: ["label", "placeHolder", "labelAlign", "floatingLabel", "displayInline", "labelSpan", "labelFlex", "inputFlex", "disabled", "required", "noBottom", "selectModeType", "inputClass", "size", "isSubmited", "minRows", "maxRows", "lstItem", "displayField", "valueField", "formData", "controlName", "_ngModel"], outputs: ["_ngModelChange"] }, { kind: "ngmodule", type: NzInputModule }, { kind: "directive", type: i6$1.NzInputDirective, selector: "input[nz-input],textarea[nz-input]", inputs: ["nzBorderless", "nzSize", "nzStepperless", "nzStatus", "disabled"], exportAs: ["nzInput"] }, { kind: "component", type: i6$1.NzInputGroupComponent, selector: "nz-input-group", inputs: ["nzAddOnBeforeIcon", "nzAddOnAfterIcon", "nzPrefixIcon", "nzSuffixIcon", "nzAddOnBefore", "nzAddOnAfter", "nzPrefix", "nzStatus", "nzSuffix", "nzSize", "nzSearch", "nzCompact"], exportAs: ["nzInputGroup"] }, { kind: "ngmodule", type: NzGridModule }, { kind: "directive", type: i4.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i4.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "ngmodule", type: NzFlexModule }, { kind: "directive", type: i14.NzFlexDirective, selector: "[nz-flex],nz-flex", inputs: ["nzVertical", "nzJustify", "nzAlign", "nzGap", "nzWrap", "nzFlex"], exportAs: ["nzFlex"] }, { kind: "component", type: ExtendInputNumber, selector: "extend-input-number", inputs: ["label", "placeHolder", "labelAlign", "floatingLabel", "hiddenUpDown", "labelSpan", "labelFlex", "inputFlex", "disabled", "required", "noBottom", "size", "min", "max", "precision", "inputWidth", "inputHeight", "borderBottomOnly", "displayInline", "isSubmited", "separatorType", "formData", "controlName", "_ngModel"], outputs: ["_ngModelChange"] }, { kind: "ngmodule", type: NzTableModule }, { kind: "component", type: i2$2.NzTableComponent, selector: "nz-table", inputs: ["nzTableLayout", "nzShowTotal", "nzItemRender", "nzTitle", "nzFooter", "nzNoResult", "nzPageSizeOptions", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualForTrackBy", "nzLoadingDelay", "nzPageIndex", "nzPageSize", "nzTotal", "nzWidthConfig", "nzData", "nzCustomColumn", "nzPaginationPosition", "nzScroll", "noDataVirtualHeight", "nzPaginationType", "nzFrontPagination", "nzTemplateMode", "nzShowPagination", "nzLoading", "nzOuterBordered", "nzLoadingIndicator", "nzBordered", "nzSize", "nzShowSizeChanger", "nzHideOnSinglePage", "nzShowQuickJumper", "nzSimple"], outputs: ["nzPageSizeChange", "nzPageIndexChange", "nzQueryParams", "nzCurrentPageDataChange", "nzCustomColumnChange"], exportAs: ["nzTable"] }, { kind: "directive", type: i2$2.NzTableCellDirective, selector: "th:not(.nz-disable-th):not([mat-cell]), td:not(.nz-disable-td):not([mat-cell])" }, { kind: "directive", type: i2$2.NzThMeasureDirective, selector: "th", inputs: ["nzWidth", "colspan", "colSpan", "rowspan", "rowSpan"] }, { kind: "component", type: i2$2.NzTheadComponent, selector: "thead:not(.ant-table-thead)", outputs: ["nzSortOrderChange"] }, { kind: "component", type: i2$2.NzTbodyComponent, selector: "tbody" }, { kind: "directive", type: i2$2.NzTrDirective, selector: "tr:not([mat-row]):not([mat-header-row]):not([nz-table-measure-row]):not([nzExpand]):not([nz-table-fixed-row])" }, { kind: "ngmodule", type: NzDividerModule }, { kind: "component", type: i16.NzDividerComponent, selector: "nz-divider", inputs: ["nzText", "nzType", "nzOrientation", "nzVariant", "nzDashed", "nzPlain"], exportAs: ["nzDivider"] }, { kind: "directive", type: AutoFocusDirective, selector: "[appAutoFocus]", inputs: ["appAutoFocus"] }, { kind: "ngmodule", type: NzAutocompleteModule }, { kind: "component", type: i17.NzAutocompleteComponent, selector: "nz-autocomplete", inputs: ["nzWidth", "nzOverlayClassName", "nzOverlayStyle", "nzDefaultActiveFirstOption", "nzBackfill", "compareWith", "nzDataSource"], outputs: ["selectionChange"], exportAs: ["nzAutocomplete"] }, { kind: "component", type: i17.NzAutocompleteOptionComponent, selector: "nz-auto-option", inputs: ["nzValue", "nzLabel", "nzDisabled"], outputs: ["selectionChange", "mouseEntered"], exportAs: ["nzAutoOption"] }, { kind: "directive", type: i17.NzAutocompleteTriggerDirective, selector: "input[nzAutocomplete], textarea[nzAutocomplete]", inputs: ["nzAutocomplete"], exportAs: ["nzAutocompleteTrigger"] }, { kind: "component", type: IconDelete, selector: "icon-delete", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: NzModalComponent, selector: "nz-modal", inputs: ["nzMask", "nzMaskClosable", "nzCloseOnNavigation", "nzVisible", "nzClosable", "nzOkLoading", "nzOkDisabled", "nzCancelDisabled", "nzCancelLoading", "nzKeyboard", "nzNoAnimation", "nzCentered", "nzDraggable", "nzContent", "nzFooter", "nzZIndex", "nzWidth", "nzWrapClassName", "nzClassName", "nzStyle", "nzTitle", "nzCloseIcon", "nzMaskStyle", "nzBodyStyle", "nzOkText", "nzCancelText", "nzOkType", "nzOkDanger", "nzIconType", "nzModalType", "nzAutofocus", "nzOnOk", "nzOnCancel"], outputs: ["nzOnOk", "nzOnCancel", "nzAfterOpen", "nzAfterClose", "nzVisibleChange"], exportAs: ["nzModal"] }, { kind: "directive", type: NzModalContentDirective, selector: "[nzModalContent]", exportAs: ["nzModalContent"] }, { kind: "directive", type: NzModalTitleDirective, selector: "[nzModalTitle]", exportAs: ["nzModalTitle"] }, { kind: "component", type: IconAdd, selector: "icon-add", inputs: ["size"], outputs: ["click"] }, { kind: "directive", type: NzModalFooterDirective, selector: "[nzModalFooter]", exportAs: ["nzModalFooter"] }] });
6163
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: WorkflowEditorComponent, isStandalone: true, selector: "app-workflow-editor", inputs: { lstOrg: "lstOrg", lstRole: "lstRole", lstEmailTemplate: "lstEmailTemplate" }, outputs: { onSave: "onSave", onDeleteStage: "onDeleteStage", onDeleteAction: "onDeleteAction", onDeleteRule: "onDeleteRule", onDeleteRuleLine: "onDeleteRuleLine" }, host: { listeners: { "window:keydown": "onKeyDown($event)" } }, viewQueries: [{ propertyName: "canvasRef", first: true, predicate: ["canvas"], descendants: true, static: true }, { propertyName: "svgRef", first: true, predicate: ["svg"], descendants: true, static: true }, { propertyName: "inputStageStatusElement", first: true, predicate: ["inputStageStatusElement"], descendants: true }, { propertyName: "inputActionTypeElement", first: true, predicate: ["inputActionTypeElement"], descendants: true }, { propertyName: "inputElement", first: true, predicate: ["inputElement"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div\r\n #canvasRef\r\n class=\"workflow-canvas\"\r\n [class.connecting]=\"!!connectingFrom\"\r\n [class.dragging-point]=\"!!draggingPoint\"\r\n [style.width.px]=\"getCanvasWidth()\"\r\n [style.height.px]=\"getCanvasHeight()\"\r\n (mousedown)=\"onMouseDownCanvas($event)\"\r\n (mousemove)=\"onMouseMoveCanvas($event)\"\r\n (mouseup)=\"onMouseUpCanvas($event)\"\r\n (click)=\"onClickCanvas($event)\"\r\n>\r\n <!-- \r\n\r\n [style.width.px]=\"getCanvasWidth()\"\r\n [style.height.px]=\"getCanvasHeight()\" \r\n\r\n [style.width.px]=\"CANVAS_WIDTH\"\r\n [style.height.px]=\"CANVAS_HEIGHT\"\r\n\r\n style=\"width: 100%; height: calc(100vh - 120px)\"\r\n \r\n -->\r\n\r\n <div class=\"toolbar\" (mousedown)=\"$event.stopPropagation()\" (click)=\"$event.stopPropagation()\">\r\n <button nz-button nzSize=\"small\" nz-tooltip=\"Editor setting\" (click)=\"settingVisible = true\">\r\n <nz-icon nzType=\"setting\"></nz-icon>\r\n </button>\r\n\r\n <button nz-button nzSize=\"small\" nz-tooltip=\"Infomation\" (click)=\"infoVisible = true\">\r\n <nz-icon nzType=\"info-circle\"></nz-icon>\r\n </button>\r\n\r\n <box [width]=\"1\"></box>\r\n <span class=\"divider\"></span>\r\n <box [width]=\"1\"></box>\r\n\r\n <button nz-button nzSize=\"small\" nz-tooltip=\"Template setting\" (click)=\"drawTemplateVisibel = true\">\r\n <nz-icon nzType=\"setting\"></nz-icon> T\r\n </button>\r\n\r\n <box [width]=\"1\"></box>\r\n <span class=\"divider\"></span>\r\n <box [width]=\"1\"></box>\r\n\r\n <button nz-button nzSize=\"small\" nzDanger [nzLoading]=\"!ready\" nz-tooltip=\"Save (Ctrl + S)\" (click)=\"save()\">\r\n <nz-icon nzType=\"save\"></nz-icon>\r\n </button>\r\n <button nz-button nzSize=\"small\" nz-tooltip=\"Add stage\" (click)=\"addStage()\">\r\n <nz-icon nzType=\"plus\" class=\"color-primary\"></nz-icon>\r\n </button>\r\n\r\n <box [width]=\"1\"></box>\r\n <span class=\"divider\"></span>\r\n <box [width]=\"1\"></box>\r\n\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n [nzType]=\"isMoveMode ? 'primary' : 'default'\"\r\n nz-tooltip=\"Move mode\"\r\n (click)=\"isMoveMode = true\"\r\n >\r\n <nz-icon><img src=\"/assets/icon/hand-palm.png\" width=\"19\" height=\"19\" /></nz-icon>\r\n </button>\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n [nzType]=\"!isMoveMode ? 'primary' : 'default'\"\r\n nz-tooltip=\"Select mode\"\r\n (click)=\"isMoveMode = false\"\r\n >\r\n <nz-icon><img src=\"/assets/icon/cursor.png\" width=\"19\" height=\"19\" /></nz-icon>\r\n </button>\r\n\r\n <box [width]=\"1\"></box>\r\n <span class=\"divider\"></span>\r\n <box [width]=\"1\"></box>\r\n\r\n <!-- UNDO / REDO -->\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n nzType=\"default\"\r\n [disabled]=\"undoStack.length === 0\"\r\n nz-tooltip=\"Undo\"\r\n (click)=\"undo()\"\r\n >\r\n <nz-icon nzType=\"undo\"></nz-icon>\r\n </button>\r\n\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n nzType=\"default\"\r\n [disabled]=\"redoStack.length === 0\"\r\n nz-tooltip=\"Redo\"\r\n (click)=\"redo()\"\r\n >\r\n <nz-icon nzType=\"redo\"></nz-icon>\r\n </button>\r\n\r\n <box [width]=\"1\"></box>\r\n <span class=\"divider\"></span>\r\n <box [width]=\"1\"></box>\r\n\r\n <!-- ALIGN -->\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 2\" (click)=\"alignLeft()\">\u27F8</button>\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 2\" (click)=\"alignCenter()\">\u2261</button>\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 2\" (click)=\"alignRight()\">\u27F9</button>\r\n\r\n <span class=\"divider\"></span>\r\n\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 2\" (click)=\"alignTop()\">\u21D1</button>\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 2\" (click)=\"alignMiddle()\">\u2550</button>\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 2\" (click)=\"alignBottom()\">\u21D3</button>\r\n\r\n <span class=\"divider\"></span>\r\n\r\n <!-- DISTRIBUTE -->\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 3\" (click)=\"distributeHorizontal()\">\r\n \u21C4\r\n </button>\r\n <button nz-button nzSize=\"small\" [disabled]=\"lstSelectedStageId.size < 3\" (click)=\"distributeVertical()\">\u21C5</button>\r\n </div>\r\n\r\n <div\r\n class=\"canvas-content\"\r\n [class.panning]=\"isMoveMode\"\r\n [style.transform]=\"'translate(' + template.editorOption.panX + 'px,' + template.editorOption.panY + 'px)'\"\r\n >\r\n <!-- GRID -->\r\n <div *ngIf=\"wfcSetting.ShowGrid\" class=\"grid-layer\"></div>\r\n\r\n <!-- <div class=\"zoom-toolbar\">\r\n <button nz-button nzSize=\"small\" (click)=\"zoomOut()\">\u2212</button>\r\n <span>{{ zoom * 100 | number: \"1.0-0\" }}%</span>\r\n <button nz-button nzSize=\"small\" (click)=\"zoomIn()\">+</button>\r\n </div> -->\r\n\r\n <!-- SVG EDGES -->\r\n <svg #svg class=\"edges-layer\" width=\"100%\" height=\"100%\" preserveAspectRatio=\"none\">\r\n <g [attr.transform]=\"svgTransform\">\r\n <!-- DEFS -->\r\n <defs>\r\n <!-- glow effect -->\r\n <filter id=\"edge-glow\" x=\"-50%\" y=\"-50%\" width=\"200%\" height=\"200%\">\r\n <feGaussianBlur stdDeviation=\"2\" result=\"blur\" />\r\n <feMerge>\r\n <feMergeNode in=\"blur\" />\r\n <feMergeNode in=\"SourceGraphic\" />\r\n </feMerge>\r\n </filter>\r\n\r\n <!-- arrow markers -->\r\n <marker\r\n id=\"arrow-blue\"\r\n markerWidth=\"10\"\r\n markerHeight=\"10\"\r\n refX=\"10\"\r\n refY=\"5\"\r\n orient=\"auto\"\r\n markerUnits=\"strokeWidth\"\r\n >\r\n <path class=\"blue\" d=\"M0,0 L10,5 L0,10\"></path>\r\n </marker>\r\n\r\n <marker\r\n id=\"arrow-red\"\r\n markerWidth=\"10\"\r\n markerHeight=\"10\"\r\n refX=\"10\"\r\n refY=\"5\"\r\n orient=\"auto\"\r\n markerUnits=\"strokeWidth\"\r\n >\r\n <path class=\"red\" d=\"M0,0 L10,5 L0,10\"></path>\r\n </marker>\r\n\r\n <marker\r\n id=\"arrow-blue-start\"\r\n markerWidth=\"10\"\r\n markerHeight=\"10\"\r\n viewBox=\"0 0 10 10\"\r\n refX=\"0\"\r\n refY=\"5\"\r\n orient=\"auto\"\r\n markerUnits=\"strokeWidth\"\r\n >\r\n <path class=\"blue\" d=\"M10,0 L0,5 L10,10\"></path>\r\n </marker>\r\n\r\n <marker\r\n id=\"arrow-red-start\"\r\n markerWidth=\"10\"\r\n markerHeight=\"10\"\r\n viewBox=\"0 0 10 10\"\r\n refX=\"0\"\r\n refY=\"5\"\r\n orient=\"auto\"\r\n markerUnits=\"strokeWidth\"\r\n >\r\n <path class=\"red\" d=\"M10,0 L0,5 L10,10\"></path>\r\n </marker>\r\n </defs>\r\n\r\n <!-- EDGES B\u00CCNH TH\u01AF\u1EDCNG -->\r\n <ng-container *ngFor=\"let e of normalEdges; let i = index\">\r\n <path\r\n class=\"edge\"\r\n [attr.id]=\"'edge-path-' + i\"\r\n [attr.d]=\"buildPath(e)\"\r\n marker-end=\"url(#arrow-blue)\"\r\n [attr.marker-start]=\"e.allowBack ? 'url(#arrow-blue-start)' : ''\"\r\n ></path>\r\n\r\n <path\r\n class=\"edge-hit\"\r\n [attr.d]=\"buildPath(e)\"\r\n (mouseenter)=\"onMouseEnterEdge(e)\"\r\n (mouseleave)=\"onMouseLeaveEdge(e)\"\r\n (click)=\"onClickEdge(e, $event)\"\r\n ></path>\r\n\r\n <!-- LABEL -->\r\n <!-- text b\u00E1m theo line -->\r\n <!-- \r\n <text *ngIf=\"e.ActionText\" class=\"edge-label\" dy=\"-6\">\r\n <textPath [attr.href]=\"'#edge-path-' + i\" startOffset=\"50%\" text-anchor=\"middle\">\r\n {{ e.ActionText }}\r\n </textPath>\r\n </text> \r\n \r\n <text *ngIf=\"e.allowBack && e.labelBack\" class=\"edge-label\" dy=\"14\">\r\n <textPath [attr.href]=\"'#edge-path-' + i\" startOffset=\"50%\" text-anchor=\"middle\">\r\n {{ e.labelBack }}\r\n </textPath>\r\n </text>\r\n -->\r\n\r\n <!-- text th\u1EB3ng n\u1EB1m ngang -->\r\n <text\r\n *ngIf=\"e.ActionText\"\r\n class=\"edge-label\"\r\n [attr.x]=\"getEdgeLabelPosition(e).x\"\r\n [attr.y]=\"getEdgeLabelPosition(e).y - 8\"\r\n [attr.text-anchor]=\"'middle'\"\r\n >\r\n {{ e.ActionText }}\r\n </text>\r\n\r\n <text\r\n *ngIf=\"e.allowBack && e.labelBack\"\r\n class=\"edge-label\"\r\n [attr.x]=\"getEdgeLabelPosition(e).x\"\r\n [attr.y]=\"getEdgeLabelPosition(e).y + 14\"\r\n [attr.text-anchor]=\"'middle'\"\r\n >\r\n {{ e.labelBack }}\r\n </text>\r\n </ng-container>\r\n\r\n <!-- EDGE \u0110ANG HOVER (LU\u00D4N TR\u00CAN C\u00D9NG) -->\r\n <ng-container *ngFor=\"let e of hoverEdges; let i = index\">\r\n <path\r\n class=\"edge red\"\r\n [attr.id]=\"'edge-path-hover-' + i\"\r\n [attr.d]=\"buildPath(e)\"\r\n marker-end=\"url(#arrow-red)\"\r\n [attr.marker-start]=\"e.allowBack ? 'url(#arrow-red-start)' : ''\"\r\n ></path>\r\n\r\n <path\r\n class=\"edge-hit\"\r\n [attr.d]=\"buildPath(e)\"\r\n (mouseleave)=\"onMouseLeaveEdge(e)\"\r\n (click)=\"onClickEdge(e, $event)\"\r\n ></path>\r\n\r\n <!-- LABEL -->\r\n <!-- <text *ngIf=\"e.ActionText\" class=\"edge-label\" dy=\"-6\">\r\n <textPath [attr.href]=\"'#edge-path-hover-' + i\" startOffset=\"50%\" text-anchor=\"middle\">\r\n {{ e.ActionText }}\r\n </textPath>\r\n </text>\r\n\r\n <text *ngIf=\"e.allowBack && e.labelBack\" class=\"edge-label\" dy=\"14\">\r\n <textPath [attr.href]=\"'#edge-path-hover-' + i\" startOffset=\"50%\" text-anchor=\"middle\">\r\n {{ e.labelBack }}\r\n </textPath>\r\n </text> -->\r\n\r\n <text\r\n *ngIf=\"e.ActionText\"\r\n class=\"edge-label\"\r\n [attr.x]=\"getEdgeLabelPosition(e).x\"\r\n [attr.y]=\"getEdgeLabelPosition(e).y - 8\"\r\n [attr.text-anchor]=\"'middle'\"\r\n >\r\n {{ e.ActionText }}\r\n </text>\r\n\r\n <text\r\n *ngIf=\"e.allowBack && e.labelBack\"\r\n class=\"edge-label\"\r\n [attr.x]=\"getEdgeLabelPosition(e).x\"\r\n [attr.y]=\"getEdgeLabelPosition(e).y + 14\"\r\n [attr.text-anchor]=\"'middle'\"\r\n >\r\n {{ e.labelBack }}\r\n </text>\r\n </ng-container>\r\n\r\n <!-- preview -->\r\n <path\r\n *ngIf=\"connectingFrom\"\r\n class=\"edge\"\r\n [attr.d]=\"buildPreviewPath()\"\r\n stroke-dasharray=\"5,5\"\r\n marker-end=\"url(#arrow-blue)\"\r\n ></path>\r\n </g>\r\n </svg>\r\n\r\n <div\r\n *ngIf=\"isSelecting && selectStart && selectEnd\"\r\n class=\"selection-box\"\r\n [style.left.px]=\"Math.min(selectStart.x, selectEnd.x)\"\r\n [style.top.px]=\"Math.min(selectStart.y, selectEnd.y)\"\r\n [style.width.px]=\"Math.abs(selectEnd.x - selectStart.x)\"\r\n [style.height.px]=\"Math.abs(selectEnd.y - selectStart.y)\"\r\n ></div>\r\n\r\n <!-- lstStage -->\r\n @for (n of lstStage; track $index) {\r\n <!-- START NODE -->\r\n @if (n.StageType === \"_start_\") {\r\n <nz-card\r\n class=\"workflow-node workflow-node-start\"\r\n [attr.data-id]=\"n.Code\"\r\n [class.selected]=\"n == selectedStage || n == hoverStage || lstSelectedStageId.has(n.WF_TemplateStage_Id)\"\r\n [style.left.px]=\"n.editorOption.x\"\r\n [style.top.px]=\"n.editorOption.y\"\r\n [class.connecting-source]=\"isConnectingFrom(n) || isDraggingFrom(n) || isSelectedNode(n)\"\r\n nzSize=\"small\"\r\n (mousedown)=\"onMouseDownNode($event, n)\"\r\n (click)=\"$event.stopPropagation(); onClickStage(n)\"\r\n >\r\n <nz-tag [nzColor]=\"'green'\"> START </nz-tag>\r\n\r\n @if (!n.editorOption.isReverse) {\r\n <!-- connector RIGHT: output -->\r\n <div class=\"connector connector-right connector-start\" (click)=\"onClickConnector($event, n, 'right')\"></div>\r\n } @else {\r\n <div\r\n class=\"connector connector-right connector-start reverse\"\r\n (click)=\"onClickConnector($event, n, 'right')\"\r\n ></div>\r\n }\r\n </nz-card>\r\n }\r\n <!-- END NODE -->\r\n @else if (n.StageType === \"_end_\") {\r\n <nz-card\r\n class=\"workflow-node workflow-node-end\"\r\n [attr.data-id]=\"n.Code\"\r\n [class.selected]=\"n == selectedStage || n == hoverStage || lstSelectedStageId.has(n.WF_TemplateStage_Id)\"\r\n [style.left.px]=\"n.editorOption.x\"\r\n [style.top.px]=\"n.editorOption.y\"\r\n [class.connecting-source]=\"isConnectingFrom(n) || isDraggingFrom(n) || isSelectedNode(n)\"\r\n nzSize=\"small\"\r\n (mousedown)=\"onMouseDownNode($event, n)\"\r\n (click)=\"$event.stopPropagation(); onClickStage(n)\"\r\n >\r\n <nz-tag [nzColor]=\"'red'\"> END </nz-tag>\r\n\r\n @if (!n.editorOption.isReverse) {\r\n <!-- connector LEFT: input -->\r\n <div class=\"connector connector-left connector-end\" (click)=\"onClickConnector($event, n, 'left')\"></div>\r\n } @else {\r\n <div\r\n class=\"connector connector-left connector-end reverse\"\r\n (click)=\"onClickConnector($event, n, 'left')\"\r\n ></div>\r\n }\r\n </nz-card>\r\n } @else {\r\n <nz-card\r\n class=\"workflow-node\"\r\n [attr.data-id]=\"n.Code\"\r\n [class.selected]=\"n == selectedStage || n == hoverStage || lstSelectedStageId.has(n.WF_TemplateStage_Id)\"\r\n [style.left.px]=\"n.editorOption.x\"\r\n [style.top.px]=\"n.editorOption.y\"\r\n [class.connecting-source]=\"isConnectingFrom(n) || isDraggingFrom(n) || isSelectedNode(n)\"\r\n nzSize=\"small\"\r\n (mousedown)=\"onMouseDownNode($event, n)\"\r\n (click)=\"$event.stopPropagation(); onClickStage(n)\"\r\n >\r\n <div class=\"title\">{{ n.Code }}</div>\r\n\r\n <div>{{ n.Name }}</div>\r\n\r\n @if (!n.editorOption.isReverse) {\r\n <!-- connector RIGHT: output -->\r\n <div class=\"connector connector-right\" (click)=\"onClickConnector($event, n, 'right')\"></div>\r\n\r\n <!-- connector LEFT: input -->\r\n <div class=\"connector connector-left\" (click)=\"onClickConnector($event, n, 'left')\"></div>\r\n } @else {\r\n <div class=\"connector connector-right reverse\" (click)=\"onClickConnector($event, n, 'right')\"></div>\r\n <div class=\"connector connector-left reverse\" (click)=\"onClickConnector($event, n, 'left')\"></div>\r\n }\r\n </nz-card>\r\n }\r\n }\r\n\r\n <!-- POINTS -->\r\n @for (p of connectingPoints; track $index) {\r\n @if (p != draggingPoint) {\r\n <div\r\n class=\"waypoint\"\r\n [style.left.px]=\"p.x\"\r\n [style.top.px]=\"p.y\"\r\n (mousedown)=\"onmousedownPoint($event, p)\"\r\n (contextmenu)=\"onRightClickPoint($event, hoverAction!, $index)\"\r\n ></div>\r\n } @else {\r\n <div\r\n class=\"waypoint dragging\"\r\n [style.left.px]=\"p.x\"\r\n [style.top.px]=\"p.y\"\r\n (mousedown)=\"onmousedownPoint($event, p)\"\r\n ></div>\r\n }\r\n }\r\n </div>\r\n</div>\r\n\r\n<!-- drawer TEMPLATE -->\r\n<nz-drawer\r\n [nzTitle]=\"drawTemplateTitle\"\r\n nzPlacement=\"right\"\r\n [nzWidth]=\"500\"\r\n [nzClosable]=\"false\"\r\n [nzVisible]=\"drawTemplateVisibel\"\r\n [nzFooter]=\"footerTplTemplate\"\r\n (nzOnClose)=\"drawTemplateVisibel = false\"\r\n>\r\n <ng-template #drawTemplateTitle> <nz-icon nzType=\"setting\"></nz-icon> &nbsp; Template </ng-template>\r\n <ng-container *nzDrawerContent>\r\n <extend-select\r\n [label]=\"'Org'\"\r\n [lstItem]=\"lstOrg\"\r\n [valueField]=\"'App_Org_Id'\"\r\n [displayFields]=\"['Name', 'Code']\"\r\n [(_ngModel)]=\"template.App_Org_Id\"\r\n ></extend-select>\r\n <extend-input [label]=\"'Code'\" [(_ngModel)]=\"template.Code\"></extend-input>\r\n <extend-input [label]=\"'Name'\" [(_ngModel)]=\"template.Name\"></extend-input>\r\n <extend-select\r\n [label]=\"'Type'\"\r\n [lstItem]=\"template.lstTemplateType\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"template.DocType\"\r\n ></extend-select>\r\n <extend-textarea [label]=\"'Desscription'\" [(_ngModel)]=\"template.Description\"></extend-textarea>\r\n <extend-select\r\n [label]=\"'Print template'\"\r\n [lstItem]=\"template.lstTemplatePrint\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"template.TemplatePrint\"\r\n ></extend-select>\r\n <extend-select\r\n [label]=\"'Apply to'\"\r\n [lstItem]=\"template.lstApplyTo\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"template.ApplyTo\"\r\n ></extend-select>\r\n\r\n <extend-checkbox [label]=\"'Active'\" [(_ngModel)]=\"template.IsActive\"></extend-checkbox>\r\n <extend-checkbox [label]=\"'Use Allow back'\" [(_ngModel)]=\"template.editorOption.AllowbackInUse\"></extend-checkbox>\r\n\r\n <h3 nz-col><nz-icon nzType=\"send\" nzTheme=\"outline\" />&nbsp;Stage</h3>\r\n\r\n <div nz-row [nzGutter]=\"[0, 5]\">\r\n @for (tag of getLstStage; track tag) {\r\n <div nz-col>\r\n <nz-tag (click)=\"hoverStage = tag\">\r\n {{ sliceTagName(tag.Code + (tag.Name ? \" - \" + tag.Name : \"\")) }}\r\n </nz-tag>\r\n </div>\r\n }\r\n </div>\r\n\r\n <box [height]=\"16\"></box>\r\n\r\n <h3 nz-col><nz-icon nzType=\"send\" nzTheme=\"outline\" />&nbsp;Stage status</h3>\r\n\r\n <div nz-row [nzGutter]=\"[0, 5]\">\r\n @for (tag of template.lstStageStatus; track tag) {\r\n <div nz-col>\r\n <nz-tag\r\n [nzMode]=\"checkRemoveableStageStatus(tag) ? 'closeable' : 'default'\"\r\n (nzOnClose)=\"handleCloseStageStatus(tag)\"\r\n >\r\n {{ sliceTagName(tag.Code + (tag.Name ? \" - \" + tag.Name : \"\")) }}\r\n </nz-tag>\r\n </div>\r\n }\r\n\r\n <div nz-col>\r\n @if (!inputStageStatusVisible) {\r\n <nz-tag class=\"editable-tag\" nzNoAnimation (click)=\"showInputStageStatus()\">\r\n <nz-icon nzType=\"plus\" />\r\n New Action type\r\n </nz-tag>\r\n } @else {\r\n <input\r\n #inputStageStatusElement\r\n nz-input\r\n nzSize=\"small\"\r\n type=\"text\"\r\n style=\"width: 150px\"\r\n placeholder=\"Code\"\r\n [(ngModel)]=\"inputStageStatusCode\"\r\n (keydown.enter)=\"inputStageStatusNameElement.select()\"\r\n />\r\n <input\r\n #inputStageStatusNameElement\r\n nz-input\r\n nzSize=\"small\"\r\n type=\"text\"\r\n style=\"width: 150px\"\r\n placeholder=\"Name\"\r\n [(ngModel)]=\"inputStageStatusName\"\r\n (blur)=\"handleInputStageStatusConfirm()\"\r\n (keydown.enter)=\"handleInputStageStatusConfirm()\"\r\n />\r\n }\r\n </div>\r\n </div>\r\n\r\n <box [height]=\"16\"></box>\r\n\r\n <h3 nz-col><nz-icon nzType=\"send\" nzTheme=\"outline\" />&nbsp;Action type</h3>\r\n\r\n <div nz-row [nzGutter]=\"[0, 5]\">\r\n @for (tag of template.lstActionType; track tag) {\r\n <div nz-col>\r\n <nz-tag\r\n [nzMode]=\"checkRemoveableActionType(tag) ? 'closeable' : 'default'\"\r\n (nzOnClose)=\"handleCloseActionType(tag)\"\r\n >\r\n {{ sliceTagName(tag.Code + (tag.Name ? \" - \" + tag.Name : \"\")) }}\r\n </nz-tag>\r\n </div>\r\n }\r\n\r\n <div nz-col>\r\n @if (!inputActionTypeVisible) {\r\n <nz-tag class=\"editable-tag\" nzNoAnimation (click)=\"showInputActionType()\">\r\n <nz-icon nzType=\"plus\" />\r\n New Action type\r\n </nz-tag>\r\n } @else {\r\n <input\r\n #inputActionTypeElement\r\n nz-input\r\n nzSize=\"small\"\r\n type=\"text\"\r\n style=\"width: 150px\"\r\n placeholder=\"Code\"\r\n [(ngModel)]=\"inputActionTypeCode\"\r\n (keydown.enter)=\"inputActionTypeNameElement.select()\"\r\n />\r\n <input\r\n #inputActionTypeNameElement\r\n nz-input\r\n nzSize=\"small\"\r\n type=\"text\"\r\n style=\"width: 150px\"\r\n placeholder=\"Name\"\r\n [(ngModel)]=\"inputActionTypeName\"\r\n (blur)=\"handleInputActionTypeConfirm()\"\r\n (keydown.enter)=\"handleInputActionTypeConfirm()\"\r\n />\r\n }\r\n </div>\r\n </div>\r\n\r\n <box [height]=\"16\"></box>\r\n\r\n <h3 nz-col><nz-icon nzType=\"send\" nzTheme=\"outline\" />&nbsp;Action status</h3>\r\n\r\n <div nz-row [nzGutter]=\"[0, 5]\">\r\n @for (tag of template.lstActionStatus; track tag) {\r\n <div nz-col>\r\n @if (template.editingActionStatus != tag) {\r\n <nz-tag\r\n [nzMode]=\"checkRemoveableActionStatus(tag.Code) ? 'closeable' : 'default'\"\r\n (nzOnClose)=\"handleClose(tag.Code)\"\r\n (click)=\"template.editingActionStatus = checkRemoveableActionStatus(tag.Code) ? tag : undefined\"\r\n >\r\n {{ sliceTagName(tag.Code + (tag.Name ? \" - \" + tag.Name : \"\")) }}\r\n </nz-tag>\r\n } @else {\r\n <input\r\n nz-input\r\n nzSize=\"small\"\r\n type=\"text\"\r\n style=\"width: 150px\"\r\n [appAutoFocus]=\"true\"\r\n [(ngModel)]=\"tag.Code\"\r\n (blur)=\"template.editingActionStatus = undefined\"\r\n (keydown.enter)=\"template.editingActionStatus = undefined\"\r\n />&nbsp;&nbsp;\r\n }\r\n </div>\r\n }\r\n\r\n <div nz-col>\r\n @if (!inputVisible) {\r\n <nz-tag class=\"editable-tag\" nzNoAnimation (click)=\"showInput()\">\r\n <nz-icon nzType=\"plus\" />\r\n New Action status\r\n </nz-tag>\r\n } @else {\r\n <input\r\n #inputElement\r\n nz-input\r\n nzSize=\"small\"\r\n type=\"text\"\r\n style=\"width: 150px\"\r\n placeholder=\"+ New Action status\"\r\n [(ngModel)]=\"inputValue\"\r\n (blur)=\"handleInputConfirm()\"\r\n (keydown.enter)=\"handleInputConfirm()\"\r\n />\r\n }\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-template #footerTplTemplate>\r\n <div nz-flex [nzGap]=\"6\" [nzJustify]=\"'end'\">\r\n <button nz-button nzDanger [nzLoading]=\"!ready\" (click)=\"save()\">Save</button>\r\n <button nz-button (click)=\"drawTemplateVisibel = false\">Close</button>\r\n </div>\r\n </ng-template>\r\n</nz-drawer>\r\n\r\n<!-- drawer STAGE -->\r\n<nz-drawer\r\n [nzTitle]=\"drawerTitleStage\"\r\n [nzPlacement]=\"selectedStage?.editorOption?.drawerPosition == 'left' ? 'left' : 'right'\"\r\n [nzVisible]=\"!!selectedStage\"\r\n [nzWidth]=\"'calc(50vw)'\"\r\n [nzClosable]=\"false\"\r\n [nzFooter]=\"footerTplNode\"\r\n (nzOnClose)=\"selectedStage = undefined\"\r\n>\r\n <ng-template #drawerTitleStage>\r\n <div nz-row nzJustify=\"space-between\">\r\n @if (selectedStage && selectedStage.editorOption) {\r\n @if (selectedStage.editorOption.drawerPosition == \"left\") {\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n nz-tooltip=\"To the right\"\r\n (click)=\"selectedStage.editorOption.drawerPosition = 'right'\"\r\n >\r\n <nz-icon nzType=\"double-right\"></nz-icon>\r\n </button>\r\n STAGE\r\n } @else {\r\n STAGE\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n nz-tooltip=\"To the left\"\r\n (click)=\"selectedStage.editorOption.drawerPosition = 'left'\"\r\n >\r\n <nz-icon nzType=\"double-left\"></nz-icon>\r\n </button>\r\n }\r\n }\r\n </div>\r\n </ng-template>\r\n <ng-container *nzDrawerContent>\r\n <ng-container *ngIf=\"selectedStage\">\r\n <nz-radio-group [(ngModel)]=\"selectedStage.StageType\">\r\n <label nz-radio nzValue=\"_start_\">UI start</label>\r\n <label nz-radio nzValue=\"_end_\">UI end</label>\r\n <label nz-radio nzValue=\"start\">START</label>\r\n <label nz-radio nzValue=\"node\">NODE</label>\r\n <label nz-radio nzValue=\"end\">END</label>\r\n </nz-radio-group>\r\n\r\n <box [height]=\"16\"></box>\r\n\r\n <div nz-row [nzGutter]=\"32\" class=\"form-item-no-bottom\">\r\n <extend-input\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Code'\"\r\n [floatingLabel]=\"true\"\r\n [required]=\"true\"\r\n [(_ngModel)]=\"selectedStage.Code\"\r\n ></extend-input>\r\n\r\n <extend-input\r\n nz-col\r\n [nzSpan]=\"16\"\r\n [label]=\"'Name'\"\r\n [floatingLabel]=\"true\"\r\n [required]=\"true\"\r\n [(_ngModel)]=\"selectedStage.Name\"\r\n ></extend-input>\r\n </div>\r\n\r\n <div nz-row [nzGutter]=\"32\" class=\"form-item-no-bottom\">\r\n <extend-input-number\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Sequence'\"\r\n [floatingLabel]=\"true\"\r\n [(_ngModel)]=\"selectedStage.SeqValue\"\r\n ></extend-input-number>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"16\"\r\n [label]=\"'Org implement'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"lstOrg\"\r\n [valueField]=\"'App_Org_Id'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedStage.App_Org_Id\"\r\n ></extend-select>\r\n </div>\r\n\r\n <div nz-row [nzGutter]=\"32\" class=\"form-item-no-bottom\">\r\n <extend-input-number\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Number Day'\"\r\n [floatingLabel]=\"true\"\r\n [precision]=\"1\"\r\n [(_ngModel)]=\"selectedStage.NumberDay\"\r\n ></extend-input-number>\r\n </div>\r\n\r\n @if (selectedStage.editorOption) {\r\n @if ([\"start\", \"node\", \"end\"].includes(selectedStage.StageType.toLowerCase())) {\r\n <extend-checkbox\r\n [label]=\"'Reverse'\"\r\n [labelSpan]=\"0\"\r\n [(_ngModel)]=\"selectedStage.editorOption.isReverse\"\r\n ></extend-checkbox>\r\n }\r\n\r\n <extend-checkbox\r\n [label]=\"'Require user action'\"\r\n [labelSpan]=\"0\"\r\n [(_ngModel)]=\"selectedStage.IsRequireUser\"\r\n ></extend-checkbox>\r\n }\r\n\r\n <box [height]=\"16\"></box>\r\n\r\n <div nz-row [nzGutter]=\"16\">\r\n <h3 nz-col><nz-icon nzType=\"send\" nzTheme=\"outline\" />&nbsp;List Action</h3>\r\n <div nz-col>\r\n <button nz-button nzType=\"primary\" nzSize=\"small\" (click)=\"addAction()\">\r\n <nz-icon nzType=\"plus\"></nz-icon>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <nz-table nzSize=\"small\" [nzData]=\"lstActionOfCurrentStage\" [nzShowPagination]=\"false\" [nzNoResult]=\"'&nbsp;'\">\r\n <thead>\r\n <tr [hidden]=\"true\">\r\n <th nzWidth=\"40px\"></th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (action of lstActionOfCurrentStage; track $index) {\r\n <tr [class.text-bold]=\"action == hoverAction\" (click)=\"onclickaction(action)\">\r\n <td style=\"border-bottom: solid 1px orange\">\r\n ({{ $index + 1 }})\r\n <nz-icon\r\n nzType=\"delete\"\r\n nzTheme=\"outline\"\r\n class=\"color-warn cursor-pointer icon-size-16\"\r\n (click)=\"$event.stopPropagation(); deleteAction(action)\"\r\n ></nz-icon>\r\n </td>\r\n <td style=\"border-bottom: solid 1px orange\">\r\n <div nz-row [nzGutter]=\"16\" class=\"form-item-no-bottom\">\r\n <div nz-col [nzSpan]=\"8\">\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"24\" style=\"height: 32px\">Action status</nz-form-label>\r\n <nz-form-control [nzSpan]=\"24\">\r\n <nz-input-group class=\"full-width\">\r\n <input\r\n nz-input\r\n [(ngModel)]=\"action.ActionStatus\"\r\n [nzAutocomplete]=\"auto\"\r\n (ngModelChange)=\"nzAutocompletechange($event, template.lstActionStatus)\"\r\n (click)=\"lstActionStatusFiltered = template.lstActionStatus\"\r\n (keyup.enter)=\"onenterAotu(action.ActionStatus)\"\r\n (blur)=\"onenterAotu(action.ActionStatus)\"\r\n />\r\n <nz-autocomplete #auto [compareWith]=\"compareFun\">\r\n @for (option of lstActionStatusFiltered; track $index) {\r\n <nz-auto-option [nzValue]=\"option.Code\" [nzLabel]=\"option.Code\">\r\n {{ option.Code }}\r\n <icon-delete\r\n *ngIf=\"checkRemoveableActionStatus(option.Code)\"\r\n style=\"float: right\"\r\n [size]=\"12\"\r\n (click)=\"handleClose(option.Code)\"\r\n ></icon-delete>\r\n </nz-auto-option>\r\n }\r\n </nz-autocomplete>\r\n </nz-input-group>\r\n </nz-form-control>\r\n </nz-form-item>\r\n </div>\r\n\r\n <extend-input\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Action text'\"\r\n [floatingLabel]=\"true\"\r\n [(_ngModel)]=\"action.ActionText\"\r\n (_ngModelChange)=\"onchangeActionText(action)\"\r\n ></extend-input>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Action type'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstActionType\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"action.ActionType\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Stage status'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstStageStatus\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"action.StageStatus\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Next stage'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"getlstStage\"\r\n [valueField]=\"'WF_TemplateStage_Id'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"action.To_WF_TemplateStage_Id\"\r\n (_ngModelChange)=\"onchangeNextStage(action)\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Next stage status'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstStageStatus\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"action.To_StageStatus\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Process status'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstProcessStatus\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"action.DocProcessStatus\"\r\n ></extend-select>\r\n </div>\r\n <box [height]=\"8\"></box>\r\n <div nz-row>Role</div>\r\n <div nz-row>\r\n <extend-select\r\n nz-col\r\n nzSpan=\"24\"\r\n [size]=\"'small'\"\r\n [lstItem]=\"lstRole\"\r\n [valueField]=\"'App_Role_Id'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [multiple]=\"true\"\r\n [(_ngModel)]=\"action._lstRoleId\"\r\n (_ngModelChange)=\"onselectedRoleEmail(action)\"\r\n ></extend-select>\r\n </div>\r\n <box [height]=\"8\"></box>\r\n <div nz-row>Email action</div>\r\n <div nz-row>\r\n <extend-select\r\n nz-col\r\n nzSpan=\"24\"\r\n [size]=\"'small'\"\r\n [lstItem]=\"lstEmailAction\"\r\n [valueField]=\"'ID'\"\r\n [displayField]=\"'Name'\"\r\n [multiple]=\"true\"\r\n [(_ngModel)]=\"action._lstEmailActionId\"\r\n (_ngModelChange)=\"onselectedRoleEmail(action)\"\r\n ></extend-select>\r\n </div>\r\n <box [height]=\"8\"></box>\r\n <div *ngIf=\"action._lstEmailActionId && action._lstEmailActionId.length\" nz-row>Email template</div>\r\n <div *ngIf=\"action._lstEmailActionId && action._lstEmailActionId.length\" nz-row>\r\n <div nz-col nzSpan=\"1\"></div>\r\n <div nz-col nzSpan=\"23\" class=\"form-item-no-bottom\" style=\"font-weight: normal\">\r\n @for (actionRef of lstActionRefOf(action); track $index) {\r\n <div nz-row>\r\n <extend-select\r\n nz-col\r\n nzSpan=\"24\"\r\n [labelSpan]=\"12\"\r\n [size]=\"'small'\"\r\n [label]=\"emailActionText(actionRef.To_WF_TemplateStageAction_Id)\"\r\n [lstItem]=\"lstEmailTemplate\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"actionRef.TemplateMail\"\r\n ></extend-select>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <box [height]=\"8\"></box>\r\n <div nz-row [nzGutter]=\"8\">\r\n Action rule\r\n <button nz-button nzType=\"text\" nzSize=\"small\" (click)=\"actionRuleModalVisible = true\">\r\n <nz-icon nzType=\"export\" nzTheme=\"outline\" class=\"color-primary\" />\r\n </button>\r\n <button\r\n *ngIf=\"action.WF_TransitionsRule_Id\"\r\n nz-button\r\n nzType=\"text\"\r\n nzSize=\"small\"\r\n (click)=\"deleteActionRule(action)\"\r\n >\r\n <nz-icon nzType=\"delete\" nzTheme=\"outline\" class=\"color-warn\" />\r\n </button>\r\n </div>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </nz-table>\r\n\r\n <box [height]=\"16\"></box>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-template #footerTplNode>\r\n <div\r\n nz-flex\r\n [nzGap]=\"6\"\r\n [nzJustify]=\"\r\n selectedStage && selectedStage.editorOption && selectedStage.editorOption.drawerPosition == 'left'\r\n ? 'start'\r\n : 'end'\r\n \"\r\n >\r\n <button nz-button nzDanger nzDanger [nzLoading]=\"!ready\" (click)=\"save()\">Save</button>\r\n <button nz-button (click)=\"selectedStage = undefined\">Close</button>\r\n <button\r\n *ngIf=\"selectedStage && ['START', 'END'].indexOf(selectedStage.StageType) < 0\"\r\n nz-button\r\n nzDanger\r\n (click)=\"deleteStage()\"\r\n >\r\n Delete\r\n </button>\r\n </div>\r\n </ng-template>\r\n</nz-drawer>\r\n\r\n<!-- drawer ACTION -->\r\n<nz-drawer\r\n [nzTitle]=\"drawerTitleAction\"\r\n nzTitle=\"ACTION\"\r\n [nzPlacement]=\"selectedAction?.editorOption?.drawerPosition == 'left' ? 'left' : 'right'\"\r\n [nzClosable]=\"false\"\r\n [nzWidth]=\"750\"\r\n [nzVisible]=\"!!selectedAction\"\r\n [nzFooter]=\"footerTplAction\"\r\n (nzOnClose)=\"selectedAction = undefined\"\r\n>\r\n <ng-template #drawerTitleAction>\r\n <div nz-row nzJustify=\"space-between\">\r\n @if (selectedAction && selectedAction.editorOption) {\r\n @if (selectedAction.editorOption.drawerPosition == \"left\") {\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n nz-tooltip=\"To the right\"\r\n (click)=\"selectedAction.editorOption.drawerPosition = 'right'\"\r\n >\r\n <nz-icon nzType=\"double-right\"></nz-icon>\r\n </button>\r\n ACTION\r\n } @else {\r\n ACTION\r\n <button\r\n nz-button\r\n nzSize=\"small\"\r\n nz-tooltip=\"To the left\"\r\n (click)=\"selectedAction.editorOption.drawerPosition = 'left'\"\r\n >\r\n <nz-icon nzType=\"double-left\"></nz-icon>\r\n </button>\r\n }\r\n }\r\n </div>\r\n </ng-template>\r\n <ng-container *nzDrawerContent>\r\n <ng-container *ngIf=\"selectedAction\">\r\n <div>\r\n <strong\r\n >{{ selectedAction.getFromStageCode(lstStage) }} -> {{ selectedAction.getToStageCode(lstStage) }}</strong\r\n >\r\n </div>\r\n <div>{{ selectedAction.getFromStageName(lstStage) }} -> {{ selectedAction.getToStageName(lstStage) }}</div>\r\n\r\n <box [height]=\"16\"></box>\r\n\r\n <div nz-row [nzGutter]=\"16\" class=\"form-item-no-bottom\">\r\n <div nz-col [nzSpan]=\"8\">\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"24\" style=\"height: 32px\">Action status</nz-form-label>\r\n <nz-form-control [nzSpan]=\"24\">\r\n <nz-input-group class=\"full-width\">\r\n <input\r\n nz-input\r\n [(ngModel)]=\"selectedAction.ActionStatus\"\r\n [nzAutocomplete]=\"auto\"\r\n (ngModelChange)=\"nzAutocompletechange($event, template.lstActionStatus)\"\r\n (click)=\"lstActionStatusFiltered = template.lstActionStatus\"\r\n (keyup.enter)=\"onenterAotu(selectedAction.ActionStatus)\"\r\n (blur)=\"onenterAotu(selectedAction.ActionStatus)\"\r\n />\r\n <nz-autocomplete #auto [compareWith]=\"compareFun\">\r\n @for (option of lstActionStatusFiltered; track $index) {\r\n <nz-auto-option [nzValue]=\"option.Code\" [nzLabel]=\"option.Code\">\r\n {{ option.Code }}\r\n <icon-delete\r\n *ngIf=\"checkRemoveableActionStatus(option.Code)\"\r\n style=\"float: right\"\r\n [size]=\"12\"\r\n (click)=\"handleClose(option.Code)\"\r\n ></icon-delete>\r\n </nz-auto-option>\r\n }\r\n </nz-autocomplete>\r\n </nz-input-group>\r\n </nz-form-control>\r\n </nz-form-item>\r\n </div>\r\n\r\n <extend-input\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Action text'\"\r\n [floatingLabel]=\"true\"\r\n [(_ngModel)]=\"selectedAction.ActionText\"\r\n (_ngModelChange)=\"onchangeActionText(selectedAction)\"\r\n ></extend-input>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Action type'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstActionType\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedAction.ActionType\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Stage status'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstStageStatus\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedAction.StageStatus\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Next stage'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"lstStage\"\r\n [valueField]=\"'WF_TemplateStage_Id'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedAction.To_WF_TemplateStage_Id\"\r\n (_ngModelChange)=\"onchangeNextStage(selectedAction)\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Next stage status'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstStageStatus\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedAction.To_StageStatus\"\r\n ></extend-select>\r\n </div>\r\n\r\n <!-- <box [height]=\"16\"></box> -->\r\n <nz-divider></nz-divider>\r\n\r\n @if (template.editorOption.AllowbackInUse) {\r\n <extend-checkbox\r\n [label]=\"'Allow back'\"\r\n [labelSpan]=\"0\"\r\n [(_ngModel)]=\"selectedAction.allowBack\"\r\n (_ngModelChange)=\"onchangeAllowBack(selectedAction)\"\r\n ></extend-checkbox>\r\n }\r\n\r\n <box [height]=\"16\"></box>\r\n\r\n @if (selectedAction.allowBack) {\r\n <div>\r\n <strong\r\n >{{ selectedAction.getToStageCode(lstStage) }} -> {{ selectedAction.getFromStageCode(lstStage) }}</strong\r\n >\r\n </div>\r\n <div>{{ selectedAction.getToStageName(lstStage) }} -> {{ selectedAction.getFromStageName(lstStage) }}</div>\r\n\r\n @if (selectedBackAction) {\r\n <div nz-row [nzGutter]=\"16\" class=\"form-item-no-bottom\">\r\n <div nz-col [nzSpan]=\"8\">\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"24\" style=\"height: 32px\">Action status</nz-form-label>\r\n <nz-form-control [nzSpan]=\"24\">\r\n <nz-input-group class=\"full-width\">\r\n <input\r\n nz-input\r\n [(ngModel)]=\"selectedBackAction.ActionStatus\"\r\n [nzAutocomplete]=\"auto\"\r\n (ngModelChange)=\"nzAutocompletechange($event, template.lstActionStatus)\"\r\n (click)=\"lstActionStatusFiltered = template.lstActionStatus\"\r\n (keyup.enter)=\"onenterAotu(selectedBackAction.ActionStatus)\"\r\n (blur)=\"onenterAotu(selectedBackAction.ActionStatus)\"\r\n />\r\n <nz-autocomplete #auto [compareWith]=\"compareFun\">\r\n @for (option of lstActionStatusFiltered; track $index) {\r\n <nz-auto-option [nzValue]=\"option.Code\" [nzLabel]=\"option.Code\">\r\n {{ option.Code }}\r\n <icon-delete\r\n *ngIf=\"checkRemoveableActionStatus(option.Code)\"\r\n style=\"float: right\"\r\n [size]=\"12\"\r\n (click)=\"handleClose(option.Code)\"\r\n ></icon-delete>\r\n </nz-auto-option>\r\n }\r\n </nz-autocomplete>\r\n </nz-input-group>\r\n </nz-form-control>\r\n </nz-form-item>\r\n </div>\r\n\r\n <extend-input\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Action text'\"\r\n [floatingLabel]=\"true\"\r\n [(_ngModel)]=\"selectedBackAction.ActionText\"\r\n (_ngModelChange)=\"onchangeActionText(selectedBackAction)\"\r\n ></extend-input>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Action type'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstActionType\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedBackAction.ActionType\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Stage status'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstStageStatus\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedBackAction.StageStatus\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Next stage'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"lstStage\"\r\n [valueField]=\"'WF_TemplateStage_Id'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedBackAction.To_WF_TemplateStage_Id\"\r\n (_ngModelChange)=\"onchangeNextStage(selectedBackAction)\"\r\n ></extend-select>\r\n\r\n <extend-select\r\n nz-col\r\n [nzSpan]=\"8\"\r\n [label]=\"'Next stage status'\"\r\n [floatingLabel]=\"true\"\r\n [lstItem]=\"template.lstStageStatus\"\r\n [valueField]=\"'Code'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"selectedBackAction.To_StageStatus\"\r\n ></extend-select>\r\n </div>\r\n }\r\n }\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #footerTplAction>\r\n <div\r\n nz-flex\r\n [nzGap]=\"6\"\r\n [nzJustify]=\"selectedAction && selectedAction.editorOption.drawerPosition == 'left' ? 'start' : 'end'\"\r\n >\r\n <button nz-button nzDanger nzDanger [nzLoading]=\"!ready\" (click)=\"save()\">Save</button>\r\n <button nz-button nzDanger (click)=\"deleteAction(selectedAction!)\">Delete</button>\r\n <button nz-button (click)=\"selectedAction = undefined\">Close</button>\r\n </div>\r\n </ng-template>\r\n</nz-drawer>\r\n\r\n<!-- setting editor -->\r\n<nz-drawer\r\n [nzTitle]=\"drawSettingTitle\"\r\n nzPlacement=\"right\"\r\n [nzClosable]=\"false\"\r\n [nzVisible]=\"settingVisible\"\r\n (nzOnClose)=\"settingVisible = false\"\r\n>\r\n <ng-template #drawSettingTitle> <nz-icon nzType=\"setting\"></nz-icon> &nbsp; Editor </ng-template>\r\n <ng-container *nzDrawerContent>\r\n <div class=\"form-item-no-bottom\">\r\n <extend-checkbox [label]=\"'Show grid'\" [labelSpan]=\"0\" [(_ngModel)]=\"wfcSetting.ShowGrid\"></extend-checkbox>\r\n\r\n <box [height]=\"16\"></box>\r\n </div>\r\n </ng-container>\r\n</nz-drawer>\r\n\r\n<!-- editor infomation -->\r\n<nz-drawer\r\n [nzTitle]=\"drawInfoTitle\"\r\n nzPlacement=\"right\"\r\n [nzClosable]=\"false\"\r\n [nzVisible]=\"infoVisible\"\r\n (nzOnClose)=\"infoVisible = false\"\r\n>\r\n <ng-template #drawInfoTitle> <nz-icon nzType=\"info-circle\"></nz-icon> &nbsp; Infomation </ng-template>\r\n <ng-container *nzDrawerContent>\r\n <p>1. C\u00E1c th\u00E0nh ph\u1EA7n: Stage or Node (stag, node quy tr\u00ECnh), Action or Connector (\u0111\u01B0\u1EDDng n\u1ED1i gi\u1EEFa c\u00E1c stage)</p>\r\n <p>2. Save \u0111\u1EC3 load c\u00E1c th\u00F4ng tin: Stage status, Action type</p>\r\n <p>\r\n 3. N\u1ED1i 2 node (t\u1EA1o connector t\u01B0\u01A1ng \u0111\u01B0\u01A1ng t\u1EA1o action):\r\n <br />- Click ch\u1EA5m cam t\u1EEB Node ngu\u1ED3n \u0111\u1EBFn ch\u1EA5m xanh c\u1EE7a Node \u0111\u00EDch (ho\u1EB7c click v\u00E0o Node \u0111\u00EDch), c\u00F3 th\u1EC3 click th\u00E0nh\r\n nhi\u1EC1u \u0111i\u1EC3m \u0111\u1EC3 t\u1EA1o \u0111\u01B0\u1EDDng n\u1ED1i cong<br />- Khi hover connector chuy\u1EC3n sang m\u1EA7u \u0111\u1ECF c\u00F3 th\u1EC3 click \u0111\u00FAp \u0111\u1EC3 th\u00EAm m\u1ED9t \u0111i\u1EC3m\r\n c\u1EE7a connector<br />- Khi hover l\u00EAn \u0111i\u1EC3m c\u1EE7a connector c\u00F3 th\u1EC3 di chuy\u1EC3n \u0111i\u1EC3m \u0111\u00F3 b\u1EB1ng c\u00E1ch nh\u1EA5n gi\u1EEF chu\u1ED9t v\u00E0 k\u00E9o th\u1EA3\r\n \u0111\u1EBFn v\u1ECB tr\u00ED m\u1EDBi<br />- Chu\u1ED9t ph\u1EA3i v\u00E0o \u0111i\u1EC3m n\u1ED1i connector \u0111\u1EC3 xo\u00E1 \u0111i\u1EC3m \u0111\u00F3\r\n </p>\r\n </ng-container>\r\n</nz-drawer>\r\n\r\n<!-- action rule modal -->\r\n<nz-modal\r\n [(nzVisible)]=\"actionRuleModalVisible\"\r\n [nzMaskClosable]=\"false\"\r\n [nzClosable]=\"false\"\r\n [nzKeyboard]=\"true\"\r\n [nzWidth]=\"'50vw'\"\r\n>\r\n <ng-container *nzModalTitle>\r\n ACTION RULE: [{{ selectedStage?.Code }}] {{ selectedStage?.Name }} > [{{ hoverAction?.ActionStatus }}]\r\n {{ hoverAction?.ActionText }}\r\n </ng-container>\r\n <ng-container *nzModalContent>\r\n @if (hoverAction && hoverAction.actionRule) {\r\n <div nz-row [nzGutter]=\"32\">\r\n <extend-input nz-col nzSpan=\"12\" [label]=\"'Code'\" [(_ngModel)]=\"hoverAction.actionRule.Code\"></extend-input>\r\n <extend-input nz-col nzSpan=\"12\" [label]=\"'Name'\" [(_ngModel)]=\"hoverAction.actionRule.Name\"></extend-input>\r\n <extend-input nz-col nzSpan=\"12\" [label]=\"'Note'\" [(_ngModel)]=\"hoverAction.actionRule.Note\"></extend-input>\r\n <extend-checkbox\r\n nz-col\r\n nzSpan=\"12\"\r\n [label]=\"'IsActive'\"\r\n [(_ngModel)]=\"hoverAction.actionRule.IsActive\"\r\n ></extend-checkbox>\r\n </div>\r\n <div nz-row [nzGutter]=\"16\">\r\n <div nz-col nzSpan=\"24\">\r\n <nz-table nzSize=\"small\" [nzData]=\"hoverAction.actionRule.lstLine\" [nzShowPagination]=\"false\">\r\n <thead>\r\n <tr>\r\n <th [nzWidth]=\"'50px'\"><icon-add (click)=\"addActionRuleLine()\"></icon-add></th>\r\n <th [nzWidth]=\"'25%'\">Template</th>\r\n <th [nzWidth]=\"'25%'\">Template stage</th>\r\n <th [nzWidth]=\"'25%'\">Template action</th>\r\n <th [nzWidth]=\"'50px'\">IsActive</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (item of hoverAction.actionRule.lstLine; track $index) {\r\n <tr>\r\n <td><icon-delete (click)=\"deleteActionRuleLine(hoverAction.actionRule, item)\"></icon-delete></td>\r\n <td>\r\n <extend-select\r\n #xxx\r\n [size]=\"'small'\"\r\n [lstItem]=\"lstTemplateForRule(item)\"\r\n [valueField]=\"'WF_Template_Id'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"item.WF_Template_Id\"\r\n (_ngModelChange)=\"item.WF_TemplateStage_Id = 0; item.WF_TemplateStageAction_Id = 0\"\r\n ></extend-select>\r\n </td>\r\n <td>\r\n <extend-select\r\n #yyy\r\n [size]=\"'small'\"\r\n [lstItem]=\"lstStageForRule(xxx._ngModel)\"\r\n [valueField]=\"'WF_TemplateStage_Id'\"\r\n [displayFields]=\"['Code', 'Name']\"\r\n [(_ngModel)]=\"item.WF_TemplateStage_Id\"\r\n (_ngModelChange)=\"item.WF_TemplateStageAction_Id = 0\"\r\n ></extend-select>\r\n </td>\r\n <td>\r\n <extend-select\r\n [size]=\"'small'\"\r\n [lstItem]=\"lstActionForRule(yyy._ngModel)\"\r\n [valueField]=\"'WF_TemplateStageAction_Id'\"\r\n [displayFields]=\"['ActionStatus', 'ActionText']\"\r\n [(_ngModel)]=\"item.WF_TemplateStageAction_Id\"\r\n ></extend-select>\r\n </td>\r\n <td class=\"text-center\">\r\n <extend-checkbox [(_ngModel)]=\"item.IsActive\"></extend-checkbox>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </nz-table>\r\n </div>\r\n </div>\r\n }\r\n </ng-container>\r\n <ng-container *nzModalFooter>\r\n <button nz-button nzType=\"primary\" (click)=\"actionRuleModalVisible = false\">OK</button>\r\n </ng-container>\r\n</nz-modal>\r\n", styles: ["@charset \"UTF-8\";::ng-deep .workflow-wrapper{border:solid 1px lightgray;overflow:hidden;width:100%}.workflow-canvas{position:relative;background:#f0f2f5;cursor:default;overflow:hidden;outline:1px dashed rgba(0,0,0,.1)}.workflow-canvas .edges-layer{position:absolute;inset:0;width:100%;height:100%;z-index:1}.workflow-canvas .edges-layer path{stroke-width:2;fill:none}.canvas-content{transform-origin:0 0;width:100%;height:100%}.canvas-content{outline:1px dashed red}.canvas-content.panning{cursor:grab}.canvas-content.panning:active{cursor:grabbing}.workflow-canvas.panning{cursor:grab}.workflow-canvas.panning:active{cursor:grabbing}.workflow-canvas.connecting,.workflow-canvas.connecting .workflow-node{cursor:crosshair}.workflow-node{position:absolute;width:160px;cursor:grab;-webkit-user-select:none;user-select:none;z-index:2}.workflow-node:active{cursor:grabbing}.workflow-node.connecting-source,.workflow-node.selected,.workflow-node:hover:not(.workflow-node-start,.workflow-node-end){outline:2px dashed #1890ff}.workflow-node .title{font-weight:600;margin-bottom:6px}.workflow-node-start{width:0px}.workflow-node-start.connecting-source,.workflow-node-start.selected,.workflow-node-start:hover{outline:unset}.workflow-node-start.connecting-source nz-tag,.workflow-node-start.selected nz-tag,.workflow-node-start:hover nz-tag{outline:2px dashed}.workflow-node-start nz-tag{position:relative;top:45px;right:35px}.workflow-node-end{width:0px}.workflow-node-end.connecting-source,.workflow-node-end.selected,.workflow-node-end:hover{outline:unset}.workflow-node-end.connecting-source nz-tag,.workflow-node-end.selected nz-tag,.workflow-node-end:hover nz-tag{outline:2px dashed}.workflow-node-end nz-tag{position:relative;top:45px;right:32px}.connector{position:absolute;top:39px;width:12px;height:12px;background:#1890ff;border-radius:50%;transform:translateY(-50%);cursor:crosshair;transition:box-shadow .15s ease-out,transform .15s ease-out}.connector:hover{box-shadow:0 0 0 3px #1890ff4d;transform:translateY(-50%) scale(1.15)}.connector-right{right:-8px;background:orange}.connector-right.reverse,.connector-left{left:-8px}.connector-left.reverse{left:unset;right:-8px}.connector-start{width:16px;height:16px;right:-8px;background:green;box-shadow:0 0 0 3px #1890ff4d}.connector-end{width:16px;height:16px;left:-8px;background:#000;box-shadow:0 0 0 3px #1890ff4d}.edge{cursor:pointer;stroke:#1890ff;stroke-linecap:round;stroke-linejoin:round;stroke-width:2;fill:none;transition:stroke .15s ease}.edge-hit{stroke:transparent;stroke-width:18px!important;fill:none;cursor:pointer}.edge-hit:hover+.edge{stroke:#ff4d4f;stroke-width:2}.workflow-canvas.dragging-point .edge-hit{pointer-events:none}.edge:hover+.edge-label{fill:#1890ff;font-weight:500}.edge-label{font-size:12px;fill:#555;pointer-events:none;-webkit-user-select:none;user-select:none}.blue{stroke:#1890ff!important}.red{stroke:#ff4d4f!important;box-shadow:0 0 0 3px #1890ff4d!important}.workflow-svg{background:transparent;overflow:visible}.waypoint{position:absolute;width:10px;height:10px;background:#ff4d4f;border-radius:50%;transform:translate(-50%,-50%) scale(1);cursor:move;z-index:1;transition:transform .12s ease-out,background-color .12s ease-out,box-shadow .12s ease-out}.waypoint:hover{background:#ff7875;transform:translate(-50%,-50%) scale(1.25);box-shadow:0 0 0 4px #ff787559}.waypoint.dragging{transition:none;transform:translate(-50%,-50%) scale(1.15);pointer-events:none}.workflow-canvas.dragging-point svg{cursor:grabbing}.selection-box{position:absolute;border:1px dashed #1890ff;background:#1890ff1a;pointer-events:none}.toolbar{position:absolute;top:8px;left:8px;display:flex;gap:4px;padding:6px;background:#fff;border-radius:6px;box-shadow:0 2px 8px #00000026;z-index:100}.toolbar .divider{width:1px;background:#e5e5e5;margin:0 2px}.zoom-toolbar{position:absolute;top:8px;left:8px;z-index:10;display:flex;align-items:center;gap:6px;background:#fff;padding:4px 6px;border-radius:6px;box-shadow:0 2px 6px #00000026}.zoom-toolbar span{min-width:40px;text-align:center;font-size:12px}nz-tag.selected{outline:2px dashed #1890ff}.grid-layer{position:absolute;inset:0;pointer-events:none;z-index:0;background-image:radial-gradient(rgba(0,0,0,.08) 1px,transparent 1px);background-size:20px 20px}.grid-layer{background-image:linear-gradient(to right,rgba(0,0,0,.06) 1px,transparent 1px),linear-gradient(to bottom,rgba(0,0,0,.06) 1px,transparent 1px);background-size:20px 20px}.editable-tag{background:#fff;border-style:dashed}::ng-deep .minimap{position:fixed;width:180px;height:125px;top:60px;right:15px;background-color:#eee;border:1px solid #aaa;opacity:.9;z-index:1}::ng-deep .minimap-node{position:absolute;background-color:#607a86}::ng-deep .minimap-node-round{position:absolute;background-color:#607a86;border-radius:10px}::ng-deep .minimap-node-round-start{background-color:green}::ng-deep .minimap-node-round-end{background-color:#000}::ng-deep .minimap-viewport{position:absolute;box-sizing:border-box;background-color:#4f6f7e66;z-index:1;cursor:move}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: NzCardModule }, { kind: "component", type: i3$1.NzCardComponent, selector: "nz-card", inputs: ["nzBordered", "nzLoading", "nzHoverable", "nzBodyStyle", "nzCover", "nzActions", "nzType", "nzSize", "nzTitle", "nzExtra"], exportAs: ["nzCard"] }, { kind: "ngmodule", type: NzDrawerModule }, { kind: "component", type: i4$2.NzDrawerComponent, selector: "nz-drawer", inputs: ["nzContent", "nzCloseIcon", "nzClosable", "nzMaskClosable", "nzMask", "nzCloseOnNavigation", "nzNoAnimation", "nzKeyboard", "nzTitle", "nzExtra", "nzFooter", "nzPlacement", "nzSize", "nzMaskStyle", "nzBodyStyle", "nzWrapClassName", "nzWidth", "nzHeight", "nzZIndex", "nzOffsetX", "nzOffsetY", "nzVisible"], outputs: ["nzOnViewInit", "nzOnClose", "nzVisibleChange"], exportAs: ["nzDrawer"] }, { kind: "directive", type: i4$2.NzDrawerContentDirective, selector: "[nzDrawerContent]", exportAs: ["nzDrawerContent"] }, { kind: "ngmodule", type: NzTagModule }, { kind: "component", type: i5$2.NzTagComponent, selector: "nz-tag", inputs: ["nzMode", "nzColor", "nzChecked", "nzBordered"], outputs: ["nzOnClose", "nzCheckedChange"], exportAs: ["nzTag"] }, { kind: "ngmodule", type: NzRadioModule }, { kind: "component", type: i6$3.NzRadioComponent, selector: "[nz-radio],[nz-radio-button]", inputs: ["nzValue", "nzDisabled", "nzAutoFocus", "nz-radio-button"], exportAs: ["nzRadio"] }, { kind: "component", type: i6$3.NzRadioGroupComponent, selector: "nz-radio-group", inputs: ["nzDisabled", "nzButtonStyle", "nzSize", "nzName"], exportAs: ["nzRadioGroup"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$3.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "component", type: Box, selector: "box", inputs: ["display", "width", "height"] }, { kind: "ngmodule", type: NzButtonModule }, { kind: "component", type: i8.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { kind: "directive", type: i4$1.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], nz-icon, [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i10.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }, { kind: "ngmodule", type: NzToolTipModule }, { kind: "directive", type: i11.NzTooltipDirective, selector: "[nz-tooltip]", inputs: ["nzTooltipTitle", "nzTooltipTitleContext", "nz-tooltip", "nzTooltipTrigger", "nzTooltipPlacement", "nzTooltipOrigin", "nzTooltipVisible", "nzTooltipMouseEnterDelay", "nzTooltipMouseLeaveDelay", "nzTooltipOverlayClassName", "nzTooltipOverlayStyle", "nzTooltipArrowPointAtCenter", "cdkConnectedOverlayPush", "nzTooltipColor"], outputs: ["nzTooltipVisibleChange"], exportAs: ["nzTooltip"] }, { kind: "component", type: ExtendInput, selector: "extend-input", inputs: ["label", "floatingLabel", "placeHolder", "labelAlign", "inputClass", "labelSpan", "labelFlex", "inputFlex", "allowClear", "disabled", "readOnly", "required", "noBottom", "selectModeType", "autocomplete", "autofocus", "inputWidth", "inputHeight", "borderBottomOnly", "displayInline", "size", "lstItem", "displayField", "valueField", "formData", "controlName", "_ngModel", "isSubmited"], outputs: ["_ngModelChange", "onclickClearIcon", "onenter"] }, { kind: "component", type: ExtendSelectComponent, selector: "extend-select", inputs: ["label", "floatingLabel", "placeHolder", "labelAlign", "dropdownMatchSelectWidth", "labelSpan", "labelFlex", "disabled", "required", "noBottom", "multiple", "showSelectAll", "maxTagCount", "inputWidth", "inputHeight", "borderBottomOnly", "displayInline", "size", "lstItem", "displayField", "displayFields", "valueField", "formData", "controlName", "_ngModel", "isSubmited"], outputs: ["_ngModelChange", "itemChange", "onFocus"] }, { kind: "component", type: ExtendCheckbox, selector: "extend-checkbox", inputs: ["label", "labelSpan", "labelFlex", "disabled", "formData", "controlName", "valueType", "_ngModel"], outputs: ["_ngModelChange"] }, { kind: "component", type: ExtendTextArea, selector: "extend-textarea", inputs: ["label", "placeHolder", "labelAlign", "floatingLabel", "displayInline", "labelSpan", "labelFlex", "inputFlex", "disabled", "required", "noBottom", "selectModeType", "inputClass", "size", "isSubmited", "minRows", "maxRows", "lstItem", "displayField", "valueField", "formData", "controlName", "_ngModel", "isTouched", "inputErrorMessage", "errorMessages"], outputs: ["_ngModelChange"] }, { kind: "ngmodule", type: NzInputModule }, { kind: "directive", type: i6$1.NzInputDirective, selector: "input[nz-input],textarea[nz-input]", inputs: ["nzBorderless", "nzSize", "nzStepperless", "nzStatus", "disabled"], exportAs: ["nzInput"] }, { kind: "component", type: i6$1.NzInputGroupComponent, selector: "nz-input-group", inputs: ["nzAddOnBeforeIcon", "nzAddOnAfterIcon", "nzPrefixIcon", "nzSuffixIcon", "nzAddOnBefore", "nzAddOnAfter", "nzPrefix", "nzStatus", "nzSuffix", "nzSize", "nzSearch", "nzCompact"], exportAs: ["nzInputGroup"] }, { kind: "ngmodule", type: NzGridModule }, { kind: "directive", type: i4.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i4.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "ngmodule", type: NzFlexModule }, { kind: "directive", type: i14.NzFlexDirective, selector: "[nz-flex],nz-flex", inputs: ["nzVertical", "nzJustify", "nzAlign", "nzGap", "nzWrap", "nzFlex"], exportAs: ["nzFlex"] }, { kind: "component", type: ExtendInputNumber, selector: "extend-input-number", inputs: ["label", "placeHolder", "labelAlign", "floatingLabel", "hiddenUpDown", "labelSpan", "labelFlex", "inputFlex", "disabled", "required", "noBottom", "size", "min", "max", "precision", "inputWidth", "inputHeight", "borderBottomOnly", "displayInline", "isSubmited", "separatorType", "formData", "controlName", "_ngModel"], outputs: ["_ngModelChange"] }, { kind: "ngmodule", type: NzTableModule }, { kind: "component", type: i2$2.NzTableComponent, selector: "nz-table", inputs: ["nzTableLayout", "nzShowTotal", "nzItemRender", "nzTitle", "nzFooter", "nzNoResult", "nzPageSizeOptions", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualForTrackBy", "nzLoadingDelay", "nzPageIndex", "nzPageSize", "nzTotal", "nzWidthConfig", "nzData", "nzCustomColumn", "nzPaginationPosition", "nzScroll", "noDataVirtualHeight", "nzPaginationType", "nzFrontPagination", "nzTemplateMode", "nzShowPagination", "nzLoading", "nzOuterBordered", "nzLoadingIndicator", "nzBordered", "nzSize", "nzShowSizeChanger", "nzHideOnSinglePage", "nzShowQuickJumper", "nzSimple"], outputs: ["nzPageSizeChange", "nzPageIndexChange", "nzQueryParams", "nzCurrentPageDataChange", "nzCustomColumnChange"], exportAs: ["nzTable"] }, { kind: "directive", type: i2$2.NzTableCellDirective, selector: "th:not(.nz-disable-th):not([mat-cell]), td:not(.nz-disable-td):not([mat-cell])" }, { kind: "directive", type: i2$2.NzThMeasureDirective, selector: "th", inputs: ["nzWidth", "colspan", "colSpan", "rowspan", "rowSpan"] }, { kind: "component", type: i2$2.NzTheadComponent, selector: "thead:not(.ant-table-thead)", outputs: ["nzSortOrderChange"] }, { kind: "component", type: i2$2.NzTbodyComponent, selector: "tbody" }, { kind: "directive", type: i2$2.NzTrDirective, selector: "tr:not([mat-row]):not([mat-header-row]):not([nz-table-measure-row]):not([nzExpand]):not([nz-table-fixed-row])" }, { kind: "ngmodule", type: NzDividerModule }, { kind: "component", type: i16.NzDividerComponent, selector: "nz-divider", inputs: ["nzText", "nzType", "nzOrientation", "nzVariant", "nzDashed", "nzPlain"], exportAs: ["nzDivider"] }, { kind: "directive", type: AutoFocusDirective, selector: "[appAutoFocus]", inputs: ["appAutoFocus"] }, { kind: "ngmodule", type: NzAutocompleteModule }, { kind: "component", type: i17.NzAutocompleteComponent, selector: "nz-autocomplete", inputs: ["nzWidth", "nzOverlayClassName", "nzOverlayStyle", "nzDefaultActiveFirstOption", "nzBackfill", "compareWith", "nzDataSource"], outputs: ["selectionChange"], exportAs: ["nzAutocomplete"] }, { kind: "component", type: i17.NzAutocompleteOptionComponent, selector: "nz-auto-option", inputs: ["nzValue", "nzLabel", "nzDisabled"], outputs: ["selectionChange", "mouseEntered"], exportAs: ["nzAutoOption"] }, { kind: "directive", type: i17.NzAutocompleteTriggerDirective, selector: "input[nzAutocomplete], textarea[nzAutocomplete]", inputs: ["nzAutocomplete"], exportAs: ["nzAutocompleteTrigger"] }, { kind: "component", type: IconDelete, selector: "icon-delete", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: NzModalComponent, selector: "nz-modal", inputs: ["nzMask", "nzMaskClosable", "nzCloseOnNavigation", "nzVisible", "nzClosable", "nzOkLoading", "nzOkDisabled", "nzCancelDisabled", "nzCancelLoading", "nzKeyboard", "nzNoAnimation", "nzCentered", "nzDraggable", "nzContent", "nzFooter", "nzZIndex", "nzWidth", "nzWrapClassName", "nzClassName", "nzStyle", "nzTitle", "nzCloseIcon", "nzMaskStyle", "nzBodyStyle", "nzOkText", "nzCancelText", "nzOkType", "nzOkDanger", "nzIconType", "nzModalType", "nzAutofocus", "nzOnOk", "nzOnCancel"], outputs: ["nzOnOk", "nzOnCancel", "nzAfterOpen", "nzAfterClose", "nzVisibleChange"], exportAs: ["nzModal"] }, { kind: "directive", type: NzModalContentDirective, selector: "[nzModalContent]", exportAs: ["nzModalContent"] }, { kind: "directive", type: NzModalTitleDirective, selector: "[nzModalTitle]", exportAs: ["nzModalTitle"] }, { kind: "component", type: IconAdd, selector: "icon-add", inputs: ["size"], outputs: ["click"] }, { kind: "directive", type: NzModalFooterDirective, selector: "[nzModalFooter]", exportAs: ["nzModalFooter"] }] });
6047
6164
  }
6048
6165
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: WorkflowEditorComponent, decorators: [{
6049
6166
  type: Component,
@@ -6165,7 +6282,7 @@ class ExpandableSearchComponent {
6165
6282
  this.searchValueChange.emit(this.searchValue);
6166
6283
  }
6167
6284
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: ExpandableSearchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6168
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.7", type: ExpandableSearchComponent, isStandalone: true, selector: "expandable-search", inputs: { searchValue: "searchValue" }, outputs: { searchValueChange: "searchValueChange" }, viewQueries: [{ propertyName: "searchInputRef", first: true, predicate: ["searchInput"], descendants: true }], ngImport: i0, template: "<div class=\"nz-search-wrapper\" [class.expanded]=\"isExpanded\">\n <input\n #searchInput\n type=\"text\"\n class=\"custom-search-input\"\n [(ngModel)]=\"searchValue\"\n placeholder=\"Nh\u1EADp \u0111i\u1EC1u ki\u1EC7n t\u00ECm ki\u1EBFm...\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n (keyup.enter)=\"performSearch()\"\n />\n\n <span class=\"suffix-wrap\" (mousedown)=\"$event.preventDefault()\" (click)=\"toggleSearch()\">\n <i\n nz-icon\n nzType=\"close-circle\"\n nzTheme=\"fill\"\n class=\"suffix-icon delete\"\n [class.show]=\"isExpanded && searchValue\"\n (click)=\"clearSearch($event)\"\n ></i>\n\n <i\n nz-icon\n nzType=\"search\"\n nzTheme=\"outline\"\n class=\"suffix-icon search\"\n [class.show]=\"!isExpanded || !searchValue\"\n ></i>\n </span>\n</div>\n", styles: ["@charset \"UTF-8\";.nz-search-wrapper{position:relative;display:inline-flex;align-items:center;height:32px;width:32px;background-color:transparent;border:1px solid transparent;border-radius:6px;transition:all .3s cubic-bezier(.645,.045,.355,1);overflow:hidden}.nz-search-wrapper:hover:not(.expanded){background-color:#0000000a;cursor:pointer}.nz-search-wrapper.expanded{width:250px;background-color:#fff;border-color:#1890ff;box-shadow:0 0 0 2px #1890ff33}.nz-search-wrapper.expanded .custom-search-input{width:100%;padding:4px 32px 4px 11px;opacity:1}.custom-search-input{width:0;opacity:0;border:none;outline:none;background:transparent;padding:0;font-size:14px;color:#000000d9;transition:all .3s cubic-bezier(.645,.045,.355,1)}.custom-search-input::placeholder{color:#bfbfbf}.suffix-wrap{position:absolute;right:0;top:0;width:32px;height:32px;display:inline-flex;align-items:center;justify-content:center;cursor:pointer}.suffix-icon{position:absolute;display:flex;align-items:center;justify-content:center;font-size:16px;opacity:0;pointer-events:none;transition:opacity .2s ease}.suffix-icon.show{opacity:1;pointer-events:auto}.search{color:var(--primary-color)}.delete{color:#bfbfbf}.delete:hover{color:#ff4d4f}.delete.show{animation:popIn .18s ease}@keyframes popIn{0%{transform:scale(.5)}70%{transform:scale(1.15)}to{transform:scale(1)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$2.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }] });
6285
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.7", type: ExpandableSearchComponent, isStandalone: true, selector: "expandable-search", inputs: { searchValue: "searchValue" }, outputs: { searchValueChange: "searchValueChange" }, viewQueries: [{ propertyName: "searchInputRef", first: true, predicate: ["searchInput"], descendants: true }], ngImport: i0, template: "<div class=\"nz-search-wrapper\" [class.expanded]=\"isExpanded\">\n <input\n #searchInput\n type=\"text\"\n class=\"custom-search-input\"\n [(ngModel)]=\"searchValue\"\n placeholder=\"Nh\u1EADp \u0111i\u1EC1u ki\u1EC7n t\u00ECm ki\u1EBFm...\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n (keyup.enter)=\"performSearch()\"\n />\n\n <span class=\"suffix-wrap\" (mousedown)=\"$event.preventDefault()\" (click)=\"toggleSearch()\">\n <i\n nz-icon\n nzType=\"close-circle\"\n nzTheme=\"fill\"\n class=\"suffix-icon delete\"\n [class.show]=\"isExpanded && searchValue\"\n (click)=\"clearSearch($event)\"\n ></i>\n\n <i\n nz-icon\n nzType=\"search\"\n nzTheme=\"outline\"\n class=\"suffix-icon search\"\n [class.show]=\"!isExpanded || !searchValue\"\n ></i>\n </span>\n</div>\n", styles: ["@charset \"UTF-8\";.nz-search-wrapper{position:relative;display:inline-flex;align-items:center;height:32px;width:32px;background-color:transparent;border:1px solid transparent;border-radius:6px;transition:all .3s cubic-bezier(.645,.045,.355,1);overflow:hidden}.nz-search-wrapper:hover:not(.expanded){background-color:#0000000a;cursor:pointer}.nz-search-wrapper.expanded{width:250px;background-color:#fff;border-color:#1890ff;box-shadow:0 0 0 2px #1890ff33}.nz-search-wrapper.expanded .custom-search-input{width:100%;padding:4px 32px 4px 11px;opacity:1}.custom-search-input{width:0;opacity:0;border:none;outline:none;background:transparent;padding:0;font-size:14px;color:#000000d9;transition:all .3s cubic-bezier(.645,.045,.355,1)}.custom-search-input::placeholder{color:#bfbfbf}.suffix-wrap{position:absolute;right:0;top:0;width:32px;height:32px;display:inline-flex;align-items:center;justify-content:center;cursor:pointer}.suffix-icon{position:absolute;display:flex;align-items:center;justify-content:center;font-size:16px;opacity:0;pointer-events:none;transition:opacity .2s ease}.suffix-icon.show{opacity:1;pointer-events:auto}.search{color:var(--primary-color)}.delete{color:#bfbfbf}.delete:hover{color:#ff4d4f}.delete.show{animation:popIn .18s ease}@keyframes popIn{0%{transform:scale(.5)}70%{transform:scale(1.15)}to{transform:scale(1)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$3.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }] });
6169
6286
  }
6170
6287
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: ExpandableSearchComponent, decorators: [{
6171
6288
  type: Component,
@@ -6179,6 +6296,73 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImpor
6179
6296
  type: Output
6180
6297
  }] } });
6181
6298
 
6299
+ class CustomNotiComponent {
6300
+ customNotiService = inject(CustomNotiService);
6301
+ notiTemplate;
6302
+ ngOnInit() {
6303
+ this.customNotiService.registerTemplate(this.notiTemplate);
6304
+ }
6305
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: CustomNotiComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6306
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.7", type: CustomNotiComponent, isStandalone: true, selector: "custom-noti", viewQueries: [{ propertyName: "notiTemplate", first: true, predicate: ["globalNotiTemplate"], descendants: true, static: true }], ngImport: i0, template: `
6307
+ <ng-template #globalNotiTemplate let-data="data">
6308
+ <div class="custom-notification-wrapper">
6309
+ <div class="notification-content">
6310
+ <i nz-icon [nzType]="data.icon" nzTheme="twotone" [nzTwotoneColor]="data.color" class="noti-icon"></i>
6311
+
6312
+ <div class="noti-text">
6313
+ <div class="noti-title">{{ data.title }}</div>
6314
+ <div class="noti-desc">{{ data.description }}</div>
6315
+
6316
+ <div class="noti-action" *ngIf="data.showDetail">
6317
+ <a class="detail-link" (click)="data.onDetailClick()">Chi tiết</a>
6318
+ </div>
6319
+ </div>
6320
+ </div>
6321
+
6322
+ <div class="progress-bar-container">
6323
+ <div
6324
+ class="progress-bar"
6325
+ [style.background-color]="data.color"
6326
+ [style.animation-duration.ms]="data.duration"
6327
+ ></div>
6328
+ </div>
6329
+ </div>
6330
+ </ng-template>
6331
+ `, isInline: true, styles: ["@charset \"UTF-8\";::ng-deep .ant-notification-notice.notification-with-progress{padding:0!important;border-radius:8px;overflow:hidden;box-shadow:0 6px 16px #0000004d,0 3px 6px -4px #0000004d,0 9px 28px 8px #0000001a!important}::ng-deep .notification-with-progress .ant-notification-notice-content{padding:0!important}::ng-deep .notification-with-progress .ant-notification-notice-close{top:8px!important;right:8px!important}::ng-deep .custom-notification-wrapper{position:relative;width:100%;overflow:hidden;padding:0}::ng-deep .notification-content{display:flex;align-items:flex-start;gap:12px;margin-bottom:4px;padding:12px 12px 12px 16px;min-height:50px;word-break:break-word}::ng-deep .notification-content .noti-text{width:100%}::ng-deep .notification-content .noti-icon{font-size:24px;margin-top:2px}::ng-deep .notification-content .noti-title{font-weight:500;font-size:16px;color:#000000d9;margin-bottom:4px;width:94%}::ng-deep .notification-content .noti-desc{font-size:14px;color:#000000a6;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}::ng-deep .notification-content .noti-action{margin-top:8px;text-align:right}::ng-deep .notification-content .noti-action .detail-link{color:#1890ff;font-size:14px;font-weight:500;cursor:pointer;text-decoration:none;transition:color .3s}::ng-deep .notification-content .noti-action .detail-link:hover{color:#40a9ff;text-decoration:underline}::ng-deep .progress-bar-container{position:absolute;bottom:0;left:0;width:100%;height:4px;background-color:#f0f0f0}::ng-deep .progress-bar{height:100%;width:100%;animation-name:shrinkProgress;animation-timing-function:linear;animation-fill-mode:forwards}::ng-deep .ant-notification-notice.notification-with-progress:hover .progress-bar{animation-play-state:paused!important}@keyframes shrinkProgress{0%{width:100%}to{width:0%}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$3.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }] });
6332
+ }
6333
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: CustomNotiComponent, decorators: [{
6334
+ type: Component,
6335
+ args: [{ selector: 'custom-noti', imports: [CommonModule, NzIconModule], template: `
6336
+ <ng-template #globalNotiTemplate let-data="data">
6337
+ <div class="custom-notification-wrapper">
6338
+ <div class="notification-content">
6339
+ <i nz-icon [nzType]="data.icon" nzTheme="twotone" [nzTwotoneColor]="data.color" class="noti-icon"></i>
6340
+
6341
+ <div class="noti-text">
6342
+ <div class="noti-title">{{ data.title }}</div>
6343
+ <div class="noti-desc">{{ data.description }}</div>
6344
+
6345
+ <div class="noti-action" *ngIf="data.showDetail">
6346
+ <a class="detail-link" (click)="data.onDetailClick()">Chi tiết</a>
6347
+ </div>
6348
+ </div>
6349
+ </div>
6350
+
6351
+ <div class="progress-bar-container">
6352
+ <div
6353
+ class="progress-bar"
6354
+ [style.background-color]="data.color"
6355
+ [style.animation-duration.ms]="data.duration"
6356
+ ></div>
6357
+ </div>
6358
+ </div>
6359
+ </ng-template>
6360
+ `, styles: ["@charset \"UTF-8\";::ng-deep .ant-notification-notice.notification-with-progress{padding:0!important;border-radius:8px;overflow:hidden;box-shadow:0 6px 16px #0000004d,0 3px 6px -4px #0000004d,0 9px 28px 8px #0000001a!important}::ng-deep .notification-with-progress .ant-notification-notice-content{padding:0!important}::ng-deep .notification-with-progress .ant-notification-notice-close{top:8px!important;right:8px!important}::ng-deep .custom-notification-wrapper{position:relative;width:100%;overflow:hidden;padding:0}::ng-deep .notification-content{display:flex;align-items:flex-start;gap:12px;margin-bottom:4px;padding:12px 12px 12px 16px;min-height:50px;word-break:break-word}::ng-deep .notification-content .noti-text{width:100%}::ng-deep .notification-content .noti-icon{font-size:24px;margin-top:2px}::ng-deep .notification-content .noti-title{font-weight:500;font-size:16px;color:#000000d9;margin-bottom:4px;width:94%}::ng-deep .notification-content .noti-desc{font-size:14px;color:#000000a6;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}::ng-deep .notification-content .noti-action{margin-top:8px;text-align:right}::ng-deep .notification-content .noti-action .detail-link{color:#1890ff;font-size:14px;font-weight:500;cursor:pointer;text-decoration:none;transition:color .3s}::ng-deep .notification-content .noti-action .detail-link:hover{color:#40a9ff;text-decoration:underline}::ng-deep .progress-bar-container{position:absolute;bottom:0;left:0;width:100%;height:4px;background-color:#f0f0f0}::ng-deep .progress-bar{height:100%;width:100%;animation-name:shrinkProgress;animation-timing-function:linear;animation-fill-mode:forwards}::ng-deep .ant-notification-notice.notification-with-progress:hover .progress-bar{animation-play-state:paused!important}@keyframes shrinkProgress{0%{width:100%}to{width:0%}}\n"] }]
6361
+ }], propDecorators: { notiTemplate: [{
6362
+ type: ViewChild,
6363
+ args: ['globalNotiTemplate', { static: true }]
6364
+ }] } });
6365
+
6182
6366
  class NullIfEmptyDirective {
6183
6367
  el;
6184
6368
  ngControl;
@@ -6658,13 +6842,13 @@ class RouteMonitorService {
6658
6842
  }
6659
6843
  });
6660
6844
  }
6661
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: RouteMonitorService, deps: [{ token: i1$5.Router }, { token: AuthService }, { token: NotiService }], target: i0.ɵɵFactoryTarget.Injectable });
6845
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: RouteMonitorService, deps: [{ token: i1$6.Router }, { token: AuthService }, { token: NotiService }], target: i0.ɵɵFactoryTarget.Injectable });
6662
6846
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: RouteMonitorService, providedIn: 'root' });
6663
6847
  }
6664
6848
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: RouteMonitorService, decorators: [{
6665
6849
  type: Injectable,
6666
6850
  args: [{ providedIn: 'root' }]
6667
- }], ctorParameters: () => [{ type: i1$5.Router }, { type: AuthService }, { type: NotiService }] });
6851
+ }], ctorParameters: () => [{ type: i1$6.Router }, { type: AuthService }, { type: NotiService }] });
6668
6852
 
6669
6853
  class ThemeService {
6670
6854
  setHighContrast(enabled) {
@@ -6925,7 +7109,7 @@ class LayoutUser extends BaseComponent {
6925
7109
  this.sessionManager.logout();
6926
7110
  }
6927
7111
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: LayoutUser, deps: null, target: i0.ɵɵFactoryTarget.Component });
6928
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: LayoutUser, isStandalone: true, selector: "layout-user", usesInheritance: true, ngImport: i0, template: "<nz-badge [nzSize]=\"'small'\" [nzCount]=\"0\">\n <button nz-button nzType=\"text\" nzSize=\"small\">\n <nz-icon nzType=\"bell\" nzTheme=\"outline\" style=\"color: #ffffff\" />\n </button>\n</nz-badge>\n\n<button\n *ngIf=\"!isXSmall && TokenStorage.getOrgName()\"\n [@fadeInOut]\n nz-button\n nzType=\"text\"\n nz-dropdown\n [nzDropdownMenu]=\"isOneUserMultiOrgs ? menuOrg : null\"\n [nzTrigger]=\"'click'\"\n style=\"height: 50px; color: #ffffff\"\n>\n <nz-icon nzType=\"cluster\" nzTheme=\"outline\" />\n {{ TokenStorage.getOrgName() }}\n</button>\n\n<nz-dropdown-menu #menuOrg=\"nzDropdownMenu\">\n <ul nz-menu>\n @for (org of lstOrg; track $index) {\n <li *ngIf=\"$index > 0\" nz-menu-divider></li>\n <li nz-menu-item (click)=\"changeOrg(org)\">\n <nz-icon nzType=\"swap\" nzTheme=\"outline\" />&nbsp;&nbsp; {{ org.Name }}\n </li>\n }\n </ul>\n</nz-dropdown-menu>\n\n<button\n nz-button\n nzType=\"text\"\n nz-dropdown\n [nzDropdownMenu]=\"menuUser\"\n [nzTrigger]=\"'click'\"\n style=\"height: 50px; color: #ffffff\"\n>\n <nz-icon nzType=\"user\" nzTheme=\"outline\" />\n {{ TokenStorage.getUserFullname() }}\n</button>\n\n<nz-dropdown-menu #menuUser=\"nzDropdownMenu\">\n <ul nz-menu>\n <li *ngIf=\"!(!isXSmall && TokenStorage.getOrgName())\" nz-menu-item>\n <nz-icon nzType=\"cluster\" nzTheme=\"outline\" />&nbsp;&nbsp; {{ TokenStorage.getOrgName() }}\n </li>\n <li *ngIf=\"!(!isXSmall && TokenStorage.getOrgName())\" nz-menu-divider></li>\n <li nz-menu-item (click)=\"gotoSetting()\">\n <nz-icon nzType=\"setting\" nzTheme=\"outline\" />&nbsp;&nbsp; {{ TranslateKey.SETTING | translate }}\n </li>\n <li nz-menu-divider></li>\n <li nz-menu-item (click)=\"logout()\">\n <nz-icon nzType=\"logout\" nzTheme=\"outline\" />&nbsp;&nbsp; {{ TranslateKey.LOGOUT | translate }}\n </li>\n </ul>\n</nz-dropdown-menu>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: NzLayoutModule }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$2.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "ngmodule", type: NzDropDownModule }, { kind: "directive", type: i4$3.NzMenuDirective, selector: "[nz-menu]", inputs: ["nzInlineIndent", "nzTheme", "nzMode", "nzInlineCollapsed", "nzSelectable"], outputs: ["nzClick"], exportAs: ["nzMenu"] }, { kind: "component", type: i4$3.NzMenuItemComponent, selector: "[nz-menu-item]", inputs: ["nzPaddingLeft", "nzDisabled", "nzSelected", "nzDanger", "nzMatchRouterExact", "nzMatchRouter"], exportAs: ["nzMenuItem"] }, { kind: "directive", type: i4$3.NzMenuDividerDirective, selector: "[nz-menu-divider]", exportAs: ["nzMenuDivider"] }, { kind: "directive", type: i5$3.NzDropDownDirective, selector: "[nz-dropdown]", inputs: ["nzDropdownMenu", "nzTrigger", "nzMatchWidthElement", "nzBackdrop", "nzClickHide", "nzDisabled", "nzVisible", "nzOverlayClassName", "nzOverlayStyle", "nzPlacement"], outputs: ["nzVisibleChange"], exportAs: ["nzDropdown"] }, { kind: "component", type: i5$3.NzDropdownMenuComponent, selector: "nz-dropdown-menu", exportAs: ["nzDropdownMenu"] }, { kind: "directive", type: i5$3.NzDropdownButtonDirective, selector: "[nz-button][nz-dropdown]" }, { kind: "ngmodule", type: NzGridModule }, { kind: "ngmodule", type: NzFlexModule }, { kind: "ngmodule", type: NzButtonModule }, { kind: "component", type: i8.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { kind: "directive", type: i4$1.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], nz-icon, [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "ngmodule", type: NzTreeModule }, { kind: "ngmodule", type: NzBackTopModule }, { kind: "ngmodule", type: NzDrawerModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: NzInputModule }, { kind: "ngmodule", type: NzSegmentedModule }, { kind: "ngmodule", type: NzBadgeModule }, { kind: "component", type: i8$1.NzBadgeComponent, selector: "nz-badge", inputs: ["nzShowZero", "nzShowDot", "nzStandalone", "nzDot", "nzOverflowCount", "nzColor", "nzStyle", "nzText", "nzTitle", "nzStatus", "nzCount", "nzOffset", "nzSize"], exportAs: ["nzBadge"] }], animations: [fadeInOut] });
7112
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: LayoutUser, isStandalone: true, selector: "layout-user", usesInheritance: true, ngImport: i0, template: "<nz-badge [nzSize]=\"'small'\" [nzCount]=\"0\">\n <button nz-button nzType=\"text\" nzSize=\"small\">\n <nz-icon nzType=\"bell\" nzTheme=\"outline\" style=\"color: #ffffff\" />\n </button>\n</nz-badge>\n\n<button\n *ngIf=\"!isXSmall && TokenStorage.getOrgName()\"\n [@fadeInOut]\n nz-button\n nzType=\"text\"\n nz-dropdown\n [nzDropdownMenu]=\"isOneUserMultiOrgs ? menuOrg : null\"\n [nzTrigger]=\"'click'\"\n style=\"height: 50px; color: #ffffff\"\n>\n <nz-icon nzType=\"cluster\" nzTheme=\"outline\" />\n {{ TokenStorage.getOrgName() }}\n</button>\n\n<nz-dropdown-menu #menuOrg=\"nzDropdownMenu\">\n <ul nz-menu>\n @for (org of lstOrg; track $index) {\n <li *ngIf=\"$index > 0\" nz-menu-divider></li>\n <li nz-menu-item (click)=\"changeOrg(org)\">\n <nz-icon nzType=\"swap\" nzTheme=\"outline\" />&nbsp;&nbsp; {{ org.Name }}\n </li>\n }\n </ul>\n</nz-dropdown-menu>\n\n<button\n nz-button\n nzType=\"text\"\n nz-dropdown\n [nzDropdownMenu]=\"menuUser\"\n [nzTrigger]=\"'click'\"\n style=\"height: 50px; color: #ffffff\"\n>\n <nz-icon nzType=\"user\" nzTheme=\"outline\" />\n {{ TokenStorage.getUserFullname() }}\n</button>\n\n<nz-dropdown-menu #menuUser=\"nzDropdownMenu\">\n <ul nz-menu>\n <li *ngIf=\"!(!isXSmall && TokenStorage.getOrgName())\" nz-menu-item>\n <nz-icon nzType=\"cluster\" nzTheme=\"outline\" />&nbsp;&nbsp; {{ TokenStorage.getOrgName() }}\n </li>\n <li *ngIf=\"!(!isXSmall && TokenStorage.getOrgName())\" nz-menu-divider></li>\n <li nz-menu-item (click)=\"gotoSetting()\">\n <nz-icon nzType=\"setting\" nzTheme=\"outline\" />&nbsp;&nbsp; {{ TranslateKey.SETTING | translate }}\n </li>\n <li nz-menu-divider></li>\n <li nz-menu-item (click)=\"logout()\">\n <nz-icon nzType=\"logout\" nzTheme=\"outline\" />&nbsp;&nbsp; {{ TranslateKey.LOGOUT | translate }}\n </li>\n </ul>\n</nz-dropdown-menu>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: NzLayoutModule }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$3.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "ngmodule", type: NzDropDownModule }, { kind: "directive", type: i4$3.NzMenuDirective, selector: "[nz-menu]", inputs: ["nzInlineIndent", "nzTheme", "nzMode", "nzInlineCollapsed", "nzSelectable"], outputs: ["nzClick"], exportAs: ["nzMenu"] }, { kind: "component", type: i4$3.NzMenuItemComponent, selector: "[nz-menu-item]", inputs: ["nzPaddingLeft", "nzDisabled", "nzSelected", "nzDanger", "nzMatchRouterExact", "nzMatchRouter"], exportAs: ["nzMenuItem"] }, { kind: "directive", type: i4$3.NzMenuDividerDirective, selector: "[nz-menu-divider]", exportAs: ["nzMenuDivider"] }, { kind: "directive", type: i5$3.NzDropDownDirective, selector: "[nz-dropdown]", inputs: ["nzDropdownMenu", "nzTrigger", "nzMatchWidthElement", "nzBackdrop", "nzClickHide", "nzDisabled", "nzVisible", "nzOverlayClassName", "nzOverlayStyle", "nzPlacement"], outputs: ["nzVisibleChange"], exportAs: ["nzDropdown"] }, { kind: "component", type: i5$3.NzDropdownMenuComponent, selector: "nz-dropdown-menu", exportAs: ["nzDropdownMenu"] }, { kind: "directive", type: i5$3.NzDropdownButtonDirective, selector: "[nz-button][nz-dropdown]" }, { kind: "ngmodule", type: NzGridModule }, { kind: "ngmodule", type: NzFlexModule }, { kind: "ngmodule", type: NzButtonModule }, { kind: "component", type: i8.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { kind: "directive", type: i4$1.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], nz-icon, [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "ngmodule", type: NzTreeModule }, { kind: "ngmodule", type: NzBackTopModule }, { kind: "ngmodule", type: NzDrawerModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: NzInputModule }, { kind: "ngmodule", type: NzSegmentedModule }, { kind: "ngmodule", type: NzBadgeModule }, { kind: "component", type: i8$1.NzBadgeComponent, selector: "nz-badge", inputs: ["nzShowZero", "nzShowDot", "nzStandalone", "nzDot", "nzOverflowCount", "nzColor", "nzStyle", "nzText", "nzTitle", "nzStatus", "nzCount", "nzOffset", "nzSize"], exportAs: ["nzBadge"] }], animations: [fadeInOut] });
6929
7113
  }
6930
7114
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: LayoutUser, decorators: [{
6931
7115
  type: Component,
@@ -7425,7 +7609,7 @@ class LayoutComponent extends BaseComponent {
7425
7609
  return r;
7426
7610
  }
7427
7611
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: LayoutComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
7428
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: LayoutComponent, isStandalone: true, selector: "layout", viewQueries: [{ propertyName: "divuser", first: true, predicate: ["divuser"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<app-global-spinner></app-global-spinner>\n<nz-layout class=\"app-layout\">\n <nz-header class=\"app-header\">\n <div nz-row nzAlign=\"middle\" class=\"header-content\">\n @if (isCollapsed) {\n <div @fadeInOut>\n &nbsp;&nbsp;&nbsp;<button nz-button (click)=\"visibleMenuDrawer = true\">\n <nz-icon nzType=\"menu\" nzTheme=\"outline\" />\n </button>\n </div>\n }\n\n <div class=\"header-logo\" [style.width]=\"!isCollapsed ? siderWidthStorage : '100px'\">\n <div nz-flex nzJustify=\"center\" nzGap=\"small\">\n <img\n *ngIf=\"logoUrl$ | async as url\"\n [src]=\"url\"\n height=\"40px\"\n style=\"position: relative; top: 5px\"\n hideIfError\n />\n @if (!isCollapsed) {\n @if (SYSTEM_NAME) {\n <h2 style=\"color: whitesmoke\">{{ SYSTEM_NAME }}</h2>\n } @else {\n -- o0o --\n }\n }\n </div>\n </div>\n @if (!HEADER_MENU_IN_USE) {\n <box [width]=\"8\"></box>\n <app-breadcrumb [@fadeInOut] nz-col nzFlex=\"auto\" class=\"breadcrumb-header\"></app-breadcrumb>\n }\n <div *ngIf=\"HEADER_MENU_IN_USE\" [ngStyle]=\"{ width: getHeaderMenuWidth() }\" class=\"header-menu\">\n <div style=\"overflow: auto\">\n <nz-segmented\n [nzOptions]=\"lstHeaderMenuDisplay\"\n [(ngModel)]=\"selectedHeaderMenuDisplay\"\n (nzValueChange)=\"handleValueChangeHeaderMenu($event)\"\n ></nz-segmented>\n </div>\n </div>\n <div #divuser>\n <layout-user></layout-user>\n </div>\n </div>\n </nz-header>\n <nz-layout class=\"body-layout\">\n <nz-sider\n class=\"menu-sidebar\"\n nzCollapsible\n [nzWidth]=\"siderWidth\"\n [nzCollapsedWidth]=\"0\"\n [nzBreakpoint]=\"'md'\"\n [(nzCollapsed)]=\"isCollapsed\"\n [nzTrigger]=\"null\"\n [nzTheme]=\"'dark'\"\n >\n <div class=\"menu-wapper\">\n @if (MENU_TYPE == 1) {\n <div class=\"nz-tree-wapper\">\n <nz-tree\n [nzData]=\"nodes\"\n [nzSearchValue]=\"searchValue\"\n [nzShowLine]=\"true\"\n [nzSelectedKeys]=\"selectedKeys\"\n [nzExpandedKeys]=\"expandedKeys\"\n (nzClick)=\"nzEvent($event)\"\n ></nz-tree>\n </div>\n } @else {\n <div class=\"nz-tree-wapper\">\n <ul nz-menu nzTheme=\"light\" nzMode=\"inline\" [nzInlineCollapsed]=\"isCollapsed\">\n @for (menuLv1 of lstMenu; track menuLv1.App_Menu_Id) {\n @if (menuLv1.SubMenu) {\n <ul nz-submenu [nzOpen]=\"menuLv1.Open\" [nzTitle]=\"menuLv1.Name\" [nzIcon]=\"menuLv1.Icon\">\n @for (menuLv2 of menuLv1.SubMenu; track menuLv2.App_Menu_Id) {\n @if (menuLv2.SubMenu) {\n <ul nz-submenu [nzOpen]=\"menuLv2.Open\" [nzTitle]=\"menuLv2.Name\" [nzIcon]=\"menuLv2.Icon\">\n @for (menuLv3 of menuLv2.SubMenu; track menuLv3.App_Menu_Id) {\n @if (menuLv3.SubMenu) {\n <ul nz-submenu [nzOpen]=\"menuLv3.Open\" [nzTitle]=\"menuLv3.Name\" [nzIcon]=\"menuLv3.Icon\">\n @for (menuLv4 of menuLv3.SubMenu; track menuLv4.App_Menu_Id) {\n @if (menuLv4.SubMenu) {\n <ul\n nz-submenu\n [nzOpen]=\"menuLv4.Open\"\n [nzTitle]=\"menuLv4.Name\"\n [nzIcon]=\"menuLv4.Icon\"\n >\n @for (menuLv5 of menuLv4.SubMenu; track menuLv5.App_Menu_Id) {}\n </ul>\n } @else {\n <li nz-menu-item nzMatchRouter>\n <a\n [routerLink]=\"menuLv4.Url\"\n [innerHTML]=\"menuLv4.Name | highlight: searchValue\"\n ></a>\n </li>\n }\n }\n </ul>\n } @else {\n <li nz-menu-item nzMatchRouter>\n <a [routerLink]=\"menuLv3.Url\" [innerHTML]=\"menuLv3.Name | highlight: searchValue\"></a>\n </li>\n }\n }\n </ul>\n } @else {\n <li nz-menu-item nzMatchRouter>\n <a [routerLink]=\"menuLv2.Url\" [innerHTML]=\"menuLv2.Name | highlight: searchValue\"></a>\n </li>\n }\n }\n </ul>\n } @else {\n <li nz-menu-item nzMatchRouter>\n <a [routerLink]=\"menuLv1.Url\" [innerHTML]=\"menuLv1.Name | highlight: searchValue\"></a>\n </li>\n }\n }\n </ul>\n </div>\n }\n\n <nz-input-group [nzSuffix]=\"suffixTemplate\">\n <input nz-input placeholder=\"T\u00ECm menu\" [(ngModel)]=\"searchValue\" />\n </nz-input-group>\n <ng-template #suffixTemplate>\n <span class=\"suffix-wrap\">\n <icon-delete\n class=\"suffix-icon delete\"\n [class.show]=\"searchValue\"\n [size]=\"14\"\n (click)=\"searchValue = ''\"\n ></icon-delete>\n\n <icon-search class=\"suffix-icon search\" [class.show]=\"!searchValue\"></icon-search>\n </span>\n </ng-template>\n </div>\n <div class=\"sider-footer\" style=\"height: 22px\">\n <div nz-col nzFlex=\"auto\" class=\"content-footer text-italic\" style=\"font-size: 0.8em; color: lightgray\">\n {{ SYSTEM_SUB_NAME_LEFT || \"-- o0o --\" }}\n\n <span style=\"float: right\" (click)=\"triggerCollapse()\">\n <nz-icon class=\"trigger\" [nzType]=\"isCollapsed ? 'menu-unfold' : 'menu-fold'\" />\n </span>\n </div>\n </div>\n </nz-sider>\n <nz-layout class=\"main-layout\">\n <nz-content class=\"content\">\n <div class=\"inner-content\">\n @if (HEADER_MENU_IN_USE) {\n <app-breadcrumb [@fadeInOut] nz-col nzFlex=\"auto\"></app-breadcrumb>\n <box [height]=\"8\"></box>\n }\n <router-outlet></router-outlet>\n </div>\n <div nz-row class=\"sider-footer\" style=\"height: 22px\">\n <div nz-col nzFlex=\"auto\" class=\"content-footer text-italic\" style=\"font-size: 0.8em; color: lightgray\">\n {{ SYSTEM_SUB_NAME_RIGHT || \"-- o0o --\" }}\n </div>\n </div>\n <!-- <nz-back-top [nzTarget]=\"'.content'\" [nzVisibilityHeight]=\"500\"></nz-back-top> -->\n </nz-content>\n </nz-layout>\n </nz-layout>\n</nz-layout>\n\n<nz-drawer\n [nzWrapClassName]=\"'same-theme-color menu-drawer'\"\n [nzWidth]=\"350\"\n [nzClosable]=\"false\"\n [(nzVisible)]=\"visibleMenuDrawer\"\n [nzMaskClosable]=\"true\"\n nzPlacement=\"left\"\n nzTitle=\"\"\n (nzOnClose)=\"visibleMenuDrawer = false\"\n>\n <ng-container *nzDrawerContent>\n <div class=\"menu-wapper\">\n @if (MENU_TYPE == 1) {\n <div class=\"nz-tree-wapper in-drawer\">\n <nz-tree\n [nzData]=\"nodes\"\n [nzSearchValue]=\"searchValue\"\n [nzShowLine]=\"true\"\n [nzSelectedKeys]=\"selectedKeys\"\n [nzExpandedKeys]=\"expandedKeys\"\n (nzClick)=\"nzEvent($event)\"\n ></nz-tree>\n </div>\n } @else {\n <div class=\"nz-tree-wapper in-drawer\">\n <ul nz-menu nzTheme=\"light\" nzMode=\"inline\">\n @for (menuLv1 of lstMenu; track menuLv1.App_Menu_Id) {\n @if (menuLv1.SubMenu) {\n <ul nz-submenu [nzOpen]=\"menuLv1.Open\" [nzTitle]=\"menuLv1.Name\" [nzIcon]=\"menuLv1.Icon\">\n @for (menuLv2 of menuLv1.SubMenu; track menuLv2.App_Menu_Id) {\n @if (menuLv2.SubMenu) {\n <ul nz-submenu [nzOpen]=\"menuLv2.Open\" [nzTitle]=\"menuLv2.Name\" [nzIcon]=\"menuLv2.Icon\">\n @for (menuLv3 of menuLv2.SubMenu; track menuLv3.App_Menu_Id) {\n @if (menuLv3.SubMenu) {\n <ul nz-submenu [nzOpen]=\"menuLv3.Open\" [nzTitle]=\"menuLv3.Name\" [nzIcon]=\"menuLv3.Icon\">\n @for (menuLv4 of menuLv3.SubMenu; track menuLv4.App_Menu_Id) {\n @if (menuLv4.SubMenu) {\n <ul\n nz-submenu\n [nzOpen]=\"menuLv4.Open\"\n [nzTitle]=\"menuLv4.Name\"\n [nzIcon]=\"menuLv4.Icon\"\n >\n @for (menuLv5 of menuLv4.SubMenu; track menuLv5.App_Menu_Id) {}\n </ul>\n } @else {\n <li nz-menu-item nzMatchRouter>\n <a\n [routerLink]=\"menuLv4.Url\"\n [innerHTML]=\"menuLv4.Name | highlight: searchValue\"\n ></a>\n </li>\n }\n }\n </ul>\n } @else {\n <li nz-menu-item nzMatchRouter>\n <a [routerLink]=\"menuLv3.Url\" [innerHTML]=\"menuLv3.Name | highlight: searchValue\"></a>\n </li>\n }\n }\n </ul>\n } @else {\n <li nz-menu-item nzMatchRouter>\n <a [routerLink]=\"menuLv2.Url\" [innerHTML]=\"menuLv2.Name | highlight: searchValue\"></a>\n </li>\n }\n }\n </ul>\n } @else {\n <li nz-menu-item nzMatchRouter>\n <a [routerLink]=\"menuLv1.Url\" [innerHTML]=\"menuLv1.Name | highlight: searchValue\"></a>\n </li>\n }\n }\n </ul>\n </div>\n }\n\n <nz-input-group [nzSuffix]=\"suffixTemplate\" [nzAddOnAfter]=\"afterTemplate\">\n <input nz-input placeholder=\"T\u00ECm menu\" [(ngModel)]=\"searchValue\" />\n </nz-input-group>\n <ng-template #suffixTemplate>\n <span class=\"suffix-wrap\">\n <icon-delete\n class=\"suffix-icon delete\"\n [class.show]=\"searchValue\"\n [size]=\"14\"\n (click)=\"searchValue = ''\"\n ></icon-delete>\n\n <icon-search class=\"suffix-icon search\" [class.show]=\"!searchValue\"></icon-search>\n </span>\n </ng-template>\n <ng-template #afterTemplate>\n <button nz-button (click)=\"triggerCollapse(); this.visibleMenuDrawer = false\">\n <nz-icon *ngIf=\"isCollapsed\" [nzType]=\"isCollapsed ? 'menu-unfold' : 'menu-fold'\" />\n </button>\n </ng-template>\n </div>\n </ng-container>\n</nz-drawer>\n", styles: ["@charset \"UTF-8\";:host{display:flex;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}html,body,app-root{height:100%;margin:0}.app-layout{display:flex;flex-direction:column;height:100vh}.app-header{position:fixed;top:0;left:0;width:100%;height:50px;background:var(--theme-color);color:var(--theme-text-color);box-shadow:0 1px 4px #00152914;z-index:1000;display:flex;align-items:center;padding:0}.header-content{width:100%}.header-logo{height:50px;text-align:center;color:var(--theme-text-color);transition:width .3s}.body-layout{display:flex;flex:1;margin-top:50px;height:calc(100vh - 50px);overflow:hidden}.menu-sidebar{width:256px;background:#f0f2f5;overflow-y:auto;min-height:calc(100vh - 50px)}.menu-wapper{min-height:calc(100% - 22px)}.main-layout{display:flex;flex-direction:column;flex:1;overflow:hidden}.content{flex:1;background:#f1f2f5;overflow-x:hidden;overflow-y:auto;height:100%}.inner-content{background:#f1f2f5;min-height:calc(100% - 22px);padding:8px}.content-footer{background:var(--theme-color);color:var(--theme-text-color);align-items:center;text-align:center}.sider-footer{background:var(--theme-color);color:var(--theme-text-color);align-items:center;text-align:right}.trigger{margin-right:8px}.menu-sidebar .ant-menu-inline .ant-menu-item{margin-top:0;margin-bottom:0}::ng-deep .menu-wapper .anticon-file{display:none}:host ::ng-deep .ant-back-top{right:30px;bottom:40px}::ng-deep .same-theme-color .ant-drawer-content{background:var(--theme-menu-color)}.nz-tree-wapper{height:calc(100vh - 104px);overflow-y:auto}.nz-tree-wapper.in-drawer{height:calc(100vh - 32px);overflow-y:auto}::ng-deep .menu-drawer .ant-drawer-body{padding:0}::ng-deep .breadcrumb-header .ant-breadcrumb-link{color:var(--theme-text-color);cursor:pointer}::ng-deep .breadcrumb-header .ant-breadcrumb-separator{color:var(--theme-text-color)}::ng-deep .header-menu .ant-segmented-item:not(.ant-segmented-item-selected){color:var(--theme-text-color)}::ng-deep .header-menu .ant-segmented-item{border-left:1px solid}::ng-deep .header-menu .ant-segmented-item:last-child{border-right:1px solid}.suffix-wrap{position:relative;width:18px;height:18px;display:inline-flex;align-items:center;justify-content:center}.suffix-icon{position:absolute;display:flex;align-items:center;justify-content:center;opacity:0;pointer-events:none;transition:opacity .16s ease,transform .18s cubic-bezier(.4,0,.2,1);transform:scale(.6) translate(4px)}.suffix-icon.show{opacity:1;pointer-events:auto;transform:scale(1) translate(0)}.search{color:#00000073}.delete{color:#bfbfbf}.delete.show{animation:popIn .18s ease}@keyframes popIn{0%{transform:scale(.5)}70%{transform:scale(1.15)}to{transform:scale(1)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "ngmodule", type: NzLayoutModule }, { kind: "component", type: i2$4.NzLayoutComponent, selector: "nz-layout", exportAs: ["nzLayout"] }, { kind: "component", type: i2$4.NzHeaderComponent, selector: "nz-header", exportAs: ["nzHeader"] }, { kind: "component", type: i2$4.NzContentComponent, selector: "nz-content", exportAs: ["nzContent"] }, { kind: "component", type: i2$4.NzSiderComponent, selector: "nz-sider", inputs: ["nzWidth", "nzTheme", "nzCollapsedWidth", "nzBreakpoint", "nzZeroTrigger", "nzTrigger", "nzReverseArrow", "nzCollapsible", "nzCollapsed"], outputs: ["nzCollapsedChange"], exportAs: ["nzSider"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$2.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "ngmodule", type: NzDropDownModule }, { kind: "directive", type: i4$3.NzMenuDirective, selector: "[nz-menu]", inputs: ["nzInlineIndent", "nzTheme", "nzMode", "nzInlineCollapsed", "nzSelectable"], outputs: ["nzClick"], exportAs: ["nzMenu"] }, { kind: "component", type: i4$3.NzMenuItemComponent, selector: "[nz-menu-item]", inputs: ["nzPaddingLeft", "nzDisabled", "nzSelected", "nzDanger", "nzMatchRouterExact", "nzMatchRouter"], exportAs: ["nzMenuItem"] }, { kind: "component", type: i4$3.NzSubMenuComponent, selector: "[nz-submenu]", inputs: ["nzMenuClassName", "nzPaddingLeft", "nzTitle", "nzIcon", "nzTriggerSubMenuAction", "nzOpen", "nzDisabled", "nzPlacement"], outputs: ["nzOpenChange"], exportAs: ["nzSubmenu"] }, { kind: "ngmodule", type: NzGridModule }, { kind: "directive", type: i4.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i4.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "ngmodule", type: NzFlexModule }, { kind: "directive", type: i14.NzFlexDirective, selector: "[nz-flex],nz-flex", inputs: ["nzVertical", "nzJustify", "nzAlign", "nzGap", "nzWrap", "nzFlex"], exportAs: ["nzFlex"] }, { kind: "ngmodule", type: NzButtonModule }, { kind: "component", type: i8.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { kind: "directive", type: i4$1.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], nz-icon, [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i10.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }, { kind: "component", type: Breadcrumb, selector: "app-breadcrumb" }, { kind: "component", type: GlobalSpinnerComponent, selector: "app-global-spinner" }, { kind: "ngmodule", type: NzTreeModule }, { kind: "component", type: i10$1.NzTreeComponent, selector: "nz-tree", inputs: ["nzShowIcon", "nzHideUnMatched", "nzBlockNode", "nzExpandAll", "nzSelectMode", "nzCheckStrictly", "nzShowExpand", "nzShowLine", "nzCheckable", "nzAsyncData", "nzDraggable", "nzMultiple", "nzExpandedIcon", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualHeight", "nzTreeTemplate", "nzBeforeDrop", "nzData", "nzExpandedKeys", "nzSelectedKeys", "nzCheckedKeys", "nzSearchValue", "nzSearchFunc"], outputs: ["nzExpandedKeysChange", "nzSelectedKeysChange", "nzCheckedKeysChange", "nzSearchValueChange", "nzClick", "nzDblClick", "nzContextMenu", "nzCheckboxChange", "nzExpandChange", "nzOnDragStart", "nzOnDragEnter", "nzOnDragOver", "nzOnDragLeave", "nzOnDrop", "nzOnDragEnd"], exportAs: ["nzTree"] }, { kind: "ngmodule", type: NzBackTopModule }, { kind: "ngmodule", type: NzDrawerModule }, { kind: "component", type: i4$2.NzDrawerComponent, selector: "nz-drawer", inputs: ["nzContent", "nzCloseIcon", "nzClosable", "nzMaskClosable", "nzMask", "nzCloseOnNavigation", "nzNoAnimation", "nzKeyboard", "nzTitle", "nzExtra", "nzFooter", "nzPlacement", "nzSize", "nzMaskStyle", "nzBodyStyle", "nzWrapClassName", "nzWidth", "nzHeight", "nzZIndex", "nzOffsetX", "nzOffsetY", "nzVisible"], outputs: ["nzOnViewInit", "nzOnClose", "nzVisibleChange"], exportAs: ["nzDrawer"] }, { kind: "directive", type: i4$2.NzDrawerContentDirective, selector: "[nzDrawerContent]", exportAs: ["nzDrawerContent"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: NzInputModule }, { kind: "directive", type: i6$1.NzInputDirective, selector: "input[nz-input],textarea[nz-input]", inputs: ["nzBorderless", "nzSize", "nzStepperless", "nzStatus", "disabled"], exportAs: ["nzInput"] }, { kind: "component", type: i6$1.NzInputGroupComponent, selector: "nz-input-group", inputs: ["nzAddOnBeforeIcon", "nzAddOnAfterIcon", "nzPrefixIcon", "nzSuffixIcon", "nzAddOnBefore", "nzAddOnAfter", "nzPrefix", "nzStatus", "nzSuffix", "nzSize", "nzSearch", "nzCompact"], exportAs: ["nzInputGroup"] }, { kind: "directive", type: i6$1.NzInputGroupWhitSuffixOrPrefixDirective, selector: "nz-input-group[nzSuffix], nz-input-group[nzPrefix]" }, { kind: "component", type: Box, selector: "box", inputs: ["display", "width", "height"] }, { kind: "ngmodule", type: NzSegmentedModule }, { kind: "component", type: i14$1.NzSegmentedComponent, selector: "nz-segmented", inputs: ["nzBlock", "nzDisabled", "nzOptions", "nzSize"], outputs: ["nzValueChange"], exportAs: ["nzSegmented"] }, { kind: "component", type: LayoutUser, selector: "layout-user" }, { kind: "component", type: IconDelete, selector: "icon-delete", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: IconSearch, selector: "icon-search", inputs: ["size"], outputs: ["click"] }, { kind: "pipe", type: HighlightPipe, name: "highlight" }, { kind: "directive", type: HideIfErrorDirective, selector: "img[hideIfError]" }], animations: [fadeInOut] });
7612
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: LayoutComponent, isStandalone: true, selector: "layout", viewQueries: [{ propertyName: "divuser", first: true, predicate: ["divuser"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<custom-noti></custom-noti>\n<app-global-spinner></app-global-spinner>\n<nz-layout class=\"app-layout\">\n <nz-header class=\"app-header\">\n <div nz-row nzAlign=\"middle\" class=\"header-content\">\n @if (isCollapsed) {\n <div @fadeInOut>\n &nbsp;&nbsp;&nbsp;<button nz-button (click)=\"visibleMenuDrawer = true\">\n <nz-icon nzType=\"menu\" nzTheme=\"outline\" />\n </button>\n </div>\n }\n\n <div class=\"header-logo\" [style.width]=\"!isCollapsed ? siderWidthStorage : '100px'\">\n <div nz-flex nzJustify=\"center\" nzGap=\"small\">\n <img\n *ngIf=\"logoUrl$ | async as url\"\n [src]=\"url\"\n height=\"40px\"\n style=\"position: relative; top: 5px\"\n hideIfError\n />\n @if (!isCollapsed) {\n @if (SYSTEM_NAME) {\n <h2 style=\"color: whitesmoke\">{{ SYSTEM_NAME }}</h2>\n } @else {\n -- o0o --\n }\n }\n </div>\n </div>\n @if (!HEADER_MENU_IN_USE) {\n <box [width]=\"8\"></box>\n <app-breadcrumb [@fadeInOut] nz-col nzFlex=\"auto\" class=\"breadcrumb-header\"></app-breadcrumb>\n }\n <div *ngIf=\"HEADER_MENU_IN_USE\" [ngStyle]=\"{ width: getHeaderMenuWidth() }\" class=\"header-menu\">\n <div style=\"overflow: auto\">\n <nz-segmented\n [nzOptions]=\"lstHeaderMenuDisplay\"\n [(ngModel)]=\"selectedHeaderMenuDisplay\"\n (nzValueChange)=\"handleValueChangeHeaderMenu($event)\"\n ></nz-segmented>\n </div>\n </div>\n <div #divuser>\n <layout-user></layout-user>\n </div>\n </div>\n </nz-header>\n <nz-layout class=\"body-layout\">\n <nz-sider\n class=\"menu-sidebar\"\n nzCollapsible\n [nzWidth]=\"siderWidth\"\n [nzCollapsedWidth]=\"0\"\n [nzBreakpoint]=\"'md'\"\n [(nzCollapsed)]=\"isCollapsed\"\n [nzTrigger]=\"null\"\n [nzTheme]=\"'dark'\"\n >\n <div class=\"menu-wapper\">\n @if (MENU_TYPE == 1) {\n <div class=\"nz-tree-wapper\">\n <nz-tree\n [nzData]=\"nodes\"\n [nzSearchValue]=\"searchValue\"\n [nzShowLine]=\"true\"\n [nzSelectedKeys]=\"selectedKeys\"\n [nzExpandedKeys]=\"expandedKeys\"\n (nzClick)=\"nzEvent($event)\"\n ></nz-tree>\n </div>\n } @else {\n <div class=\"nz-tree-wapper\">\n <ul nz-menu nzTheme=\"light\" nzMode=\"inline\" [nzInlineCollapsed]=\"isCollapsed\">\n @for (menuLv1 of lstMenu; track menuLv1.App_Menu_Id) {\n @if (menuLv1.SubMenu) {\n <ul nz-submenu [nzOpen]=\"menuLv1.Open\" [nzTitle]=\"menuLv1.Name\" [nzIcon]=\"menuLv1.Icon\">\n @for (menuLv2 of menuLv1.SubMenu; track menuLv2.App_Menu_Id) {\n @if (menuLv2.SubMenu) {\n <ul nz-submenu [nzOpen]=\"menuLv2.Open\" [nzTitle]=\"menuLv2.Name\" [nzIcon]=\"menuLv2.Icon\">\n @for (menuLv3 of menuLv2.SubMenu; track menuLv3.App_Menu_Id) {\n @if (menuLv3.SubMenu) {\n <ul nz-submenu [nzOpen]=\"menuLv3.Open\" [nzTitle]=\"menuLv3.Name\" [nzIcon]=\"menuLv3.Icon\">\n @for (menuLv4 of menuLv3.SubMenu; track menuLv4.App_Menu_Id) {\n @if (menuLv4.SubMenu) {\n <ul\n nz-submenu\n [nzOpen]=\"menuLv4.Open\"\n [nzTitle]=\"menuLv4.Name\"\n [nzIcon]=\"menuLv4.Icon\"\n >\n @for (menuLv5 of menuLv4.SubMenu; track menuLv5.App_Menu_Id) {}\n </ul>\n } @else {\n <li nz-menu-item nzMatchRouter>\n <a\n [routerLink]=\"menuLv4.Url\"\n [innerHTML]=\"menuLv4.Name | highlight: searchValue\"\n ></a>\n </li>\n }\n }\n </ul>\n } @else {\n <li nz-menu-item nzMatchRouter>\n <a [routerLink]=\"menuLv3.Url\" [innerHTML]=\"menuLv3.Name | highlight: searchValue\"></a>\n </li>\n }\n }\n </ul>\n } @else {\n <li nz-menu-item nzMatchRouter>\n <a [routerLink]=\"menuLv2.Url\" [innerHTML]=\"menuLv2.Name | highlight: searchValue\"></a>\n </li>\n }\n }\n </ul>\n } @else {\n <li nz-menu-item nzMatchRouter>\n <a [routerLink]=\"menuLv1.Url\" [innerHTML]=\"menuLv1.Name | highlight: searchValue\"></a>\n </li>\n }\n }\n </ul>\n </div>\n }\n\n <nz-input-group [nzSuffix]=\"suffixTemplate\">\n <input nz-input placeholder=\"T\u00ECm menu\" [(ngModel)]=\"searchValue\" />\n </nz-input-group>\n <ng-template #suffixTemplate>\n <span class=\"suffix-wrap\">\n <icon-delete\n class=\"suffix-icon delete\"\n [class.show]=\"searchValue\"\n [size]=\"14\"\n (click)=\"searchValue = ''\"\n ></icon-delete>\n\n <icon-search class=\"suffix-icon search\" [class.show]=\"!searchValue\"></icon-search>\n </span>\n </ng-template>\n </div>\n <div class=\"sider-footer\" style=\"height: 22px\">\n <div nz-col nzFlex=\"auto\" class=\"content-footer text-italic\" style=\"font-size: 0.8em; color: lightgray\">\n {{ SYSTEM_SUB_NAME_LEFT || \"-- o0o --\" }}\n\n <span style=\"float: right\" (click)=\"triggerCollapse()\">\n <nz-icon class=\"trigger\" [nzType]=\"isCollapsed ? 'menu-unfold' : 'menu-fold'\" />\n </span>\n </div>\n </div>\n </nz-sider>\n <nz-layout class=\"main-layout\">\n <nz-content class=\"content\">\n <div class=\"inner-content\">\n @if (HEADER_MENU_IN_USE) {\n <app-breadcrumb [@fadeInOut] nz-col nzFlex=\"auto\"></app-breadcrumb>\n <box [height]=\"8\"></box>\n }\n <router-outlet></router-outlet>\n </div>\n <div nz-row class=\"sider-footer\" style=\"height: 22px\">\n <div nz-col nzFlex=\"auto\" class=\"content-footer text-italic\" style=\"font-size: 0.8em; color: lightgray\">\n {{ SYSTEM_SUB_NAME_RIGHT || \"-- o0o --\" }}\n </div>\n </div>\n <!-- <nz-back-top [nzTarget]=\"'.content'\" [nzVisibilityHeight]=\"500\"></nz-back-top> -->\n </nz-content>\n </nz-layout>\n </nz-layout>\n</nz-layout>\n\n<nz-drawer\n [nzWrapClassName]=\"'same-theme-color menu-drawer'\"\n [nzWidth]=\"350\"\n [nzClosable]=\"false\"\n [(nzVisible)]=\"visibleMenuDrawer\"\n [nzMaskClosable]=\"true\"\n nzPlacement=\"left\"\n nzTitle=\"\"\n (nzOnClose)=\"visibleMenuDrawer = false\"\n>\n <ng-container *nzDrawerContent>\n <div class=\"menu-wapper\">\n @if (MENU_TYPE == 1) {\n <div class=\"nz-tree-wapper in-drawer\">\n <nz-tree\n [nzData]=\"nodes\"\n [nzSearchValue]=\"searchValue\"\n [nzShowLine]=\"true\"\n [nzSelectedKeys]=\"selectedKeys\"\n [nzExpandedKeys]=\"expandedKeys\"\n (nzClick)=\"nzEvent($event)\"\n ></nz-tree>\n </div>\n } @else {\n <div class=\"nz-tree-wapper in-drawer\">\n <ul nz-menu nzTheme=\"light\" nzMode=\"inline\">\n @for (menuLv1 of lstMenu; track menuLv1.App_Menu_Id) {\n @if (menuLv1.SubMenu) {\n <ul nz-submenu [nzOpen]=\"menuLv1.Open\" [nzTitle]=\"menuLv1.Name\" [nzIcon]=\"menuLv1.Icon\">\n @for (menuLv2 of menuLv1.SubMenu; track menuLv2.App_Menu_Id) {\n @if (menuLv2.SubMenu) {\n <ul nz-submenu [nzOpen]=\"menuLv2.Open\" [nzTitle]=\"menuLv2.Name\" [nzIcon]=\"menuLv2.Icon\">\n @for (menuLv3 of menuLv2.SubMenu; track menuLv3.App_Menu_Id) {\n @if (menuLv3.SubMenu) {\n <ul nz-submenu [nzOpen]=\"menuLv3.Open\" [nzTitle]=\"menuLv3.Name\" [nzIcon]=\"menuLv3.Icon\">\n @for (menuLv4 of menuLv3.SubMenu; track menuLv4.App_Menu_Id) {\n @if (menuLv4.SubMenu) {\n <ul\n nz-submenu\n [nzOpen]=\"menuLv4.Open\"\n [nzTitle]=\"menuLv4.Name\"\n [nzIcon]=\"menuLv4.Icon\"\n >\n @for (menuLv5 of menuLv4.SubMenu; track menuLv5.App_Menu_Id) {}\n </ul>\n } @else {\n <li nz-menu-item nzMatchRouter>\n <a\n [routerLink]=\"menuLv4.Url\"\n [innerHTML]=\"menuLv4.Name | highlight: searchValue\"\n ></a>\n </li>\n }\n }\n </ul>\n } @else {\n <li nz-menu-item nzMatchRouter>\n <a [routerLink]=\"menuLv3.Url\" [innerHTML]=\"menuLv3.Name | highlight: searchValue\"></a>\n </li>\n }\n }\n </ul>\n } @else {\n <li nz-menu-item nzMatchRouter>\n <a [routerLink]=\"menuLv2.Url\" [innerHTML]=\"menuLv2.Name | highlight: searchValue\"></a>\n </li>\n }\n }\n </ul>\n } @else {\n <li nz-menu-item nzMatchRouter>\n <a [routerLink]=\"menuLv1.Url\" [innerHTML]=\"menuLv1.Name | highlight: searchValue\"></a>\n </li>\n }\n }\n </ul>\n </div>\n }\n\n <nz-input-group [nzSuffix]=\"suffixTemplate\" [nzAddOnAfter]=\"afterTemplate\">\n <input nz-input placeholder=\"T\u00ECm menu\" [(ngModel)]=\"searchValue\" />\n </nz-input-group>\n <ng-template #suffixTemplate>\n <span class=\"suffix-wrap\">\n <icon-delete\n class=\"suffix-icon delete\"\n [class.show]=\"searchValue\"\n [size]=\"14\"\n (click)=\"searchValue = ''\"\n ></icon-delete>\n\n <icon-search class=\"suffix-icon search\" [class.show]=\"!searchValue\"></icon-search>\n </span>\n </ng-template>\n <ng-template #afterTemplate>\n <button nz-button (click)=\"triggerCollapse(); this.visibleMenuDrawer = false\">\n <nz-icon *ngIf=\"isCollapsed\" [nzType]=\"isCollapsed ? 'menu-unfold' : 'menu-fold'\" />\n </button>\n </ng-template>\n </div>\n </ng-container>\n</nz-drawer>\n", styles: ["@charset \"UTF-8\";:host{display:flex;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}html,body,app-root{height:100%;margin:0}.app-layout{display:flex;flex-direction:column;height:100vh}.app-header{position:fixed;top:0;left:0;width:100%;height:50px;background:var(--theme-color);color:var(--theme-text-color);box-shadow:0 1px 4px #00152914;z-index:1000;display:flex;align-items:center;padding:0}.header-content{width:100%}.header-logo{height:50px;text-align:center;color:var(--theme-text-color);transition:width .3s}.body-layout{display:flex;flex:1;margin-top:50px;height:calc(100vh - 50px);overflow:hidden}.menu-sidebar{width:256px;background:#f0f2f5;overflow-y:auto;min-height:calc(100vh - 50px)}.menu-wapper{min-height:calc(100% - 22px)}.main-layout{display:flex;flex-direction:column;flex:1;overflow:hidden}.content{flex:1;background:#f1f2f5;overflow-x:hidden;overflow-y:auto;height:100%}.inner-content{background:#f1f2f5;min-height:calc(100% - 22px);padding:8px}.content-footer{background:var(--theme-color);color:var(--theme-text-color);align-items:center;text-align:center}.sider-footer{background:var(--theme-color);color:var(--theme-text-color);align-items:center;text-align:right}.trigger{margin-right:8px}.menu-sidebar .ant-menu-inline .ant-menu-item{margin-top:0;margin-bottom:0}::ng-deep .menu-wapper .anticon-file{display:none}:host ::ng-deep .ant-back-top{right:30px;bottom:40px}::ng-deep .same-theme-color .ant-drawer-content{background:var(--theme-menu-color)}.nz-tree-wapper{height:calc(100vh - 104px);overflow-y:auto}.nz-tree-wapper.in-drawer{height:calc(100vh - 32px);overflow-y:auto}::ng-deep .menu-drawer .ant-drawer-body{padding:0}::ng-deep .breadcrumb-header .ant-breadcrumb-link{color:var(--theme-text-color);cursor:pointer}::ng-deep .breadcrumb-header .ant-breadcrumb-separator{color:var(--theme-text-color)}::ng-deep .header-menu .ant-segmented-item:not(.ant-segmented-item-selected){color:var(--theme-text-color)}::ng-deep .header-menu .ant-segmented-item{border-left:1px solid}::ng-deep .header-menu .ant-segmented-item:last-child{border-right:1px solid}.suffix-wrap{position:relative;width:18px;height:18px;display:inline-flex;align-items:center;justify-content:center}.suffix-icon{position:absolute;display:flex;align-items:center;justify-content:center;opacity:0;pointer-events:none;transition:opacity .16s ease,transform .18s cubic-bezier(.4,0,.2,1);transform:scale(.6) translate(4px)}.suffix-icon.show{opacity:1;pointer-events:auto;transform:scale(1) translate(0)}.search{color:#00000073}.delete{color:#bfbfbf}.delete.show{animation:popIn .18s ease}@keyframes popIn{0%{transform:scale(.5)}70%{transform:scale(1.15)}to{transform:scale(1)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: i1$4.AsyncPipe, name: "async" }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "ngmodule", type: NzLayoutModule }, { kind: "component", type: i2$4.NzLayoutComponent, selector: "nz-layout", exportAs: ["nzLayout"] }, { kind: "component", type: i2$4.NzHeaderComponent, selector: "nz-header", exportAs: ["nzHeader"] }, { kind: "component", type: i2$4.NzContentComponent, selector: "nz-content", exportAs: ["nzContent"] }, { kind: "component", type: i2$4.NzSiderComponent, selector: "nz-sider", inputs: ["nzWidth", "nzTheme", "nzCollapsedWidth", "nzBreakpoint", "nzZeroTrigger", "nzTrigger", "nzReverseArrow", "nzCollapsible", "nzCollapsed"], outputs: ["nzCollapsedChange"], exportAs: ["nzSider"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$3.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "ngmodule", type: NzDropDownModule }, { kind: "directive", type: i4$3.NzMenuDirective, selector: "[nz-menu]", inputs: ["nzInlineIndent", "nzTheme", "nzMode", "nzInlineCollapsed", "nzSelectable"], outputs: ["nzClick"], exportAs: ["nzMenu"] }, { kind: "component", type: i4$3.NzMenuItemComponent, selector: "[nz-menu-item]", inputs: ["nzPaddingLeft", "nzDisabled", "nzSelected", "nzDanger", "nzMatchRouterExact", "nzMatchRouter"], exportAs: ["nzMenuItem"] }, { kind: "component", type: i4$3.NzSubMenuComponent, selector: "[nz-submenu]", inputs: ["nzMenuClassName", "nzPaddingLeft", "nzTitle", "nzIcon", "nzTriggerSubMenuAction", "nzOpen", "nzDisabled", "nzPlacement"], outputs: ["nzOpenChange"], exportAs: ["nzSubmenu"] }, { kind: "ngmodule", type: NzGridModule }, { kind: "directive", type: i4.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i4.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "ngmodule", type: NzFlexModule }, { kind: "directive", type: i14.NzFlexDirective, selector: "[nz-flex],nz-flex", inputs: ["nzVertical", "nzJustify", "nzAlign", "nzGap", "nzWrap", "nzFlex"], exportAs: ["nzFlex"] }, { kind: "ngmodule", type: NzButtonModule }, { kind: "component", type: i8.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { kind: "directive", type: i4$1.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], nz-icon, [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i10.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }, { kind: "component", type: Breadcrumb, selector: "app-breadcrumb" }, { kind: "component", type: GlobalSpinnerComponent, selector: "app-global-spinner" }, { kind: "ngmodule", type: NzTreeModule }, { kind: "component", type: i10$1.NzTreeComponent, selector: "nz-tree", inputs: ["nzShowIcon", "nzHideUnMatched", "nzBlockNode", "nzExpandAll", "nzSelectMode", "nzCheckStrictly", "nzShowExpand", "nzShowLine", "nzCheckable", "nzAsyncData", "nzDraggable", "nzMultiple", "nzExpandedIcon", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualHeight", "nzTreeTemplate", "nzBeforeDrop", "nzData", "nzExpandedKeys", "nzSelectedKeys", "nzCheckedKeys", "nzSearchValue", "nzSearchFunc"], outputs: ["nzExpandedKeysChange", "nzSelectedKeysChange", "nzCheckedKeysChange", "nzSearchValueChange", "nzClick", "nzDblClick", "nzContextMenu", "nzCheckboxChange", "nzExpandChange", "nzOnDragStart", "nzOnDragEnter", "nzOnDragOver", "nzOnDragLeave", "nzOnDrop", "nzOnDragEnd"], exportAs: ["nzTree"] }, { kind: "ngmodule", type: NzBackTopModule }, { kind: "ngmodule", type: NzDrawerModule }, { kind: "component", type: i4$2.NzDrawerComponent, selector: "nz-drawer", inputs: ["nzContent", "nzCloseIcon", "nzClosable", "nzMaskClosable", "nzMask", "nzCloseOnNavigation", "nzNoAnimation", "nzKeyboard", "nzTitle", "nzExtra", "nzFooter", "nzPlacement", "nzSize", "nzMaskStyle", "nzBodyStyle", "nzWrapClassName", "nzWidth", "nzHeight", "nzZIndex", "nzOffsetX", "nzOffsetY", "nzVisible"], outputs: ["nzOnViewInit", "nzOnClose", "nzVisibleChange"], exportAs: ["nzDrawer"] }, { kind: "directive", type: i4$2.NzDrawerContentDirective, selector: "[nzDrawerContent]", exportAs: ["nzDrawerContent"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: NzInputModule }, { kind: "directive", type: i6$1.NzInputDirective, selector: "input[nz-input],textarea[nz-input]", inputs: ["nzBorderless", "nzSize", "nzStepperless", "nzStatus", "disabled"], exportAs: ["nzInput"] }, { kind: "component", type: i6$1.NzInputGroupComponent, selector: "nz-input-group", inputs: ["nzAddOnBeforeIcon", "nzAddOnAfterIcon", "nzPrefixIcon", "nzSuffixIcon", "nzAddOnBefore", "nzAddOnAfter", "nzPrefix", "nzStatus", "nzSuffix", "nzSize", "nzSearch", "nzCompact"], exportAs: ["nzInputGroup"] }, { kind: "directive", type: i6$1.NzInputGroupWhitSuffixOrPrefixDirective, selector: "nz-input-group[nzSuffix], nz-input-group[nzPrefix]" }, { kind: "component", type: Box, selector: "box", inputs: ["display", "width", "height"] }, { kind: "ngmodule", type: NzSegmentedModule }, { kind: "component", type: i14$1.NzSegmentedComponent, selector: "nz-segmented", inputs: ["nzBlock", "nzDisabled", "nzOptions", "nzSize"], outputs: ["nzValueChange"], exportAs: ["nzSegmented"] }, { kind: "component", type: LayoutUser, selector: "layout-user" }, { kind: "component", type: IconDelete, selector: "icon-delete", inputs: ["size"], outputs: ["click"] }, { kind: "component", type: IconSearch, selector: "icon-search", inputs: ["size"], outputs: ["click"] }, { kind: "pipe", type: HighlightPipe, name: "highlight" }, { kind: "directive", type: HideIfErrorDirective, selector: "img[hideIfError]" }, { kind: "component", type: CustomNotiComponent, selector: "custom-noti" }], animations: [fadeInOut] });
7429
7613
  }
7430
7614
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: LayoutComponent, decorators: [{
7431
7615
  type: Component,
@@ -7455,7 +7639,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImpor
7455
7639
  IconSearch,
7456
7640
  HighlightPipe,
7457
7641
  HideIfErrorDirective,
7458
- ], animations: [fadeInOut], template: "<app-global-spinner></app-global-spinner>\n<nz-layout class=\"app-layout\">\n <nz-header class=\"app-header\">\n <div nz-row nzAlign=\"middle\" class=\"header-content\">\n @if (isCollapsed) {\n <div @fadeInOut>\n &nbsp;&nbsp;&nbsp;<button nz-button (click)=\"visibleMenuDrawer = true\">\n <nz-icon nzType=\"menu\" nzTheme=\"outline\" />\n </button>\n </div>\n }\n\n <div class=\"header-logo\" [style.width]=\"!isCollapsed ? siderWidthStorage : '100px'\">\n <div nz-flex nzJustify=\"center\" nzGap=\"small\">\n <img\n *ngIf=\"logoUrl$ | async as url\"\n [src]=\"url\"\n height=\"40px\"\n style=\"position: relative; top: 5px\"\n hideIfError\n />\n @if (!isCollapsed) {\n @if (SYSTEM_NAME) {\n <h2 style=\"color: whitesmoke\">{{ SYSTEM_NAME }}</h2>\n } @else {\n -- o0o --\n }\n }\n </div>\n </div>\n @if (!HEADER_MENU_IN_USE) {\n <box [width]=\"8\"></box>\n <app-breadcrumb [@fadeInOut] nz-col nzFlex=\"auto\" class=\"breadcrumb-header\"></app-breadcrumb>\n }\n <div *ngIf=\"HEADER_MENU_IN_USE\" [ngStyle]=\"{ width: getHeaderMenuWidth() }\" class=\"header-menu\">\n <div style=\"overflow: auto\">\n <nz-segmented\n [nzOptions]=\"lstHeaderMenuDisplay\"\n [(ngModel)]=\"selectedHeaderMenuDisplay\"\n (nzValueChange)=\"handleValueChangeHeaderMenu($event)\"\n ></nz-segmented>\n </div>\n </div>\n <div #divuser>\n <layout-user></layout-user>\n </div>\n </div>\n </nz-header>\n <nz-layout class=\"body-layout\">\n <nz-sider\n class=\"menu-sidebar\"\n nzCollapsible\n [nzWidth]=\"siderWidth\"\n [nzCollapsedWidth]=\"0\"\n [nzBreakpoint]=\"'md'\"\n [(nzCollapsed)]=\"isCollapsed\"\n [nzTrigger]=\"null\"\n [nzTheme]=\"'dark'\"\n >\n <div class=\"menu-wapper\">\n @if (MENU_TYPE == 1) {\n <div class=\"nz-tree-wapper\">\n <nz-tree\n [nzData]=\"nodes\"\n [nzSearchValue]=\"searchValue\"\n [nzShowLine]=\"true\"\n [nzSelectedKeys]=\"selectedKeys\"\n [nzExpandedKeys]=\"expandedKeys\"\n (nzClick)=\"nzEvent($event)\"\n ></nz-tree>\n </div>\n } @else {\n <div class=\"nz-tree-wapper\">\n <ul nz-menu nzTheme=\"light\" nzMode=\"inline\" [nzInlineCollapsed]=\"isCollapsed\">\n @for (menuLv1 of lstMenu; track menuLv1.App_Menu_Id) {\n @if (menuLv1.SubMenu) {\n <ul nz-submenu [nzOpen]=\"menuLv1.Open\" [nzTitle]=\"menuLv1.Name\" [nzIcon]=\"menuLv1.Icon\">\n @for (menuLv2 of menuLv1.SubMenu; track menuLv2.App_Menu_Id) {\n @if (menuLv2.SubMenu) {\n <ul nz-submenu [nzOpen]=\"menuLv2.Open\" [nzTitle]=\"menuLv2.Name\" [nzIcon]=\"menuLv2.Icon\">\n @for (menuLv3 of menuLv2.SubMenu; track menuLv3.App_Menu_Id) {\n @if (menuLv3.SubMenu) {\n <ul nz-submenu [nzOpen]=\"menuLv3.Open\" [nzTitle]=\"menuLv3.Name\" [nzIcon]=\"menuLv3.Icon\">\n @for (menuLv4 of menuLv3.SubMenu; track menuLv4.App_Menu_Id) {\n @if (menuLv4.SubMenu) {\n <ul\n nz-submenu\n [nzOpen]=\"menuLv4.Open\"\n [nzTitle]=\"menuLv4.Name\"\n [nzIcon]=\"menuLv4.Icon\"\n >\n @for (menuLv5 of menuLv4.SubMenu; track menuLv5.App_Menu_Id) {}\n </ul>\n } @else {\n <li nz-menu-item nzMatchRouter>\n <a\n [routerLink]=\"menuLv4.Url\"\n [innerHTML]=\"menuLv4.Name | highlight: searchValue\"\n ></a>\n </li>\n }\n }\n </ul>\n } @else {\n <li nz-menu-item nzMatchRouter>\n <a [routerLink]=\"menuLv3.Url\" [innerHTML]=\"menuLv3.Name | highlight: searchValue\"></a>\n </li>\n }\n }\n </ul>\n } @else {\n <li nz-menu-item nzMatchRouter>\n <a [routerLink]=\"menuLv2.Url\" [innerHTML]=\"menuLv2.Name | highlight: searchValue\"></a>\n </li>\n }\n }\n </ul>\n } @else {\n <li nz-menu-item nzMatchRouter>\n <a [routerLink]=\"menuLv1.Url\" [innerHTML]=\"menuLv1.Name | highlight: searchValue\"></a>\n </li>\n }\n }\n </ul>\n </div>\n }\n\n <nz-input-group [nzSuffix]=\"suffixTemplate\">\n <input nz-input placeholder=\"T\u00ECm menu\" [(ngModel)]=\"searchValue\" />\n </nz-input-group>\n <ng-template #suffixTemplate>\n <span class=\"suffix-wrap\">\n <icon-delete\n class=\"suffix-icon delete\"\n [class.show]=\"searchValue\"\n [size]=\"14\"\n (click)=\"searchValue = ''\"\n ></icon-delete>\n\n <icon-search class=\"suffix-icon search\" [class.show]=\"!searchValue\"></icon-search>\n </span>\n </ng-template>\n </div>\n <div class=\"sider-footer\" style=\"height: 22px\">\n <div nz-col nzFlex=\"auto\" class=\"content-footer text-italic\" style=\"font-size: 0.8em; color: lightgray\">\n {{ SYSTEM_SUB_NAME_LEFT || \"-- o0o --\" }}\n\n <span style=\"float: right\" (click)=\"triggerCollapse()\">\n <nz-icon class=\"trigger\" [nzType]=\"isCollapsed ? 'menu-unfold' : 'menu-fold'\" />\n </span>\n </div>\n </div>\n </nz-sider>\n <nz-layout class=\"main-layout\">\n <nz-content class=\"content\">\n <div class=\"inner-content\">\n @if (HEADER_MENU_IN_USE) {\n <app-breadcrumb [@fadeInOut] nz-col nzFlex=\"auto\"></app-breadcrumb>\n <box [height]=\"8\"></box>\n }\n <router-outlet></router-outlet>\n </div>\n <div nz-row class=\"sider-footer\" style=\"height: 22px\">\n <div nz-col nzFlex=\"auto\" class=\"content-footer text-italic\" style=\"font-size: 0.8em; color: lightgray\">\n {{ SYSTEM_SUB_NAME_RIGHT || \"-- o0o --\" }}\n </div>\n </div>\n <!-- <nz-back-top [nzTarget]=\"'.content'\" [nzVisibilityHeight]=\"500\"></nz-back-top> -->\n </nz-content>\n </nz-layout>\n </nz-layout>\n</nz-layout>\n\n<nz-drawer\n [nzWrapClassName]=\"'same-theme-color menu-drawer'\"\n [nzWidth]=\"350\"\n [nzClosable]=\"false\"\n [(nzVisible)]=\"visibleMenuDrawer\"\n [nzMaskClosable]=\"true\"\n nzPlacement=\"left\"\n nzTitle=\"\"\n (nzOnClose)=\"visibleMenuDrawer = false\"\n>\n <ng-container *nzDrawerContent>\n <div class=\"menu-wapper\">\n @if (MENU_TYPE == 1) {\n <div class=\"nz-tree-wapper in-drawer\">\n <nz-tree\n [nzData]=\"nodes\"\n [nzSearchValue]=\"searchValue\"\n [nzShowLine]=\"true\"\n [nzSelectedKeys]=\"selectedKeys\"\n [nzExpandedKeys]=\"expandedKeys\"\n (nzClick)=\"nzEvent($event)\"\n ></nz-tree>\n </div>\n } @else {\n <div class=\"nz-tree-wapper in-drawer\">\n <ul nz-menu nzTheme=\"light\" nzMode=\"inline\">\n @for (menuLv1 of lstMenu; track menuLv1.App_Menu_Id) {\n @if (menuLv1.SubMenu) {\n <ul nz-submenu [nzOpen]=\"menuLv1.Open\" [nzTitle]=\"menuLv1.Name\" [nzIcon]=\"menuLv1.Icon\">\n @for (menuLv2 of menuLv1.SubMenu; track menuLv2.App_Menu_Id) {\n @if (menuLv2.SubMenu) {\n <ul nz-submenu [nzOpen]=\"menuLv2.Open\" [nzTitle]=\"menuLv2.Name\" [nzIcon]=\"menuLv2.Icon\">\n @for (menuLv3 of menuLv2.SubMenu; track menuLv3.App_Menu_Id) {\n @if (menuLv3.SubMenu) {\n <ul nz-submenu [nzOpen]=\"menuLv3.Open\" [nzTitle]=\"menuLv3.Name\" [nzIcon]=\"menuLv3.Icon\">\n @for (menuLv4 of menuLv3.SubMenu; track menuLv4.App_Menu_Id) {\n @if (menuLv4.SubMenu) {\n <ul\n nz-submenu\n [nzOpen]=\"menuLv4.Open\"\n [nzTitle]=\"menuLv4.Name\"\n [nzIcon]=\"menuLv4.Icon\"\n >\n @for (menuLv5 of menuLv4.SubMenu; track menuLv5.App_Menu_Id) {}\n </ul>\n } @else {\n <li nz-menu-item nzMatchRouter>\n <a\n [routerLink]=\"menuLv4.Url\"\n [innerHTML]=\"menuLv4.Name | highlight: searchValue\"\n ></a>\n </li>\n }\n }\n </ul>\n } @else {\n <li nz-menu-item nzMatchRouter>\n <a [routerLink]=\"menuLv3.Url\" [innerHTML]=\"menuLv3.Name | highlight: searchValue\"></a>\n </li>\n }\n }\n </ul>\n } @else {\n <li nz-menu-item nzMatchRouter>\n <a [routerLink]=\"menuLv2.Url\" [innerHTML]=\"menuLv2.Name | highlight: searchValue\"></a>\n </li>\n }\n }\n </ul>\n } @else {\n <li nz-menu-item nzMatchRouter>\n <a [routerLink]=\"menuLv1.Url\" [innerHTML]=\"menuLv1.Name | highlight: searchValue\"></a>\n </li>\n }\n }\n </ul>\n </div>\n }\n\n <nz-input-group [nzSuffix]=\"suffixTemplate\" [nzAddOnAfter]=\"afterTemplate\">\n <input nz-input placeholder=\"T\u00ECm menu\" [(ngModel)]=\"searchValue\" />\n </nz-input-group>\n <ng-template #suffixTemplate>\n <span class=\"suffix-wrap\">\n <icon-delete\n class=\"suffix-icon delete\"\n [class.show]=\"searchValue\"\n [size]=\"14\"\n (click)=\"searchValue = ''\"\n ></icon-delete>\n\n <icon-search class=\"suffix-icon search\" [class.show]=\"!searchValue\"></icon-search>\n </span>\n </ng-template>\n <ng-template #afterTemplate>\n <button nz-button (click)=\"triggerCollapse(); this.visibleMenuDrawer = false\">\n <nz-icon *ngIf=\"isCollapsed\" [nzType]=\"isCollapsed ? 'menu-unfold' : 'menu-fold'\" />\n </button>\n </ng-template>\n </div>\n </ng-container>\n</nz-drawer>\n", styles: ["@charset \"UTF-8\";:host{display:flex;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}html,body,app-root{height:100%;margin:0}.app-layout{display:flex;flex-direction:column;height:100vh}.app-header{position:fixed;top:0;left:0;width:100%;height:50px;background:var(--theme-color);color:var(--theme-text-color);box-shadow:0 1px 4px #00152914;z-index:1000;display:flex;align-items:center;padding:0}.header-content{width:100%}.header-logo{height:50px;text-align:center;color:var(--theme-text-color);transition:width .3s}.body-layout{display:flex;flex:1;margin-top:50px;height:calc(100vh - 50px);overflow:hidden}.menu-sidebar{width:256px;background:#f0f2f5;overflow-y:auto;min-height:calc(100vh - 50px)}.menu-wapper{min-height:calc(100% - 22px)}.main-layout{display:flex;flex-direction:column;flex:1;overflow:hidden}.content{flex:1;background:#f1f2f5;overflow-x:hidden;overflow-y:auto;height:100%}.inner-content{background:#f1f2f5;min-height:calc(100% - 22px);padding:8px}.content-footer{background:var(--theme-color);color:var(--theme-text-color);align-items:center;text-align:center}.sider-footer{background:var(--theme-color);color:var(--theme-text-color);align-items:center;text-align:right}.trigger{margin-right:8px}.menu-sidebar .ant-menu-inline .ant-menu-item{margin-top:0;margin-bottom:0}::ng-deep .menu-wapper .anticon-file{display:none}:host ::ng-deep .ant-back-top{right:30px;bottom:40px}::ng-deep .same-theme-color .ant-drawer-content{background:var(--theme-menu-color)}.nz-tree-wapper{height:calc(100vh - 104px);overflow-y:auto}.nz-tree-wapper.in-drawer{height:calc(100vh - 32px);overflow-y:auto}::ng-deep .menu-drawer .ant-drawer-body{padding:0}::ng-deep .breadcrumb-header .ant-breadcrumb-link{color:var(--theme-text-color);cursor:pointer}::ng-deep .breadcrumb-header .ant-breadcrumb-separator{color:var(--theme-text-color)}::ng-deep .header-menu .ant-segmented-item:not(.ant-segmented-item-selected){color:var(--theme-text-color)}::ng-deep .header-menu .ant-segmented-item{border-left:1px solid}::ng-deep .header-menu .ant-segmented-item:last-child{border-right:1px solid}.suffix-wrap{position:relative;width:18px;height:18px;display:inline-flex;align-items:center;justify-content:center}.suffix-icon{position:absolute;display:flex;align-items:center;justify-content:center;opacity:0;pointer-events:none;transition:opacity .16s ease,transform .18s cubic-bezier(.4,0,.2,1);transform:scale(.6) translate(4px)}.suffix-icon.show{opacity:1;pointer-events:auto;transform:scale(1) translate(0)}.search{color:#00000073}.delete{color:#bfbfbf}.delete.show{animation:popIn .18s ease}@keyframes popIn{0%{transform:scale(.5)}70%{transform:scale(1.15)}to{transform:scale(1)}}\n"] }]
7642
+ CustomNotiComponent,
7643
+ ], animations: [fadeInOut], template: "<custom-noti></custom-noti>\n<app-global-spinner></app-global-spinner>\n<nz-layout class=\"app-layout\">\n <nz-header class=\"app-header\">\n <div nz-row nzAlign=\"middle\" class=\"header-content\">\n @if (isCollapsed) {\n <div @fadeInOut>\n &nbsp;&nbsp;&nbsp;<button nz-button (click)=\"visibleMenuDrawer = true\">\n <nz-icon nzType=\"menu\" nzTheme=\"outline\" />\n </button>\n </div>\n }\n\n <div class=\"header-logo\" [style.width]=\"!isCollapsed ? siderWidthStorage : '100px'\">\n <div nz-flex nzJustify=\"center\" nzGap=\"small\">\n <img\n *ngIf=\"logoUrl$ | async as url\"\n [src]=\"url\"\n height=\"40px\"\n style=\"position: relative; top: 5px\"\n hideIfError\n />\n @if (!isCollapsed) {\n @if (SYSTEM_NAME) {\n <h2 style=\"color: whitesmoke\">{{ SYSTEM_NAME }}</h2>\n } @else {\n -- o0o --\n }\n }\n </div>\n </div>\n @if (!HEADER_MENU_IN_USE) {\n <box [width]=\"8\"></box>\n <app-breadcrumb [@fadeInOut] nz-col nzFlex=\"auto\" class=\"breadcrumb-header\"></app-breadcrumb>\n }\n <div *ngIf=\"HEADER_MENU_IN_USE\" [ngStyle]=\"{ width: getHeaderMenuWidth() }\" class=\"header-menu\">\n <div style=\"overflow: auto\">\n <nz-segmented\n [nzOptions]=\"lstHeaderMenuDisplay\"\n [(ngModel)]=\"selectedHeaderMenuDisplay\"\n (nzValueChange)=\"handleValueChangeHeaderMenu($event)\"\n ></nz-segmented>\n </div>\n </div>\n <div #divuser>\n <layout-user></layout-user>\n </div>\n </div>\n </nz-header>\n <nz-layout class=\"body-layout\">\n <nz-sider\n class=\"menu-sidebar\"\n nzCollapsible\n [nzWidth]=\"siderWidth\"\n [nzCollapsedWidth]=\"0\"\n [nzBreakpoint]=\"'md'\"\n [(nzCollapsed)]=\"isCollapsed\"\n [nzTrigger]=\"null\"\n [nzTheme]=\"'dark'\"\n >\n <div class=\"menu-wapper\">\n @if (MENU_TYPE == 1) {\n <div class=\"nz-tree-wapper\">\n <nz-tree\n [nzData]=\"nodes\"\n [nzSearchValue]=\"searchValue\"\n [nzShowLine]=\"true\"\n [nzSelectedKeys]=\"selectedKeys\"\n [nzExpandedKeys]=\"expandedKeys\"\n (nzClick)=\"nzEvent($event)\"\n ></nz-tree>\n </div>\n } @else {\n <div class=\"nz-tree-wapper\">\n <ul nz-menu nzTheme=\"light\" nzMode=\"inline\" [nzInlineCollapsed]=\"isCollapsed\">\n @for (menuLv1 of lstMenu; track menuLv1.App_Menu_Id) {\n @if (menuLv1.SubMenu) {\n <ul nz-submenu [nzOpen]=\"menuLv1.Open\" [nzTitle]=\"menuLv1.Name\" [nzIcon]=\"menuLv1.Icon\">\n @for (menuLv2 of menuLv1.SubMenu; track menuLv2.App_Menu_Id) {\n @if (menuLv2.SubMenu) {\n <ul nz-submenu [nzOpen]=\"menuLv2.Open\" [nzTitle]=\"menuLv2.Name\" [nzIcon]=\"menuLv2.Icon\">\n @for (menuLv3 of menuLv2.SubMenu; track menuLv3.App_Menu_Id) {\n @if (menuLv3.SubMenu) {\n <ul nz-submenu [nzOpen]=\"menuLv3.Open\" [nzTitle]=\"menuLv3.Name\" [nzIcon]=\"menuLv3.Icon\">\n @for (menuLv4 of menuLv3.SubMenu; track menuLv4.App_Menu_Id) {\n @if (menuLv4.SubMenu) {\n <ul\n nz-submenu\n [nzOpen]=\"menuLv4.Open\"\n [nzTitle]=\"menuLv4.Name\"\n [nzIcon]=\"menuLv4.Icon\"\n >\n @for (menuLv5 of menuLv4.SubMenu; track menuLv5.App_Menu_Id) {}\n </ul>\n } @else {\n <li nz-menu-item nzMatchRouter>\n <a\n [routerLink]=\"menuLv4.Url\"\n [innerHTML]=\"menuLv4.Name | highlight: searchValue\"\n ></a>\n </li>\n }\n }\n </ul>\n } @else {\n <li nz-menu-item nzMatchRouter>\n <a [routerLink]=\"menuLv3.Url\" [innerHTML]=\"menuLv3.Name | highlight: searchValue\"></a>\n </li>\n }\n }\n </ul>\n } @else {\n <li nz-menu-item nzMatchRouter>\n <a [routerLink]=\"menuLv2.Url\" [innerHTML]=\"menuLv2.Name | highlight: searchValue\"></a>\n </li>\n }\n }\n </ul>\n } @else {\n <li nz-menu-item nzMatchRouter>\n <a [routerLink]=\"menuLv1.Url\" [innerHTML]=\"menuLv1.Name | highlight: searchValue\"></a>\n </li>\n }\n }\n </ul>\n </div>\n }\n\n <nz-input-group [nzSuffix]=\"suffixTemplate\">\n <input nz-input placeholder=\"T\u00ECm menu\" [(ngModel)]=\"searchValue\" />\n </nz-input-group>\n <ng-template #suffixTemplate>\n <span class=\"suffix-wrap\">\n <icon-delete\n class=\"suffix-icon delete\"\n [class.show]=\"searchValue\"\n [size]=\"14\"\n (click)=\"searchValue = ''\"\n ></icon-delete>\n\n <icon-search class=\"suffix-icon search\" [class.show]=\"!searchValue\"></icon-search>\n </span>\n </ng-template>\n </div>\n <div class=\"sider-footer\" style=\"height: 22px\">\n <div nz-col nzFlex=\"auto\" class=\"content-footer text-italic\" style=\"font-size: 0.8em; color: lightgray\">\n {{ SYSTEM_SUB_NAME_LEFT || \"-- o0o --\" }}\n\n <span style=\"float: right\" (click)=\"triggerCollapse()\">\n <nz-icon class=\"trigger\" [nzType]=\"isCollapsed ? 'menu-unfold' : 'menu-fold'\" />\n </span>\n </div>\n </div>\n </nz-sider>\n <nz-layout class=\"main-layout\">\n <nz-content class=\"content\">\n <div class=\"inner-content\">\n @if (HEADER_MENU_IN_USE) {\n <app-breadcrumb [@fadeInOut] nz-col nzFlex=\"auto\"></app-breadcrumb>\n <box [height]=\"8\"></box>\n }\n <router-outlet></router-outlet>\n </div>\n <div nz-row class=\"sider-footer\" style=\"height: 22px\">\n <div nz-col nzFlex=\"auto\" class=\"content-footer text-italic\" style=\"font-size: 0.8em; color: lightgray\">\n {{ SYSTEM_SUB_NAME_RIGHT || \"-- o0o --\" }}\n </div>\n </div>\n <!-- <nz-back-top [nzTarget]=\"'.content'\" [nzVisibilityHeight]=\"500\"></nz-back-top> -->\n </nz-content>\n </nz-layout>\n </nz-layout>\n</nz-layout>\n\n<nz-drawer\n [nzWrapClassName]=\"'same-theme-color menu-drawer'\"\n [nzWidth]=\"350\"\n [nzClosable]=\"false\"\n [(nzVisible)]=\"visibleMenuDrawer\"\n [nzMaskClosable]=\"true\"\n nzPlacement=\"left\"\n nzTitle=\"\"\n (nzOnClose)=\"visibleMenuDrawer = false\"\n>\n <ng-container *nzDrawerContent>\n <div class=\"menu-wapper\">\n @if (MENU_TYPE == 1) {\n <div class=\"nz-tree-wapper in-drawer\">\n <nz-tree\n [nzData]=\"nodes\"\n [nzSearchValue]=\"searchValue\"\n [nzShowLine]=\"true\"\n [nzSelectedKeys]=\"selectedKeys\"\n [nzExpandedKeys]=\"expandedKeys\"\n (nzClick)=\"nzEvent($event)\"\n ></nz-tree>\n </div>\n } @else {\n <div class=\"nz-tree-wapper in-drawer\">\n <ul nz-menu nzTheme=\"light\" nzMode=\"inline\">\n @for (menuLv1 of lstMenu; track menuLv1.App_Menu_Id) {\n @if (menuLv1.SubMenu) {\n <ul nz-submenu [nzOpen]=\"menuLv1.Open\" [nzTitle]=\"menuLv1.Name\" [nzIcon]=\"menuLv1.Icon\">\n @for (menuLv2 of menuLv1.SubMenu; track menuLv2.App_Menu_Id) {\n @if (menuLv2.SubMenu) {\n <ul nz-submenu [nzOpen]=\"menuLv2.Open\" [nzTitle]=\"menuLv2.Name\" [nzIcon]=\"menuLv2.Icon\">\n @for (menuLv3 of menuLv2.SubMenu; track menuLv3.App_Menu_Id) {\n @if (menuLv3.SubMenu) {\n <ul nz-submenu [nzOpen]=\"menuLv3.Open\" [nzTitle]=\"menuLv3.Name\" [nzIcon]=\"menuLv3.Icon\">\n @for (menuLv4 of menuLv3.SubMenu; track menuLv4.App_Menu_Id) {\n @if (menuLv4.SubMenu) {\n <ul\n nz-submenu\n [nzOpen]=\"menuLv4.Open\"\n [nzTitle]=\"menuLv4.Name\"\n [nzIcon]=\"menuLv4.Icon\"\n >\n @for (menuLv5 of menuLv4.SubMenu; track menuLv5.App_Menu_Id) {}\n </ul>\n } @else {\n <li nz-menu-item nzMatchRouter>\n <a\n [routerLink]=\"menuLv4.Url\"\n [innerHTML]=\"menuLv4.Name | highlight: searchValue\"\n ></a>\n </li>\n }\n }\n </ul>\n } @else {\n <li nz-menu-item nzMatchRouter>\n <a [routerLink]=\"menuLv3.Url\" [innerHTML]=\"menuLv3.Name | highlight: searchValue\"></a>\n </li>\n }\n }\n </ul>\n } @else {\n <li nz-menu-item nzMatchRouter>\n <a [routerLink]=\"menuLv2.Url\" [innerHTML]=\"menuLv2.Name | highlight: searchValue\"></a>\n </li>\n }\n }\n </ul>\n } @else {\n <li nz-menu-item nzMatchRouter>\n <a [routerLink]=\"menuLv1.Url\" [innerHTML]=\"menuLv1.Name | highlight: searchValue\"></a>\n </li>\n }\n }\n </ul>\n </div>\n }\n\n <nz-input-group [nzSuffix]=\"suffixTemplate\" [nzAddOnAfter]=\"afterTemplate\">\n <input nz-input placeholder=\"T\u00ECm menu\" [(ngModel)]=\"searchValue\" />\n </nz-input-group>\n <ng-template #suffixTemplate>\n <span class=\"suffix-wrap\">\n <icon-delete\n class=\"suffix-icon delete\"\n [class.show]=\"searchValue\"\n [size]=\"14\"\n (click)=\"searchValue = ''\"\n ></icon-delete>\n\n <icon-search class=\"suffix-icon search\" [class.show]=\"!searchValue\"></icon-search>\n </span>\n </ng-template>\n <ng-template #afterTemplate>\n <button nz-button (click)=\"triggerCollapse(); this.visibleMenuDrawer = false\">\n <nz-icon *ngIf=\"isCollapsed\" [nzType]=\"isCollapsed ? 'menu-unfold' : 'menu-fold'\" />\n </button>\n </ng-template>\n </div>\n </ng-container>\n</nz-drawer>\n", styles: ["@charset \"UTF-8\";:host{display:flex;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}html,body,app-root{height:100%;margin:0}.app-layout{display:flex;flex-direction:column;height:100vh}.app-header{position:fixed;top:0;left:0;width:100%;height:50px;background:var(--theme-color);color:var(--theme-text-color);box-shadow:0 1px 4px #00152914;z-index:1000;display:flex;align-items:center;padding:0}.header-content{width:100%}.header-logo{height:50px;text-align:center;color:var(--theme-text-color);transition:width .3s}.body-layout{display:flex;flex:1;margin-top:50px;height:calc(100vh - 50px);overflow:hidden}.menu-sidebar{width:256px;background:#f0f2f5;overflow-y:auto;min-height:calc(100vh - 50px)}.menu-wapper{min-height:calc(100% - 22px)}.main-layout{display:flex;flex-direction:column;flex:1;overflow:hidden}.content{flex:1;background:#f1f2f5;overflow-x:hidden;overflow-y:auto;height:100%}.inner-content{background:#f1f2f5;min-height:calc(100% - 22px);padding:8px}.content-footer{background:var(--theme-color);color:var(--theme-text-color);align-items:center;text-align:center}.sider-footer{background:var(--theme-color);color:var(--theme-text-color);align-items:center;text-align:right}.trigger{margin-right:8px}.menu-sidebar .ant-menu-inline .ant-menu-item{margin-top:0;margin-bottom:0}::ng-deep .menu-wapper .anticon-file{display:none}:host ::ng-deep .ant-back-top{right:30px;bottom:40px}::ng-deep .same-theme-color .ant-drawer-content{background:var(--theme-menu-color)}.nz-tree-wapper{height:calc(100vh - 104px);overflow-y:auto}.nz-tree-wapper.in-drawer{height:calc(100vh - 32px);overflow-y:auto}::ng-deep .menu-drawer .ant-drawer-body{padding:0}::ng-deep .breadcrumb-header .ant-breadcrumb-link{color:var(--theme-text-color);cursor:pointer}::ng-deep .breadcrumb-header .ant-breadcrumb-separator{color:var(--theme-text-color)}::ng-deep .header-menu .ant-segmented-item:not(.ant-segmented-item-selected){color:var(--theme-text-color)}::ng-deep .header-menu .ant-segmented-item{border-left:1px solid}::ng-deep .header-menu .ant-segmented-item:last-child{border-right:1px solid}.suffix-wrap{position:relative;width:18px;height:18px;display:inline-flex;align-items:center;justify-content:center}.suffix-icon{position:absolute;display:flex;align-items:center;justify-content:center;opacity:0;pointer-events:none;transition:opacity .16s ease,transform .18s cubic-bezier(.4,0,.2,1);transform:scale(.6) translate(4px)}.suffix-icon.show{opacity:1;pointer-events:auto;transform:scale(1) translate(0)}.search{color:#00000073}.delete{color:#bfbfbf}.delete.show{animation:popIn .18s ease}@keyframes popIn{0%{transform:scale(.5)}70%{transform:scale(1.15)}to{transform:scale(1)}}\n"] }]
7459
7644
  }], propDecorators: { divuser: [{
7460
7645
  type: ViewChild,
7461
7646
  args: ['divuser']
@@ -7643,7 +7828,7 @@ class LoginComponent extends BaseComponent {
7643
7828
  .getFileVersion('LOGIN_BACKGROUND')
7644
7829
  .pipe(map((res) => `${AppGlobals.apiEndpoint}/api/file/image?code=LOGIN_BACKGROUND&v=${res || ''}`));
7645
7830
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: LoginComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
7646
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: LoginComponent, isStandalone: true, selector: "login", usesInheritance: true, ngImport: i0, template: "<div nz-row nzJustify=\"center\" class=\"login\">\n <div class=\"form-container\">\n <form nz-flex nzVertical=\"true\" nz-form [formGroup]=\"loginForm\" class=\"login-form\" (ngSubmit)=\"dologin()\">\n <div>\n <div style=\"text-align: center\">\n <img *ngIf=\"logoUrl$ | async as url\" width=\"150px\" [src]=\"url\" hideIfError />\n </div>\n <div class=\"form-field\" style=\"text-align: center; margin-bottom: 20px\">\n <h3 style=\"font-weight: bold; font-size: 20px\">{{ SYSTEM_NAME_LOGIN }}</h3>\n </div>\n </div>\n\n <div nz-row [nzJustify]=\"'center'\">\n <div nz-col nzSm=\"24\" nzMd=\"16\">\n <div nz-flex nzVertical=\"true\">\n @if (isOneUserMultiOrgs) {\n <nz-form-item>\n <nz-form-control nzErrorTip=\"{{ 'REQUIRED' | translate }}\">\n <nz-input-group nzPrefixIcon=\"cluster\" nzHasFeedback=\"false\">\n <nz-select\n nzShowSearch\n nzAllowClear\n [nzBorderless]=\"true\"\n [nzSize]=\"'small'\"\n nzPlaceHolder=\"{{ 'ORG' | translate }}\"\n formControlName=\"orgid\"\n class=\"no-error-border\"\n (nzFocus)=\"onFocusOrg()\"\n >\n @for (item of lstOrg; track $index) {\n <nz-option [nzLabel]=\"item.TreeNodeName!\" [nzValue]=\"item.App_Org_Id\"></nz-option>\n }\n </nz-select>\n </nz-input-group>\n </nz-form-control>\n </nz-form-item>\n }\n\n <nz-form-item>\n <nz-form-control nzErrorTip=\"{{ 'REQUIRED' | translate }}\">\n <nz-input-group nzPrefixIcon=\"user\">\n <input type=\"text\" nz-input formControlName=\"username\" placeholder=\"{{ 'USERNAME' | translate }}\" />\n </nz-input-group>\n </nz-form-control>\n </nz-form-item>\n\n <nz-form-item>\n <nz-form-control nzErrorTip=\"{{ 'REQUIRED' | translate }}\">\n <nz-input-group\n nzPrefixIcon=\"lock\"\n [nzSuffix]=\"visible ? suffixTemplateHiddenPassword : suffixTemplateShowPassword\"\n >\n <input\n type=\"{{ passwordType }}\"\n nz-input\n formControlName=\"password\"\n placeholder=\"{{ 'PASSWORD' | translate }}\"\n />\n </nz-input-group>\n </nz-form-control>\n <ng-template #suffixTemplateShowPassword>\n <nz-icon\n nzType=\"eye\"\n nzTheme=\"outline\"\n nz-tooltip\n nzTooltipTitle=\"{{ 'SHOW' | translate }}\"\n nzTooltipPlacement=\"right\"\n (click)=\"visible = !visible; passwordType = 'text'\"\n />\n </ng-template>\n <ng-template #suffixTemplateHiddenPassword>\n <nz-icon\n nzType=\"eye-invisible\"\n nzTheme=\"outline\"\n nz-tooltip\n nzTooltipTitle=\"{{ 'HIDDEN' | translate }}\"\n nzTooltipPlacement=\"right\"\n (click)=\"visible = !visible; passwordType = 'password'\"\n />\n </ng-template>\n </nz-form-item>\n\n <div nz-flex nzVertical=\"true\" nzGap=\"4px\">\n <button nz-button [nzType]=\"'primary'\" nzBlock [nzLoading]=\"loadingService.isLoading\">\n {{ \"LOGIN\" | translate }}\n </button>\n <!-- \n <nz-form-item nzJustify=\"end\">\n <nz-switch formControlName=\"langSwitch\" class=\"nz-switch-both-active-color\" nzCheckedChildren=\"VN\"\n nzUnCheckedChildren=\"EN\" (ngModelChange)=\"changeLanguage($event)\"></nz-switch>\n </nz-form-item> \n -->\n </div>\n </div>\n </div>\n </div>\n </form>\n </div>\n</div>\n\n<img *ngIf=\"bgUrl$ | async as url\" class=\"bg-image\" [src]=\"url\" hideIfError />\n", styles: [":host{display:flex;justify-content:center;align-items:center;height:80vh}.form-container{width:clamp(280px,30vw,420px);box-shadow:0 10px 20px 1px #001a2d59;background-color:#fff;padding:16px}.bg-image{position:fixed;top:0;left:0;width:100vw;height:100vh;object-fit:cover;object-position:center;z-index:-1;pointer-events:none}::ng-deep .login .ant-select-selector{height:auto!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: NzFormModule }, { kind: "directive", type: i4.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i4.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "directive", type: i5.NzFormDirective, selector: "[nz-form]", inputs: ["nzLayout", "nzNoColon", "nzAutoTips", "nzDisableAutoTips", "nzTooltipIcon", "nzLabelAlign", "nzLabelWrap"], exportAs: ["nzForm"] }, { kind: "component", type: i5.NzFormItemComponent, selector: "nz-form-item", exportAs: ["nzFormItem"] }, { kind: "component", type: i5.NzFormControlComponent, selector: "nz-form-control", inputs: ["nzSuccessTip", "nzWarningTip", "nzErrorTip", "nzValidatingTip", "nzExtra", "nzAutoTips", "nzDisableAutoTips", "nzHasFeedback", "nzValidateStatus"], exportAs: ["nzFormControl"] }, { kind: "ngmodule", type: NzInputModule }, { kind: "directive", type: i6$1.NzInputDirective, selector: "input[nz-input],textarea[nz-input]", inputs: ["nzBorderless", "nzSize", "nzStepperless", "nzStatus", "disabled"], exportAs: ["nzInput"] }, { kind: "component", type: i6$1.NzInputGroupComponent, selector: "nz-input-group", inputs: ["nzAddOnBeforeIcon", "nzAddOnAfterIcon", "nzPrefixIcon", "nzSuffixIcon", "nzAddOnBefore", "nzAddOnAfter", "nzPrefix", "nzStatus", "nzSuffix", "nzSize", "nzSearch", "nzCompact"], exportAs: ["nzInputGroup"] }, { kind: "directive", type: i6$1.NzInputGroupWhitSuffixOrPrefixDirective, selector: "nz-input-group[nzSuffix], nz-input-group[nzPrefix]" }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$2.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "ngmodule", type: NzToolTipModule }, { kind: "directive", type: i11.NzTooltipDirective, selector: "[nz-tooltip]", inputs: ["nzTooltipTitle", "nzTooltipTitleContext", "nz-tooltip", "nzTooltipTrigger", "nzTooltipPlacement", "nzTooltipOrigin", "nzTooltipVisible", "nzTooltipMouseEnterDelay", "nzTooltipMouseLeaveDelay", "nzTooltipOverlayClassName", "nzTooltipOverlayStyle", "nzTooltipArrowPointAtCenter", "cdkConnectedOverlayPush", "nzTooltipColor"], outputs: ["nzTooltipVisibleChange"], exportAs: ["nzTooltip"] }, { kind: "ngmodule", type: NzButtonModule }, { kind: "component", type: i8.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { kind: "directive", type: i4$1.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], nz-icon, [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i10.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }, { kind: "ngmodule", type: NzSwitchModule }, { kind: "ngmodule", type: NzFlexModule }, { kind: "directive", type: i14.NzFlexDirective, selector: "[nz-flex],nz-flex", inputs: ["nzVertical", "nzJustify", "nzAlign", "nzGap", "nzWrap", "nzFlex"], exportAs: ["nzFlex"] }, { kind: "ngmodule", type: NzSelectModule }, { kind: "component", type: i6$2.NzOptionComponent, selector: "nz-option", inputs: ["nzTitle", "nzLabel", "nzValue", "nzKey", "nzDisabled", "nzHide", "nzCustomContent"], exportAs: ["nzOption"] }, { kind: "component", type: i6$2.NzSelectComponent, selector: "nz-select", inputs: ["nzId", "nzSize", "nzStatus", "nzOptionHeightPx", "nzOptionOverflowSize", "nzDropdownClassName", "nzDropdownMatchSelectWidth", "nzDropdownStyle", "nzNotFoundContent", "nzPlaceHolder", "nzPlacement", "nzMaxTagCount", "nzDropdownRender", "nzCustomTemplate", "nzSuffixIcon", "nzClearIcon", "nzRemoveIcon", "nzMenuItemSelectedIcon", "nzTokenSeparators", "nzMaxTagPlaceholder", "nzMaxMultipleCount", "nzMode", "nzFilterOption", "compareWith", "nzAllowClear", "nzBorderless", "nzShowSearch", "nzLoading", "nzAutoFocus", "nzAutoClearSearchValue", "nzServerSearch", "nzDisabled", "nzOpen", "nzSelectOnTab", "nzBackdrop", "nzOptions", "nzShowArrow"], outputs: ["nzOnSearch", "nzScrollToBottom", "nzOpenChange", "nzBlur", "nzFocus"], exportAs: ["nzSelect"] }, { kind: "directive", type: HideIfErrorDirective, selector: "img[hideIfError]" }] });
7831
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.7", type: LoginComponent, isStandalone: true, selector: "login", usesInheritance: true, ngImport: i0, template: "<div nz-row nzJustify=\"center\" class=\"login\">\n <div class=\"form-container\">\n <form nz-flex nzVertical=\"true\" nz-form [formGroup]=\"loginForm\" class=\"login-form\" (ngSubmit)=\"dologin()\">\n <div>\n <div style=\"text-align: center\">\n <img *ngIf=\"logoUrl$ | async as url\" width=\"150px\" [src]=\"url\" hideIfError />\n </div>\n <div class=\"form-field\" style=\"text-align: center; margin-bottom: 20px\">\n <h3 style=\"font-weight: bold; font-size: 20px\">{{ SYSTEM_NAME_LOGIN }}</h3>\n </div>\n </div>\n\n <div nz-row [nzJustify]=\"'center'\">\n <div nz-col nzSm=\"24\" nzMd=\"16\">\n <div nz-flex nzVertical=\"true\">\n @if (isOneUserMultiOrgs) {\n <nz-form-item>\n <nz-form-control nzErrorTip=\"{{ 'REQUIRED' | translate }}\">\n <nz-input-group nzPrefixIcon=\"cluster\" nzHasFeedback=\"false\">\n <nz-select\n nzShowSearch\n nzAllowClear\n [nzBorderless]=\"true\"\n [nzSize]=\"'small'\"\n nzPlaceHolder=\"{{ 'ORG' | translate }}\"\n formControlName=\"orgid\"\n class=\"no-error-border\"\n (nzFocus)=\"onFocusOrg()\"\n >\n @for (item of lstOrg; track $index) {\n <nz-option [nzLabel]=\"item.TreeNodeName!\" [nzValue]=\"item.App_Org_Id\"></nz-option>\n }\n </nz-select>\n </nz-input-group>\n </nz-form-control>\n </nz-form-item>\n }\n\n <nz-form-item>\n <nz-form-control nzErrorTip=\"{{ 'REQUIRED' | translate }}\">\n <nz-input-group nzPrefixIcon=\"user\">\n <input type=\"text\" nz-input formControlName=\"username\" placeholder=\"{{ 'USERNAME' | translate }}\" />\n </nz-input-group>\n </nz-form-control>\n </nz-form-item>\n\n <nz-form-item>\n <nz-form-control nzErrorTip=\"{{ 'REQUIRED' | translate }}\">\n <nz-input-group\n nzPrefixIcon=\"lock\"\n [nzSuffix]=\"visible ? suffixTemplateHiddenPassword : suffixTemplateShowPassword\"\n >\n <input\n type=\"{{ passwordType }}\"\n nz-input\n formControlName=\"password\"\n placeholder=\"{{ 'PASSWORD' | translate }}\"\n />\n </nz-input-group>\n </nz-form-control>\n <ng-template #suffixTemplateShowPassword>\n <nz-icon\n nzType=\"eye\"\n nzTheme=\"outline\"\n nz-tooltip\n nzTooltipTitle=\"{{ 'SHOW' | translate }}\"\n nzTooltipPlacement=\"right\"\n (click)=\"visible = !visible; passwordType = 'text'\"\n />\n </ng-template>\n <ng-template #suffixTemplateHiddenPassword>\n <nz-icon\n nzType=\"eye-invisible\"\n nzTheme=\"outline\"\n nz-tooltip\n nzTooltipTitle=\"{{ 'HIDDEN' | translate }}\"\n nzTooltipPlacement=\"right\"\n (click)=\"visible = !visible; passwordType = 'password'\"\n />\n </ng-template>\n </nz-form-item>\n\n <div nz-flex nzVertical=\"true\" nzGap=\"4px\">\n <button nz-button [nzType]=\"'primary'\" nzBlock [nzLoading]=\"loadingService.isLoading\">\n {{ \"LOGIN\" | translate }}\n </button>\n <!-- \n <nz-form-item nzJustify=\"end\">\n <nz-switch formControlName=\"langSwitch\" class=\"nz-switch-both-active-color\" nzCheckedChildren=\"VN\"\n nzUnCheckedChildren=\"EN\" (ngModelChange)=\"changeLanguage($event)\"></nz-switch>\n </nz-form-item> \n -->\n </div>\n </div>\n </div>\n </div>\n </form>\n </div>\n</div>\n\n<img *ngIf=\"bgUrl$ | async as url\" class=\"bg-image\" [src]=\"url\" hideIfError />\n", styles: [":host{display:flex;justify-content:center;align-items:center;height:80vh}.form-container{width:clamp(280px,30vw,420px);box-shadow:0 10px 20px 1px #001a2d59;background-color:#fff;padding:16px}.bg-image{position:fixed;top:0;left:0;width:100vw;height:100vh;object-fit:cover;object-position:center;z-index:-1;pointer-events:none}::ng-deep .login .ant-select-selector{height:auto!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: NzFormModule }, { kind: "directive", type: i4.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i4.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "directive", type: i5.NzFormDirective, selector: "[nz-form]", inputs: ["nzLayout", "nzNoColon", "nzAutoTips", "nzDisableAutoTips", "nzTooltipIcon", "nzLabelAlign", "nzLabelWrap"], exportAs: ["nzForm"] }, { kind: "component", type: i5.NzFormItemComponent, selector: "nz-form-item", exportAs: ["nzFormItem"] }, { kind: "component", type: i5.NzFormControlComponent, selector: "nz-form-control", inputs: ["nzSuccessTip", "nzWarningTip", "nzErrorTip", "nzValidatingTip", "nzExtra", "nzAutoTips", "nzDisableAutoTips", "nzHasFeedback", "nzValidateStatus"], exportAs: ["nzFormControl"] }, { kind: "ngmodule", type: NzInputModule }, { kind: "directive", type: i6$1.NzInputDirective, selector: "input[nz-input],textarea[nz-input]", inputs: ["nzBorderless", "nzSize", "nzStepperless", "nzStatus", "disabled"], exportAs: ["nzInput"] }, { kind: "component", type: i6$1.NzInputGroupComponent, selector: "nz-input-group", inputs: ["nzAddOnBeforeIcon", "nzAddOnAfterIcon", "nzPrefixIcon", "nzSuffixIcon", "nzAddOnBefore", "nzAddOnAfter", "nzPrefix", "nzStatus", "nzSuffix", "nzSize", "nzSearch", "nzCompact"], exportAs: ["nzInputGroup"] }, { kind: "directive", type: i6$1.NzInputGroupWhitSuffixOrPrefixDirective, selector: "nz-input-group[nzSuffix], nz-input-group[nzPrefix]" }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i1$3.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "ngmodule", type: NzToolTipModule }, { kind: "directive", type: i11.NzTooltipDirective, selector: "[nz-tooltip]", inputs: ["nzTooltipTitle", "nzTooltipTitleContext", "nz-tooltip", "nzTooltipTrigger", "nzTooltipPlacement", "nzTooltipOrigin", "nzTooltipVisible", "nzTooltipMouseEnterDelay", "nzTooltipMouseLeaveDelay", "nzTooltipOverlayClassName", "nzTooltipOverlayStyle", "nzTooltipArrowPointAtCenter", "cdkConnectedOverlayPush", "nzTooltipColor"], outputs: ["nzTooltipVisibleChange"], exportAs: ["nzTooltip"] }, { kind: "ngmodule", type: NzButtonModule }, { kind: "component", type: i8.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { kind: "directive", type: i4$1.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], nz-icon, [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i10.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }, { kind: "ngmodule", type: NzSwitchModule }, { kind: "ngmodule", type: NzFlexModule }, { kind: "directive", type: i14.NzFlexDirective, selector: "[nz-flex],nz-flex", inputs: ["nzVertical", "nzJustify", "nzAlign", "nzGap", "nzWrap", "nzFlex"], exportAs: ["nzFlex"] }, { kind: "ngmodule", type: NzSelectModule }, { kind: "component", type: i6$2.NzOptionComponent, selector: "nz-option", inputs: ["nzTitle", "nzLabel", "nzValue", "nzKey", "nzDisabled", "nzHide", "nzCustomContent"], exportAs: ["nzOption"] }, { kind: "component", type: i6$2.NzSelectComponent, selector: "nz-select", inputs: ["nzId", "nzSize", "nzStatus", "nzOptionHeightPx", "nzOptionOverflowSize", "nzDropdownClassName", "nzDropdownMatchSelectWidth", "nzDropdownStyle", "nzNotFoundContent", "nzPlaceHolder", "nzPlacement", "nzMaxTagCount", "nzDropdownRender", "nzCustomTemplate", "nzSuffixIcon", "nzClearIcon", "nzRemoveIcon", "nzMenuItemSelectedIcon", "nzTokenSeparators", "nzMaxTagPlaceholder", "nzMaxMultipleCount", "nzMode", "nzFilterOption", "compareWith", "nzAllowClear", "nzBorderless", "nzShowSearch", "nzLoading", "nzAutoFocus", "nzAutoClearSearchValue", "nzServerSearch", "nzDisabled", "nzOpen", "nzSelectOnTab", "nzBackdrop", "nzOptions", "nzShowArrow"], outputs: ["nzOnSearch", "nzScrollToBottom", "nzOpenChange", "nzBlur", "nzFocus"], exportAs: ["nzSelect"] }, { kind: "directive", type: HideIfErrorDirective, selector: "img[hideIfError]" }] });
7647
7832
  }
7648
7833
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImport: i0, type: LoginComponent, decorators: [{
7649
7834
  type: Component,
@@ -7668,5 +7853,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImpor
7668
7853
  * Generated bundle index. Do not edit.
7669
7854
  */
7670
7855
 
7671
- export { ActionRule, ActionRuleLine, AnimatedDigitComponent, AppGlobals, AppStorage, App_Org, AuthGuard, AuthService, AutoFocusDirective, BarGraphComponent, BaseComponent, BaseGuardChangeComponent, BaseOverlayComponent, Box, Breadcrumb, CheckModel, CommonService, DashcardComponent, DateInputParserDirective, DateTimeHelper, DicDomainPipe, DoughnutGraphComponent, DownloadHelper, ENUM_ResponseType, ExpandableSearchComponent, ExtendCheckbox, ExtendDatePicker, ExtendDateRangePicker, ExtendInput, ExtendInputNumber, ExtendPaginationComponent, ExtendSelectComponent, ExtendTableComponent, ExtendTextArea, GlobalSpinnerComponent, GridFilter, H3Icon, HTTPService, Height, HideIfErrorDirective, HighlightPipe, IconAdd, IconDelete, IconEdit, IconSave, IconSearch, IconView, LayoutComponent, LimitWordsPipe, LineGraphComponent, LoadingService, LoginComponent, NoPermission, NotiService, NullIfEmptyDirective, NumberOnlyDirective, OrderOption, PagingData, PagingModel, PdfViewerComponent, ReadMoreProComponent, RouteMonitorService, SessionManagerService, TableHeader, ThemeService, TokenStorage, TranslateKey, URLs$4 as URLs, UnsavedChangesGuard, UpperCaseFirsLetterEachWordDirective, UppercaseDirective, UppercaseFirstLetterDirective, VscService, WF_TemplateActionRef, WF_TransitionRule, WF_TransitionRuleLine, Width, Workflow, WorkflowAction, WorkflowActionEditorOption, WorkflowActionRef, WorkflowEditorComponent, WorkflowEditorOption, WorkflowStage, WorkflowStageEditorOption, XLSXHelper, authInterceptor };
7856
+ export { ActionRule, ActionRuleLine, AnimatedDigitComponent, AppGlobals, AppStorage, App_Org, AuthGuard, AuthService, AutoFocusDirective, BarGraphComponent, BaseComponent, BaseGuardChangeComponent, BaseOverlayComponent, Box, Breadcrumb, CheckModel, CommonService, CustomNotiComponent, CustomNotiService, DashcardComponent, DateInputParserDirective, DateTimeHelper, DicDomainPipe, DoughnutGraphComponent, DownloadHelper, ENUM_ResponseType, ExpandableSearchComponent, ExtendCheckbox, ExtendDatePicker, ExtendDateRangePicker, ExtendInput, ExtendInputNumber, ExtendPaginationComponent, ExtendSelectComponent, ExtendTableComponent, ExtendTextArea, GlobalSpinnerComponent, GridFilter, H3Icon, HTTPService, Height, HideIfErrorDirective, HighlightPipe, IconAdd, IconDelete, IconEdit, IconSave, IconSearch, IconView, LayoutComponent, LimitWordsPipe, LineGraphComponent, LoadingService, LoginComponent, NoPermission, NotiService, NullIfEmptyDirective, NumberOnlyDirective, OrderOption, PagingData, PagingModel, PdfViewerComponent, ReadMoreProComponent, RouteMonitorService, SessionManagerService, TableHeader, ThemeService, TokenStorage, TranslateKey, URLs$4 as URLs, UnsavedChangesGuard, UpperCaseFirsLetterEachWordDirective, UppercaseDirective, UppercaseFirstLetterDirective, VscService, WF_TemplateActionRef, WF_TransitionRule, WF_TransitionRuleLine, Width, Workflow, WorkflowAction, WorkflowActionEditorOption, WorkflowActionRef, WorkflowEditorComponent, WorkflowEditorOption, WorkflowStage, WorkflowStageEditorOption, XLSXHelper, authInterceptor };
7672
7857
  //# sourceMappingURL=brggroup-share-lib.mjs.map