@yelon/bis 15.2.6 → 16.0.1

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 (84) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +23 -23
  3. package/{esm2020 → esm2022}/bis.mjs +4 -4
  4. package/{esm2020 → esm2022}/index.mjs +1 -1
  5. package/{esm2020 → esm2022}/layout/bis.config.mjs +10 -10
  6. package/{esm2020 → esm2022}/layout/html-names.mjs +32 -32
  7. package/{esm2020 → esm2022}/layout/icon/style-icons.mjs +795 -795
  8. package/{esm2020 → esm2022}/layout/layout-basic/index.mjs +2 -2
  9. package/{esm2020 → esm2022}/layout/layout-basic/interface.mjs +6 -6
  10. package/{esm2020 → esm2022}/layout/layout-basic/layout-basic.component.mjs +356 -356
  11. package/{esm2020 → esm2022}/layout/layout-nav/index.mjs +4 -4
  12. package/esm2022/layout/layout-nav/layout-nav-application.component.mjs +328 -0
  13. package/{esm2020 → esm2022}/layout/layout-nav/layout-nav-group.component.mjs +125 -124
  14. package/esm2022/layout/layout-nav/layout-nav-tile.component.mjs +16 -0
  15. package/{esm2020 → esm2022}/layout/layout-nav/types.mjs +1 -1
  16. package/{esm2020 → esm2022}/layout/layout.mjs +4 -4
  17. package/{esm2020 → esm2022}/layout/public_api.mjs +12 -12
  18. package/{esm2020 → esm2022}/layout/widgets/index.mjs +6 -6
  19. package/esm2022/layout/widgets/yunzai-clear-storage.component.mjs +46 -0
  20. package/esm2022/layout/widgets/yunzai-fullscreen.component.mjs +46 -0
  21. package/{esm2020 → esm2022}/layout/widgets/yunzai-i18n.component.mjs +147 -146
  22. package/esm2022/layout/widgets/yunzai-notify.component.mjs +184 -0
  23. package/esm2022/layout/widgets/yunzai-theme-btn.component.mjs +202 -0
  24. package/esm2022/layout/widgets/yunzai-user.component.mjs +131 -0
  25. package/esm2022/layout/yunzai-act.guard.mjs +108 -0
  26. package/{esm2020 → esm2022}/layout/yunzai-auth.service.mjs +174 -174
  27. package/{esm2020 → esm2022}/layout/yunzai-default.interceptor.mjs +209 -209
  28. package/{esm2020 → esm2022}/layout/yunzai-i18n.service.mjs +131 -131
  29. package/{esm2020 → esm2022}/layout/yunzai-lang.mjs +113 -113
  30. package/esm2022/layout/yunzai-layout.module.mjs +77 -0
  31. package/{esm2020 → esm2022}/layout/yunzai-startup.service.mjs +157 -157
  32. package/{esm2020 → esm2022}/public_api.mjs +1 -1
  33. package/{fesm2015 → fesm2022}/bis.mjs +6 -6
  34. package/{fesm2020 → fesm2022}/layout.mjs +3245 -3245
  35. package/{fesm2015 → fesm2022}/layout.mjs.map +1 -1
  36. package/index.d.ts +1 -1
  37. package/index.less +1 -1
  38. package/layout/bis.config.d.ts +3 -3
  39. package/layout/html-names.d.ts +31 -31
  40. package/layout/icon/style-icons.d.ts +1 -1
  41. package/layout/index.d.ts +5 -5
  42. package/layout/layout-basic/index.d.ts +2 -2
  43. package/layout/layout-basic/interface.d.ts +24 -24
  44. package/layout/layout-basic/layout-basic.component.d.ts +32 -32
  45. package/layout/layout-nav/index.d.ts +4 -4
  46. package/layout/layout-nav/layout-nav-application.component.d.ts +27 -27
  47. package/layout/layout-nav/layout-nav-group.component.d.ts +17 -17
  48. package/layout/layout-nav/layout-nav-tile.component.d.ts +6 -6
  49. package/layout/layout-nav/types.d.ts +15 -15
  50. package/layout/public_api.d.ts +12 -12
  51. package/layout/style/index.less +154 -154
  52. package/layout/widgets/index.d.ts +6 -6
  53. package/layout/widgets/yunzai-clear-storage.component.d.ts +11 -11
  54. package/layout/widgets/yunzai-fullscreen.component.d.ts +8 -8
  55. package/layout/widgets/yunzai-i18n.component.d.ts +21 -21
  56. package/layout/widgets/yunzai-notify.component.d.ts +30 -30
  57. package/layout/widgets/yunzai-theme-btn.component.d.ts +32 -32
  58. package/layout/widgets/yunzai-user.component.d.ts +28 -28
  59. package/layout/yunzai-act.guard.d.ts +22 -22
  60. package/layout/yunzai-auth.service.d.ts +21 -21
  61. package/layout/yunzai-default.interceptor.d.ts +27 -27
  62. package/layout/yunzai-i18n.service.d.ts +33 -33
  63. package/layout/yunzai-lang.d.ts +11 -11
  64. package/layout/yunzai-layout.module.d.ts +21 -21
  65. package/layout/yunzai-startup.service.d.ts +37 -37
  66. package/package.json +39 -47
  67. package/public_api.d.ts +2 -2
  68. package/theme-compact.less +3 -3
  69. package/theme-dark.less +46 -46
  70. package/theme-default.less +46 -46
  71. package/esm2020/layout/layout-nav/layout-nav-application.component.mjs +0 -327
  72. package/esm2020/layout/layout-nav/layout-nav-tile.component.mjs +0 -15
  73. package/esm2020/layout/widgets/yunzai-clear-storage.component.mjs +0 -45
  74. package/esm2020/layout/widgets/yunzai-fullscreen.component.mjs +0 -45
  75. package/esm2020/layout/widgets/yunzai-notify.component.mjs +0 -183
  76. package/esm2020/layout/widgets/yunzai-theme-btn.component.mjs +0 -201
  77. package/esm2020/layout/widgets/yunzai-user.component.mjs +0 -130
  78. package/esm2020/layout/yunzai-act.guard.mjs +0 -107
  79. package/esm2020/layout/yunzai-layout.module.mjs +0 -76
  80. package/fesm2015/layout.mjs +0 -3236
  81. package/fesm2020/bis.mjs +0 -6
  82. package/fesm2020/bis.mjs.map +0 -1
  83. package/fesm2020/layout.mjs.map +0 -1
  84. /package/{fesm2015 → fesm2022}/bis.mjs.map +0 -0
