@yelon/bis 17.2.1 → 17.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/config/index.d.ts +5 -0
  2. package/config/public_api.d.ts +1 -0
  3. package/esm2022/bis.mjs +2 -2
  4. package/esm2022/{layout → config}/bis.config.mjs +1 -1
  5. package/esm2022/config/config.mjs +5 -0
  6. package/esm2022/config/public_api.mjs +2 -0
  7. package/esm2022/layout/layout-basic.component.mjs +376 -0
  8. package/esm2022/layout/layout-nav-application.component.mjs +368 -0
  9. package/esm2022/layout/layout-nav-group.component.mjs +160 -0
  10. package/esm2022/layout/layout-nav-tile.component.mjs +15 -0
  11. package/esm2022/layout/layout.module.mjs +54 -0
  12. package/esm2022/layout/public_api.mjs +6 -14
  13. package/esm2022/public_api.mjs +9 -2
  14. package/esm2022/src/bis.module.mjs +17 -0
  15. package/esm2022/src/helper.mjs +45 -0
  16. package/esm2022/src/provide.mjs +8 -0
  17. package/esm2022/src/refresh-token.mjs +79 -0
  18. package/esm2022/src/startup.service.mjs +184 -0
  19. package/esm2022/src/yunzai-act.guard.mjs +88 -0
  20. package/esm2022/src/yunzai-analysis-addon.guard.mjs +99 -0
  21. package/esm2022/src/yunzai-default.interceptor.mjs +63 -0
  22. package/esm2022/yunzai-widgets/public_api.mjs +7 -0
  23. package/esm2022/yunzai-widgets/yunzai-clear-storage.component.mjs +47 -0
  24. package/esm2022/yunzai-widgets/yunzai-fullscreen.component.mjs +47 -0
  25. package/esm2022/yunzai-widgets/yunzai-i18n.component.mjs +139 -0
  26. package/esm2022/yunzai-widgets/yunzai-notify.component.mjs +180 -0
  27. package/esm2022/yunzai-widgets/yunzai-user.component.mjs +120 -0
  28. package/esm2022/yunzai-widgets/yunzai-widget.module.mjs +62 -0
  29. package/esm2022/yunzai-widgets/yunzai-widgets.mjs +5 -0
  30. package/fesm2022/bis.mjs +554 -1
  31. package/fesm2022/bis.mjs.map +1 -1
  32. package/fesm2022/config.mjs +21 -0
  33. package/fesm2022/config.mjs.map +1 -0
  34. package/fesm2022/layout.mjs +396 -2781
  35. package/fesm2022/layout.mjs.map +1 -1
  36. package/fesm2022/yunzai-widgets.mjs +563 -0
  37. package/fesm2022/yunzai-widgets.mjs.map +1 -0
  38. package/index.d.ts +4 -0
  39. package/layout/{layout-basic/layout-basic.component.d.ts → layout-basic.component.d.ts} +12 -8
  40. package/layout/layout-nav-application.component.d.ts +26 -0
  41. package/layout/layout-nav-group.component.d.ts +14 -0
  42. package/layout/layout-nav-tile.component.d.ts +5 -0
  43. package/layout/layout.module.d.ts +18 -0
  44. package/layout/public_api.d.ts +5 -13
  45. package/package.json +40 -11
  46. package/public_api.d.ts +8 -2
  47. package/src/bis.module.d.ts +8 -0
  48. package/src/helper.d.ts +16 -0
  49. package/src/provide.d.ts +2 -0
  50. package/src/refresh-token.d.ts +6 -0
  51. package/src/startup.service.d.ts +24 -0
  52. package/src/yunzai-default.interceptor.d.ts +2 -0
  53. package/yunzai-widgets/index.d.ts +5 -0
  54. package/{layout/widgets/index.d.ts → yunzai-widgets/public_api.d.ts} +2 -2
  55. package/yunzai-widgets/yunzai-clear-storage.component.d.ts +8 -0
  56. package/yunzai-widgets/yunzai-fullscreen.component.d.ts +8 -0
  57. package/yunzai-widgets/yunzai-i18n.component.d.ts +19 -0
  58. package/yunzai-widgets/yunzai-notify.component.d.ts +25 -0
  59. package/yunzai-widgets/yunzai-user.component.d.ts +22 -0
  60. package/yunzai-widgets/yunzai-widget.module.d.ts +18 -0
  61. package/README.md +0 -23
  62. package/esm2022/index.mjs +0 -2
  63. package/esm2022/layout/html-names.mjs +0 -33
  64. package/esm2022/layout/icon/style-icons.mjs +0 -796
  65. package/esm2022/layout/layout-basic/index.mjs +0 -3
  66. package/esm2022/layout/layout-basic/interface.mjs +0 -2
  67. package/esm2022/layout/layout-basic/layout-basic.component.mjs +0 -368
  68. package/esm2022/layout/layout-nav/index.mjs +0 -4
  69. package/esm2022/layout/layout-nav/layout-nav-application.component.mjs +0 -382
  70. package/esm2022/layout/layout-nav/layout-nav-group.component.mjs +0 -122
  71. package/esm2022/layout/layout-nav/layout-nav-tile.component.mjs +0 -15
  72. package/esm2022/layout/widgets/index.mjs +0 -7
  73. package/esm2022/layout/widgets/yunzai-clear-storage.component.mjs +0 -44
  74. package/esm2022/layout/widgets/yunzai-fullscreen.component.mjs +0 -44
  75. package/esm2022/layout/widgets/yunzai-i18n.component.mjs +0 -140
  76. package/esm2022/layout/widgets/yunzai-notify.component.mjs +0 -185
  77. package/esm2022/layout/widgets/yunzai-theme-btn.component.mjs +0 -200
  78. package/esm2022/layout/widgets/yunzai-user.component.mjs +0 -129
  79. package/esm2022/layout/yunzai-act.guard.mjs +0 -88
  80. package/esm2022/layout/yunzai-analysis-addon.guard.mjs +0 -100
  81. package/esm2022/layout/yunzai-auth.service.mjs +0 -108
  82. package/esm2022/layout/yunzai-default.interceptor.mjs +0 -201
  83. package/esm2022/layout/yunzai-i18n.service.mjs +0 -107
  84. package/esm2022/layout/yunzai-lang.mjs +0 -114
  85. package/esm2022/layout/yunzai-layout.module.mjs +0 -118
  86. package/esm2022/layout/yunzai-startup.service.mjs +0 -152
  87. package/layout/html-names.d.ts +0 -31
  88. package/layout/icon/style-icons.d.ts +0 -1
  89. package/layout/layout-basic/index.d.ts +0 -2
  90. package/layout/layout-basic/interface.d.ts +0 -8
  91. package/layout/layout-nav/index.d.ts +0 -3
  92. package/layout/layout-nav/layout-nav-application.component.d.ts +0 -32
  93. package/layout/layout-nav/layout-nav-group.component.d.ts +0 -16
  94. package/layout/layout-nav/layout-nav-tile.component.d.ts +0 -6
  95. package/layout/widgets/yunzai-clear-storage.component.d.ts +0 -11
  96. package/layout/widgets/yunzai-fullscreen.component.d.ts +0 -8
  97. package/layout/widgets/yunzai-i18n.component.d.ts +0 -22
  98. package/layout/widgets/yunzai-notify.component.d.ts +0 -30
  99. package/layout/widgets/yunzai-theme-btn.component.d.ts +0 -32
  100. package/layout/widgets/yunzai-user.component.d.ts +0 -26
  101. package/layout/yunzai-auth.service.d.ts +0 -19
  102. package/layout/yunzai-default.interceptor.d.ts +0 -28
  103. package/layout/yunzai-i18n.service.d.ts +0 -27
  104. package/layout/yunzai-lang.d.ts +0 -12
  105. package/layout/yunzai-layout.module.d.ts +0 -30
  106. package/layout/yunzai-startup.service.d.ts +0 -34
  107. /package/{layout → config}/bis.config.d.ts +0 -0
  108. /package/{layout → src}/yunzai-act.guard.d.ts +0 -0
  109. /package/{layout → src}/yunzai-analysis-addon.guard.d.ts +0 -0
