@sd-angular/core 0.0.861 → 0.0.865

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/bundles/sd-angular-core-image-preview.umd.js +121 -0
  2. package/bundles/sd-angular-core-image-preview.umd.js.map +1 -0
  3. package/bundles/sd-angular-core-image-preview.umd.min.js +2 -0
  4. package/bundles/sd-angular-core-image-preview.umd.min.js.map +1 -0
  5. package/bundles/sd-angular-core-tab-router.umd.js +1 -2
  6. package/bundles/sd-angular-core-tab-router.umd.js.map +1 -1
  7. package/bundles/sd-angular-core-tab-router.umd.min.js +1 -1
  8. package/bundles/sd-angular-core-tab-router.umd.min.js.map +1 -1
  9. package/bundles/sd-angular-core-upload-file.umd.js +8 -7
  10. package/bundles/sd-angular-core-upload-file.umd.js.map +1 -1
  11. package/bundles/sd-angular-core-upload-file.umd.min.js +2 -2
  12. package/bundles/sd-angular-core-upload-file.umd.min.js.map +1 -1
  13. package/bundles/sd-angular-core.umd.js +4 -4
  14. package/bundles/sd-angular-core.umd.js.map +1 -1
  15. package/bundles/sd-angular-core.umd.min.js +1 -1
  16. package/bundles/sd-angular-core.umd.min.js.map +1 -1
  17. package/esm2015/image-preview/index.js +2 -0
  18. package/esm2015/image-preview/sd-angular-core-image-preview.js +7 -0
  19. package/esm2015/image-preview/src/lib/directives/image-preview.directive.js +41 -0
  20. package/esm2015/image-preview/src/lib/image-preview/image-preview.component.js +41 -0
  21. package/esm2015/image-preview/src/lib/image-preview/image-preview.module.js +21 -0
  22. package/esm2015/image-preview/src/public-api.js +5 -0
  23. package/esm2015/public-api.js +2 -1
  24. package/esm2015/tab-router/src/lib/components/tab-router-item/tab-router-item.component.js +2 -2
  25. package/esm2015/tab-router/src/lib/decorators/tab.decorator.js +1 -1
  26. package/esm2015/tab-router/src/lib/pipes/tab-info.pipe.js +1 -2
  27. package/esm2015/upload-file/src/lib/upload-file.component.js +3 -3
  28. package/esm2015/upload-file/src/lib/upload-file.module.js +4 -2
  29. package/fesm2015/sd-angular-core-image-preview.js +107 -0
  30. package/fesm2015/sd-angular-core-image-preview.js.map +1 -0
  31. package/fesm2015/sd-angular-core-tab-router.js +1 -2
  32. package/fesm2015/sd-angular-core-tab-router.js.map +1 -1
  33. package/fesm2015/sd-angular-core-upload-file.js +5 -3
  34. package/fesm2015/sd-angular-core-upload-file.js.map +1 -1
  35. package/fesm2015/sd-angular-core.js +1 -0
  36. package/fesm2015/sd-angular-core.js.map +1 -1
  37. package/image-preview/index.d.ts +1 -0
  38. package/image-preview/package.json +12 -0
  39. package/image-preview/sd-angular-core-image-preview.d.ts +6 -0
  40. package/image-preview/sd-angular-core-image-preview.metadata.json +1 -0
  41. package/image-preview/src/lib/directives/image-preview.directive.d.ts +17 -0
  42. package/image-preview/src/lib/image-preview/image-preview.component.d.ts +22 -0
  43. package/image-preview/src/lib/image-preview/image-preview.module.d.ts +2 -0
  44. package/image-preview/src/public-api.d.ts +1 -0
  45. package/package.json +1 -1
  46. package/public-api.d.ts +1 -0
  47. package/{sd-angular-core-0.0.861.tgz → sd-angular-core-0.0.865.tgz} +0 -0
  48. package/tab-router/sd-angular-core-tab-router.metadata.json +1 -1
  49. package/tab-router/src/lib/decorators/tab.decorator.d.ts +1 -0
  50. package/upload-file/sd-angular-core-upload-file.metadata.json +1 -1
@@ -8,6 +8,7 @@ import { SdTranslateModule } from '@sd-angular/core/translate';
8
8
  import { MatIconModule } from '@angular/material/icon';
9
9
  import { MatButtonModule } from '@angular/material/button';
10
10
  import { DragDropModule } from '@angular/cdk/drag-drop';
11
+ import { SdImagePreviewModule } from '@sd-angular/core/image-preview';
11
12
  export class SdUploadFileModule {
12
13
  }
13
14
  SdUploadFileModule.decorators = [
@@ -19,7 +20,8 @@ SdUploadFileModule.decorators = [
19
20
  MatIconModule,
20
21
  DragDropModule,
21
22
  SdNotifyModule,
22
- SdTranslateModule
23
+ SdTranslateModule,
24
+ SdImagePreviewModule
23
25
  ],
24
26
  declarations: [
25
27
  SdUploadFile
@@ -30,4 +32,4 @@ SdUploadFileModule.decorators = [
30
32
  providers: []
31
33
  },] }