@@ -1,146 +1,147 @@
1
- import { __decorate } from "tslib";
2
- import { DOCUMENT } from '@angular/common';
3
- import { ChangeDetectionStrategy, Component, Inject, Input } from '@angular/core';
4
- import { Subject, takeUntil } from 'rxjs';
5
- import { YUNZAI_I18N_TOKEN } from '@yelon/theme';
6
- import { InputBoolean } from '@yelon/util/decorator';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "@yelon/theme";
9
- import * as i2 from "@angular/common";
10
- import * as i3 from "ng-zorro-antd/core/transition-patch";
11
- import * as i4 from "ng-zorro-antd/menu";
12
- import * as i5 from "ng-zorro-antd/dropdown";
13
- import * as i6 from "ng-zorro-antd/icon";
14
- import * as i7 from "../yunzai-i18n.service";
15
- export class YunzaiI18NComponent {
16
- get curLangCode() {
17
- return this.settings.layout.lang;
18
- }
19
- constructor(settings, i18n, doc) {
20
- this.settings = settings;
21
- this.i18n = i18n;
22
- this.doc = doc;
23
- this.destroy$ = new Subject();
24
- /** Whether to display language text */
25
- this.showLangText = true;
26
- this.langs = [];
27
- this.i18n
28
- .getLangs()
29
- .pipe(takeUntil(this.destroy$))
30
- .subscribe(langs => {
31
- this.langs = langs;
32
- });
33
- }
34
- change(lang) {
35
- const spinEl = this.doc.createElement('div');
36
- spinEl.setAttribute('class', `page-loading ant-spin ant-spin-lg ant-spin-spinning`);
37
- spinEl.innerHTML = `<span class="ant-spin-dot ant-spin-dot-spin"><i></i><i></i><i></i><i></i></span>`;
38
- this.doc.body.appendChild(spinEl);
39
- this.i18n.loadLangData(lang).subscribe(res => {
40
- this.i18n.use(lang, res);
41
- this.settings.setLayout('lang', lang);
42
- setTimeout(() => this.doc.location.reload());
43
- });
44
- }
45
- ngOnDestroy() {
46
- this.destroy$.complete();
47
- }
48
- }
49
- YunzaiI18NComponentfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: YunzaiI18NComponent, deps: [{ token: i1.SettingsService }, { token: YUNZAI_I18N_TOKEN }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
50
- YunzaiI18NComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: YunzaiI18NComponent, selector: "yunzai-i18n", inputs: { showLangText: "showLangText" }, ngImport: i0, template: `
51
- <div *ngIf="showLangText" nz-dropdown [nzDropdownMenu]="langMenu" nzPlacement="bottomRight">
52
- <i nz-icon nzType="global"></i>
53
- {{ 'lang.nav' | i18n }}
54
- <i nz-icon nzType="down"></i>
55
- </div>
56
- <i
57
- *ngIf="!showLangText"
58
- nz-dropdown
59
- [nzDropdownMenu]="langMenu"
60
- nzPlacement="bottomRight"
61
- nz-icon
62
- nzType="global"
63
- ></i>
64
- <nz-dropdown-menu data-event-id="_nav_lang" #langMenu="nzDropdownMenu">
65
- <ul nz-menu>
66
- <li
67
- data-event-id="_nav_lang"
68
- [attr.data-text]="item.text"
69
- nz-menu-item
70
- *ngFor="let item of langs"
71
- [nzSelected]="item.code === curLangCode"
72
- (click)="change(item.code)"
73
- >
74
- <span *ngIf="!item.icon" role="img" [attr.aria-label]="item.text" class="pr-xs">{{ item.abbr }}</span>
75
- <img
76
- *ngIf="item.icon"
77
- style="margin-right:4px"
78
- width="50px"
79
- height="30px"
80
- [src]="'data:image/png;base64,' + item.icon"
81
- [alt]="item.abbr"
82
- class="pr-xs"
83
- />
84
- {{ item.text }}
85
- </li>
86
- </ul>
87
- </nz-dropdown-menu>
88
- `, 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: i3.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i4.NzMenuDirective, selector: "[nz-menu]", inputs: ["nzInlineIndent", "nzTheme", "nzMode", "nzInlineCollapsed", "nzSelectable"], outputs: ["nzClick"], exportAs: ["nzMenu"] }, { kind: "directive", type: i4.NzMenuItemDirective, selector: "[nz-menu-item]", inputs: ["nzPaddingLeft", "nzDisabled", "nzSelected", "nzDanger", "nzMatchRouterExact", "nzMatchRouter"], exportAs: ["nzMenuItem"] }, { kind: "directive", type: i5.NzDropDownDirective, selector: "[nz-dropdown]", inputs: ["nzDropdownMenu", "nzTrigger", "nzMatchWidthElement", "nzBackdrop", "nzClickHide", "nzDisabled", "nzVisible", "nzOverlayClassName", "nzOverlayStyle", "nzPlacement"], outputs: ["nzVisibleChange"], exportAs: ["nzDropdown"] }, { kind: "component", type: i5.NzDropdownMenuComponent, selector: "nz-dropdown-menu", exportAs: ["nzDropdownMenu"] }, { kind: "directive", type: i6.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "pipe", type: i1.I18nPipe, name: "i18n" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
89
- __decorate([
90
- InputBoolean()
91
- ], YunzaiI18NComponent.prototype, "showLangText", void 0);
92
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: YunzaiI18NComponent, decorators: [{
93
- type: Component,
94
- args: [{
95
- selector: 'yunzai-i18n',
96
- template: `
97
- <div *ngIf="showLangText" nz-dropdown [nzDropdownMenu]="langMenu" nzPlacement="bottomRight">
98
- <i nz-icon nzType="global"></i>
99
- {{ 'lang.nav' | i18n }}
100
- <i nz-icon nzType="down"></i>
101
- </div>
102
- <i
103
- *ngIf="!showLangText"
104
- nz-dropdown
105
- [nzDropdownMenu]="langMenu"
106
- nzPlacement="bottomRight"
107
- nz-icon
108
- nzType="global"
109
- ></i>
110
- <nz-dropdown-menu data-event-id="_nav_lang" #langMenu="nzDropdownMenu">
111
- <ul nz-menu>
112
- <li
113
- data-event-id="_nav_lang"
114
- [attr.data-text]="item.text"
115
- nz-menu-item
116
- *ngFor="let item of langs"
117
- [nzSelected]="item.code === curLangCode"
118
- (click)="change(item.code)"
119
- >
120
- <span *ngIf="!item.icon" role="img" [attr.aria-label]="item.text" class="pr-xs">{{ item.abbr }}</span>
121
- <img
122
- *ngIf="item.icon"
123
- style="margin-right:4px"
124
- width="50px"
125
- height="30px"
126
- [src]="'data:image/png;base64,' + item.icon"
127
- [alt]="item.abbr"
128
- class="pr-xs"
129
- />
130
- {{ item.text }}
131
- </li>
132
- </ul>
133
- </nz-dropdown-menu>
134
- `,
135
- changeDetection: ChangeDetectionStrategy.OnPush
136
- }]
137
- }], ctorParameters: function () { return [{ type: i1.SettingsService }, { type: i7.YunzaiI18NService, decorators: [{
138
- type: Inject,
139
- args: [YUNZAI_I18N_TOKEN]
140
- }] }, { type: undefined, decorators: [{
141
- type: Inject,
142
- args: [DOCUMENT]
143
- }] }]; }, propDecorators: { showLangText: [{
144
- type: Input
145
- }] } });
146
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieXVuemFpLWkxOG4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYmlzL2xheW91dC93aWRnZXRzL3l1bnphaS1pMThuLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUM3RixPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUxQyxPQUFPLEVBQUUsaUJBQWlCLEVBQW1DLE1BQU0sY0FBYyxDQUFDO0FBQ2xGLE9BQU8sRUFBZ0IsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7OztBQStDbkUsTUFBTSxPQUFPLG1CQUFtQjtJQVE5QixJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztJQUNuQyxDQUFDO0lBRUQsWUFDVSxRQUF5QixFQUNFLElBQXVCLEVBQ2hDLEdBQVE7UUFGMUIsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDRSxTQUFJLEdBQUosSUFBSSxDQUFtQjtRQUNoQyxRQUFHLEdBQUgsR0FBRyxDQUFLO1FBYjVCLGFBQVEsR0FBaUIsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUMvQyx1Q0FBdUM7UUFDZCxpQkFBWSxHQUFHLElBQUksQ0FBQztRQUU3QyxVQUFLLEdBQXFCLEVBQUUsQ0FBQztRQVczQixJQUFJLENBQUMsSUFBSTthQUNOLFFBQVEsRUFBRTthQUNWLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzlCLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNqQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBWTtRQUNqQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QyxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxxREFBcUQsQ0FBQyxDQUFDO1FBQ3BGLE1BQU0sQ0FBQyxTQUFTLEdBQUcsa0ZBQWtGLENBQUM7UUFDdEcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWxDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUMzQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3RDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUM7O2dIQXhDVSxtQkFBbUIsaURBY3BCLGlCQUFpQixhQUNqQixRQUFRO29HQWZQLG1CQUFtQiw2RkF6Q3BCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNDVDtBQU93QjtJQUFmLFlBQVksRUFBRTt5REFBcUI7MkZBSmxDLG1CQUFtQjtrQkEzQy9CLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGFBQWE7b0JBQ3ZCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQ1Q7b0JBQ0QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQ2hEOzswQkFlSSxNQUFNOzJCQUFDLGlCQUFpQjs7MEJBQ3hCLE1BQU07MkJBQUMsUUFBUTs0Q0FYTyxZQUFZO3NCQUFwQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgWVVOWkFJX0kxOE5fVE9LRU4sIFNldHRpbmdzU2VydmljZSwgWXVuemFpSTE4TlR5cGUgfSBmcm9tICdAeWVsb24vdGhlbWUnO1xuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBJbnB1dEJvb2xlYW4gfSBmcm9tICdAeWVsb24vdXRpbC9kZWNvcmF0b3InO1xuXG5pbXBvcnQgeyBZdW56YWlJMThOU2VydmljZSB9IGZyb20gJy4uL3l1bnphaS1pMThuLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd5dW56YWktaTE4bicsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiAqbmdJZj1cInNob3dMYW5nVGV4dFwiIG56LWRyb3Bkb3duIFtuekRyb3Bkb3duTWVudV09XCJsYW5nTWVudVwiIG56UGxhY2VtZW50PVwiYm90dG9tUmlnaHRcIj5cbiAgICAgIDxpIG56LWljb24gbnpUeXBlPVwiZ2xvYmFsXCI+PC9pPlxuICAgICAge3sgJ2xhbmcubmF2JyB8IGkxOG4gfX1cbiAgICAgIDxpIG56LWljb24gbnpUeXBlPVwiZG93blwiPjwvaT5cbiAgICA8L2Rpdj5cbiAgICA8aVxuICAgICAgKm5nSWY9XCIhc2hvd0xhbmdUZXh0XCJcbiAgICAgIG56LWRyb3Bkb3duXG4gICAgICBbbnpEcm9wZG93bk1lbnVdPVwibGFuZ01lbnVcIlxuICAgICAgbnpQbGFjZW1lbnQ9XCJib3R0b21SaWdodFwiXG4gICAgICBuei1pY29uXG4gICAgICBuelR5cGU9XCJnbG9iYWxcIlxuICAgID48L2k+XG4gICAgPG56LWRyb3Bkb3duLW1lbnUgZGF0YS1ldmVudC1pZD1cIl9uYXZfbGFuZ1wiICNsYW5nTWVudT1cIm56RHJvcGRvd25NZW51XCI+XG4gICAgICA8dWwgbnotbWVudT5cbiAgICAgICAgPGxpXG4gICAgICAgICAgZGF0YS1ldmVudC1pZD1cIl9uYXZfbGFuZ1wiXG4gICAgICAgICAgW2F0dHIuZGF0YS10ZXh0XT1cIml0ZW0udGV4dFwiXG4gICAgICAgICAgbnotbWVudS1pdGVtXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgbGFuZ3NcIlxuICAgICAgICAgIFtuelNlbGVjdGVkXT1cIml0ZW0uY29kZSA9PT0gY3VyTGFuZ0NvZGVcIlxuICAgICAgICAgIChjbGljayk9XCJjaGFuZ2UoaXRlbS5jb2RlKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFpdGVtLmljb25cIiByb2xlPVwiaW1nXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJpdGVtLnRleHRcIiBjbGFzcz1cInByLXhzXCI+e3sgaXRlbS5hYmJyIH19PC9zcGFuPlxuICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5pY29uXCJcbiAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luLXJpZ2h0OjRweFwiXG4gICAgICAgICAgICB3aWR0aD1cIjUwcHhcIlxuICAgICAgICAgICAgaGVpZ2h0PVwiMzBweFwiXG4gICAgICAgICAgICBbc3JjXT1cIidkYXRhOmltYWdlL3BuZztiYXNlNjQsJyArIGl0ZW0uaWNvblwiXG4gICAgICAgICAgICBbYWx0XT1cIml0ZW0uYWJiclwiXG4gICAgICAgICAgICBjbGFzcz1cInByLXhzXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIHt7IGl0ZW0udGV4dCB9fVxuICAgICAgICA8L2xpPlxuICAgICAgPC91bD5cbiAgICA8L256LWRyb3Bkb3duLW1lbnU+XG4gIGAsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFl1bnphaUkxOE5Db21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfc2hvd0xhbmdUZXh0OiBCb29sZWFuSW5wdXQ7XG4gIHByaXZhdGUgZGVzdHJveSQ6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XG4gIC8qKiBXaGV0aGVyIHRvIGRpc3BsYXkgbGFuZ3VhZ2UgdGV4dCAqL1xuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgc2hvd0xhbmdUZXh0ID0gdHJ1ZTtcblxuICBsYW5nczogWXVuemFpSTE4TlR5cGVbXSA9IFtdO1xuXG4gIGdldCBjdXJMYW5nQ29kZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLmxheW91dC5sYW5nO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzZXR0aW5nczogU2V0dGluZ3NTZXJ2aWNlLFxuICAgIEBJbmplY3QoWVVOWkFJX0kxOE5fVE9LRU4pIHByaXZhdGUgaTE4bjogWXVuemFpSTE4TlNlcnZpY2UsXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2M6IGFueVxuICApIHtcbiAgICB0aGlzLmkxOG5cbiAgICAgIC5nZXRMYW5ncygpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKGxhbmdzID0+IHtcbiAgICAgICAgdGhpcy5sYW5ncyA9IGxhbmdzO1xuICAgICAgfSk7XG4gIH1cblxuICBjaGFuZ2UobGFuZzogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgc3BpbkVsID0gdGhpcy5kb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgc3BpbkVsLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCBgcGFnZS1sb2FkaW5nIGFudC1zcGluIGFudC1zcGluLWxnIGFudC1zcGluLXNwaW5uaW5nYCk7XG4gICAgc3BpbkVsLmlubmVySFRNTCA9IGA8c3BhbiBjbGFzcz1cImFudC1zcGluLWRvdCBhbnQtc3Bpbi1kb3Qtc3BpblwiPjxpPjwvaT48aT48L2k+PGk+PC9pPjxpPjwvaT48L3NwYW4+YDtcbiAgICB0aGlzLmRvYy5ib2R5LmFwcGVuZENoaWxkKHNwaW5FbCk7XG5cbiAgICB0aGlzLmkxOG4ubG9hZExhbmdEYXRhKGxhbmcpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgdGhpcy5pMThuLnVzZShsYW5nLCByZXMpO1xuICAgICAgdGhpcy5zZXR0aW5ncy5zZXRMYXlvdXQoJ2xhbmcnLCBsYW5nKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5kb2MubG9jYXRpb24ucmVsb2FkKCkpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG59XG4iXX0=
1
+ import { __decorate } from "tslib";
2
+ import { DOCUMENT } from '@angular/common';
3
+ import { ChangeDetectionStrategy, Component, Inject, Input } from '@angular/core';
4
+ import { Subject, takeUntil } from 'rxjs';
5
+ import { YUNZAI_I18N_TOKEN } from '@yelon/theme';
6
+ import { InputBoolean } from '@yelon/util/decorator';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@yelon/theme";
9
+ import * as i2 from "@angular/common";
10
+ import * as i3 from "ng-zorro-antd/core/transition-patch";
11
+ import * as i4 from "ng-zorro-antd/menu";
12
+ import * as i5 from "ng-zorro-antd/dropdown";
13
+ import * as i6 from "ng-zorro-antd/icon";
14
+ import * as i7 from "../yunzai-i18n.service";
15
+ class YunzaiI18NComponent {
16
+ get curLangCode() {
17
+ return this.settings.layout.lang;
18
+ }
19
+ constructor(settings, i18n, doc) {
20
+ this.settings = settings;
21
+ this.i18n = i18n;
22
+ this.doc = doc;
23
+ this.destroy$ = new Subject();
24
+ /** Whether to display language text */
25
+ this.showLangText = true;
26
+ this.langs = [];
27
+ this.i18n
28
+ .getLangs()
29
+ .pipe(takeUntil(this.destroy$))
30
+ .subscribe(langs => {
31
+ this.langs = langs;
32
+ });
33
+ }
34
+ change(lang) {
35
+ const spinEl = this.doc.createElement('div');
36
+ spinEl.setAttribute('class', `page-loading ant-spin ant-spin-lg ant-spin-spinning`);
37
+ spinEl.innerHTML = `<span class="ant-spin-dot ant-spin-dot-spin"><i></i><i></i><i></i><i></i></span>`;
38
+ this.doc.body.appendChild(spinEl);
39
+ this.i18n.loadLangData(lang).subscribe(res => {
40
+ this.i18n.use(lang, res);
41
+ this.settings.setLayout('lang', lang);
42
+ setTimeout(() => this.doc.location.reload());
43
+ });
44
+ }
45
+ ngOnDestroy() {
46
+ this.destroy$.complete();
47
+ }
48
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: YunzaiI18NComponent, deps: [{ token: i1.SettingsService }, { token: YUNZAI_I18N_TOKEN }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component }); }
49
+ static { thiscmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.2", type: YunzaiI18NComponent, selector: "yunzai-i18n", inputs: { showLangText: "showLangText" }, ngImport: i0, template: `
50
+ <div *ngIf="showLangText" nz-dropdown [nzDropdownMenu]="langMenu" nzPlacement="bottomRight">
51
+ <i nz-icon nzType="global"></i>
52
+ {{ 'lang.nav' | i18n }}
53
+ <i nz-icon nzType="down"></i>
54
+ </div>
55
+ <i
56
+ *ngIf="!showLangText"
57
+ nz-dropdown
58
+ [nzDropdownMenu]="langMenu"
59
+ nzPlacement="bottomRight"
60
+ nz-icon
61
+ nzType="global"
62
+ ></i>
63
+ <nz-dropdown-menu data-event-id="_nav_lang" #langMenu="nzDropdownMenu">
64
+ <ul nz-menu>
65
+ <li
66
+ data-event-id="_nav_lang"
67
+ [attr.data-text]="item.text"
68
+ nz-menu-item
69
+ *ngFor="let item of langs"
70
+ [nzSelected]="item.code === curLangCode"
71
+ (click)="change(item.code)"
72
+ >
73
+ <span *ngIf="!item.icon" role="img" [attr.aria-label]="item.text" class="pr-xs">{{ item.abbr }}</span>
74
+ <img
75
+ *ngIf="item.icon"
76
+ style="margin-right:4px"
77
+ width="50px"
78
+ height="30px"
79
+ [src]="'data:image/png;base64,' + item.icon"
80
+ [alt]="item.abbr"
81
+ class="pr-xs"
82
+ />
83
+ {{ item.text }}
84
+ </li>
85
+ </ul>
86
+ </nz-dropdown-menu>
87
+ `, 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: i3.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i4.NzMenuDirective, selector: "[nz-menu]", inputs: ["nzInlineIndent", "nzTheme", "nzMode", "nzInlineCollapsed", "nzSelectable"], outputs: ["nzClick"], exportAs: ["nzMenu"] }, { kind: "directive", type: i4.NzMenuItemDirective, selector: "[nz-menu-item]", inputs: ["nzPaddingLeft", "nzDisabled", "nzSelected", "nzDanger", "nzMatchRouterExact", "nzMatchRouter"], exportAs: ["nzMenuItem"] }, { kind: "directive", type: i5.NzDropDownDirective, selector: "[nz-dropdown]", inputs: ["nzDropdownMenu", "nzTrigger", "nzMatchWidthElement", "nzBackdrop", "nzClickHide", "nzDisabled", "nzVisible", "nzOverlayClassName", "nzOverlayStyle", "nzPlacement"], outputs: ["nzVisibleChange"], exportAs: ["nzDropdown"] }, { kind: "component", type: i5.NzDropdownMenuComponent, selector: "nz-dropdown-menu", exportAs: ["nzDropdownMenu"] }, { kind: "directive", type: i6.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "pipe", type: i1.I18nPipe, name: "i18n" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
88
+ }
89
+ __decorate([
90
+ InputBoolean()
91
+ ], YunzaiI18NComponent.prototype, "showLangText", void 0);
92
+ export { YunzaiI18NComponent };
93
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: YunzaiI18NComponent, decorators: [{
94
+ type: Component,
95
+ args: [{
96
+ selector: 'yunzai-i18n',
97
+ template: `
98
+ <div *ngIf="showLangText" nz-dropdown [nzDropdownMenu]="langMenu" nzPlacement="bottomRight">
99
+ <i nz-icon nzType="global"></i>
100
+ {{ 'lang.nav' | i18n }}
101
+ <i nz-icon nzType="down"></i>
102
+ </div>
103
+ <i
104
+ *ngIf="!showLangText"
105
+ nz-dropdown
106
+ [nzDropdownMenu]="langMenu"
107
+ nzPlacement="bottomRight"
108
+ nz-icon
109
+ nzType="global"
110
+ ></i>
111
+ <nz-dropdown-menu data-event-id="_nav_lang" #langMenu="nzDropdownMenu">
112
+ <ul nz-menu>
113
+ <li
114
+ data-event-id="_nav_lang"
115
+ [attr.data-text]="item.text"
116
+ nz-menu-item
117
+ *ngFor="let item of langs"
118
+ [nzSelected]="item.code === curLangCode"
119
+ (click)="change(item.code)"
120
+ >
121
+ <span *ngIf="!item.icon" role="img" [attr.aria-label]="item.text" class="pr-xs">{{ item.abbr }}</span>
122
+ <img
123
+ *ngIf="item.icon"
124
+ style="margin-right:4px"
125
+ width="50px"
126
+ height="30px"
127
+ [src]="'data:image/png;base64,' + item.icon"
128
+ [alt]="item.abbr"
129
+ class="pr-xs"
130
+ />
131
+ {{ item.text }}
132
+ </li>
133
+ </ul>
134
+ </nz-dropdown-menu>
135
+ `,
136
+ changeDetection: ChangeDetectionStrategy.OnPush
137
+ }]
138
+ }], ctorParameters: function () { return [{ type: i1.SettingsService }, { type: i7.YunzaiI18NService, decorators: [{
139
+ type: Inject,
140
+ args: [YUNZAI_I18N_TOKEN]
141
+ }] }, { type: undefined, decorators: [{
142
+ type: Inject,
143
+ args: [DOCUMENT]
144
+ }] }]; }, propDecorators: { showLangText: [{
145
+ type: Input
146
+ }] } });
147
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieXVuemFpLWkxOG4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYmlzL2xheW91dC93aWRnZXRzL3l1bnphaS1pMThuLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUM3RixPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUxQyxPQUFPLEVBQUUsaUJBQWlCLEVBQW1DLE1BQU0sY0FBYyxDQUFDO0FBQ2xGLE9BQU8sRUFBZ0IsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7OztBQUluRSxNQTJDYSxtQkFBbUI7SUFROUIsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDbkMsQ0FBQztJQUVELFlBQ1UsUUFBeUIsRUFDRSxJQUF1QixFQUNoQyxHQUFRO1FBRjFCLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ0UsU0FBSSxHQUFKLElBQUksQ0FBbUI7UUFDaEMsUUFBRyxHQUFILEdBQUcsQ0FBSztRQWI1QixhQUFRLEdBQWlCLElBQUksT0FBTyxFQUFFLENBQUM7UUFDL0MsdUNBQXVDO1FBQ2QsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFFN0MsVUFBSyxHQUFxQixFQUFFLENBQUM7UUFXM0IsSUFBSSxDQUFDLElBQUk7YUFDTixRQUFRLEVBQUU7YUFDVixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM5QixTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsTUFBTSxDQUFDLElBQVk7UUFDakIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0MsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUscURBQXFELENBQUMsQ0FBQztRQUNwRixNQUFNLENBQUMsU0FBUyxHQUFHLGtGQUFrRixDQUFDO1FBQ3RHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVsQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDM0MsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN0QyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUMvQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDOzhHQXhDVSxtQkFBbUIsaURBY3BCLGlCQUFpQixhQUNqQixRQUFRO2tHQWZQLG1CQUFtQiw2RkF6Q3BCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNDVDs7QUFPd0I7SUFBZixZQUFZLEVBQUU7eURBQXFCO1NBSmxDLG1CQUFtQjsyRkFBbkIsbUJBQW1CO2tCQTNDL0IsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsYUFBYTtvQkFDdkIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNDVDtvQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDaEQ7OzBCQWVJLE1BQU07MkJBQUMsaUJBQWlCOzswQkFDeEIsTUFBTTsyQkFBQyxRQUFROzRDQVhPLFlBQVk7c0JBQXBDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbmplY3QsIElucHV0LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBZVU5aQUlfSTE4Tl9UT0tFTiwgU2V0dGluZ3NTZXJ2aWNlLCBZdW56YWlJMThOVHlwZSB9IGZyb20gJ0B5ZWxvbi90aGVtZSc7XG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIElucHV0Qm9vbGVhbiB9IGZyb20gJ0B5ZWxvbi91dGlsL2RlY29yYXRvcic7XG5cbmltcG9ydCB7IFl1bnphaUkxOE5TZXJ2aWNlIH0gZnJvbSAnLi4veXVuemFpLWkxOG4uc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3l1bnphaS1pMThuJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2ICpuZ0lmPVwic2hvd0xhbmdUZXh0XCIgbnotZHJvcGRvd24gW256RHJvcGRvd25NZW51XT1cImxhbmdNZW51XCIgbnpQbGFjZW1lbnQ9XCJib3R0b21SaWdodFwiPlxuICAgICAgPGkgbnotaWNvbiBuelR5cGU9XCJnbG9iYWxcIj48L2k+XG4gICAgICB7eyAnbGFuZy5uYXYnIHwgaTE4biB9fVxuICAgICAgPGkgbnotaWNvbiBuelR5cGU9XCJkb3duXCI+PC9pPlxuICAgIDwvZGl2PlxuICAgIDxpXG4gICAgICAqbmdJZj1cIiFzaG93TGFuZ1RleHRcIlxuICAgICAgbnotZHJvcGRvd25cbiAgICAgIFtuekRyb3Bkb3duTWVudV09XCJsYW5nTWVudVwiXG4gICAgICBuelBsYWNlbWVudD1cImJvdHRvbVJpZ2h0XCJcbiAgICAgIG56LWljb25cbiAgICAgIG56VHlwZT1cImdsb2JhbFwiXG4gICAgPjwvaT5cbiAgICA8bnotZHJvcGRvd24tbWVudSBkYXRhLWV2ZW50LWlkPVwiX25hdl9sYW5nXCIgI2xhbmdNZW51PVwibnpEcm9wZG93bk1lbnVcIj5cbiAgICAgIDx1bCBuei1tZW51PlxuICAgICAgICA8bGlcbiAgICAgICAgICBkYXRhLWV2ZW50LWlkPVwiX25hdl9sYW5nXCJcbiAgICAgICAgICBbYXR0ci5kYXRhLXRleHRdPVwiaXRlbS50ZXh0XCJcbiAgICAgICAgICBuei1tZW51LWl0ZW1cbiAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBsYW5nc1wiXG4gICAgICAgICAgW256U2VsZWN0ZWRdPVwiaXRlbS5jb2RlID09PSBjdXJMYW5nQ29kZVwiXG4gICAgICAgICAgKGNsaWNrKT1cImNoYW5nZShpdGVtLmNvZGUpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWl0ZW0uaWNvblwiIHJvbGU9XCJpbWdcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIml0ZW0udGV4dFwiIGNsYXNzPVwicHIteHNcIj57eyBpdGVtLmFiYnIgfX08L3NwYW4+XG4gICAgICAgICAgPGltZ1xuICAgICAgICAgICAgKm5nSWY9XCJpdGVtLmljb25cIlxuICAgICAgICAgICAgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6NHB4XCJcbiAgICAgICAgICAgIHdpZHRoPVwiNTBweFwiXG4gICAgICAgICAgICBoZWlnaHQ9XCIzMHB4XCJcbiAgICAgICAgICAgIFtzcmNdPVwiJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwnICsgaXRlbS5pY29uXCJcbiAgICAgICAgICAgIFthbHRdPVwiaXRlbS5hYmJyXCJcbiAgICAgICAgICAgIGNsYXNzPVwicHIteHNcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAge3sgaXRlbS50ZXh0IH19XG4gICAgICAgIDwvbGk+XG4gICAgICA8L3VsPlxuICAgIDwvbnotZHJvcGRvd24tbWVudT5cbiAgYCxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgWXVuemFpSTE4TkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9zaG93TGFuZ1RleHQ6IEJvb2xlYW5JbnB1dDtcbiAgcHJpdmF0ZSBkZXN0cm95JDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcbiAgLyoqIFdoZXRoZXIgdG8gZGlzcGxheSBsYW5ndWFnZSB0ZXh0ICovXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBzaG93TGFuZ1RleHQgPSB0cnVlO1xuXG4gIGxhbmdzOiBZdW56YWlJMThOVHlwZVtdID0gW107XG5cbiAgZ2V0IGN1ckxhbmdDb2RlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MubGF5b3V0Lmxhbmc7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNldHRpbmdzOiBTZXR0aW5nc1NlcnZpY2UsXG4gICAgQEluamVjdChZVU5aQUlfSTE4Tl9UT0tFTikgcHJpdmF0ZSBpMThuOiBZdW56YWlJMThOU2VydmljZSxcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvYzogYW55XG4gICkge1xuICAgIHRoaXMuaTE4blxuICAgICAgLmdldExhbmdzKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUobGFuZ3MgPT4ge1xuICAgICAgICB0aGlzLmxhbmdzID0gbGFuZ3M7XG4gICAgICB9KTtcbiAgfVxuXG4gIGNoYW5nZShsYW5nOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBzcGluRWwgPSB0aGlzLmRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBzcGluRWwuc2V0QXR0cmlidXRlKCdjbGFzcycsIGBwYWdlLWxvYWRpbmcgYW50LXNwaW4gYW50LXNwaW4tbGcgYW50LXNwaW4tc3Bpbm5pbmdgKTtcbiAgICBzcGluRWwuaW5uZXJIVE1MID0gYDxzcGFuIGNsYXNzPVwiYW50LXNwaW4tZG90IGFudC1zcGluLWRvdC1zcGluXCI+PGk+PC9pPjxpPjwvaT48aT48L2k+PGk+PC9pPjwvc3Bhbj5gO1xuICAgIHRoaXMuZG9jLmJvZHkuYXBwZW5kQ2hpbGQoc3BpbkVsKTtcblxuICAgIHRoaXMuaTE4bi5sb2FkTGFuZ0RhdGEobGFuZykuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICB0aGlzLmkxOG4udXNlKGxhbmcsIHJlcyk7XG4gICAgICB0aGlzLnNldHRpbmdzLnNldExheW91dCgnbGFuZycsIGxhbmcpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmRvYy5sb2NhdGlvbi5yZWxvYWQoKSk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,184 @@
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
+ 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(forkJoin(this.loadTodo(), this.loadMessage()).subscribe(() => {
58
+ this.loading = false;
59
+ this.cdr.detectChanges();
60
+ }));
61
+ }
62
+ loadMessage() {
63
+ log('notify.component: ', 'fetch message list');
64
+ const formatMessageStatus = (status) => {
65
+ switch (status) {
66
+ case '0':
67
+ return { extra: this.y18n.fanyi('notify.unread'), color: 'red' };
68
+ case '1':
69
+ return { extra: this.y18n.fanyi('notify.readed'), color: 'green' };
70
+ default:
71
+ return { extra: this.y18n.fanyi('notify.nostatus'), color: 'primary' };
72
+ }
73
+ };
74
+ return this.httpClient
75
+ .post(`/message-center-3/my-msg-and-todo/msg-list`, {
76
+ pageNum: 1,
77
+ pageSize: 10,
78
+ status: '0'
79
+ })
80
+ .pipe(map((response) => {
81
+ const viewMessage = this.data.filter(d => d.key === 'msg')[0];
82
+ viewMessage.list = response.data.list.map((m) => {
83
+ return {
84
+ ...m,
85
+ avatar: m?.imgUrl || './assets/tmp/img/message.png',
86
+ title: m.systemName,
87
+ description: m.content,
88
+ extra: formatMessageStatus(m.status).extra,
89
+ color: formatMessageStatus(m.status).color,
90
+ datetime: formatDistanceToNow(new Date(m.date), { locale: this.nzI18n.getDateLocale() })
91
+ };
92
+ });
93
+ this.count += viewMessage.list.length;
94
+ }));
95
+ }
96
+ loadTodo() {
97
+ log('notify.component: ', 'fetch todo list');
98
+ const formatTodoStatus = (status) => {
99
+ switch (status) {
100
+ case '0':
101
+ return { extra: this.y18n.fanyi('notify.unstart'), color: 'red' };
102
+ case '1':
103
+ return { extra: this.y18n.fanyi('notify.started'), color: 'green' };
104
+ default:
105
+ return { extra: this.y18n.fanyi('notify.nostatus'), color: 'primary' };
106
+ }
107
+ };
108
+ return this.httpClient
109
+ .post(`/message-center-3/my-msg-and-todo/todo-list`, {
110
+ pageNum: 1,
111
+ pageSize: 10,
112
+ status: '0'
113
+ })
114
+ .pipe(map((response) => {
115
+ const viewTodo = this.data.filter(d => d.key === 'todo')[0];
116
+ viewTodo.list = response.data.list.map((t) => {
117
+ return {
118
+ ...t,
119
+ avatar: t?.imgUrl || './assets/tmp/img/todo.png',
120
+ title: t.systemName,
121
+ description: t.content,
122
+ datetime: formatDistanceToNow(new Date(t.date), { locale: this.nzI18n.getDateLocale() }),
123
+ extra: formatTodoStatus(t.status).extra,
124
+ color: formatTodoStatus(t.status).color
125
+ };
126
+ });
127
+ this.count += viewTodo.list.length;
128
+ }));
129
+ }
130
+ clear(type) {
131
+ const t = this.data.filter(d => d.title === type)[0];
132
+ if (t.key == 'msg' || t.key == 'notice') {
133
+ this.subs.push(this.httpClient.post(`/message-center-3/my-msg-and-todo/msg-clear`, {}).subscribe(_ => {
134
+ this.msg.success(`${this.y18n.fanyi('notify.clear')} ${type}`);
135
+ this.loadData();
136
+ }));
137
+ }
138
+ if (t.key == 'todo') {
139
+ this.loadData();
140
+ }
141
+ }
142
+ select(res) {
143
+ this.injector.get(WINDOW).open(res.item.url);
144
+ this.loadData();
145
+ }
146
+ ngOnDestroy() {
147
+ this.subs.forEach(a => a.unsubscribe());
148
+ }
149
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.2", 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 }); }
150
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.2", type: YunzaiNotifyComponent, selector: "yunzai-notify", ngImport: i0, template: `
151
+ <notice-icon
152
+ [data]="data"
153
+ [count]="count"
154
+ [loading]="loading"
155
+ btnClass="yunzai-default__nav-item"
156
+ btnIconClass="yunzai-default__nav-item-icon"
157
+ (select)="select($event)"
158
+ (clear)="clear($event)"
159
+ ></notice-icon>
160
+ `, 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 }); }
161
+ }
162
+ export { YunzaiNotifyComponent };
163
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: YunzaiNotifyComponent, decorators: [{
164
+ type: Component,
165
+ args: [{
166
+ selector: 'yunzai-notify',
167
+ template: `
168
+ <notice-icon
169
+ [data]="data"
170
+ [count]="count"
171
+ [loading]="loading"
172
+ btnClass="yunzai-default__nav-item"
173
+ btnIconClass="yunzai-default__nav-item-icon"
174
+ (select)="select($event)"
175
+ (clear)="clear($event)"
176
+ ></notice-icon>
177
+ `,
178
+ changeDetection: ChangeDetectionStrategy.OnPush
179
+ }]
180
+ }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.NzMessageService }, { type: i5.YunzaiI18NService, decorators: [{
181
+ type: Inject,
182
+ args: [YUNZAI_I18N_TOKEN]
183
+ }] }, { type: i2.NzI18nService }, { type: i0.ChangeDetectorRef }, { type: i3._HttpClient }]; } });
184
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieXVuemFpLW5vdGlmeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9iaXMvbGF5b3V0L3dpZGdldHMveXVuemFpLW5vdGlmeS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsTUFBTSxFQUlQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQTRCLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFHL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFlLE1BQU0sY0FBYyxDQUFDO0FBQzlELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDckMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7Ozs7O0FBT3hDLE1BZWEscUJBQXFCO0lBK0JoQyxZQUNVLFFBQWtCLEVBQ2xCLEdBQXFCLEVBQ00sSUFBdUIsRUFDbEQsTUFBcUIsRUFDckIsR0FBc0IsRUFDdEIsVUFBdUI7UUFMdkIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixRQUFHLEdBQUgsR0FBRyxDQUFrQjtRQUNNLFNBQUksR0FBSixJQUFJLENBQW1CO1FBQ2xELFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsZUFBVSxHQUFWLFVBQVUsQ0FBYTtRQXBDakMsU0FBSSxHQUFpQjtZQUNuQjtnQkFDRSxHQUFHLEVBQUUsS0FBSztnQkFDVixLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUM7Z0JBQ3hDLElBQUksRUFBRSxFQUFFO2dCQUNSLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FB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RUQsV0FBVztRQUNULElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDMUMsQ0FBQzs4R0F2SlUscUJBQXFCLDBFQWtDdEIsaUJBQWlCO2tHQWxDaEIscUJBQXFCLHFEQWJ0Qjs7Ozs7Ozs7OztHQVVUOztTQUdVLHFCQUFxQjsyRkFBckIscUJBQXFCO2tCQWZqQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxlQUFlO29CQUN6QixRQUFRLEVBQUU7Ozs7Ozs7Ozs7R0FVVDtvQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDaEQ7OzBCQW1DSSxNQUFNOzJCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBJbmplY3QsXG4gIEluamVjdG9yLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZvcmtKb2luLCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIG1hcCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBmb3JtYXREaXN0YW5jZVRvTm93IH0gZnJvbSAnZGF0ZS1mbnMnO1xuXG5pbXBvcnQgeyBOb3RpY2VJY29uU2VsZWN0LCBOb3RpY2VJdGVtIH0gZnJvbSAnQHllbG9uL2FiYy9ub3RpY2UtaWNvbic7XG5pbXBvcnQgeyBZVU5aQUlfSTE4Tl9UT0tFTiwgX0h0dHBDbGllbnQgfSBmcm9tICdAeWVsb24vdGhlbWUnO1xuaW1wb3J0IHsgV0lORE9XIH0gZnJvbSAnQHllbG9uL3V0aWwnO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSAnQHllbG9uL3V0aWwvb3RoZXInO1xuaW1wb3J0IHsgTnpTYWZlQW55IH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL3R5cGVzJztcbmltcG9ydCB7IE56STE4blNlcnZpY2UgfSBmcm9tICduZy16b3Jyby1hbnRkL2kxOG4nO1xuaW1wb3J0IHsgTnpNZXNzYWdlU2VydmljZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvbWVzc2FnZSc7XG5cbmltcG9ydCB7IFl1bnphaUkxOE5TZXJ2aWNlIH0gZnJvbSAnLi4veXVuemFpLWkxOG4uc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3l1bnphaS1ub3RpZnknLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxub3RpY2UtaWNvblxuICAgICAgW2RhdGFdPVwiZGF0YVwiXG4gICAgICBbY291bnRdPVwiY291bnRcIlxuICAgICAgW2xvYWRpbmddPVwibG9hZGluZ1wiXG4gICAgICBidG5DbGFzcz1cInl1bnphaS1kZWZhdWx0X19uYXYtaXRlbVwiXG4gICAgICBidG5JY29uQ2xhc3M9XCJ5dW56YWktZGVmYXVsdF9fbmF2LWl0ZW0taWNvblwiXG4gICAgICAoc2VsZWN0KT1cInNlbGVjdCgkZXZlbnQpXCJcbiAgICAgIChjbGVhcik9XCJjbGVhcigkZXZlbnQpXCJcbiAgICA+PC9ub3RpY2UtaWNvbj5cbiAgYCxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgWXVuemFpTm90aWZ5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBkYXRhOiBOb3RpY2VJdGVtW10gPSBbXG4gICAge1xuICAgICAga2V5OiAnbXNnJyxcbiAgICAgIHRpdGxlOiB0aGlzLnkxOG4uZmFueWkoJ25vdGlmeS5tZXNzYWdlJyksXG4gICAgICBsaXN0OiBbXSxcbiAgICAgIGVtcHR5VGV4dDogdGhpcy55MThuLmZhbnlpKCdub3RpZnkubWVzc2FnZS5lbXB0eScpLFxuICAgICAgZW1wdHlJbWFnZTogJy4vYXNzZXRzL3RtcC9pbWcvbWVzc2FnZS5zdmcnLFxuICAgICAgY2xlYXJUZXh0OiB0aGlzLnkxOG4uZmFueWkoJ25vdGlmeS5tZXNzYWdlLmNsZWFyJylcbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ3RvZG8nLFxuICAgICAgdGl0bGU6IHRoaXMueTE4bi5mYW55aSgnbm90aWZ5LnRvZG8nKSxcbiAgICAgIGxpc3Q6IFtdLFxuICAgICAgZW1wdHlUZXh0OiB0aGlzLnkxOG4uZmFueWkoJ25vdGlmeS50b2RvLmVtcHR5JyksXG4gICAgICBlbXB0eUltYWdlOiAnLi9hc3NldHMvdG1wL2ltZy90b2RvLnN2ZycsXG4gICAgICBjbGVhclRleHQ6IHRoaXMueTE4bi5mYW55aSgnbm90aWZ5LnRvZG8uY2xlYXInKVxuICAgIH0sXG4gICAge1xuICAgICAga2V5OiAnbm90aWNlJyxcbiAgICAgIHRpdGxlOiB0aGlzLnkxOG4uZmFueWkoJ25vdGlmeS5ub3RpY2UnKSxcbiAgICAgIGxpc3Q6IFtdLFxuICAgICAgZW1wdHlUZXh0OiB0aGlzLnkxOG4uZmFueWkoJ25vdGlmeS5ub3RpY2UuZW1wdHknKSxcbiAgICAgIGVtcHR5SW1hZ2U6ICcuL2Fzc2V0cy90bXAvaW1nL25vdGljZS5zdmcnLFxuICAgICAgY2xlYXJUZXh0OiB0aGlzLnkxOG4uZmFueWkoJ25vdGlmeS5ub3RpY2UuY2xlYXInKVxuICAgIH1cbiAgXTtcbiAgbG9hZGluZyA9IGZhbHNlO1xuICBjb3VudCA9IDA7XG4gIHN1YnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJpdmF0ZSBtc2c6IE56TWVzc2FnZVNlcnZpY2UsXG4gICAgQEluamVjdChZVU5aQUlfSTE4Tl9UT0tFTikgcHJpdmF0ZSB5MThuOiBZdW56YWlJMThOU2VydmljZSxcbiAgICBwcml2YXRlIG56STE4bjogTnpJMThuU2VydmljZSxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBodHRwQ2xpZW50OiBfSHR0cENsaWVudFxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkRGF0YSgpO1xuICB9XG5cbiAgbG9hZERhdGEoKTogdm9pZCB7XG4gICAgdGhpcy5jb3VudCA9IDA7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnN1YnMucHVzaChcbiAgICAgIGZvcmtKb2luKHRoaXMubG9hZFRvZG8oKSwgdGhpcy5sb2FkTWVzc2FnZSgpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgbG9hZE1lc3NhZ2UoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgbG9nKCdub3RpZnkuY29tcG9uZW50OiAnLCAnZmV0Y2ggbWVzc2FnZSBsaXN0Jyk7XG4gICAgY29uc3QgZm9ybWF0TWVzc2FnZVN0YXR1cyA9IChzdGF0dXM6IHN0cmluZyk6IE56U2FmZUFueSA9PiB7XG4gICAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgICBjYXNlICcwJzpcbiAgICAgICAgICByZXR1cm4geyBleHRyYTogdGhpcy55MThuLmZhbnlpKCdub3RpZnkudW5yZWFkJyksIGNvbG9yOiAncmVkJyB9O1xuICAgICAgICBjYXNlICcxJzpcbiAgICAgICAgICByZXR1cm4geyBleHRyYTogdGhpcy55MThuLmZhbnlpKCdub3RpZnkucmVhZGVkJyksIGNvbG9yOiAnZ3JlZW4nIH07XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIHsgZXh0cmE6IHRoaXMueTE4bi5mYW55aSgnbm90aWZ5Lm5vc3RhdHVzJyksIGNvbG9yOiAncHJpbWFyeScgfTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgIC5wb3N0KGAvbWVzc2FnZS1jZW50ZXItMy9teS1tc2ctYW5kLXRvZG8vbXNnLWxpc3RgLCB7XG4gICAgICAgIHBhZ2VOdW06IDEsXG4gICAgICAgIHBhZ2VTaXplOiAxMCxcbiAgICAgICAgc3RhdHVzOiAnMCdcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZTogTnpTYWZlQW55KSA9PiB7XG4gICAgICAgICAgY29uc3Qgdmlld01lc3NhZ2UgPSB0aGlzLmRhdGEuZmlsdGVyKGQgPT4gZC5rZXkgPT09ICdtc2cnKVswXTtcbiAgICAgICAgICB2aWV3TWVzc2FnZS5saXN0ID0gcmVzcG9uc2UuZGF0YS5saXN0Lm1hcCgobTogTnpTYWZlQW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5tLFxuICAgICAgICAgICAgICBhdmF0YXI6IG0/LmltZ1VybCB8fCAnLi9hc3NldHMvdG1wL2ltZy9tZXNzYWdlLnBuZycsXG4gICAgICAgICAgICAgIHRpdGxlOiBtLnN5c3RlbU5hbWUsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBtLmNvbnRlbnQsXG4gICAgICAgICAgICAgIGV4dHJhOiBmb3JtYXRNZXNzYWdlU3RhdHVzKG0uc3RhdHVzKS5leHRyYSxcbiAgICAgICAgICAgICAgY29sb3I6IGZvcm1hdE1lc3NhZ2VTdGF0dXMobS5zdGF0dXMpLmNvbG9yLFxuICAgICAgICAgICAgICBkYXRldGltZTogZm9ybWF0RGlzdGFuY2VUb05vdyhuZXcgRGF0ZShtLmRhdGUpLCB7IGxvY2FsZTogdGhpcy5uekkxOG4uZ2V0RGF0ZUxvY2FsZSgpIH0pXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuY291bnQgKz0gdmlld01lc3NhZ2UubGlzdC5sZW5ndGg7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgbG9hZFRvZG8oKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgbG9nKCdub3RpZnkuY29tcG9uZW50OiAnLCAnZmV0Y2ggdG9kbyBsaXN0Jyk7XG4gICAgY29uc3QgZm9ybWF0VG9kb1N0YXR1cyA9IChzdGF0dXM6IHN0cmluZyk6IE56U2FmZUFueSA9PiB7XG4gICAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgICBjYXNlICcwJzpcbiAgICAgICAgICByZXR1cm4geyBleHRyYTogdGhpcy55MThuLmZhbnlpKCdub3RpZnkudW5zdGFydCcpLCBjb2xvcjogJ3JlZCcgfTtcbiAgICAgICAgY2FzZSAnMSc6XG4gICAgICAgICAgcmV0dXJuIHsgZXh0cmE6IHRoaXMueTE4bi5mYW55aSgnbm90aWZ5LnN0YXJ0ZWQnKSwgY29sb3I6ICdncmVlbicgfTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4geyBleHRyYTogdGhpcy55MThuLmZhbnlpKCdub3RpZnkubm9zdGF0dXMnKSwgY29sb3I6ICdwcmltYXJ5JyB9O1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLnBvc3QoYC9tZXNzYWdlLWNlbnRlci0zL215LW1zZy1hbmQtdG9kby90b2RvLWxpc3RgLCB7XG4gICAgICAgIHBhZ2VOdW06IDEsXG4gICAgICAgIHBhZ2VTaXplOiAxMCxcbiAgICAgICAgc3RhdHVzOiAnMCdcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZTogTnpTYWZlQW55KSA9PiB7XG4gICAgICAgICAgY29uc3Qgdmlld1RvZG8gPSB0aGlzLmRhdGEuZmlsdGVyKGQgPT4gZC5rZXkgPT09ICd0b2RvJylbMF07XG4gICAgICAgICAgdmlld1RvZG8ubGlzdCA9IHJlc3BvbnNlLmRhdGEubGlzdC5tYXAoKHQ6IE56U2FmZUFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4udCxcbiAgICAgICAgICAgICAgYXZhdGFyOiB0Py5pbWdVcmwgfHwgJy4vYXNzZXRzL3RtcC9pbWcvdG9kby5wbmcnLFxuICAgICAgICAgICAgICB0aXRsZTogdC5zeXN0ZW1OYW1lLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogdC5jb250ZW50LFxuICAgICAgICAgICAgICBkYXRldGltZTogZm9ybWF0RGlzdGFuY2VUb05vdyhuZXcgRGF0ZSh0LmRhdGUpLCB7IGxvY2FsZTogdGhpcy5uekkxOG4uZ2V0RGF0ZUxvY2FsZSgpIH0pLFxuICAgICAgICAgICAgICBleHRyYTogZm9ybWF0VG9kb1N0YXR1cyh0LnN0YXR1cykuZXh0cmEsXG4gICAgICAgICAgICAgIGNvbG9yOiBmb3JtYXRUb2RvU3RhdHVzKHQuc3RhdHVzKS5jb2xvclxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmNvdW50ICs9IHZpZXdUb2RvLmxpc3QubGVuZ3RoO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIGNsZWFyKHR5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHQgPSB0aGlzLmRhdGEuZmlsdGVyKGQgPT4gZC50aXRsZSA9PT0gdHlwZSlbMF07XG4gICAgaWYgKHQua2V5ID09ICdtc2cnIHx8IHQua2V5ID09ICdub3RpY2UnKSB7XG4gICAgICB0aGlzLnN1YnMucHVzaChcbiAgICAgICAgdGhpcy5odHRwQ2xpZW50LnBvc3QoYC9tZXNzYWdlLWNlbnRlci0zL215LW1zZy1hbmQtdG9kby9tc2ctY2xlYXJgLCB7fSkuc3Vic2NyaWJlKF8gPT4ge1xuICAgICAgICAgIHRoaXMubXNnLnN1Y2Nlc3MoYCR7dGhpcy55MThuLmZhbnlpKCdub3RpZnkuY2xlYXInKX0gJHt0eXBlfWApO1xuICAgICAgICAgIHRoaXMubG9hZERhdGEoKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh0LmtleSA9PSAndG9kbycpIHtcbiAgICAgIHRoaXMubG9hZERhdGEoKTtcbiAgICB9XG4gIH1cblxuICBzZWxlY3QocmVzOiBOb3RpY2VJY29uU2VsZWN0KTogdm9pZCB7XG4gICAgdGhpcy5pbmplY3Rvci5nZXQoV0lORE9XKS5vcGVuKHJlcy5pdGVtLnVybCk7XG4gICAgdGhpcy5sb2FkRGF0YSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzLmZvckVhY2goYSA9PiBhLnVuc3Vic2NyaWJlKCkpO1xuICB9XG59XG4iXX0=