@@ -1,44 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, HostListener } from '@angular/core';
2
- import screenfull from 'screenfull';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "ng-zorro-antd/icon";
5
- import * as i2 from "@yelon/theme";
6
- export class YunzaiFullScreenComponent {
7
- constructor() {
8
- this.status = false;
9
- }
10
- _resize() {
11
- this.status = screenfull.isFullscreen;
12
- }
13
- _click() {
14
- if (screenfull.isEnabled) {
15
- screenfull.toggle();
16
- }
17
- }
18
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: YunzaiFullScreenComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
19
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: YunzaiFullScreenComponent, selector: "yunzai-fullscreen", host: { listeners: { "window:resize": "_resize()", "click": "_click()" }, properties: { "class.d-block": "true" } }, ngImport: i0, template: `
20
- <i nz-icon [nzType]="status ? 'fullscreen-exit' : 'fullscreen'"></i>
21
- {{ (status ? 'exitFullscreen' : 'fullscreen') | i18n }}
22
- `, isInline: true, dependencies: [{ kind: "directive", type: i1.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "pipe", type: i2.I18nPipe, name: "i18n" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
23
- }
24
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: YunzaiFullScreenComponent, decorators: [{
25
- type: Component,
26
- args: [{
27
- selector: 'yunzai-fullscreen',
28
- template: `
29
- <i nz-icon [nzType]="status ? 'fullscreen-exit' : 'fullscreen'"></i>
30
- {{ (status ? 'exitFullscreen' : 'fullscreen') | i18n }}
31
- `,
32
- host: {
33
- '[class.d-block]': 'true'
34
- },
35
- changeDetection: ChangeDetectionStrategy.OnPush
36
- }]
37
- }], propDecorators: { _resize: [{
38
- type: HostListener,
39
- args: ['window:resize']
40
- }], _click: [{
41
- type: HostListener,
42
- args: ['click']
43
- }] } });
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieXVuemFpLWZ1bGxzY3JlZW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYmlzL2xheW91dC93aWRnZXRzL3l1bnphaS1mdWxsc2NyZWVuLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVqRixPQUFPLFVBQVUsTUFBTSxZQUFZLENBQUM7Ozs7QUFhcEMsTUFBTSxPQUFPLHlCQUF5QjtJQVh0QztRQVlFLFdBQU0sR0FBRyxLQUFLLENBQUM7S0FhaEI7SUFWQyxPQUFPO1FBQ0wsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDO0lBQ3hDLENBQUM7SUFHRCxNQUFNO1FBQ0osSUFBSSxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDekIsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDOzhHQWJVLHlCQUF5QjtrR0FBekIseUJBQXlCLDhLQVQxQjs7O0dBR1Q7OzJGQU1VLHlCQUF5QjtrQkFYckMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsbUJBQW1CO29CQUM3QixRQUFRLEVBQUU7OztHQUdUO29CQUNELElBQUksRUFBRTt3QkFDSixpQkFBaUIsRUFBRSxNQUFNO3FCQUMxQjtvQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDaEQ7OEJBS0MsT0FBTztzQkFETixZQUFZO3VCQUFDLGVBQWU7Z0JBTTdCLE1BQU07c0JBREwsWUFBWTt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSG9zdExpc3RlbmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCBzY3JlZW5mdWxsIGZyb20gJ3NjcmVlbmZ1bGwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd5dW56YWktZnVsbHNjcmVlbicsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGkgbnotaWNvbiBbbnpUeXBlXT1cInN0YXR1cyA/ICdmdWxsc2NyZWVuLWV4aXQnIDogJ2Z1bGxzY3JlZW4nXCI+PC9pPlxuICAgIHt7IChzdGF0dXMgPyAnZXhpdEZ1bGxzY3JlZW4nIDogJ2Z1bGxzY3JlZW4nKSB8IGkxOG4gfX1cbiAgYCxcbiAgaG9zdDoge1xuICAgICdbY2xhc3MuZC1ibG9ja10nOiAndHJ1ZSdcbiAgfSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgWXVuemFpRnVsbFNjcmVlbkNvbXBvbmVudCB7XG4gIHN0YXR1cyA9IGZhbHNlO1xuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnKVxuICBfcmVzaXplKCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdHVzID0gc2NyZWVuZnVsbC5pc0Z1bGxzY3JlZW47XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycpXG4gIF9jbGljaygpOiB2b2lkIHtcbiAgICBpZiAoc2NyZWVuZnVsbC5pc0VuYWJsZWQpIHtcbiAgICAgIHNjcmVlbmZ1bGwudG9nZ2xlKCk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -1,140 +0,0 @@
1
- import { DOCUMENT } from '@angular/common';
2
- import { ChangeDetectionStrategy, Component, Inject, Input } from '@angular/core';
3
- import { Subject, takeUntil } from 'rxjs';
4
- import { YUNZAI_I18N_TOKEN } from '@yelon/theme';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@yelon/theme";
7
- import * as i2 from "@angular/common";
8
- import * as i3 from "ng-zorro-antd/menu";
9
- import * as i4 from "ng-zorro-antd/dropdown";
10
- import * as i5 from "ng-zorro-antd/icon";
11
- import * as i6 from "../yunzai-i18n.service";
12
- export class YunzaiI18NComponent {
13
- get curLangCode() {
14
- return this.settings.layout.lang;
15
- }
16
- constructor(settings, i18n, doc) {
17
- this.settings = settings;
18
- this.i18n = i18n;
19
- this.doc = doc;
20
- /** Whether to display language text */
21
- this.showLangText = true;
22
- this.$destroy = new Subject();
23
- this.langs = [];
24
- this.i18n
25
- .getLangs()
26
- .pipe(takeUntil(this.$destroy))
27
- .subscribe(langs => {
28
- this.langs = langs;
29
- });
30
- }
31
- change(lang) {
32
- const spinEl = this.doc.createElement('div');
33
- spinEl.setAttribute('class', `page-loading ant-spin ant-spin-lg ant-spin-spinning`);
34
- spinEl.innerHTML = `<span class="ant-spin-dot ant-spin-dot-spin"><i></i><i></i><i></i><i></i></span>`;
35
- this.doc.body.appendChild(spinEl);
36
- this.i18n.loadLangData(lang).subscribe(res => {
37
- this.i18n.use(lang, res);
38
- this.settings.setLayout('lang', lang);
39
- setTimeout(() => this.doc.location.reload());
40
- });
41
- }
42
- ngOnDestroy() {
43
- this.$destroy.complete();
44
- }
45
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: YunzaiI18NComponent, deps: [{ token: i1.SettingsService }, { token: YUNZAI_I18N_TOKEN }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component }); }
46
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: YunzaiI18NComponent, selector: "yunzai-i18n", inputs: { showLangText: "showLangText" }, ngImport: i0, template: `
47
- <div *ngIf="showLangText" nz-dropdown [nzDropdownMenu]="langMenu" nzPlacement="bottomRight">
48
- <i nz-icon nzType="global"></i>
49
- {{ 'lang.nav' | i18n }}
50
- <i nz-icon nzType="down"></i>
51
- </div>
52
- <i
53
- *ngIf="!showLangText"
54
- nz-dropdown
55
- [nzDropdownMenu]="langMenu"
56
- nzPlacement="bottomRight"
57
- nz-icon
58
- nzType="global"
59
- ></i>
60
- <nz-dropdown-menu data-event-id="_nav_lang" #langMenu="nzDropdownMenu">
61
- <ul nz-menu>
62
- <li
63
- data-event-id="_nav_lang"
64
- [attr.data-text]="item.text"
65
- nz-menu-item
66
- *ngFor="let item of langs"
67
- [nzSelected]="item.code === curLangCode"
68
- (click)="change(item.code)"
69
- >
70
- <span *ngIf="!item.icon" role="img" [attr.aria-label]="item.text" class="pr-xs">{{ item.abbr }}</span>
71
- <img
72
- *ngIf="item.icon"
73
- style="margin-right:4px"
74
- width="50px"
75
- height="30px"
76
- ngSrc="'data:image/png;base64,' + item.icon"
77
- [alt]="item.abbr"
78
- class="pr-xs"
79
- />
80
- {{ item.text }}
81
- </li>
82
- </ul>
83
- </nz-dropdown-menu>
84
- `, isInline: true, dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgOptimizedImage, selector: "img[ngSrc]", inputs: ["ngSrc", "ngSrcset", "sizes", "width", "height", "loading", "priority", "loaderParams", "disableOptimizedSrcset", "fill", "placeholder", "placeholderConfig", "src", "srcset"] }, { kind: "directive", type: i3.NzMenuDirective, selector: "[nz-menu]", inputs: ["nzInlineIndent", "nzTheme", "nzMode", "nzInlineCollapsed", "nzSelectable"], outputs: ["nzClick"], exportAs: ["nzMenu"] }, { kind: "component", type: i3.NzMenuItemComponent, selector: "[nz-menu-item]", inputs: ["nzPaddingLeft", "nzDisabled", "nzSelected", "nzDanger", "nzMatchRouterExact", "nzMatchRouter"], exportAs: ["nzMenuItem"] }, { kind: "directive", type: i4.NzDropDownDirective, selector: "[nz-dropdown]", inputs: ["nzDropdownMenu", "nzTrigger", "nzMatchWidthElement", "nzBackdrop", "nzClickHide", "nzDisabled", "nzVisible", "nzOverlayClassName", "nzOverlayStyle", "nzPlacement"], outputs: ["nzVisibleChange"], exportAs: ["nzDropdown"] }, { kind: "component", type: i4.NzDropdownMenuComponent, selector: "nz-dropdown-menu", exportAs: ["nzDropdownMenu"] }, { kind: "directive", type: i5.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "pipe", type: i1.I18nPipe, name: "i18n" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
85
- }
86
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: YunzaiI18NComponent, decorators: [{
87
- type: Component,
88
- args: [{
89
- selector: 'yunzai-i18n',
90
- template: `
91
- <div *ngIf="showLangText" nz-dropdown [nzDropdownMenu]="langMenu" nzPlacement="bottomRight">
92
- <i nz-icon nzType="global"></i>
93
- {{ 'lang.nav' | i18n }}
94
- <i nz-icon nzType="down"></i>
95
- </div>
96
- <i
97
- *ngIf="!showLangText"
98
- nz-dropdown
99
- [nzDropdownMenu]="langMenu"
100
- nzPlacement="bottomRight"
101
- nz-icon
102
- nzType="global"
103
- ></i>
104
- <nz-dropdown-menu data-event-id="_nav_lang" #langMenu="nzDropdownMenu">
105
- <ul nz-menu>
106
- <li
107
- data-event-id="_nav_lang"
108
- [attr.data-text]="item.text"
109
- nz-menu-item
110
- *ngFor="let item of langs"
111
- [nzSelected]="item.code === curLangCode"
112
- (click)="change(item.code)"
113
- >
114
- <span *ngIf="!item.icon" role="img" [attr.aria-label]="item.text" class="pr-xs">{{ item.abbr }}</span>
115
- <img
116
- *ngIf="item.icon"
117
- style="margin-right:4px"
118
- width="50px"
119
- height="30px"
120
- ngSrc="'data:image/png;base64,' + item.icon"
121
- [alt]="item.abbr"
122
- class="pr-xs"
123
- />
124
- {{ item.text }}
125
- </li>
126
- </ul>
127
- </nz-dropdown-menu>
128
- `,
129
- changeDetection: ChangeDetectionStrategy.OnPush
130
- }]
131
- }], ctorParameters: () => [{ type: i1.SettingsService }, { type: i6.YunzaiI18NService, decorators: [{
132
- type: Inject,
133
- args: [YUNZAI_I18N_TOKEN]
134
- }] }, { type: undefined, decorators: [{
135
- type: Inject,
136
- args: [DOCUMENT]
137
- }] }], propDecorators: { showLangText: [{
138
- type: Input
139
- }] } });
140
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieXVuemFpLWkxOG4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYmlzL2xheW91dC93aWRnZXRzL3l1bnphaS1pMThuLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzdGLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTFDLE9BQU8sRUFBRSxpQkFBaUIsRUFBbUMsTUFBTSxjQUFjLENBQUM7Ozs7Ozs7O0FBaURsRixNQUFNLE9BQU8sbUJBQW1CO0lBUTlCLElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ25DLENBQUM7SUFFRCxZQUNVLFFBQXlCLEVBQ0UsSUFBdUIsRUFDaEMsR0FBYztRQUZoQyxhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUNFLFNBQUksR0FBSixJQUFJLENBQW1CO1FBQ2hDLFFBQUcsR0FBSCxHQUFHLENBQVc7UUFiMUMsdUNBQXVDO1FBQzlCLGlCQUFZLEdBQVksSUFBSSxDQUFDO1FBQzlCLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRWpDLFVBQUssR0FBcUIsRUFBRSxDQUFDO1FBVzNCLElBQUksQ0FBQyxJQUFJO2FBQ04sUUFBUSxFQUFFO2FBQ1YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2pCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFZO1FBQ2pCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdDLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLHFEQUFxRCxDQUFDLENBQUM7UUFDcEYsTUFBTSxDQUFDLFNBQVMsR0FBRyxrRkFBa0YsQ0FBQztRQUN0RyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzNDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDdEMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDL0MsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQzs4R0F4Q1UsbUJBQW1CLGlEQWNwQixpQkFBaUIsYUFDakIsUUFBUTtrR0FmUCxtQkFBbUIsNkZBekNwQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQ1Q7OzJGQUdVLG1CQUFtQjtrQkEzQy9CLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGFBQWE7b0JBQ3ZCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQ1Q7b0JBQ0QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQ2hEOzswQkFlSSxNQUFNOzJCQUFDLGlCQUFpQjs7MEJBQ3hCLE1BQU07MkJBQUMsUUFBUTt5Q0FaVCxZQUFZO3NCQUFwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgWVVOWkFJX0kxOE5fVE9LRU4sIFNldHRpbmdzU2VydmljZSwgWXVuemFpSTE4TlR5cGUgfSBmcm9tICdAeWVsb24vdGhlbWUnO1xuaW1wb3J0IHsgQm9vbGVhbklucHV0IH0gZnJvbSAnQHllbG9uL3V0aWwvZGVjb3JhdG9yJztcbmltcG9ydCB7IE56U2FmZUFueSB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS90eXBlcyc7XG5cbmltcG9ydCB7IFl1bnphaUkxOE5TZXJ2aWNlIH0gZnJvbSAnLi4veXVuemFpLWkxOG4uc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3l1bnphaS1pMThuJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2ICpuZ0lmPVwic2hvd0xhbmdUZXh0XCIgbnotZHJvcGRvd24gW256RHJvcGRvd25NZW51XT1cImxhbmdNZW51XCIgbnpQbGFjZW1lbnQ9XCJib3R0b21SaWdodFwiPlxuICAgICAgPGkgbnotaWNvbiBuelR5cGU9XCJnbG9iYWxcIj48L2k+XG4gICAgICB7eyAnbGFuZy5uYXYnIHwgaTE4biB9fVxuICAgICAgPGkgbnotaWNvbiBuelR5cGU9XCJkb3duXCI+PC9pPlxuICAgIDwvZGl2PlxuICAgIDxpXG4gICAgICAqbmdJZj1cIiFzaG93TGFuZ1RleHRcIlxuICAgICAgbnotZHJvcGRvd25cbiAgICAgIFtuekRyb3Bkb3duTWVudV09XCJsYW5nTWVudVwiXG4gICAgICBuelBsYWNlbWVudD1cImJvdHRvbVJpZ2h0XCJcbiAgICAgIG56LWljb25cbiAgICAgIG56VHlwZT1cImdsb2JhbFwiXG4gICAgPjwvaT5cbiAgICA8bnotZHJvcGRvd24tbWVudSBkYXRhLWV2ZW50LWlkPVwiX25hdl9sYW5nXCIgI2xhbmdNZW51PVwibnpEcm9wZG93bk1lbnVcIj5cbiAgICAgIDx1bCBuei1tZW51PlxuICAgICAgICA8bGlcbiAgICAgICAgICBkYXRhLWV2ZW50LWlkPVwiX25hdl9sYW5nXCJcbiAgICAgICAgICBbYXR0ci5kYXRhLXRleHRdPVwiaXRlbS50ZXh0XCJcbiAgICAgICAgICBuei1tZW51LWl0ZW1cbiAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBsYW5nc1wiXG4gICAgICAgICAgW256U2VsZWN0ZWRdPVwiaXRlbS5jb2RlID09PSBjdXJMYW5nQ29kZVwiXG4gICAgICAgICAgKGNsaWNrKT1cImNoYW5nZShpdGVtLmNvZGUpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWl0ZW0uaWNvblwiIHJvbGU9XCJpbWdcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIml0ZW0udGV4dFwiIGNsYXNzPVwicHIteHNcIj57eyBpdGVtLmFiYnIgfX08L3NwYW4+XG4gICAgICAgICAgPGltZ1xuICAgICAgICAgICAgKm5nSWY9XCJpdGVtLmljb25cIlxuICAgICAgICAgICAgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6NHB4XCJcbiAgICAgICAgICAgIHdpZHRoPVwiNTBweFwiXG4gICAgICAgICAgICBoZWlnaHQ9XCIzMHB4XCJcbiAgICAgICAgICAgIG5nU3JjPVwiJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwnICsgaXRlbS5pY29uXCJcbiAgICAgICAgICAgIFthbHRdPVwiaXRlbS5hYmJyXCJcbiAgICAgICAgICAgIGNsYXNzPVwicHIteHNcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAge3sgaXRlbS50ZXh0IH19XG4gICAgICAgIDwvbGk+XG4gICAgICA8L3VsPlxuICAgIDwvbnotZHJvcGRvd24tbWVudT5cbiAgYCxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgWXVuemFpSTE4TkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9zaG93TGFuZ1RleHQ6IEJvb2xlYW5JbnB1dDtcbiAgLyoqIFdoZXRoZXIgdG8gZGlzcGxheSBsYW5ndWFnZSB0ZXh0ICovXG4gIEBJbnB1dCgpIHNob3dMYW5nVGV4dDogYm9vbGVhbiA9IHRydWU7XG4gIHByaXZhdGUgJGRlc3Ryb3kgPSBuZXcgU3ViamVjdCgpO1xuXG4gIGxhbmdzOiBZdW56YWlJMThOVHlwZVtdID0gW107XG5cbiAgZ2V0IGN1ckxhbmdDb2RlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MubGF5b3V0Lmxhbmc7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNldHRpbmdzOiBTZXR0aW5nc1NlcnZpY2UsXG4gICAgQEluamVjdChZVU5aQUlfSTE4Tl9UT0tFTikgcHJpdmF0ZSBpMThuOiBZdW56YWlJMThOU2VydmljZSxcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvYzogTnpTYWZlQW55XG4gICkge1xuICAgIHRoaXMuaTE4blxuICAgICAgLmdldExhbmdzKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiRkZXN0cm95KSlcbiAgICAgIC5zdWJzY3JpYmUobGFuZ3MgPT4ge1xuICAgICAgICB0aGlzLmxhbmdzID0gbGFuZ3M7XG4gICAgICB9KTtcbiAgfVxuXG4gIGNoYW5nZShsYW5nOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBzcGluRWwgPSB0aGlzLmRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBzcGluRWwuc2V0QXR0cmlidXRlKCdjbGFzcycsIGBwYWdlLWxvYWRpbmcgYW50LXNwaW4gYW50LXNwaW4tbGcgYW50LXNwaW4tc3Bpbm5pbmdgKTtcbiAgICBzcGluRWwuaW5uZXJIVE1MID0gYDxzcGFuIGNsYXNzPVwiYW50LXNwaW4tZG90IGFudC1zcGluLWRvdC1zcGluXCI+PGk+PC9pPjxpPjwvaT48aT48L2k+PGk+PC9pPjwvc3Bhbj5gO1xuICAgIHRoaXMuZG9jLmJvZHkuYXBwZW5kQ2hpbGQoc3BpbkVsKTtcblxuICAgIHRoaXMuaTE4bi5sb2FkTGFuZ0RhdGEobGFuZykuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICB0aGlzLmkxOG4udXNlKGxhbmcsIHJlcyk7XG4gICAgICB0aGlzLnNldHRpbmdzLnNldExheW91dCgnbGFuZycsIGxhbmcpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmRvYy5sb2NhdGlvbi5yZWxvYWQoKSk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLiRkZXN0cm95LmNvbXBsZXRlKCk7XG4gIH1cbn1cbiJdfQ==
@@ -1,185 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, Inject } from '@angular/core';
2
- import { forkJoin, map } from 'rxjs';
3
- import { formatDistanceToNow } from 'date-fns';
4
- import { YUNZAI_I18N_TOKEN } from '@yelon/theme';
5
- import { WINDOW } from '@yelon/util';
6
- import { log } from '@yelon/util/other';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "ng-zorro-antd/message";
9
- import * as i2 from "ng-zorro-antd/i18n";
10
- import * as i3 from "@yelon/theme";
11
- import * as i4 from "@yelon/abc/notice-icon";
12
- import * as i5 from "../yunzai-i18n.service";
13
- export class YunzaiNotifyComponent {
14
- constructor(injector, msg, y18n, nzI18n, cdr, httpClient) {
15
- this.injector = injector;
16
- this.msg = msg;
17
- this.y18n = y18n;
18
- this.nzI18n = nzI18n;
19
- this.cdr = cdr;
20
- this.httpClient = httpClient;
21
- this.data = [
22
- {
23
- key: 'msg',
24
- title: this.y18n.fanyi('notify.message'),
25
- list: [],
26
- emptyText: this.y18n.fanyi('notify.message.empty'),
27
- emptyImage: './assets/tmp/img/message.svg',
28
- clearText: this.y18n.fanyi('notify.message.clear')
29
- },
30
- {
31
- key: 'todo',
32
- title: this.y18n.fanyi('notify.todo'),
33
- list: [],
34
- emptyText: this.y18n.fanyi('notify.todo.empty'),
35
- emptyImage: './assets/tmp/img/todo.svg',
36
- clearText: this.y18n.fanyi('notify.todo.clear')
37
- },
38
- {
39
- key: 'notice',
40
- title: this.y18n.fanyi('notify.notice'),
41
- list: [],
42
- emptyText: this.y18n.fanyi('notify.notice.empty'),
43
- emptyImage: './assets/tmp/img/notice.svg',
44
- clearText: this.y18n.fanyi('notify.notice.clear')
45
- }
46
- ];
47
- this.loading = false;
48
- this.count = 0;
49
- this.subs = [];
50
- }
51
- ngOnInit() {
52
- this.loadData();
53
- }
54
- loadData() {
55
- this.count = 0;
56
- this.loading = true;
57
- this.subs.push(
58
- // @ts-ignore
59
- forkJoin(this.loadTodo(), this.loadMessage()).subscribe(() => {
60
- this.loading = false;
61
- this.cdr.detectChanges();
62
- }));
63
- }
64
- loadMessage() {
65
- log('notify.component: ', 'fetch message list');
66
- const formatMessageStatus = (status) => {
67
- switch (status) {
68
- case '0':
69
- return { extra: this.y18n.fanyi('notify.unread'), color: 'red' };
70
- case '1':
71
- return { extra: this.y18n.fanyi('notify.readed'), color: 'green' };
72
- default:
73
- return { extra: this.y18n.fanyi('notify.nostatus'), color: 'primary' };
74
- }
75
- };
76
- return this.httpClient
77
- .post(`/message-center-3/my-msg-and-todo/msg-list`, {
78
- pageNum: 1,
79
- pageSize: 10,
80
- status: '0'
81
- })
82
- .pipe(map((response) => {
83
- const viewMessage = this.data.filter(d => d.key === 'msg')[0];
84
- viewMessage.list = response.data.list.map((m) => {
85
- return {
86
- ...m,
87
- avatar: m?.imgUrl || './assets/tmp/img/message.png',
88
- title: m.systemName,
89
- description: m.content,
90
- extra: formatMessageStatus(m.status).extra,
91
- color: formatMessageStatus(m.status).color,
92
- datetime: formatDistanceToNow(new Date(m.date), { locale: this.nzI18n.getDateLocale() })
93
- };
94
- });
95
- this.count += viewMessage.list.length;
96
- }));
97
- }
98
- loadTodo() {
99
- log('notify.component: ', 'fetch todo list');
100
- const formatTodoStatus = (status) => {
101
- switch (status) {
102
- case '0':
103
- return { extra: this.y18n.fanyi('notify.unstart'), color: 'red' };
104
- case '1':
105
- return { extra: this.y18n.fanyi('notify.started'), color: 'green' };
106
- default:
107
- return { extra: this.y18n.fanyi('notify.nostatus'), color: 'primary' };
108
- }
109
- };
110
- return this.httpClient
111
- .post(`/message-center-3/my-msg-and-todo/todo-list`, {
112
- pageNum: 1,
113
- pageSize: 10,
114
- status: '0'
115
- })
116
- .pipe(map((response) => {
117
- const viewTodo = this.data.filter(d => d.key === 'todo')[0];
118
- viewTodo.list = response.data.list.map((t) => {
119
- return {
120
- ...t,
121
- avatar: t?.imgUrl || './assets/tmp/img/todo.png',
122
- title: t.systemName,
123
- description: t.content,
124
- datetime: formatDistanceToNow(new Date(t.date), { locale: this.nzI18n.getDateLocale() }),
125
- extra: formatTodoStatus(t.status).extra,
126
- color: formatTodoStatus(t.status).color
127
- };
128
- });
129
- this.count += viewTodo.list.length;
130
- }));
131
- }
132
- clear(type) {
133
- const t = this.data.filter(d => d.title === type)[0];
134
- if (t.key == 'msg' || t.key == 'notice') {
135
- this.subs.push(this.httpClient.post(`/message-center-3/my-msg-and-todo/msg-clear`, {}).subscribe(_ => {
136
- this.msg.success(`${this.y18n.fanyi('notify.clear')} ${type}`);
137
- this.loadData();
138
- }));
139
- }
140
- if (t.key == 'todo') {
141
- this.loadData();
142
- }
143
- }
144
- select(res) {
145
- this.injector.get(WINDOW).open(res.item.url);
146
- this.loadData();
147
- }
148
- ngOnDestroy() {
149
- this.subs.forEach(a => a.unsubscribe());
150
- }
151
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: YunzaiNotifyComponent, deps: [{ token: i0.Injector }, { token: i1.NzMessageService }, { token: YUNZAI_I18N_TOKEN }, { token: i2.NzI18nService }, { token: i0.ChangeDetectorRef }, { token: i3._HttpClient }], target: i0.ɵɵFactoryTarget.Component }); }
152
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: YunzaiNotifyComponent, selector: "yunzai-notify", ngImport: i0, template: `
153
- <notice-icon
154
- [data]="data"
155
- [count]="count"
156
- [loading]="loading"
157
- btnClass="yunzai-default__nav-item"
158
- btnIconClass="yunzai-default__nav-item-icon"
159
- (select)="select($event)"
160
- (clear)="clear($event)"
161
- />
162
- `, isInline: true, dependencies: [{ kind: "component", type: i4.NoticeIconComponent, selector: "notice-icon", inputs: ["data", "count", "loading", "popoverVisible", "btnClass", "btnIconClass", "centered"], outputs: ["select", "clear", "popoverVisibleChange"], exportAs: ["noticeIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
163
- }
164
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: YunzaiNotifyComponent, decorators: [{
165
- type: Component,
166
- args: [{
167
- selector: 'yunzai-notify',
168
- template: `
169
- <notice-icon
170
- [data]="data"
171
- [count]="count"
172
- [loading]="loading"
173
- btnClass="yunzai-default__nav-item"
174
- btnIconClass="yunzai-default__nav-item-icon"
175
- (select)="select($event)"
176
- (clear)="clear($event)"
177
- />
178
- `,
179
- changeDetection: ChangeDetectionStrategy.OnPush
180
- }]
181
- }], ctorParameters: () => [{ type: i0.Injector }, { type: i1.NzMessageService }, { type: i5.YunzaiI18NService, decorators: [{
182
- type: Inject,
183
- args: [YUNZAI_I18N_TOKEN]
184
- }] }, { type: i2.NzI18nService }, { type: i0.ChangeDetectorRef }, { type: i3._HttpClient }] });
185
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieXVuemFpLW5vdGlmeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9iaXMvbGF5b3V0L3dpZGdldHMveXVuemFpLW5vdGlmeS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsTUFBTSxFQUlQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQTRCLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFHL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFlLE1BQU0sY0FBYyxDQUFDO0FBQzlELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDckMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7Ozs7O0FBc0J4QyxNQUFNLE9BQU8scUJBQXFCO0lBK0JoQyxZQUNVLFFBQWtCLEVBQ2xCLEdBQXFCLEVBQ00sSUFBdUIsRUFDbEQsTUFBcUIsRUFDckIsR0FBc0IsRUFDdEIsVUFBdUI7UUFMdkIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixRQUFHLEdBQUgsR0FBRyxDQUFrQjtRQUNNLFNBQUksR0FBSixJQUFJLENBQW1CO1FBQ2xELFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsZUFBVSxHQUFWLFVBQVUsQ0FBYTtRQXBDakMsU0FBSSxHQUFpQjtZQUNuQjtnQkFDRSxHQUFHLEVBQUUsS0FBSztnQkFDVixLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUM7Z0JBQ3hDLElBQUksRUFBRSxFQUFFO2dCQUNSLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxzQkFB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RyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUMxQyxDQUFDOzhHQXhKVSxxQkFBcUIsMEVBa0N0QixpQkFBaUI7a0dBbENoQixxQkFBcUIscURBYnRCOzs7Ozs7Ozs7O0dBVVQ7OzJGQUdVLHFCQUFxQjtrQkFmakMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZUFBZTtvQkFDekIsUUFBUSxFQUFFOzs7Ozs7Ozs7O0dBVVQ7b0JBQ0QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQ2hEOzswQkFtQ0ksTUFBTTsyQkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgSW5qZWN0LFxuICBJbmplY3RvcixcbiAgT25EZXN0cm95LFxuICBPbkluaXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBtYXAgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgZm9ybWF0RGlzdGFuY2VUb05vdyB9IGZyb20gJ2RhdGUtZm5zJztcblxuaW1wb3J0IHsgTm90aWNlSWNvblNlbGVjdCwgTm90aWNlSXRlbSB9IGZyb20gJ0B5ZWxvbi9hYmMvbm90aWNlLWljb24nO1xuaW1wb3J0IHsgWVVOWkFJX0kxOE5fVE9LRU4sIF9IdHRwQ2xpZW50IH0gZnJvbSAnQHllbG9uL3RoZW1lJztcbmltcG9ydCB7IFdJTkRPVyB9IGZyb20gJ0B5ZWxvbi91dGlsJztcbmltcG9ydCB7IGxvZyB9IGZyb20gJ0B5ZWxvbi91dGlsL290aGVyJztcbmltcG9ydCB7IE56U2FmZUFueSB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS90eXBlcyc7XG5pbXBvcnQgeyBOekkxOG5TZXJ2aWNlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9pMThuJztcbmltcG9ydCB7IE56TWVzc2FnZVNlcnZpY2UgfSBmcm9tICduZy16b3Jyby1hbnRkL21lc3NhZ2UnO1xuXG5pbXBvcnQgeyBZdW56YWlJMThOU2VydmljZSB9IGZyb20gJy4uL3l1bnphaS1pMThuLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd5dW56YWktbm90aWZ5JyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bm90aWNlLWljb25cbiAgICAgIFtkYXRhXT1cImRhdGFcIlxuICAgICAgW2NvdW50XT1cImNvdW50XCJcbiAgICAgIFtsb2FkaW5nXT1cImxvYWRpbmdcIlxuICAgICAgYnRuQ2xhc3M9XCJ5dW56YWktZGVmYXVsdF9fbmF2LWl0ZW1cIlxuICAgICAgYnRuSWNvbkNsYXNzPVwieXVuemFpLWRlZmF1bHRfX25hdi1pdGVtLWljb25cIlxuICAgICAgKHNlbGVjdCk9XCJzZWxlY3QoJGV2ZW50KVwiXG4gICAgICAoY2xlYXIpPVwiY2xlYXIoJGV2ZW50KVwiXG4gICAgLz5cbiAgYCxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgWXVuemFpTm90aWZ5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBkYXRhOiBOb3RpY2VJdGVtW10gPSBbXG4gICAge1xuICAgICAga2V5OiAnbXNnJyxcbiAgICAgIHRpdGxlOiB0aGlzLnkxOG4uZmFueWkoJ25vdGlmeS5tZXNzYWdlJyksXG4gICAgICBsaXN0OiBbXSxcbiAgICAgIGVtcHR5VGV4dDogdGhpcy55MThuLmZhbnlpKCdub3RpZnkubWVzc2FnZS5lbXB0eScpLFxuICAgICAgZW1wdHlJbWFnZTogJy4vYXNzZXRzL3RtcC9pbWcvbWVzc2FnZS5zdmcnLFxuICAgICAgY2xlYXJUZXh0OiB0aGlzLnkxOG4uZmFueWkoJ25vdGlmeS5tZXNzYWdlLmNsZWFyJylcbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ3RvZG8nLFxuICAgICAgdGl0bGU6IHRoaXMueTE4bi5mYW55aSgnbm90aWZ5LnRvZG8nKSxcbiAgICAgIGxpc3Q6IFtdLFxuICAgICAgZW1wdHlUZXh0OiB0aGlzLnkxOG4uZmFueWkoJ25vdGlmeS50b2RvLmVtcHR5JyksXG4gICAgICBlbXB0eUltYWdlOiAnLi9hc3NldHMvdG1wL2ltZy90b2RvLnN2ZycsXG4gICAgICBjbGVhclRleHQ6IHRoaXMueTE4bi5mYW55aSgnbm90aWZ5LnRvZG8uY2xlYXInKVxuICAgIH0sXG4gICAge1xuICAgICAga2V5OiAnbm90aWNlJyxcbiAgICAgIHRpdGxlOiB0aGlzLnkxOG4uZmFueWkoJ25vdGlmeS5ub3RpY2UnKSxcbiAgICAgIGxpc3Q6IFtdLFxuICAgICAgZW1wdHlUZXh0OiB0aGlzLnkxOG4uZmFueWkoJ25vdGlmeS5ub3RpY2UuZW1wdHknKSxcbiAgICAgIGVtcHR5SW1hZ2U6ICcuL2Fzc2V0cy90bXAvaW1nL25vdGljZS5zdmcnLFxuICAgICAgY2xlYXJUZXh0OiB0aGlzLnkxOG4uZmFueWkoJ25vdGlmeS5ub3RpY2UuY2xlYXInKVxuICAgIH1cbiAgXTtcbiAgbG9hZGluZyA9IGZhbHNlO1xuICBjb3VudCA9IDA7XG4gIHN1YnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJpdmF0ZSBtc2c6IE56TWVzc2FnZVNlcnZpY2UsXG4gICAgQEluamVjdChZVU5aQUlfSTE4Tl9UT0tFTikgcHJpdmF0ZSB5MThuOiBZdW56YWlJMThOU2VydmljZSxcbiAgICBwcml2YXRlIG56STE4bjogTnpJMThuU2VydmljZSxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBodHRwQ2xpZW50OiBfSHR0cENsaWVudFxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkRGF0YSgpO1xuICB9XG5cbiAgbG9hZERhdGEoKTogdm9pZCB7XG4gICAgdGhpcy5jb3VudCA9IDA7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnN1YnMucHVzaChcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGZvcmtKb2luKHRoaXMubG9hZFRvZG8oKSwgdGhpcy5sb2FkTWVzc2FnZSgpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgbG9hZE1lc3NhZ2UoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgbG9nKCdub3RpZnkuY29tcG9uZW50OiAnLCAnZmV0Y2ggbWVzc2FnZSBsaXN0Jyk7XG4gICAgY29uc3QgZm9ybWF0TWVzc2FnZVN0YXR1cyA9IChzdGF0dXM6IHN0cmluZyk6IE56U2FmZUFueSA9PiB7XG4gICAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgICBjYXNlICcwJzpcbiAgICAgICAgICByZXR1cm4geyBleHRyYTogdGhpcy55MThuLmZhbnlpKCdub3RpZnkudW5yZWFkJyksIGNvbG9yOiAncmVkJyB9O1xuICAgICAgICBjYXNlICcxJzpcbiAgICAgICAgICByZXR1cm4geyBleHRyYTogdGhpcy55MThuLmZhbnlpKCdub3RpZnkucmVhZGVkJyksIGNvbG9yOiAnZ3JlZW4nIH07XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIHsgZXh0cmE6IHRoaXMueTE4bi5mYW55aSgnbm90aWZ5Lm5vc3RhdHVzJyksIGNvbG9yOiAncHJpbWFyeScgfTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgIC5wb3N0KGAvbWVzc2FnZS1jZW50ZXItMy9teS1tc2ctYW5kLXRvZG8vbXNnLWxpc3RgLCB7XG4gICAgICAgIHBhZ2VOdW06IDEsXG4gICAgICAgIHBhZ2VTaXplOiAxMCxcbiAgICAgICAgc3RhdHVzOiAnMCdcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZTogTnpTYWZlQW55KSA9PiB7XG4gICAgICAgICAgY29uc3Qgdmlld01lc3NhZ2UgPSB0aGlzLmRhdGEuZmlsdGVyKGQgPT4gZC5rZXkgPT09ICdtc2cnKVswXTtcbiAgICAgICAgICB2aWV3TWVzc2FnZS5saXN0ID0gcmVzcG9uc2UuZGF0YS5saXN0Lm1hcCgobTogTnpTYWZlQW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5tLFxuICAgICAgICAgICAgICBhdmF0YXI6IG0/LmltZ1VybCB8fCAnLi9hc3NldHMvdG1wL2ltZy9tZXNzYWdlLnBuZycsXG4gICAgICAgICAgICAgIHRpdGxlOiBtLnN5c3RlbU5hbWUsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBtLmNvbnRlbnQsXG4gICAgICAgICAgICAgIGV4dHJhOiBmb3JtYXRNZXNzYWdlU3RhdHVzKG0uc3RhdHVzKS5leHRyYSxcbiAgICAgICAgICAgICAgY29sb3I6IGZvcm1hdE1lc3NhZ2VTdGF0dXMobS5zdGF0dXMpLmNvbG9yLFxuICAgICAgICAgICAgICBkYXRldGltZTogZm9ybWF0RGlzdGFuY2VUb05vdyhuZXcgRGF0ZShtLmRhdGUpLCB7IGxvY2FsZTogdGhpcy5uekkxOG4uZ2V0RGF0ZUxvY2FsZSgpIH0pXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuY291bnQgKz0gdmlld01lc3NhZ2UubGlzdC5sZW5ndGg7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgbG9hZFRvZG8oKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgbG9nKCdub3RpZnkuY29tcG9uZW50OiAnLCAnZmV0Y2ggdG9kbyBsaXN0Jyk7XG4gICAgY29uc3QgZm9ybWF0VG9kb1N0YXR1cyA9IChzdGF0dXM6IHN0cmluZyk6IE56U2FmZUFueSA9PiB7XG4gICAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgICBjYXNlICcwJzpcbiAgICAgICAgICByZXR1cm4geyBleHRyYTogdGhpcy55MThuLmZhbnlpKCdub3RpZnkudW5zdGFydCcpLCBjb2xvcjogJ3JlZCcgfTtcbiAgICAgICAgY2FzZSAnMSc6XG4gICAgICAgICAgcmV0dXJuIHsgZXh0cmE6IHRoaXMueTE4bi5mYW55aSgnbm90aWZ5LnN0YXJ0ZWQnKSwgY29sb3I6ICdncmVlbicgfTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4geyBleHRyYTogdGhpcy55MThuLmZhbnlpKCdub3RpZnkubm9zdGF0dXMnKSwgY29sb3I6ICdwcmltYXJ5JyB9O1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLnBvc3QoYC9tZXNzYWdlLWNlbnRlci0zL215LW1zZy1hbmQtdG9kby90b2RvLWxpc3RgLCB7XG4gICAgICAgIHBhZ2VOdW06IDEsXG4gICAgICAgIHBhZ2VTaXplOiAxMCxcbiAgICAgICAgc3RhdHVzOiAnMCdcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZTogTnpTYWZlQW55KSA9PiB7XG4gICAgICAgICAgY29uc3Qgdmlld1RvZG8gPSB0aGlzLmRhdGEuZmlsdGVyKGQgPT4gZC5rZXkgPT09ICd0b2RvJylbMF07XG4gICAgICAgICAgdmlld1RvZG8ubGlzdCA9IHJlc3BvbnNlLmRhdGEubGlzdC5tYXAoKHQ6IE56U2FmZUFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4udCxcbiAgICAgICAgICAgICAgYXZhdGFyOiB0Py5pbWdVcmwgfHwgJy4vYXNzZXRzL3RtcC9pbWcvdG9kby5wbmcnLFxuICAgICAgICAgICAgICB0aXRsZTogdC5zeXN0ZW1OYW1lLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogdC5jb250ZW50LFxuICAgICAgICAgICAgICBkYXRldGltZTogZm9ybWF0RGlzdGFuY2VUb05vdyhuZXcgRGF0ZSh0LmRhdGUpLCB7IGxvY2FsZTogdGhpcy5uekkxOG4uZ2V0RGF0ZUxvY2FsZSgpIH0pLFxuICAgICAgICAgICAgICBleHRyYTogZm9ybWF0VG9kb1N0YXR1cyh0LnN0YXR1cykuZXh0cmEsXG4gICAgICAgICAgICAgIGNvbG9yOiBmb3JtYXRUb2RvU3RhdHVzKHQuc3RhdHVzKS5jb2xvclxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmNvdW50ICs9IHZpZXdUb2RvLmxpc3QubGVuZ3RoO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIGNsZWFyKHR5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHQgPSB0aGlzLmRhdGEuZmlsdGVyKGQgPT4gZC50aXRsZSA9PT0gdHlwZSlbMF07XG4gICAgaWYgKHQua2V5ID09ICdtc2cnIHx8IHQua2V5ID09ICdub3RpY2UnKSB7XG4gICAgICB0aGlzLnN1YnMucHVzaChcbiAgICAgICAgdGhpcy5odHRwQ2xpZW50LnBvc3QoYC9tZXNzYWdlLWNlbnRlci0zL215LW1zZy1hbmQtdG9kby9tc2ctY2xlYXJgLCB7fSkuc3Vic2NyaWJlKF8gPT4ge1xuICAgICAgICAgIHRoaXMubXNnLnN1Y2Nlc3MoYCR7dGhpcy55MThuLmZhbnlpKCdub3RpZnkuY2xlYXInKX0gJHt0eXBlfWApO1xuICAgICAgICAgIHRoaXMubG9hZERhdGEoKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh0LmtleSA9PSAndG9kbycpIHtcbiAgICAgIHRoaXMubG9hZERhdGEoKTtcbiAgICB9XG4gIH1cblxuICBzZWxlY3QocmVzOiBOb3RpY2VJY29uU2VsZWN0KTogdm9pZCB7XG4gICAgdGhpcy5pbmplY3Rvci5nZXQoV0lORE9XKS5vcGVuKHJlcy5pdGVtLnVybCk7XG4gICAgdGhpcy5sb2FkRGF0YSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzLmZvckVhY2goYSA9PiBhLnVuc3Vic2NyaWJlKCkpO1xuICB9XG59XG4iXX0=