32
34
  ];
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWZpbGUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IkM6L1VzZXJzL3VzZXIvRG9jdW1lbnRzL2xpYi1jb3JlLXVpL3Byb2plY3RzL3NkLWNvcmUvdXBsb2FkLWZpbGUvIiwic291cmNlcyI6WyJzcmMvbGliL3VwbG9hZC1maWxlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMzRCxPQUFPLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFxQnhELE1BQU0sT0FBTyxrQkFBa0I7OztZQW5COUIsUUFBUSxTQUFDO2dCQUNSLE9BQU8sRUFBRTtvQkFDUCxZQUFZO29CQUNaLG9CQUFvQixDQUFDLE9BQU8sRUFBRTtvQkFDOUIsZUFBZTtvQkFDZixhQUFhO29CQUNiLGNBQWM7b0JBQ2QsY0FBYztvQkFDZCxpQkFBaUI7aUJBQ2xCO2dCQUNELFlBQVksRUFBRTtvQkFDWixZQUFZO2lCQUNiO2dCQUNELE9BQU8sRUFBRTtvQkFDUCxZQUFZO2lCQUNiO2dCQUNELFNBQVMsRUFBRSxFQUNWO2FBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBEZXZpY2VEZXRlY3Rvck1vZHVsZSB9IGZyb20gJ25neC1kZXZpY2UtZGV0ZWN0b3InO1xyXG5pbXBvcnQgJ0BzZC1hbmd1bGFyL2NvcmUvdHlwaW5nJztcclxuaW1wb3J0IHsgU2RVcGxvYWRGaWxlIH0gZnJvbSAnLi91cGxvYWQtZmlsZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTZE5vdGlmeU1vZHVsZSB9IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvbm90aWZ5JztcclxuaW1wb3J0IHsgU2RUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL3RyYW5zbGF0ZSc7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcclxuaW1wb3J0IHsgRHJhZ0Ryb3BNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgRGV2aWNlRGV0ZWN0b3JNb2R1bGUuZm9yUm9vdCgpLFxyXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICAgIERyYWdEcm9wTW9kdWxlLFxyXG4gICAgU2ROb3RpZnlNb2R1bGUsXHJcbiAgICBTZFRyYW5zbGF0ZU1vZHVsZVxyXG4gIF0sXHJcbiAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICBTZFVwbG9hZEZpbGVcclxuICBdLFxyXG4gIGV4cG9ydHM6IFtcclxuICAgIFNkVXBsb2FkRmlsZVxyXG4gIF0sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2RVcGxvYWRGaWxlTW9kdWxlIHsgfVxyXG4iXX0=
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWZpbGUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IkM6L1VzZXJzL3VzZXIvRG9jdW1lbnRzL2xpYi1jb3JlLXVpL3Byb2plY3RzL3NkLWNvcmUvdXBsb2FkLWZpbGUvIiwic291cmNlcyI6WyJzcmMvbGliL3VwbG9hZC1maWxlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMzRCxPQUFPLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFzQnRFLE1BQU0sT0FBTyxrQkFBa0I7OztZQXBCOUIsUUFBUSxTQUFDO2dCQUNSLE9BQU8sRUFBRTtvQkFDUCxZQUFZO29CQUNaLG9CQUFvQixDQUFDLE9BQU8sRUFBRTtvQkFDOUIsZUFBZTtvQkFDZixhQUFhO29CQUNiLGNBQWM7b0JBQ2QsY0FBYztvQkFDZCxpQkFBaUI7b0JBQ2pCLG9CQUFvQjtpQkFDckI7Z0JBQ0QsWUFBWSxFQUFFO29CQUNaLFlBQVk7aUJBQ2I7Z0JBQ0QsT0FBTyxFQUFFO29CQUNQLFlBQVk7aUJBQ2I7Z0JBQ0QsU0FBUyxFQUFFLEVBQ1Y7YUFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IERldmljZURldGVjdG9yTW9kdWxlIH0gZnJvbSAnbmd4LWRldmljZS1kZXRlY3Rvcic7XHJcbmltcG9ydCAnQHNkLWFuZ3VsYXIvY29yZS90eXBpbmcnO1xyXG5pbXBvcnQgeyBTZFVwbG9hZEZpbGUgfSBmcm9tICcuL3VwbG9hZC1maWxlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNkTm90aWZ5TW9kdWxlIH0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS9ub3RpZnknO1xyXG5pbXBvcnQgeyBTZFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvdHJhbnNsYXRlJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBEcmFnRHJvcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xyXG5pbXBvcnQgeyBTZEltYWdlUHJldmlld01vZHVsZSB9IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvaW1hZ2UtcHJldmlldyc7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIERldmljZURldGVjdG9yTW9kdWxlLmZvclJvb3QoKSxcclxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcclxuICAgIE1hdEljb25Nb2R1bGUsXHJcbiAgICBEcmFnRHJvcE1vZHVsZSxcclxuICAgIFNkTm90aWZ5TW9kdWxlLFxyXG4gICAgU2RUcmFuc2xhdGVNb2R1bGUsXHJcbiAgICBTZEltYWdlUHJldmlld01vZHVsZVxyXG4gIF0sXHJcbiAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICBTZFVwbG9hZEZpbGVcclxuICBdLFxyXG4gIGV4cG9ydHM6IFtcclxuICAgIFNkVXBsb2FkRmlsZVxyXG4gIF0sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2RVcGxvYWRGaWxlTW9kdWxlIHsgfVxyXG4iXX0=
@@ -0,0 +1,107 @@
1
+ import { Component, Inject, Directive, ElementRef, Input, HostListener, NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { MatDialogRef, MAT_DIALOG_DATA, MatDialog, MatDialogModule } from '@angular/material/dialog';
4
+ import { MatIconModule } from '@angular/material/icon';
5
+
6
+ class ImagePreviewComponent {
7
+ constructor(dialogRef, data) {
8
+ this.dialogRef = dialogRef;
9
+ this.data = data;
10
+ }
11
+ ngOnInit() {
12
+ this.currentImageUrl = typeof this.data.currentImage === 'string' ? this.data.currentImage : this.data.currentImage.previewSrc || this.data.currentImage.src;
13
+ }
14
+ next() {
15
+ const currentIdx = this.data.images.findIndex((image) => (image.previewSrc || image.src) === this.currentImageUrl);
16
+ if (currentIdx === this.data.images.length - 1) {
17
+ this.currentImageUrl = this.data.images[0].previewSrc || this.data.images[0].src;
18
+ }
19
+ else {
20
+ this.currentImageUrl = this.data.images[currentIdx + 1].previewSrc || this.data.images[currentIdx + 1].src;
21
+ }
22
+ }
23
+ prev() {
24
+ const currentIdx = this.data.images.findIndex((image) => (image.previewSrc || image.src) === this.currentImageUrl);
25
+ if (currentIdx === 0) {
26
+ this.currentImageUrl = this.data.images[this.data.images.length - 1].previewSrc || this.data.images[this.data.images.length - 1].src;
27
+ }
28
+ else {
29
+ this.currentImageUrl = this.data.images[currentIdx - 1].previewSrc || this.data.images[currentIdx - 1].src;
30
+ }
31
+ }
32
+ }
33
+ ImagePreviewComponent.decorators = [
34
+ { type: Component, args: [{
35
+ selector: 'app-image-preview',
36
+ template: "<h1 mat-dialog-title class=\"d-flex\">\r\n <mat-icon\r\n mat-dialog-close\r\n role=\"img\"\r\n class=\"mat-icon notranslate material-icons mat-icon-no-color ml-auto\"\r\n >close</mat-icon\r\n >\r\n</h1>\r\n<div mat-dialog-content class=\"h-100 position-relative\">\r\n <ng-container *ngIf=\"data?.images?.length\">\r\n <span class=\"material-icons-outlined position-absolute prev\" (click)=\"prev()\">\r\n arrow_back_ios\r\n </span>\r\n <span class=\"material-icons-outlined position-absolute next\" (click)=\"next()\">\r\n arrow_forward_ios\r\n </span>\r\n </ng-container>\r\n <img\r\n [src]=\"currentImageUrl\"\r\n class=\"image-preview_image\"\r\n />\r\n</div>\r\n",
37
+ styles: [".image-prevew-panel .mat-dialog-container{padding:0}:host{display:flex;flex-direction:column;height:100%}.image-preview_image{-o-object-fit:contain;display:block;height:100%;margin:0 auto;object-fit:contain;width:90%}.material-icons-outlined{cursor:pointer}.material-icons-outlined.prev{left:5px;top:50%;transform:translateY(-50%)}.material-icons-outlined.next{right:5px;top:50%;transform:translateY(-50%)}"]
38
+ },] }
39
+ ];
40
+ ImagePreviewComponent.ctorParameters = () => [
41
+ { type: MatDialogRef },
42
+ { type: undefined, decorators: [{ type: Inject, args: [MAT_DIALOG_DATA,] }] }
43
+ ];
44
+
45
+ class ImagePreviewDirective {
46
+ constructor(el, dialog) {
47
+ this.el = el;
48
+ this.dialog = dialog;
49
+ this.images = [];
50
+ }
51
+ onClick() {
52
+ let currentImage;
53
+ currentImage = this.el.nativeElement.src;
54
+ if (this.images.length && this.sdPreviewCurrentIdx >= 0) {
55
+ currentImage = this.images[this.sdPreviewCurrentIdx];
56
+ }
57
+ this.dialog.open(ImagePreviewComponent, {
58
+ data: { currentImage, images: this.images },
59
+ backdropClass: ["image-prevew-backdrop"],
60
+ panelClass: "image-prevew-panel",
61
+ width: "600px",
62
+ maxWidth: "90%",
63
+ height: "600px",
64
+ maxHeight: "90%",
65
+ });
66
+ }
67
+ }
68
+ ImagePreviewDirective.decorators = [
69
+ { type: Directive, args: [{
70
+ selector: "[sdImagePreview]",
71
+ },] }
72
+ ];
73
+ ImagePreviewDirective.ctorParameters = () => [
74
+ { type: ElementRef },
75
+ { type: MatDialog }
76
+ ];
77
+ ImagePreviewDirective.propDecorators = {
78
+ images: [{ type: Input, args: ["sdImagePreview",] }],
79
+ sdPreviewCurrentIdx: [{ type: Input }],
80
+ onClick: [{ type: HostListener, args: ["click",] }]
81
+ };
82
+
83
+ class SdImagePreviewModule {
84
+ }
85
+ SdImagePreviewModule.decorators = [
86
+ { type: NgModule, args: [{
87
+ declarations: [ImagePreviewComponent, ImagePreviewDirective],
88
+ exports: [ImagePreviewDirective],
89
+ imports: [
90
+ CommonModule,
91
+ MatDialogModule,
92
+ MatIconModule
93
+ ],
94
+ entryComponents: [ImagePreviewComponent]
95
+ },] }
96
+ ];
97
+
98
+ /*
99
+ * Public API Surface of superdev-angular-core
100
+ */
101
+
102
+ /**
103
+ * Generated bundle index. Do not edit.
104
+ */
105
+
106
+ export { SdImagePreviewModule, ImagePreviewComponent as ɵa, ImagePreviewDirective as ɵb };
107
+ //# sourceMappingURL=sd-angular-core-image-preview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sd-angular-core-image-preview.js","sources":["../../../../projects/sd-core/image-preview/src/lib/image-preview/image-preview.component.ts","../../../../projects/sd-core/image-preview/src/lib/directives/image-preview.directive.ts","../../../../projects/sd-core/image-preview/src/lib/image-preview/image-preview.module.ts","../../../../projects/sd-core/image-preview/src/public-api.ts","../../../../projects/sd-core/image-preview/sd-angular-core-image-preview.ts"],"sourcesContent":["import { Component, Inject, OnInit } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\n\r\nexport interface Data {\r\n currentImage: ImagePreview | string;\r\n images: Array<ImagePreview | string>\r\n}\r\n\r\nexport interface ImagePreview {\r\n extension: string;\r\n file: File;\r\n fileName: string;\r\n previewSrc?: string;\r\n src?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'app-image-preview',\r\n templateUrl: './image-preview.component.html',\r\n styleUrls: ['./image-preview.component.scss']\r\n})\r\nexport class ImagePreviewComponent implements OnInit {\r\n currentImageUrl: string;\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef<ImagePreviewComponent>,\r\n @Inject(MAT_DIALOG_DATA) public data: Data\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.currentImageUrl = typeof this.data.currentImage === 'string' ? this.data.currentImage : this.data.currentImage.previewSrc || this.data.currentImage.src;\r\n }\r\n\r\n next(): void {\r\n const currentIdx = this.data.images.findIndex((image: ImagePreview )=> (image.previewSrc || image.src) === this.currentImageUrl);\r\n if(currentIdx === this.data.images.length - 1) {\r\n this.currentImageUrl = (this.data.images[0] as ImagePreview).previewSrc || (this.data.images[0] as ImagePreview).src\r\n } else {\r\n this.currentImageUrl = (this.data.images[currentIdx + 1] as ImagePreview).previewSrc || (this.data.images[currentIdx + 1] as ImagePreview).src;\r\n }\r\n }\r\n\r\n prev(): void {\r\n const currentIdx = this.data.images.findIndex((image: ImagePreview )=> (image.previewSrc || image.src) === this.currentImageUrl);\r\n if(currentIdx === 0) {\r\n this.currentImageUrl = (this.data.images[this.data.images.length - 1] as ImagePreview).previewSrc || (this.data.images[this.data.images.length - 1] as ImagePreview).src\r\n } else {\r\n this.currentImageUrl = (this.data.images[currentIdx - 1] as ImagePreview).previewSrc || (this.data.images[currentIdx - 1] as ImagePreview).src;\r\n }\r\n }\r\n\r\n}\r\n","import { Directive, ElementRef, HostListener, Input } from \"@angular/core\";\r\nimport { MatDialog } from \"@angular/material/dialog\";\r\nimport { ImagePreviewComponent } from \"../image-preview/image-preview.component\";\r\n\r\nexport interface ImagePreview {\r\n extension: string;\r\n file: File;\r\n fileName: string;\r\n previewSrc?: string;\r\n src?: string;\r\n}\r\n\r\n@Directive({\r\n selector: \"[sdImagePreview]\",\r\n})\r\nexport class ImagePreviewDirective {\r\n @Input(\"sdImagePreview\") images: Array<ImagePreview | string> = [];\r\n @Input() sdPreviewCurrentIdx: number;\r\n\r\n constructor(private el: ElementRef, public dialog: MatDialog) {}\r\n\r\n @HostListener(\"click\") onClick() {\r\n let currentImage: string | ImagePreview;\r\n currentImage = this.el.nativeElement.src;\r\n if (this.images.length && this.sdPreviewCurrentIdx >= 0) {\r\n currentImage = this.images[this.sdPreviewCurrentIdx];\r\n }\r\n this.dialog.open(ImagePreviewComponent, {\r\n data: { currentImage, images: this.images },\r\n backdropClass: [\"image-prevew-backdrop\"],\r\n panelClass: \"image-prevew-panel\",\r\n width: \"600px\",\r\n maxWidth: \"90%\",\r\n height: \"600px\",\r\n maxHeight: \"90%\",\r\n });\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ImagePreviewComponent } from './image-preview.component';\r\nimport { ImagePreviewDirective } from '../directives/image-preview.directive';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatIconModule } from '@angular/material/icon';\r\n\r\n\r\n@NgModule({\r\n declarations: [ImagePreviewComponent, ImagePreviewDirective],\r\n exports: [ImagePreviewDirective],\r\n imports: [\r\n CommonModule,\r\n MatDialogModule,\r\n MatIconModule\r\n ],\r\n entryComponents: [ImagePreviewComponent]\r\n})\r\nexport class SdImagePreviewModule { }\r\n","/*\r\n * Public API Surface of superdev-angular-core\r\n */\r\n\r\nexport * from './lib/image-preview/image-preview.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n\nexport {ImagePreviewDirective as ɵb} from './src/lib/directives/image-preview.directive';\nexport {ImagePreviewComponent as ɵa} from './src/lib/image-preview/image-preview.component';"],"names":[],"mappings":"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"}
@@ -151,7 +151,7 @@ class SdTabRouterItemComponent {
151
151
  SdTabRouterItemComponent.decorators = [
152
152
  { type: Component, args: [{
153
153
  selector: 'sd-tab-router-item',
154
- template: "<a [routerLink]=\"[tab.url]\" [queryParams]=\"tab.queryParams\" [state]=\"{ switchTab: true }\"\r\n class=\"tab-router__item d-flex align-items-center\" [ngClass]=\"{\r\n 'tab-router__item--active': tab.isActive\r\n }\">\r\n <ng-container *ngIf=\"tab | sdTabInfo | async as tabInfo\">\r\n <div class=\"\r\n tab-router__icon\r\n d-flex\r\n align-items-center\r\n justify-content-center\r\n mr-8\r\n \" [ngStyle]=\"{\r\n 'background-color': tabInfo.color\r\n }\" matTooltip=\"{{ tabInfo.name }}\" matTooltipPosition=\"below\" matTooltipShowDelay=\"1000\">\r\n <ng-template #parentIcon>{{ tabInfo.initialName || 'SD' }}</ng-template>\r\n </div>\r\n <div class=\"flex-1\">\r\n <div class=\"tab-router__name\">{{ tabInfo.name }}</div>\r\n </div>\r\n <button type=\"button\" class=\"\r\n tab-router__close\r\n d-flex\r\n align-items-center\r\n justify-content-center\r\n ml-4\r\n \" (click)=\"close($event)\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </ng-container>\r\n\r\n</a>",
154
+ template: "<a [routerLink]=\"[tab.url]\" [queryParams]=\"tab.queryParams\" [state]=\"{ switchTab: true }\"\r\n class=\"tab-router__item d-flex align-items-center\" [ngClass]=\"{\r\n 'tab-router__item--active': tab.isActive\r\n }\">\r\n <ng-container *ngIf=\"tab | sdTabInfo | async as tabInfo\">\r\n <div class=\"\r\n tab-router__icon\r\n d-flex\r\n align-items-center\r\n justify-content-center\r\n mr-8\r\n \" [ngStyle]=\"{\r\n 'background-color': tabInfo.color\r\n }\" matTooltip=\"{{ tabInfo.name }}\" matTooltipPosition=\"below\" matTooltipShowDelay=\"1000\">\r\n {{ tabInfo.initialName || 'SD' }}\r\n </div>\r\n <div class=\"flex-1\">\r\n <div class=\"tab-router__name\">{{ tabInfo.name }}</div>\r\n </div>\r\n <button type=\"button\" class=\"\r\n tab-router__close\r\n d-flex\r\n align-items-center\r\n justify-content-center\r\n ml-4\r\n \" (click)=\"close($event)\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </ng-container>\r\n\r\n</a>",
155
155
  styles: [":host{flex:1 1 auto;max-width:240px;position:relative}:host:after{background:#dde0e5;bottom:0;content:\"\";height:16px;margin:auto;position:absolute;right:0;top:0;width:1px}:host:last-child:after{content:none}.flex-1{flex:1}.tab-router__icon{background-color:#5c6bc0;border-radius:2px;color:#fff;font-size:10px;height:16px;line-height:1;text-transform:uppercase;width:16px}.tab-router__icon .mat-icon{font-size:10px;height:10px;width:10px}.tab-router__close{background:none;border:0;border-radius:50%;color:#757575;height:16px;outline:none;width:16px}.tab-router__close:hover{background-color:rgba(0,0,0,.12)}.tab-router__close .mat-icon{font-size:12px;height:12px;width:12px}.tab-router__item{background:#f2f3f4;color:inherit;font-size:12px;line-height:16px;padding:16px 16px 8px;text-decoration:none}.tab-router__item:hover{background-color:#fff}.tab-router__name{-webkit-box-orient:vertical;-webkit-line-clamp:1;display:-webkit-box;overflow:hidden;text-overflow:ellipsis}.tab-router__item--active{background-color:#fff;border-radius:8px 8px 0 0}"]
156
156
  },] }
157
157
  ];
@@ -393,7 +393,6 @@ class SdTabInfoPipe {
393
393
  transform(tab) {
394
394
  return this.tabRouterService.builders.pipe(map(builders => {
395
395
  const builder = builders.find(e => e.component === tab.component);
396
- console.log(builders, builder, tab);
397
396
  if (builder) {
398
397
  const { url, params, queryParams } = tab;
399
398
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"sd-angular-core-tab-router.js","sources":["../../../../projects/sd-core/tab-router/src/lib/events/tab-router.event.ts","../../../../projects/sd-core/tab-router/src/lib/services/tab-router.service.ts","../../../../projects/sd-core/tab-router/src/lib/services/tab-decorator.service.ts","../../../../projects/sd-core/tab-router/src/lib/decorators/tab.decorator.ts","../../../../projects/sd-core/tab-router/src/lib/components/tab-router-item/tab-router-item.component.ts","../../../../projects/sd-core/tab-router/src/lib/components/tab-router-nav/tab-router-nav.component.ts","../../../../projects/sd-core/tab-router/src/lib/components/tab-router-outlet/tab-router-outlet.component.ts","../../../../projects/sd-core/tab-router/src/lib/pipes/tab-info.pipe.ts","../../../../projects/sd-core/tab-router/src/lib/tab-router.module.ts","../../../../projects/sd-core/tab-router/src/public-api.ts","../../../../projects/sd-core/tab-router/sd-angular-core-tab-router.ts"],"sourcesContent":["import { SdTab } from '../models/tab-router.model';\r\n\r\nexport class SdTabBase {\r\n #tab: SdTab | null;\r\n\r\n constructor(tab: SdTab | null) {\r\n this.#tab = tab;\r\n }\r\n\r\n get tab(): SdTab | null {\r\n return this.#tab;\r\n }\r\n}\r\n\r\nexport class SdTabActivated extends SdTabBase {}\r\n\r\nexport class SdTabDeactivated extends SdTabBase {}\r\n\r\nexport declare type SdTabEvent = SdTabActivated | SdTabDeactivated;\r\n","import { Injectable, Type } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { SdTab } from '../models/tab-router.model';\r\nimport { SdTabAction } from '../actions/tab-router.action';\r\nimport { SdTabEvent, SdTabBase } from '../events/tab-router.event';\r\nimport { SdNotifyService } from '@sd-angular/core/notify';\r\nimport { SdTabComponentBuilder } from '../decorators/tab.decorator';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SdTabRouterService {\r\n events = new BehaviorSubject<SdTabEvent>(new SdTabBase(null));\r\n actions = new BehaviorSubject<SdTabAction | null>(null);\r\n builders = new BehaviorSubject<SdTabComponentBuilder[]>([]);\r\n\r\n #currentTab: SdTab | null = null;\r\n #componentBuilders: SdTabComponentBuilder[] = [];\r\n constructor(private notifyService: SdNotifyService) {\r\n }\r\n\r\n addBuilder = (builder: SdTabComponentBuilder) => {\r\n if (!this.#componentBuilders.some(e => e.component === builder.component)) {\r\n this.#componentBuilders.push(builder);\r\n this.builders.next(this.#componentBuilders);\r\n }\r\n }\r\n\r\n get currentTab() {\r\n return this.#currentTab;\r\n }\r\n\r\n get key() {\r\n return this.#currentTab?.key || null;\r\n }\r\n\r\n // select = (tabOrKey: string | SdTab): void => {\r\n // const tab = this.#tabs.find(e => {\r\n // if (typeof (tabOrKey) === 'string') {\r\n // return e.key === tabOrKey;\r\n // }\r\n // return e.key === tabOrKey?.key;\r\n // });\r\n // if (tab) {\r\n // this.#currentTab = tab;\r\n // }\r\n // }\r\n\r\n // add = (tab: SdTab): void => {\r\n // if (!tab.key) {\r\n // this.notifyService.notify.warning('Tab key is required');\r\n // }\r\n // if (!tab.component) {\r\n // this.notifyService.notify.warning('Tab component is required');\r\n // }\r\n // const existedTab = this.#tabs.find(e => e.key === tab.key);\r\n // if (!existedTab) {\r\n // this.#tabs.push(tab);\r\n // this.select(tab);\r\n // } else {\r\n // this.select(existedTab);\r\n // }\r\n // }\r\n\r\n // remove = (tabOrKey: string | SdTab): void => {\r\n // this.#tabs = this.#tabs.filter(e => {\r\n // if (typeof (tabOrKey) === 'string') {\r\n // return e.key !== tabOrKey;\r\n // }\r\n // return e.key !== tabOrKey?.key;\r\n // });\r\n // }\r\n\r\n setCurrentTab = (tab: SdTab): void => {\r\n this.#currentTab = tab;\r\n }\r\n\r\n pushEvent = (tab: SdTab, Event: Type<SdTabEvent>) => {\r\n this.events.next(new Event(tab));\r\n }\r\n\r\n setOptions = () => { };\r\n\r\n close = (tab?: SdTab) => {\r\n if (tab) {\r\n this.actions.next({\r\n type: 'close',\r\n tab,\r\n });\r\n } else if (this.#currentTab) {\r\n this.actions.next({\r\n type: 'close',\r\n tab: this.#currentTab,\r\n });\r\n }\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { SdTabRouterService } from './tab-router.service';\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SdTabDecoratorService {\r\n static tabRouterService = new BehaviorSubject<SdTabRouterService>(undefined);\r\n constructor(tabRouterService: SdTabRouterService) {\r\n SdTabDecoratorService.tabRouterService.next(tabRouterService);\r\n }\r\n}\r\n","import { Type } from '@angular/core';\r\nimport { takeWhile } from 'rxjs/operators';\r\nimport { SdTabDecoratorService } from '../services/tab-decorator.service';\r\n\r\nexport declare interface SdTabComponentBuilder {\r\n component: Type<any>;\r\n name: string | ((args: { url: string, params: any, queryParams: any }) => string);\r\n initialName: string | ((args: { url: string, params: any, queryParams: any }) => string);\r\n tooltip?: string | ((args: { url: string, params: any, queryParams: any }) => string);\r\n color?: string | ((args: { url: string, params: any, queryParams: any }) => string);\r\n}\r\n\r\nexport function SdTabComponent<T>(builder: SdTabComponentBuilder) {\r\n return (constructor: T) => {\r\n SdTabDecoratorService.tabRouterService.pipe(takeWhile(service => service !== undefined && service !== null)).subscribe(service => {\r\n service.addBuilder(builder);\r\n });\r\n };\r\n}\r\n","import { Component, Input } from '@angular/core';\r\n\r\nimport { SdTab } from '../../models/tab-router.model';\r\nimport { SdTabRouterService } from '../../services/tab-router.service';\r\n\r\n@Component({\r\n selector: 'sd-tab-router-item',\r\n templateUrl: './tab-router-item.component.html',\r\n styleUrls: ['./tab-router-item.component.scss'],\r\n})\r\nexport class SdTabRouterItemComponent {\r\n @Input() tab: SdTab;\r\n\r\n constructor(private tabRouterService: SdTabRouterService) {}\r\n\r\n close = (event: Event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.tabRouterService.close(this.tab);\r\n }\r\n}\r\n","import {\r\n Component,\r\n ElementRef,\r\n HostListener,\r\n Input,\r\n ViewChild,\r\n} from '@angular/core';\r\n\r\nimport { SdTab } from '../../models/tab-router.model';\r\n\r\n@Component({\r\n selector: 'sd-tab-router-nav',\r\n templateUrl: './tab-router-nav.component.html',\r\n styleUrls: ['./tab-router-nav.component.scss'],\r\n})\r\nexport class SdTabRouterNavComponent {\r\n @ViewChild('tabRouterNav') tabRouterNav: ElementRef;\r\n\r\n @Input() tabs: SdTab[];\r\n mode: 'default' | 'compact' = 'default';\r\n\r\n constructor() {}\r\n\r\n @HostListener('window:resize', ['$event'])\r\n onResize(event): void {\r\n this.checkUI();\r\n }\r\n\r\n checkUI = () => {\r\n const width = this.tabRouterNav.nativeElement.clientWidth;\r\n const nameWidth = (width - this.tabs.length * 64) / this.tabs.length;\r\n if (nameWidth <= 20) {\r\n this.mode = 'compact';\r\n } else {\r\n this.mode = 'default';\r\n }\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Compiler,\r\n Component,\r\n Injector,\r\n NgModuleRef,\r\n OnDestroy,\r\n OnInit,\r\n Type,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport {\r\n ActivatedRoute,\r\n ActivatedRouteSnapshot,\r\n ChildrenOutletContexts,\r\n // ChildrenOutletContexts,\r\n Event,\r\n NavigationEnd,\r\n PRIMARY_OUTLET,\r\n Router,\r\n RoutesRecognized,\r\n} from '@angular/router';\r\nimport { SdNotifyService } from '@sd-angular/core/notify';\r\nimport {\r\n SdTabActivated,\r\n SdTabDeactivated,\r\n} from '../../events/tab-router.event';\r\n\r\nimport { SdTab } from '../../models/tab-router.model';\r\nimport { SdTabAction } from '../../actions/tab-router.action';\r\nimport { SdTabRouterService } from '../../services/tab-router.service';\r\nimport { SdTabRouterNavComponent } from '../tab-router-nav/tab-router-nav.component';\r\nimport { Subscription } from 'rxjs';\r\nimport { SdTabDecoratorService } from '../../services/tab-decorator.service';\r\nimport { filter } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'sd-tab-router-outlet',\r\n templateUrl: './tab-router-outlet.component.html',\r\n styleUrls: ['./tab-router-outlet.component.scss'],\r\n // changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SdTabRouterOutletComponent implements OnDestroy {\r\n @ViewChild('tabRouterNav') tabRouterNav: SdTabRouterNavComponent;\r\n tabs: SdTab[] = [];\r\n\r\n #rootRoute: ActivatedRoute;\r\n #subscription = new Subscription();\r\n #firstLoad = true;\r\n constructor(\r\n private router: Router,\r\n private activatedRoute: ActivatedRoute,\r\n private cd: ChangeDetectorRef,\r\n private injector: Injector,\r\n private compiler: Compiler,\r\n private parentContexts: ChildrenOutletContexts,\r\n private tabDecoratorService: SdTabDecoratorService,\r\n private tabRouterService: SdTabRouterService,\r\n private sdNotifyService: SdNotifyService\r\n ) {\r\n this.#subscription.add(router.events.pipe(filter(event => event instanceof RoutesRecognized || event instanceof NavigationEnd))\r\n .subscribe(async (event: RoutesRecognized | NavigationEnd) => {\r\n if (this.#firstLoad && event instanceof NavigationEnd) {\r\n this.#firstLoad = false;\r\n const route = this.#getActivatedRouteSnapshot(this.activatedRoute.snapshot);\r\n this.#rootRoute = this.router.routerState.root;\r\n await this.#activeRoute(event.urlAfterRedirects || event.url, route);\r\n return;\r\n }\r\n if (!this.#firstLoad && event instanceof RoutesRecognized) {\r\n const route = this.#getActivatedRouteSnapshot(event.state.root);\r\n this.#rootRoute = this.router.routerState.root;\r\n await this.#activeRoute(event.urlAfterRedirects || event.url, route);\r\n }\r\n })\r\n );\r\n\r\n this.#subscription.add(tabRouterService.actions.subscribe((event: SdTabAction | null) => {\r\n if (event && event.type === 'close') {\r\n this.#closeTab(event.tab);\r\n }\r\n }));\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n #closeTab = (tab: SdTab) => {\r\n this.tabs = this.tabs.filter(({ key }) => key !== tab.key);\r\n if (tab.isActive) {\r\n const lastTab = this.tabs[this.tabs.length - 1];\r\n if (lastTab) {\r\n this.router.navigateByUrl(lastTab.url, {\r\n state: {\r\n switchTab: true,\r\n },\r\n });\r\n } else {\r\n this.router.navigateByUrl('/', {\r\n state: {\r\n switchTab: true,\r\n },\r\n });\r\n }\r\n } else {\r\n this.tabRouterNav?.checkUI();\r\n this.cd.markForCheck();\r\n }\r\n }\r\n\r\n #activeRoute = async (url: string, route: ActivatedRouteSnapshot | null) => {\r\n if (!route?.component) {\r\n return;\r\n }\r\n const component = route.component as Type<any>;\r\n const queryParams = {\r\n ...(route.queryParams || {}),\r\n };\r\n const params = {\r\n ...(route.params || {}),\r\n };\r\n\r\n let existedIndex = -1;\r\n this.tabs.forEach((tab: SdTab, index: number) => {\r\n if (tab.key === url) {\r\n tab.isActive = true;\r\n existedIndex = index;\r\n } else {\r\n if (tab.isActive) {\r\n this.tabRouterService.pushEvent(tab, SdTabDeactivated);\r\n }\r\n tab.isActive = false;\r\n }\r\n });\r\n\r\n const currentNavigation = this.router.getCurrentNavigation();\r\n if (existedIndex >= 0 && currentNavigation?.extras?.state?.switchTab) {\r\n const existedTab = this.tabs[existedIndex];\r\n this.tabRouterService.setCurrentTab(existedTab);\r\n this.tabRouterService.pushEvent(existedTab, SdTabActivated);\r\n } else {\r\n if (typeof route?.parent?.routeConfig?.loadChildren === 'function') {\r\n const module = await route.parent.routeConfig.loadChildren();\r\n const factory = await this.compiler.compileModuleAsync(module);\r\n const injector = factory.create(this.injector);\r\n const activatedRoute = this.#getActivatedRoute(\r\n this.#rootRoute,\r\n component\r\n );\r\n\r\n const tab = {\r\n key: url,\r\n component,\r\n injector: new SdOutletInjector(activatedRoute, injector),\r\n isActive: true,\r\n name: url,\r\n url,\r\n params,\r\n queryParams,\r\n };\r\n\r\n this.tabRouterService.setCurrentTab(tab);\r\n if (existedIndex >= 0 && !currentNavigation?.extras?.state?.switchTab) {\r\n this.tabs[existedIndex] = tab;\r\n } else {\r\n this.tabs.push(tab);\r\n }\r\n }\r\n\r\n this.tabRouterNav?.checkUI();\r\n if (this.tabs.length > 10) {\r\n this.sdNotifyService.notify.warning(\r\n 'Bạn đã mở quá nhiều tab. Vui lòng tắt các tab không dùng để hệ thống hoạt động tốt hơn.'\r\n );\r\n }\r\n if (this.tabs.length > 12) {\r\n this.tabs.splice(0, this.tabs.length - 10);\r\n }\r\n }\r\n this.cd.markForCheck();\r\n }\r\n\r\n #getActivatedRouteSnapshot = (\r\n activatedRouteSnapshot: ActivatedRouteSnapshot\r\n ): ActivatedRouteSnapshot | null => {\r\n if (!activatedRouteSnapshot) {\r\n return null;\r\n }\r\n\r\n if (activatedRouteSnapshot.firstChild) {\r\n return this.#getActivatedRouteSnapshot(activatedRouteSnapshot.firstChild);\r\n } else {\r\n return activatedRouteSnapshot;\r\n }\r\n }\r\n\r\n #getActivatedRoute = (\r\n activatedRoute: ActivatedRoute,\r\n component: any\r\n ): ActivatedRoute | null => {\r\n if (!activatedRoute) {\r\n return null;\r\n }\r\n\r\n if (activatedRoute.component && activatedRoute.component === component) {\r\n return activatedRoute;\r\n } else if (activatedRoute.firstChild) {\r\n return this.#getActivatedRoute(activatedRoute.firstChild, component);\r\n } else {\r\n return null;\r\n }\r\n }\r\n}\r\n\r\nclass SdOutletInjector implements Injector {\r\n constructor(\r\n private route: ActivatedRoute | null,\r\n // private childContexts: ChildrenOutletContexts,\r\n private parent: any\r\n ) { }\r\n\r\n get(token: any, notFoundValue?: any): any {\r\n if (token === ActivatedRoute && this.route) {\r\n return this.route;\r\n }\r\n\r\n // if (token === ChildrenOutletContexts) {\r\n // return this.childContexts;\r\n // }\r\n\r\n return this.parent.get(token, notFoundValue);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { SdTab, SdTabInfo } from '../models/tab-router.model';\r\nimport { SdTabRouterService } from '../services/tab-router.service';\r\n@Pipe({\r\n name: 'sdTabInfo'\r\n})\r\nexport class SdTabInfoPipe implements PipeTransform {\r\n constructor(private tabRouterService: SdTabRouterService) { }\r\n transform(tab: SdTab): Observable<SdTabInfo> {\r\n return this.tabRouterService.builders.pipe(map(builders => {\r\n const builder = builders.find(e => e.component === tab.component);\r\n console.log(builders, builder, tab);\r\n if (builder) {\r\n const { url, params, queryParams } = tab;\r\n return {\r\n name: typeof (builder.name) === 'function' ?\r\n builder.name({ url, params, queryParams }) : builder.name,\r\n initialName: typeof (builder.initialName) === 'function' ?\r\n builder.initialName({ url, params, queryParams }) : builder.initialName,\r\n tooltip: typeof (builder.tooltip) === 'function' ?\r\n builder.tooltip({ url, params, queryParams }) : builder.tooltip,\r\n color: typeof (builder.color) === 'function' ?\r\n builder.color({ url, params, queryParams }) : builder.color\r\n };\r\n }\r\n return {\r\n name: tab.url,\r\n initialName: null,\r\n };\r\n }));\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\nimport { SdTabRouterItemComponent } from './components/tab-router-item/tab-router-item.component';\r\nimport { SdTabRouterNavComponent } from './components/tab-router-nav/tab-router-nav.component';\r\nimport { SdTabRouterOutletComponent } from './components/tab-router-outlet/tab-router-outlet.component';\r\nimport { SdTabInfoPipe } from './pipes/tab-info.pipe';\r\n\r\n@NgModule({\r\n declarations: [\r\n SdTabRouterItemComponent,\r\n SdTabRouterNavComponent,\r\n SdTabRouterOutletComponent,\r\n SdTabInfoPipe,\r\n ],\r\n imports: [RouterModule, CommonModule, MatIconModule, MatTooltipModule],\r\n exports: [\r\n SdTabRouterItemComponent,\r\n SdTabRouterNavComponent,\r\n SdTabRouterOutletComponent,\r\n ],\r\n providers: [],\r\n})\r\nexport class SdTabRouterModule {}\r\n","/*\r\n * Public API Surface of superdev-angular-core\r\n */\r\n\r\n// Models\r\nexport * from './lib/models/tab-router.model';\r\nexport * from './lib/events/tab-router.event';\r\nexport * from './lib/actions/tab-router.action';\r\n\r\n// Decorators\r\nexport * from './lib/decorators/tab.decorator';\r\n\r\n// Service\r\nexport * from './lib/services/tab-router.service';\r\nexport * from './lib/services/tab-decorator.service';\r\n\r\n// Components\r\nexport * from './lib/components/tab-router-item/tab-router-item.component';\r\nexport * from './lib/components/tab-router-nav/tab-router-nav.component';\r\nexport * from './lib/components/tab-router-outlet/tab-router-outlet.component';\r\n\r\n// Module\r\nexport * from './lib/tab-router.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n\nexport {SdTabInfoPipe as ɵa} from './src/lib/pipes/tab-info.pipe';"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sd-angular-core-tab-router.js","sources":["../../../../projects/sd-core/tab-router/src/lib/events/tab-router.event.ts","../../../../projects/sd-core/tab-router/src/lib/services/tab-router.service.ts","../../../../projects/sd-core/tab-router/src/lib/services/tab-decorator.service.ts","../../../../projects/sd-core/tab-router/src/lib/decorators/tab.decorator.ts","../../../../projects/sd-core/tab-router/src/lib/components/tab-router-item/tab-router-item.component.ts","../../../../projects/sd-core/tab-router/src/lib/components/tab-router-nav/tab-router-nav.component.ts","../../../../projects/sd-core/tab-router/src/lib/components/tab-router-outlet/tab-router-outlet.component.ts","../../../../projects/sd-core/tab-router/src/lib/pipes/tab-info.pipe.ts","../../../../projects/sd-core/tab-router/src/lib/tab-router.module.ts","../../../../projects/sd-core/tab-router/src/public-api.ts","../../../../projects/sd-core/tab-router/sd-angular-core-tab-router.ts"],"sourcesContent":["import { SdTab } from '../models/tab-router.model';\r\n\r\nexport class SdTabBase {\r\n #tab: SdTab | null;\r\n\r\n constructor(tab: SdTab | null) {\r\n this.#tab = tab;\r\n }\r\n\r\n get tab(): SdTab | null {\r\n return this.#tab;\r\n }\r\n}\r\n\r\nexport class SdTabActivated extends SdTabBase {}\r\n\r\nexport class SdTabDeactivated extends SdTabBase {}\r\n\r\nexport declare type SdTabEvent = SdTabActivated | SdTabDeactivated;\r\n","import { Injectable, Type } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { SdTab } from '../models/tab-router.model';\r\nimport { SdTabAction } from '../actions/tab-router.action';\r\nimport { SdTabEvent, SdTabBase } from '../events/tab-router.event';\r\nimport { SdNotifyService } from '@sd-angular/core/notify';\r\nimport { SdTabComponentBuilder } from '../decorators/tab.decorator';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SdTabRouterService {\r\n events = new BehaviorSubject<SdTabEvent>(new SdTabBase(null));\r\n actions = new BehaviorSubject<SdTabAction | null>(null);\r\n builders = new BehaviorSubject<SdTabComponentBuilder[]>([]);\r\n\r\n #currentTab: SdTab | null = null;\r\n #componentBuilders: SdTabComponentBuilder[] = [];\r\n constructor(private notifyService: SdNotifyService) {\r\n }\r\n\r\n addBuilder = (builder: SdTabComponentBuilder) => {\r\n if (!this.#componentBuilders.some(e => e.component === builder.component)) {\r\n this.#componentBuilders.push(builder);\r\n this.builders.next(this.#componentBuilders);\r\n }\r\n }\r\n\r\n get currentTab() {\r\n return this.#currentTab;\r\n }\r\n\r\n get key() {\r\n return this.#currentTab?.key || null;\r\n }\r\n\r\n // select = (tabOrKey: string | SdTab): void => {\r\n // const tab = this.#tabs.find(e => {\r\n // if (typeof (tabOrKey) === 'string') {\r\n // return e.key === tabOrKey;\r\n // }\r\n // return e.key === tabOrKey?.key;\r\n // });\r\n // if (tab) {\r\n // this.#currentTab = tab;\r\n // }\r\n // }\r\n\r\n // add = (tab: SdTab): void => {\r\n // if (!tab.key) {\r\n // this.notifyService.notify.warning('Tab key is required');\r\n // }\r\n // if (!tab.component) {\r\n // this.notifyService.notify.warning('Tab component is required');\r\n // }\r\n // const existedTab = this.#tabs.find(e => e.key === tab.key);\r\n // if (!existedTab) {\r\n // this.#tabs.push(tab);\r\n // this.select(tab);\r\n // } else {\r\n // this.select(existedTab);\r\n // }\r\n // }\r\n\r\n // remove = (tabOrKey: string | SdTab): void => {\r\n // this.#tabs = this.#tabs.filter(e => {\r\n // if (typeof (tabOrKey) === 'string') {\r\n // return e.key !== tabOrKey;\r\n // }\r\n // return e.key !== tabOrKey?.key;\r\n // });\r\n // }\r\n\r\n setCurrentTab = (tab: SdTab): void => {\r\n this.#currentTab = tab;\r\n }\r\n\r\n pushEvent = (tab: SdTab, Event: Type<SdTabEvent>) => {\r\n this.events.next(new Event(tab));\r\n }\r\n\r\n setOptions = () => { };\r\n\r\n close = (tab?: SdTab) => {\r\n if (tab) {\r\n this.actions.next({\r\n type: 'close',\r\n tab,\r\n });\r\n } else if (this.#currentTab) {\r\n this.actions.next({\r\n type: 'close',\r\n tab: this.#currentTab,\r\n });\r\n }\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { SdTabRouterService } from './tab-router.service';\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SdTabDecoratorService {\r\n static tabRouterService = new BehaviorSubject<SdTabRouterService>(undefined);\r\n constructor(tabRouterService: SdTabRouterService) {\r\n SdTabDecoratorService.tabRouterService.next(tabRouterService);\r\n }\r\n}\r\n","import { Type } from '@angular/core';\r\nimport { takeWhile } from 'rxjs/operators';\r\nimport { SdTabDecoratorService } from '../services/tab-decorator.service';\r\n\r\nexport declare interface SdTabComponentBuilder {\r\n component: Type<any>;\r\n name: string | ((args: { url: string, params: any, queryParams: any }) => string);\r\n initialName: string | ((args: { url: string, params: any, queryParams: any }) => string);\r\n tooltip?: string | ((args: { url: string, params: any, queryParams: any }) => string);\r\n color?: string | ((args: { url: string, params: any, queryParams: any }) => string);\r\n isDetail?: boolean;\r\n}\r\n\r\nexport function SdTabComponent<T>(builder: SdTabComponentBuilder) {\r\n return (constructor: T) => {\r\n SdTabDecoratorService.tabRouterService.pipe(takeWhile(service => service !== undefined && service !== null)).subscribe(service => {\r\n service.addBuilder(builder);\r\n });\r\n };\r\n}\r\n","import { Component, Input } from '@angular/core';\r\n\r\nimport { SdTab } from '../../models/tab-router.model';\r\nimport { SdTabRouterService } from '../../services/tab-router.service';\r\n\r\n@Component({\r\n selector: 'sd-tab-router-item',\r\n templateUrl: './tab-router-item.component.html',\r\n styleUrls: ['./tab-router-item.component.scss'],\r\n})\r\nexport class SdTabRouterItemComponent {\r\n @Input() tab: SdTab;\r\n\r\n constructor(private tabRouterService: SdTabRouterService) {}\r\n\r\n close = (event: Event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.tabRouterService.close(this.tab);\r\n }\r\n}\r\n","import {\r\n Component,\r\n ElementRef,\r\n HostListener,\r\n Input,\r\n ViewChild,\r\n} from '@angular/core';\r\n\r\nimport { SdTab } from '../../models/tab-router.model';\r\n\r\n@Component({\r\n selector: 'sd-tab-router-nav',\r\n templateUrl: './tab-router-nav.component.html',\r\n styleUrls: ['./tab-router-nav.component.scss'],\r\n})\r\nexport class SdTabRouterNavComponent {\r\n @ViewChild('tabRouterNav') tabRouterNav: ElementRef;\r\n\r\n @Input() tabs: SdTab[];\r\n mode: 'default' | 'compact' = 'default';\r\n\r\n constructor() {}\r\n\r\n @HostListener('window:resize', ['$event'])\r\n onResize(event): void {\r\n this.checkUI();\r\n }\r\n\r\n checkUI = () => {\r\n const width = this.tabRouterNav.nativeElement.clientWidth;\r\n const nameWidth = (width - this.tabs.length * 64) / this.tabs.length;\r\n if (nameWidth <= 20) {\r\n this.mode = 'compact';\r\n } else {\r\n this.mode = 'default';\r\n }\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Compiler,\r\n Component,\r\n Injector,\r\n NgModuleRef,\r\n OnDestroy,\r\n OnInit,\r\n Type,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport {\r\n ActivatedRoute,\r\n ActivatedRouteSnapshot,\r\n ChildrenOutletContexts,\r\n // ChildrenOutletContexts,\r\n Event,\r\n NavigationEnd,\r\n PRIMARY_OUTLET,\r\n Router,\r\n RoutesRecognized,\r\n} from '@angular/router';\r\nimport { SdNotifyService } from '@sd-angular/core/notify';\r\nimport {\r\n SdTabActivated,\r\n SdTabDeactivated,\r\n} from '../../events/tab-router.event';\r\n\r\nimport { SdTab } from '../../models/tab-router.model';\r\nimport { SdTabAction } from '../../actions/tab-router.action';\r\nimport { SdTabRouterService } from '../../services/tab-router.service';\r\nimport { SdTabRouterNavComponent } from '../tab-router-nav/tab-router-nav.component';\r\nimport { Subscription } from 'rxjs';\r\nimport { SdTabDecoratorService } from '../../services/tab-decorator.service';\r\nimport { filter } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'sd-tab-router-outlet',\r\n templateUrl: './tab-router-outlet.component.html',\r\n styleUrls: ['./tab-router-outlet.component.scss'],\r\n // changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SdTabRouterOutletComponent implements OnDestroy {\r\n @ViewChild('tabRouterNav') tabRouterNav: SdTabRouterNavComponent;\r\n tabs: SdTab[] = [];\r\n\r\n #rootRoute: ActivatedRoute;\r\n #subscription = new Subscription();\r\n #firstLoad = true;\r\n constructor(\r\n private router: Router,\r\n private activatedRoute: ActivatedRoute,\r\n private cd: ChangeDetectorRef,\r\n private injector: Injector,\r\n private compiler: Compiler,\r\n private parentContexts: ChildrenOutletContexts,\r\n private tabDecoratorService: SdTabDecoratorService,\r\n private tabRouterService: SdTabRouterService,\r\n private sdNotifyService: SdNotifyService\r\n ) {\r\n this.#subscription.add(router.events.pipe(filter(event => event instanceof RoutesRecognized || event instanceof NavigationEnd))\r\n .subscribe(async (event: RoutesRecognized | NavigationEnd) => {\r\n if (this.#firstLoad && event instanceof NavigationEnd) {\r\n this.#firstLoad = false;\r\n const route = this.#getActivatedRouteSnapshot(this.activatedRoute.snapshot);\r\n this.#rootRoute = this.router.routerState.root;\r\n await this.#activeRoute(event.urlAfterRedirects || event.url, route);\r\n return;\r\n }\r\n if (!this.#firstLoad && event instanceof RoutesRecognized) {\r\n const route = this.#getActivatedRouteSnapshot(event.state.root);\r\n this.#rootRoute = this.router.routerState.root;\r\n await this.#activeRoute(event.urlAfterRedirects || event.url, route);\r\n }\r\n })\r\n );\r\n\r\n this.#subscription.add(tabRouterService.actions.subscribe((event: SdTabAction | null) => {\r\n if (event && event.type === 'close') {\r\n this.#closeTab(event.tab);\r\n }\r\n }));\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n #closeTab = (tab: SdTab) => {\r\n this.tabs = this.tabs.filter(({ key }) => key !== tab.key);\r\n if (tab.isActive) {\r\n const lastTab = this.tabs[this.tabs.length - 1];\r\n if (lastTab) {\r\n this.router.navigateByUrl(lastTab.url, {\r\n state: {\r\n switchTab: true,\r\n },\r\n });\r\n } else {\r\n this.router.navigateByUrl('/', {\r\n state: {\r\n switchTab: true,\r\n },\r\n });\r\n }\r\n } else {\r\n this.tabRouterNav?.checkUI();\r\n this.cd.markForCheck();\r\n }\r\n }\r\n\r\n #activeRoute = async (url: string, route: ActivatedRouteSnapshot | null) => {\r\n if (!route?.component) {\r\n return;\r\n }\r\n const component = route.component as Type<any>;\r\n const queryParams = {\r\n ...(route.queryParams || {}),\r\n };\r\n const params = {\r\n ...(route.params || {}),\r\n };\r\n\r\n let existedIndex = -1;\r\n this.tabs.forEach((tab: SdTab, index: number) => {\r\n if (tab.key === url) {\r\n tab.isActive = true;\r\n existedIndex = index;\r\n } else {\r\n if (tab.isActive) {\r\n this.tabRouterService.pushEvent(tab, SdTabDeactivated);\r\n }\r\n tab.isActive = false;\r\n }\r\n });\r\n\r\n const currentNavigation = this.router.getCurrentNavigation();\r\n if (existedIndex >= 0 && currentNavigation?.extras?.state?.switchTab) {\r\n const existedTab = this.tabs[existedIndex];\r\n this.tabRouterService.setCurrentTab(existedTab);\r\n this.tabRouterService.pushEvent(existedTab, SdTabActivated);\r\n } else {\r\n if (typeof route?.parent?.routeConfig?.loadChildren === 'function') {\r\n const module = await route.parent.routeConfig.loadChildren();\r\n const factory = await this.compiler.compileModuleAsync(module);\r\n const injector = factory.create(this.injector);\r\n const activatedRoute = this.#getActivatedRoute(\r\n this.#rootRoute,\r\n component\r\n );\r\n\r\n const tab = {\r\n key: url,\r\n component,\r\n injector: new SdOutletInjector(activatedRoute, injector),\r\n isActive: true,\r\n name: url,\r\n url,\r\n params,\r\n queryParams,\r\n };\r\n\r\n this.tabRouterService.setCurrentTab(tab);\r\n if (existedIndex >= 0 && !currentNavigation?.extras?.state?.switchTab) {\r\n this.tabs[existedIndex] = tab;\r\n } else {\r\n this.tabs.push(tab);\r\n }\r\n }\r\n\r\n this.tabRouterNav?.checkUI();\r\n if (this.tabs.length > 10) {\r\n this.sdNotifyService.notify.warning(\r\n 'Bạn đã mở quá nhiều tab. Vui lòng tắt các tab không dùng để hệ thống hoạt động tốt hơn.'\r\n );\r\n }\r\n if (this.tabs.length > 12) {\r\n this.tabs.splice(0, this.tabs.length - 10);\r\n }\r\n }\r\n this.cd.markForCheck();\r\n }\r\n\r\n #getActivatedRouteSnapshot = (\r\n activatedRouteSnapshot: ActivatedRouteSnapshot\r\n ): ActivatedRouteSnapshot | null => {\r\n if (!activatedRouteSnapshot) {\r\n return null;\r\n }\r\n\r\n if (activatedRouteSnapshot.firstChild) {\r\n return this.#getActivatedRouteSnapshot(activatedRouteSnapshot.firstChild);\r\n } else {\r\n return activatedRouteSnapshot;\r\n }\r\n }\r\n\r\n #getActivatedRoute = (\r\n activatedRoute: ActivatedRoute,\r\n component: any\r\n ): ActivatedRoute | null => {\r\n if (!activatedRoute) {\r\n return null;\r\n }\r\n\r\n if (activatedRoute.component && activatedRoute.component === component) {\r\n return activatedRoute;\r\n } else if (activatedRoute.firstChild) {\r\n return this.#getActivatedRoute(activatedRoute.firstChild, component);\r\n } else {\r\n return null;\r\n }\r\n }\r\n}\r\n\r\nclass SdOutletInjector implements Injector {\r\n constructor(\r\n private route: ActivatedRoute | null,\r\n // private childContexts: ChildrenOutletContexts,\r\n private parent: any\r\n ) { }\r\n\r\n get(token: any, notFoundValue?: any): any {\r\n if (token === ActivatedRoute && this.route) {\r\n return this.route;\r\n }\r\n\r\n // if (token === ChildrenOutletContexts) {\r\n // return this.childContexts;\r\n // }\r\n\r\n return this.parent.get(token, notFoundValue);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { SdTab, SdTabInfo } from '../models/tab-router.model';\r\nimport { SdTabRouterService } from '../services/tab-router.service';\r\n@Pipe({\r\n name: 'sdTabInfo'\r\n})\r\nexport class SdTabInfoPipe implements PipeTransform {\r\n constructor(private tabRouterService: SdTabRouterService) { }\r\n transform(tab: SdTab): Observable<SdTabInfo> {\r\n return this.tabRouterService.builders.pipe(map(builders => {\r\n const builder = builders.find(e => e.component === tab.component);\r\n if (builder) {\r\n const { url, params, queryParams } = tab;\r\n return {\r\n name: typeof (builder.name) === 'function' ?\r\n builder.name({ url, params, queryParams }) : builder.name,\r\n initialName: typeof (builder.initialName) === 'function' ?\r\n builder.initialName({ url, params, queryParams }) : builder.initialName,\r\n tooltip: typeof (builder.tooltip) === 'function' ?\r\n builder.tooltip({ url, params, queryParams }) : builder.tooltip,\r\n color: typeof (builder.color) === 'function' ?\r\n builder.color({ url, params, queryParams }) : builder.color\r\n };\r\n }\r\n return {\r\n name: tab.url,\r\n initialName: null,\r\n };\r\n }));\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\nimport { SdTabRouterItemComponent } from './components/tab-router-item/tab-router-item.component';\r\nimport { SdTabRouterNavComponent } from './components/tab-router-nav/tab-router-nav.component';\r\nimport { SdTabRouterOutletComponent } from './components/tab-router-outlet/tab-router-outlet.component';\r\nimport { SdTabInfoPipe } from './pipes/tab-info.pipe';\r\n\r\n@NgModule({\r\n declarations: [\r\n SdTabRouterItemComponent,\r\n SdTabRouterNavComponent,\r\n SdTabRouterOutletComponent,\r\n SdTabInfoPipe,\r\n ],\r\n imports: [RouterModule, CommonModule, MatIconModule, MatTooltipModule],\r\n exports: [\r\n SdTabRouterItemComponent,\r\n SdTabRouterNavComponent,\r\n SdTabRouterOutletComponent,\r\n ],\r\n providers: [],\r\n})\r\nexport class SdTabRouterModule {}\r\n","/*\r\n * Public API Surface of superdev-angular-core\r\n */\r\n\r\n// Models\r\nexport * from './lib/models/tab-router.model';\r\nexport * from './lib/events/tab-router.event';\r\nexport * from './lib/actions/tab-router.action';\r\n\r\n// Decorators\r\nexport * from './lib/decorators/tab.decorator';\r\n\r\n// Service\r\nexport * from './lib/services/tab-router.service';\r\nexport * from './lib/services/tab-decorator.service';\r\n\r\n// Components\r\nexport * from './lib/components/tab-router-item/tab-router-item.component';\r\nexport * from './lib/components/tab-router-nav/tab-router-nav.component';\r\nexport * from './lib/components/tab-router-outlet/tab-router-outlet.component';\r\n\r\n// Module\r\nexport * from './lib/tab-router.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n\nexport {SdTabInfoPipe as ɵa} from './src/lib/pipes/tab-info.pipe';"],"names":[],"mappings":"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"}