@yelon/bis 15.0.0-beta.2 → 15.0.0-beta.4

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 (83) hide show
  1. package/esm2020/layout/bis.config.mjs +11 -0
  2. package/esm2020/layout/icon/style-icons.mjs +796 -0
  3. package/esm2020/layout/layout-basic/index.mjs +4 -0
  4. package/esm2020/layout/layout-basic/interface.mjs +7 -0
  5. package/esm2020/layout/layout-basic/layout-basic.component.mjs +320 -0
  6. package/esm2020/layout/layout-basic/layout-display.service.mjs +87 -0
  7. package/esm2020/layout/layout-nav/index.mjs +5 -0
  8. package/esm2020/layout/layout-nav/layout-nav-application.component.mjs +262 -0
  9. package/esm2020/{src → layout}/layout-nav/layout-nav-group.component.mjs +1 -1
  10. package/esm2020/{src → layout}/layout-nav/layout-nav-tile.component.mjs +1 -1
  11. package/esm2020/layout/layout-nav/types.mjs +7 -0
  12. package/esm2020/layout/layout.mjs +5 -0
  13. package/esm2020/layout/public_api.mjs +11 -0
  14. package/esm2020/layout/widgets/index.mjs +7 -0
  15. package/esm2020/{src → layout}/widgets/yunzai-clear-storage.component.mjs +1 -1
  16. package/esm2020/{src → layout}/widgets/yunzai-fullscreen.component.mjs +1 -1
  17. package/esm2020/{src → layout}/widgets/yunzai-i18n.component.mjs +1 -1
  18. package/esm2020/layout/widgets/yunzai-notify.component.mjs +183 -0
  19. package/esm2020/layout/widgets/yunzai-theme-btn.component.mjs +195 -0
  20. package/esm2020/{src → layout}/widgets/yunzai-user.component.mjs +1 -1
  21. package/esm2020/layout/yunzai-act.guard.mjs +107 -0
  22. package/esm2020/layout/yunzai-auth.service.mjs +153 -0
  23. package/esm2020/layout/yunzai-default.interceptor.mjs +207 -0
  24. package/esm2020/layout/yunzai-i18n.service.mjs +94 -0
  25. package/esm2020/layout/yunzai-layout.module.mjs +76 -0
  26. package/esm2020/layout/yunzai-startup.service.mjs +157 -0
  27. package/esm2020/public_api.mjs +2 -2
  28. package/fesm2015/bis.mjs +1 -2960
  29. package/fesm2015/bis.mjs.map +1 -1
  30. package/fesm2015/layout.mjs +2971 -0
  31. package/fesm2015/layout.mjs.map +1 -0
  32. package/fesm2020/bis.mjs +1 -2968
  33. package/fesm2020/bis.mjs.map +1 -1
  34. package/fesm2020/layout.mjs +2979 -0
  35. package/fesm2020/layout.mjs.map +1 -0
  36. package/{src → layout}/bis.config.d.ts +0 -0
  37. package/{src → layout}/icon/style-icons.d.ts +0 -0
  38. package/layout/index.d.ts +5 -0
  39. package/{src → layout}/layout-basic/index.d.ts +0 -0
  40. package/{src → layout}/layout-basic/interface.d.ts +0 -0
  41. package/{src → layout}/layout-basic/layout-basic.component.d.ts +4 -3
  42. package/{src → layout}/layout-basic/layout-display.service.d.ts +0 -0
  43. package/{src → layout}/layout-nav/index.d.ts +0 -0
  44. package/{src → layout}/layout-nav/layout-nav-application.component.d.ts +0 -0
  45. package/{src → layout}/layout-nav/layout-nav-group.component.d.ts +0 -0
  46. package/{src → layout}/layout-nav/layout-nav-tile.component.d.ts +0 -0
  47. package/{src → layout}/layout-nav/types.d.ts +0 -0
  48. package/{src/index.d.ts → layout/public_api.d.ts} +0 -1
  49. package/layout/style/index.less +154 -0
  50. package/{src → layout}/widgets/index.d.ts +0 -0
  51. package/{src → layout}/widgets/yunzai-clear-storage.component.d.ts +0 -0
  52. package/{src → layout}/widgets/yunzai-fullscreen.component.d.ts +0 -0
  53. package/{src → layout}/widgets/yunzai-i18n.component.d.ts +0 -0
  54. package/{src → layout}/widgets/yunzai-notify.component.d.ts +0 -0
  55. package/{src → layout}/widgets/yunzai-theme-btn.component.d.ts +0 -0
  56. package/{src → layout}/widgets/yunzai-user.component.d.ts +0 -0
  57. package/{src → layout}/yunzai-act.guard.d.ts +0 -0
  58. package/{src → layout}/yunzai-auth.service.d.ts +0 -0
  59. package/{src → layout}/yunzai-default.interceptor.d.ts +0 -0
  60. package/{src → layout}/yunzai-i18n.service.d.ts +1 -1
  61. package/{src → layout}/yunzai-layout.module.d.ts +1 -1
  62. package/{src → layout}/yunzai-startup.service.d.ts +0 -0
  63. package/package.json +19 -11
  64. package/public_api.d.ts +2 -1
  65. package/esm2020/src/bis.config.mjs +0 -11
  66. package/esm2020/src/icon/style-icons.mjs +0 -796
  67. package/esm2020/src/index.mjs +0 -12
  68. package/esm2020/src/layout-basic/index.mjs +0 -4
  69. package/esm2020/src/layout-basic/interface.mjs +0 -7
  70. package/esm2020/src/layout-basic/layout-basic.component.mjs +0 -312
  71. package/esm2020/src/layout-basic/layout-display.service.mjs +0 -87
  72. package/esm2020/src/layout-nav/index.mjs +0 -5
  73. package/esm2020/src/layout-nav/layout-nav-application.component.mjs +0 -262
  74. package/esm2020/src/layout-nav/types.mjs +0 -7
  75. package/esm2020/src/widgets/index.mjs +0 -7
  76. package/esm2020/src/widgets/yunzai-notify.component.mjs +0 -183
  77. package/esm2020/src/widgets/yunzai-theme-btn.component.mjs +0 -195
  78. package/esm2020/src/yunzai-act.guard.mjs +0 -107
  79. package/esm2020/src/yunzai-auth.service.mjs +0 -153
  80. package/esm2020/src/yunzai-default.interceptor.mjs +0 -207
  81. package/esm2020/src/yunzai-i18n.service.mjs +0 -94
  82. package/esm2020/src/yunzai-layout.module.mjs +0 -76
  83. package/esm2020/src/yunzai-startup.service.mjs +0 -157
@@ -1,262 +0,0 @@
1
- import { Component } from '@angular/core';
2
- import { Subject, takeUntil } from 'rxjs';
3
- import { WINDOW } from '@yelon/util';
4
- import { TopicType } from './types';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@yelon/cache";
7
- import * as i2 from "../yunzai-i18n.service";
8
- import * as i3 from "@yelon/theme";
9
- import * as i4 from "@angular/common";
10
- import * as i5 from "@angular/forms";
11
- import * as i6 from "ng-zorro-antd/core/transition-patch";
12
- import * as i7 from "ng-zorro-antd/grid";
13
- import * as i8 from "ng-zorro-antd/icon";
14
- import * as i9 from "ng-zorro-antd/input";
15
- export class LayoutNavApplicationComponent {
16
- constructor(cacheService, i18n, http, inject) {
17
- this.cacheService = cacheService;
18
- this.i18n = i18n;
19
- this.http = http;
20
- this.inject = inject;
21
- this.TopicType = TopicType;
22
- this.state = {
23
- active: false,
24
- type: TopicType.FULL,
25
- topic: undefined,
26
- topics: [],
27
- list: [],
28
- search: null,
29
- destroy$: new Subject()
30
- };
31
- }
32
- ngOnInit() {
33
- this.state.list = this.state.topics = this.cacheService.get('_yz_header', { mode: 'none' });
34
- }
35
- initTopic(type) {
36
- this.state.search = null;
37
- this.state.list = this.cacheService.get('_yz_header', { mode: 'none' });
38
- this.state.type = type;
39
- }
40
- full() {
41
- this.initTopic(TopicType.FULL);
42
- }
43
- own() {
44
- this.initTopic(TopicType.OWN);
45
- const temp = this.cacheService.get('_yz_header', { mode: 'none' });
46
- this.state.list = temp
47
- .filter((topic) => {
48
- topic.children = topic.children.filter((child) => {
49
- return child.auth;
50
- });
51
- return topic;
52
- })
53
- .filter((topic) => {
54
- return topic.children.length > 0;
55
- });
56
- }
57
- every(e) {
58
- this.initTopic(TopicType.EVERY);
59
- this.state.topic = e;
60
- const temp = this.cacheService.get('_yz_header', { mode: 'none' });
61
- this.state.list = [...temp.filter(t => t.key === e.key)[0].children];
62
- }
63
- diffChange(flag) {
64
- if (flag) {
65
- this.state.active = flag;
66
- }
67
- else {
68
- this.state.active = !this.state.active;
69
- }
70
- }
71
- open(topic) {
72
- if (topic.key) {
73
- this.http
74
- .post(`/app-manager/web-scan/save`, {
75
- appId: topic.key,
76
- createDate: new Date()
77
- })
78
- .pipe(takeUntil(this.state.destroy$))
79
- .subscribe();
80
- }
81
- switch (topic.target) {
82
- case 'href':
83
- this.inject.get(WINDOW).location.href = topic.url;
84
- break;
85
- case 'blank':
86
- this.inject.get(WINDOW).location.href = topic.url;
87
- break;
88
- case 'target':
89
- this.inject.get(WINDOW).location.href = topic.url;
90
- break;
91
- default:
92
- this.inject.get(WINDOW).location.href = topic.url;
93
- break;
94
- }
95
- }
96
- onSearch() {
97
- const temp = this.cacheService.get('_yz_header', { mode: 'none' });
98
- if (this.state.search) {
99
- this.state.list = temp
100
- .filter((topic) => {
101
- if (this.i18n.fanyi(topic.name).includes(this.state.search)) {
102
- return topic;
103
- }
104
- else {
105
- topic.children = topic.children.filter((child) => {
106
- return this.i18n.fanyi(child.name).includes(this.state.search);
107
- });
108
- return topic;
109
- }
110
- })
111
- .filter((topic) => {
112
- return topic.children.length > 0;
113
- });
114
- }
115
- else {
116
- this.state.list = this.cacheService.get('_yz_header', { mode: 'none' });
117
- }
118
- }
119
- ngOnDestroy() {
120
- this.state.destroy$.complete();
121
- }
122
- }
123
- LayoutNavApplicationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: LayoutNavApplicationComponent, deps: [{ token: i1.CacheService }, { token: i2.YunzaiI18NService }, { token: i3._HttpClient }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
124
- LayoutNavApplicationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.4", type: LayoutNavApplicationComponent, selector: "layout-nav-application", ngImport: i0, template: `
125
- <!-- template start-->
126
- <ng-template #search>
127
- <div nz-row class="yz-application-list-search">
128
- <nz-input-group [nzPrefix]="prefixTemplate">
129
- <input
130
- type="text"
131
- nz-input
132
- placeholder="{{ 'application.search' | i18n }}"
133
- [(ngModel)]="state.search"
134
- (ngModelChange)="onSearch()"
135
- />
136
- <ng-template #prefixTemplate>
137
- <i nz-icon nzType="search" nzTheme="outline"></i>
138
- </ng-template>
139
- </nz-input-group>
140
- </div>
141
- </ng-template>
142
- <ng-template #ld>
143
- <div class="yz-application-list">
144
- <ul>
145
- <li *ngFor="let d of state.list">
146
- <h5>{{ d.name }}</h5>
147
- <a href="javascript:;" *ngFor="let cd of d.children" (click)="open(cd)">{{ cd.name }}</a>
148
- </li>
149
- </ul>
150
- </div>
151
- </ng-template>
152
- <!-- template end-->
153
-
154
- <!-- button start-->
155
- <div class="yunzai-default__nav-item" (click)="diffChange()"> {{ 'application.button' | i18n }}</div>
156
- <!-- button end-->
157
-
158
- <!-- header start-->
159
- <div class="yz-application" nz-row *ngIf="state.active">
160
- <div nz-col [nzSpan]="3" class="yz-application-topic">
161
- <div class="yz-application-text" (click)="full()">{{ 'application.all' | i18n }}</div>
162
- <div class="yz-application-text" (click)="own()">{{ 'application.mine' | i18n }}</div>
163
- <div class="yz-application-text" *ngFor="let d of state.topics" (click)="every(d)">{{ d.name }}</div>
164
- </div>
165
- <div nz-col [nzSpan]="21" [ngSwitch]="state.topic" class="yz-application-container">
166
- <div *ngSwitchCase="TopicType.FULL">
167
- <ng-template [ngTemplateOutlet]="search"></ng-template>
168
- <ng-template [ngTemplateOutlet]="ld"></ng-template>
169
- </div>
170
- <div *ngSwitchCase="TopicType.OWN">
171
- <ng-template [ngTemplateOutlet]="search"></ng-template>
172
- <ng-template [ngTemplateOutlet]="ld"></ng-template>
173
- </div>
174
- <div *ngSwitchCase="TopicType.EVERY" class="yz-application-list">
175
- <div class="yz-application-list-item">
176
- <ul>
177
- <li *ngFor="let d of state.list" (click)="open(d)">
178
- <a href="javascript:;">
179
- <h4>{{ d.name }}</h4>
180
- <p>{{ d.intro }}</p>
181
- </a>
182
- </li>
183
- </ul>
184
- </div>
185
- </div>
186
- </div>
187
- </div>
188
- <!-- header end-->
189
- `, isInline: true, dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.ɵ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: i7.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { kind: "directive", type: i7.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { kind: "directive", type: i8.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "directive", type: i9.NzInputDirective, selector: "input[nz-input],textarea[nz-input]", inputs: ["nzBorderless", "nzSize", "nzStatus", "disabled"], exportAs: ["nzInput"] }, { kind: "component", type: i9.NzInputGroupComponent, selector: "nz-input-group", inputs: ["nzAddOnBeforeIcon", "nzAddOnAfterIcon", "nzPrefixIcon", "nzSuffixIcon", "nzAddOnBefore", "nzAddOnAfter", "nzPrefix", "nzStatus", "nzSuffix", "nzSize", "nzSearch", "nzCompact"], exportAs: ["nzInputGroup"] }, { kind: "directive", type: i9.NzInputGroupWhitSuffixOrPrefixDirective, selector: "nz-input-group[nzSuffix], nz-input-group[nzPrefix]" }, { kind: "pipe", type: i3.I18nPipe, name: "i18n" }] });
190
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: LayoutNavApplicationComponent, decorators: [{
191
- type: Component,
192
- args: [{
193
- selector: `layout-nav-application`,
194
- template: `
195
- <!-- template start-->
196
- <ng-template #search>
197
- <div nz-row class="yz-application-list-search">
198
- <nz-input-group [nzPrefix]="prefixTemplate">
199
- <input
200
- type="text"
201
- nz-input
202
- placeholder="{{ 'application.search' | i18n }}"
203
- [(ngModel)]="state.search"
204
- (ngModelChange)="onSearch()"
205
- />
206
- <ng-template #prefixTemplate>
207
- <i nz-icon nzType="search" nzTheme="outline"></i>
208
- </ng-template>
209
- </nz-input-group>
210
- </div>
211
- </ng-template>
212
- <ng-template #ld>
213
- <div class="yz-application-list">
214
- <ul>
215
- <li *ngFor="let d of state.list">
216
- <h5>{{ d.name }}</h5>
217
- <a href="javascript:;" *ngFor="let cd of d.children" (click)="open(cd)">{{ cd.name }}</a>
218
- </li>
219
- </ul>
220
- </div>
221
- </ng-template>
222
- <!-- template end-->
223
-
224
- <!-- button start-->
225
- <div class="yunzai-default__nav-item" (click)="diffChange()"> {{ 'application.button' | i18n }}</div>
226
- <!-- button end-->
227
-
228
- <!-- header start-->
229
- <div class="yz-application" nz-row *ngIf="state.active">
230
- <div nz-col [nzSpan]="3" class="yz-application-topic">
231
- <div class="yz-application-text" (click)="full()">{{ 'application.all' | i18n }}</div>
232
- <div class="yz-application-text" (click)="own()">{{ 'application.mine' | i18n }}</div>
233
- <div class="yz-application-text" *ngFor="let d of state.topics" (click)="every(d)">{{ d.name }}</div>
234
- </div>
235
- <div nz-col [nzSpan]="21" [ngSwitch]="state.topic" class="yz-application-container">
236
- <div *ngSwitchCase="TopicType.FULL">
237
- <ng-template [ngTemplateOutlet]="search"></ng-template>
238
- <ng-template [ngTemplateOutlet]="ld"></ng-template>
239
- </div>
240
- <div *ngSwitchCase="TopicType.OWN">
241
- <ng-template [ngTemplateOutlet]="search"></ng-template>
242
- <ng-template [ngTemplateOutlet]="ld"></ng-template>
243
- </div>
244
- <div *ngSwitchCase="TopicType.EVERY" class="yz-application-list">
245
- <div class="yz-application-list-item">
246
- <ul>
247
- <li *ngFor="let d of state.list" (click)="open(d)">
248
- <a href="javascript:;">
249
- <h4>{{ d.name }}</h4>
250
- <p>{{ d.intro }}</p>
251
- </a>
252
- </li>
253
- </ul>
254
- </div>
255
- </div>
256
- </div>
257
- </div>
258
- <!-- header end-->
259
- `
260
- }]
261
- }], ctorParameters: function () { return [{ type: i1.CacheService }, { type: i2.YunzaiI18NService }, { type: i3._HttpClient }, { type: i0.Injector }]; } });
262
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LW5hdi1hcHBsaWNhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9iaXMvc3JjL2xheW91dC1uYXYvbGF5b3V0LW5hdi1hcHBsaWNhdGlvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBK0IsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJMUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUdyQyxPQUFPLEVBQTZCLFNBQVMsRUFBRSxNQUFNLFNBQVMsQ0FBQzs7Ozs7Ozs7Ozs7QUF1RS9ELE1BQU0sT0FBTyw2QkFBNkI7SUFZeEMsWUFDVSxZQUEwQixFQUMxQixJQUF1QixFQUN2QixJQUFpQixFQUNqQixNQUFnQjtRQUhoQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixTQUFJLEdBQUosSUFBSSxDQUFtQjtRQUN2QixTQUFJLEdBQUosSUFBSSxDQUFhO1FBQ2pCLFdBQU0sR0FBTixNQUFNLENBQVU7UUFmbkIsY0FBUyxHQUFHLFNBQVMsQ0FBQztRQUM3QixVQUFLLEdBQThCO1lBQ2pDLE1BQU0sRUFBRSxLQUFLO1lBQ2IsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJO1lBQ3BCLEtBQUssRUFBRSxTQUFTO1lBQ2hCLE1BQU0sRUFBRSxFQUFFO1lBQ1YsSUFBSSxFQUFFLEVBQUU7WUFDUixNQUFNLEVBQUUsSUFBSTtZQUNaLFFBQVEsRUFBRSxJQUFJLE9BQU8sRUFBTztTQUM3QixDQUFDO0lBT0MsQ0FBQztJQUVKLFFBQVE7UUFDTixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVB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Q0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTyxDQUFDLENBQUM7b0JBQ2xFLENBQUMsQ0FBQyxDQUFDO29CQUNILE9BQU8sS0FBSyxDQUFDO2lCQUNkO1lBQ0gsQ0FBQyxDQUFDO2lCQUNELE1BQU0sQ0FBQyxDQUFDLEtBQXFCLEVBQUUsRUFBRTtnQkFDaEMsT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDbkMsQ0FBQyxDQUFDLENBQUM7U0FDTjthQUFNO1lBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7U0FDekU7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2pDLENBQUM7OzBIQWpIVSw2QkFBNkI7OEdBQTdCLDZCQUE2Qiw4REFuRTlCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlFVDsyRkFFVSw2QkFBNkI7a0JBckV6QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx3QkFBd0I7b0JBQ2xDLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpRVQ7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdG9yLCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IENhY2hlU2VydmljZSwgWXVuemFpTmF2VG9waWMgfSBmcm9tICdAeWVsb24vY2FjaGUnO1xuaW1wb3J0IHsgX0h0dHBDbGllbnQgfSBmcm9tICdAeWVsb24vdGhlbWUnO1xuaW1wb3J0IHsgV0lORE9XIH0gZnJvbSAnQHllbG9uL3V0aWwnO1xuXG5pbXBvcnQgeyBZdW56YWlJMThOU2VydmljZSB9IGZyb20gJy4uL3l1bnphaS1pMThuLnNlcnZpY2UnO1xuaW1wb3J0IHsgTGF5b3V0TmF2QXBwbGljYXRpb25TdGF0ZSwgVG9waWNUeXBlIH0gZnJvbSAnLi90eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogYGxheW91dC1uYXYtYXBwbGljYXRpb25gLFxuICB0ZW1wbGF0ZTogYFxuICAgIDwhLS0gICAgICB0ZW1wbGF0ZSBzdGFydC0tPlxuICAgIDxuZy10ZW1wbGF0ZSAjc2VhcmNoPlxuICAgICAgPGRpdiBuei1yb3cgY2xhc3M9XCJ5ei1hcHBsaWNhdGlvbi1saXN0LXNlYXJjaFwiPlxuICAgICAgICA8bnotaW5wdXQtZ3JvdXAgW256UHJlZml4XT1cInByZWZpeFRlbXBsYXRlXCI+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBuei1pbnB1dFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnYXBwbGljYXRpb24uc2VhcmNoJyB8IGkxOG4gfX1cIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzdGF0ZS5zZWFyY2hcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25TZWFyY2goKVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI3ByZWZpeFRlbXBsYXRlPlxuICAgICAgICAgICAgPGkgbnotaWNvbiBuelR5cGU9XCJzZWFyY2hcIiBuelRoZW1lPVwib3V0bGluZVwiPjwvaT5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L256LWlucHV0LWdyb3VwPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgI2xkPlxuICAgICAgPGRpdiBjbGFzcz1cInl6LWFwcGxpY2F0aW9uLWxpc3RcIj5cbiAgICAgICAgPHVsPlxuICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgZCBvZiBzdGF0ZS5saXN0XCI+XG4gICAgICAgICAgICA8aDU+e3sgZC5uYW1lIH19PC9oNT5cbiAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiAqbmdGb3I9XCJsZXQgY2Qgb2YgZC5jaGlsZHJlblwiIChjbGljayk9XCJvcGVuKGNkKVwiPnt7IGNkLm5hbWUgfX08L2E+XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgPC91bD5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPCEtLSAgICAgIHRlbXBsYXRlIGVuZC0tPlxuXG4gICAgPCEtLSAgICAgIGJ1dHRvbiBzdGFydC0tPlxuICAgIDxkaXYgY2xhc3M9XCJ5dW56YWktZGVmYXVsdF9fbmF2LWl0ZW1cIiAoY2xpY2spPVwiZGlmZkNoYW5nZSgpXCI+IHt7ICdhcHBsaWNhdGlvbi5idXR0b24nIHwgaTE4biB9fTwvZGl2PlxuICAgIDwhLS0gICAgICBidXR0b24gZW5kLS0+XG5cbiAgICA8IS0tICAgICAgaGVhZGVyIHN0YXJ0LS0+XG4gICAgPGRpdiBjbGFzcz1cInl6LWFwcGxpY2F0aW9uXCIgbnotcm93ICpuZ0lmPVwic3RhdGUuYWN0aXZlXCI+XG4gICAgICA8ZGl2IG56LWNvbCBbbnpTcGFuXT1cIjNcIiBjbGFzcz1cInl6LWFwcGxpY2F0aW9uLXRvcGljXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ5ei1hcHBsaWNhdGlvbi10ZXh0XCIgKGNsaWNrKT1cImZ1bGwoKVwiPnt7ICdhcHBsaWNhdGlvbi5hbGwnIHwgaTE4biB9fTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwieXotYXBwbGljYXRpb24tdGV4dFwiIChjbGljayk9XCJvd24oKVwiPnt7ICdhcHBsaWNhdGlvbi5taW5lJyB8IGkxOG4gfX08L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInl6LWFwcGxpY2F0aW9uLXRleHRcIiAqbmdGb3I9XCJsZXQgZCBvZiBzdGF0ZS50b3BpY3NcIiAoY2xpY2spPVwiZXZlcnkoZClcIj57eyBkLm5hbWUgfX08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBuei1jb2wgW256U3Bhbl09XCIyMVwiIFtuZ1N3aXRjaF09XCJzdGF0ZS50b3BpY1wiIGNsYXNzPVwieXotYXBwbGljYXRpb24tY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIlRvcGljVHlwZS5GVUxMXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNlYXJjaFwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxkXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIlRvcGljVHlwZS5PV05cIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwic2VhcmNoXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibGRcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiVG9waWNUeXBlLkVWRVJZXCIgY2xhc3M9XCJ5ei1hcHBsaWNhdGlvbi1saXN0XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInl6LWFwcGxpY2F0aW9uLWxpc3QtaXRlbVwiPlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGQgb2Ygc3RhdGUubGlzdFwiIChjbGljayk9XCJvcGVuKGQpXCI+XG4gICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiPlxuICAgICAgICAgICAgICAgICAgPGg0Pnt7IGQubmFtZSB9fTwvaDQ+XG4gICAgICAgICAgICAgICAgICA8cD57eyBkLmludHJvIH19PC9wPlxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPCEtLSAgICAgIGhlYWRlciBlbmQtLT5cbiAgYFxufSlcbmV4cG9ydCBjbGFzcyBMYXlvdXROYXZBcHBsaWNhdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHVibGljIFRvcGljVHlwZSA9IFRvcGljVHlwZTtcbiAgc3RhdGU6IExheW91dE5hdkFwcGxpY2F0aW9uU3RhdGUgPSB7XG4gICAgYWN0aXZlOiBmYWxzZSxcbiAgICB0eXBlOiBUb3BpY1R5cGUuRlVMTCxcbiAgICB0b3BpYzogdW5kZWZpbmVkLFxuICAgIHRvcGljczogW10sXG4gICAgbGlzdDogW10sXG4gICAgc2VhcmNoOiBudWxsLFxuICAgIGRlc3Ryb3kkOiBuZXcgU3ViamVjdDxhbnk+KClcbiAgfTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNhY2hlU2VydmljZTogQ2FjaGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgaTE4bjogWXVuemFpSTE4TlNlcnZpY2UsXG4gICAgcHJpdmF0ZSBodHRwOiBfSHR0cENsaWVudCxcbiAgICBwcml2YXRlIGluamVjdDogSW5qZWN0b3JcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGUubGlzdCA9IHRoaXMuc3RhdGUudG9waWNzID0gdGhpcy5jYWNoZVNlcnZpY2UuZ2V0KCdfeXpfaGVhZGVyJywgeyBtb2RlOiAnbm9uZScgfSk7XG4gIH1cblxuICBpbml0VG9waWModHlwZTogVG9waWNUeXBlKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZS5zZWFyY2ggPSBudWxsO1xuICAgIHRoaXMuc3RhdGUubGlzdCA9IHRoaXMuY2FjaGVTZXJ2aWNlLmdldCgnX3l6X2hlYWRlcicsIHsgbW9kZTogJ25vbmUnIH0pO1xuICAgIHRoaXMuc3RhdGUudHlwZSA9IHR5cGU7XG4gIH1cblxuICBmdWxsKCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdFRvcGljKFRvcGljVHlwZS5GVUxMKTtcbiAgfVxuXG4gIG93bigpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRUb3BpYyhUb3BpY1R5cGUuT1dOKTtcbiAgICBjb25zdCB0ZW1wOiBZdW56YWlOYXZUb3BpY1tdID0gdGhpcy5jYWNoZVNlcnZpY2UuZ2V0KCdfeXpfaGVhZGVyJywgeyBtb2RlOiAnbm9uZScgfSk7XG4gICAgdGhpcy5zdGF0ZS5saXN0ID0gdGVtcFxuICAgICAgLmZpbHRlcigodG9waWM6IFl1bnphaU5hdlRvcGljKSA9PiB7XG4gICAgICAgIHRvcGljLmNoaWxkcmVuID0gdG9waWMuY2hpbGRyZW4uZmlsdGVyKChjaGlsZDogWXVuemFpTmF2VG9waWMpID0+IHtcbiAgICAgICAgICByZXR1cm4gY2hpbGQuYXV0aDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0b3BpYztcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKCh0b3BpYzogWXVuemFpTmF2VG9waWMpID0+IHtcbiAgICAgICAgcmV0dXJuIHRvcGljLmNoaWxkcmVuLmxlbmd0aCA+IDA7XG4gICAgICB9KTtcbiAgfVxuXG4gIGV2ZXJ5KGU6IFl1bnphaU5hdlRvcGljKTogdm9pZCB7XG4gICAgdGhpcy5pbml0VG9waWMoVG9waWNUeXBlLkVWRVJZKTtcbiAgICB0aGlzLnN0YXRlLnRvcGljID0gZTtcbiAgICBjb25zdCB0ZW1wOiBZdW56YWlOYXZUb3BpY1tdID0gdGhpcy5jYWNoZVNlcnZpY2UuZ2V0KCdfeXpfaGVhZGVyJywgeyBtb2RlOiAnbm9uZScgfSk7XG4gICAgdGhpcy5zdGF0ZS5saXN0ID0gWy4uLnRlbXAuZmlsdGVyKHQgPT4gdC5rZXkgPT09IGUua2V5KVswXS5jaGlsZHJlbl07XG4gIH1cblxuICBkaWZmQ2hhbmdlKGZsYWc/OiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKGZsYWcpIHtcbiAgICAgIHRoaXMuc3RhdGUuYWN0aXZlID0gZmxhZztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGF0ZS5hY3RpdmUgPSAhdGhpcy5zdGF0ZS5hY3RpdmU7XG4gICAgfVxuICB9XG5cbiAgb3Blbih0b3BpYzogWXVuemFpTmF2VG9waWMpOiB2b2lkIHtcbiAgICBpZiAodG9waWMua2V5KSB7XG4gICAgICB0aGlzLmh0dHBcbiAgICAgICAgLnBvc3QoYC9hcHAtbWFuYWdlci93ZWItc2Nhbi9zYXZlYCwge1xuICAgICAgICAgIGFwcElkOiB0b3BpYy5rZXksXG4gICAgICAgICAgY3JlYXRlRGF0ZTogbmV3IERhdGUoKVxuICAgICAgICB9KVxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5zdGF0ZS5kZXN0cm95JCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgc3dpdGNoICh0b3BpYy50YXJnZXQpIHtcbiAgICAgIGNhc2UgJ2hyZWYnOlxuICAgICAgICB0aGlzLmluamVjdC5nZXQoV0lORE9XKS5sb2NhdGlvbi5ocmVmID0gdG9waWMudXJsO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2JsYW5rJzpcbiAgICAgICAgdGhpcy5pbmplY3QuZ2V0KFdJTkRPVykubG9jYXRpb24uaHJlZiA9IHRvcGljLnVybDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0YXJnZXQnOlxuICAgICAgICB0aGlzLmluamVjdC5nZXQoV0lORE9XKS5sb2NhdGlvbi5ocmVmID0gdG9waWMudXJsO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuaW5qZWN0LmdldChXSU5ET1cpLmxvY2F0aW9uLmhyZWYgPSB0b3BpYy51cmw7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIG9uU2VhcmNoKCk6IHZvaWQge1xuICAgIGNvbnN0IHRlbXA6IFl1bnphaU5hdlRvcGljW10gPSB0aGlzLmNhY2hlU2VydmljZS5nZXQoJ195el9oZWFkZXInLCB7IG1vZGU6ICdub25lJyB9KTtcbiAgICBpZiAodGhpcy5zdGF0ZS5zZWFyY2gpIHtcbiAgICAgIHRoaXMuc3RhdGUubGlzdCA9IHRlbXBcbiAgICAgICAgLmZpbHRlcigodG9waWM6IFl1bnphaU5hdlRvcGljKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuaTE4bi5mYW55aSh0b3BpYy5uYW1lKS5pbmNsdWRlcyh0aGlzLnN0YXRlLnNlYXJjaCEpKSB7XG4gICAgICAgICAgICByZXR1cm4gdG9waWM7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRvcGljLmNoaWxkcmVuID0gdG9waWMuY2hpbGRyZW4uZmlsdGVyKChjaGlsZDogWXVuemFpTmF2VG9waWMpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaTE4bi5mYW55aShjaGlsZC5uYW1lKS5pbmNsdWRlcyh0aGlzLnN0YXRlLnNlYXJjaCEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdG9waWM7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuZmlsdGVyKCh0b3BpYzogWXVuemFpTmF2VG9waWMpID0+IHtcbiAgICAgICAgICByZXR1cm4gdG9waWMuY2hpbGRyZW4ubGVuZ3RoID4gMDtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RhdGUubGlzdCA9IHRoaXMuY2FjaGVTZXJ2aWNlLmdldCgnX3l6X2hlYWRlcicsIHsgbW9kZTogJ25vbmUnIH0pO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGUuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxufVxuIl19
@@ -1,7 +0,0 @@
1
- export var TopicType;
2
- (function (TopicType) {
3
- TopicType[TopicType["FULL"] = 0] = "FULL";
4
- TopicType[TopicType["OWN"] = 1] = "OWN";
5
- TopicType[TopicType["EVERY"] = 2] = "EVERY";
6
- })(TopicType || (TopicType = {}));
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9iaXMvc3JjL2xheW91dC1uYXYvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsTUFBTSxDQUFOLElBQVksU0FJWDtBQUpELFdBQVksU0FBUztJQUNuQix5Q0FBSSxDQUFBO0lBQ0osdUNBQUcsQ0FBQTtJQUNILDJDQUFLLENBQUE7QUFDUCxDQUFDLEVBSlcsU0FBUyxLQUFULFNBQVMsUUFJcEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1N1YmplY3R9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1l1bnphaU5hdlRvcGljfSBmcm9tICdAeWVsb24vY2FjaGUnO1xuXG5leHBvcnQgZW51bSBUb3BpY1R5cGUge1xuICBGVUxMLFxuICBPV04sXG4gIEVWRVJZXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGF5b3V0TmF2QXBwbGljYXRpb25TdGF0ZSB7XG4gIGFjdGl2ZTogYm9vbGVhbjtcbiAgdHlwZTogVG9waWNUeXBlO1xuICB0b3BpYz86IFl1bnphaU5hdlRvcGljO1xuICB0b3BpY3M6IFl1bnphaU5hdlRvcGljW107XG4gIGxpc3Q6IFl1bnphaU5hdlRvcGljW107XG4gIHNlYXJjaDogc3RyaW5nIHwgbnVsbDtcbiAgZGVzdHJveSQ6IFN1YmplY3Q8YW55Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMYXlvdXROYXZHcm91cFN0YXRlIHtcbiAgdG9waWNzOiBZdW56YWlOYXZUb3BpY1tdO1xuICBkZXN0cm95JDogU3ViamVjdDxhbnk+O1xufVxuIl19
@@ -1,7 +0,0 @@
1
- export * from './yunzai-clear-storage.component';
2
- export * from './yunzai-fullscreen.component';
3
- export * from './yunzai-i18n.component';
4
- export * from './yunzai-notify.component';
5
- export * from './yunzai-theme-btn.component';
6
- export * from './yunzai-user.component';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9iaXMvc3JjL3dpZGdldHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMseUJBQXlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3l1bnphaS1jbGVhci1zdG9yYWdlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3l1bnphaS1mdWxsc2NyZWVuLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3l1bnphaS1pMThuLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3l1bnphaS1ub3RpZnkuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4veXVuemFpLXRoZW1lLWJ0bi5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi95dW56YWktdXNlci5jb21wb25lbnQnO1xuIl19
@@ -1,183 +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.emptyText'),
27
- emptyImage: './assets/tmp/img/message.svg',
28
- clearText: this.y18n.fanyi('notify.message.clearText')
29
- },
30
- {
31
- key: 'todo',
32
- title: this.y18n.fanyi('notify.todo'),
33
- list: [],
34
- emptyText: this.y18n.fanyi('notify.todo.emptyText'),
35
- emptyImage: './assets/tmp/img/todo.svg',
36
- clearText: this.y18n.fanyi('notify.todo.clearText')
37
- },
38
- {
39
- key: 'notice',
40
- title: this.y18n.fanyi('notify.notice'),
41
- list: [],
42
- emptyText: this.y18n.fanyi('notify.notice.emptyText'),
43
- emptyImage: './assets/tmp/img/notice.svg',
44
- clearText: this.y18n.fanyi('notify.notice.clearText')
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
- }
150
- YunzaiNotifyComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", 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 });
151
- YunzaiNotifyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.4", type: YunzaiNotifyComponent, selector: "yunzai-notify", ngImport: i0, template: `
152
- <notice-icon
153
- [data]="data"
154
- [count]="count"
155
- [loading]="loading"
156
- btnClass="yunzai-default__nav-item"
157
- btnIconClass="yunzai-default__nav-item-icon"
158
- (select)="select($event)"
159
- (clear)="clear($event)"
160
- ></notice-icon>
161
- `, 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 });
162
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: YunzaiNotifyComponent, decorators: [{
163
- type: Component,
164
- args: [{
165
- selector: 'yunzai-notify',
166
- template: `
167
- <notice-icon
168
- [data]="data"
169
- [count]="count"
170
- [loading]="loading"
171
- btnClass="yunzai-default__nav-item"
172
- btnIconClass="yunzai-default__nav-item-icon"
173
- (select)="select($event)"
174
- (clear)="clear($event)"
175
- ></notice-icon>
176
- `,
177
- changeDetection: ChangeDetectionStrategy.OnPush
178
- }]
179
- }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.NzMessageService }, { type: i5.YunzaiI18NService, decorators: [{
180
- type: Inject,
181
- args: [YUNZAI_I18N_TOKEN]
182
- }] }, { type: i2.NzI18nService }, { type: i0.ChangeDetectorRef }, { type: i3._HttpClient }]; } });
183
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieXVuemFpLW5vdGlmeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9iaXMvc3JjL3dpZGdldHMveXVuemFpLW5vdGlmeS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsTUFBTSxFQUlQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQTRCLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFHL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFlLE1BQU0sY0FBYyxDQUFDO0FBQzlELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDckMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7Ozs7O0FBc0J4QyxNQUFNLE9BQU8scUJBQXFCO0lBK0JoQyxZQUNVLFFBQWtCLEVBQ2xCLEdBQXFCLEVBQ00sSUFBdUIsRUFDbEQsTUFBcUIsRUFDckIsR0FBc0IsRUFDdEIsVUFBdUI7UUFMdkIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixRQUFHLEdBQUgsR0FBRyxDQUFrQjtRQUNNLFNBQUksR0FBSixJQUFJLENBQW1CO1FBQ2xELFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsZUFBVSxHQUFWLFVBQVUsQ0FBYTtRQXBDakMsU0FBSSxHQUFpQjtZQUNuQjtnQkFDRSxHQUFHLEVBQUUsS0FBSztnQkFDVixLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUM7Z0JBQ3hDLElBQUksRUFBRSxFQUFFO2dCQUNSLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQywwQkFBMEIs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O0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDMUMsQ0FBQzs7a0hBdkpVLHFCQUFxQiwwRUFrQ3RCLGlCQUFpQjtzR0FsQ2hCLHFCQUFxQixxREFidEI7Ozs7Ozs7Ozs7R0FVVDsyRkFHVSxxQkFBcUI7a0JBZmpDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGVBQWU7b0JBQ3pCLFFBQVEsRUFBRTs7Ozs7Ozs7OztHQVVUO29CQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNoRDs7MEJBbUNJLE1BQU07MkJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEluamVjdCxcbiAgSW5qZWN0b3IsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZm9ya0pvaW4sIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgbWFwIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IGZvcm1hdERpc3RhbmNlVG9Ob3cgfSBmcm9tICdkYXRlLWZucyc7XG5cbmltcG9ydCB7IE5vdGljZUljb25TZWxlY3QsIE5vdGljZUl0ZW0gfSBmcm9tICdAeWVsb24vYWJjL25vdGljZS1pY29uJztcbmltcG9ydCB7IFlVTlpBSV9JMThOX1RPS0VOLCBfSHR0cENsaWVudCB9IGZyb20gJ0B5ZWxvbi90aGVtZSc7XG5pbXBvcnQgeyBXSU5ET1cgfSBmcm9tICdAeWVsb24vdXRpbCc7XG5pbXBvcnQgeyBsb2cgfSBmcm9tICdAeWVsb24vdXRpbC9vdGhlcic7XG5pbXBvcnQgeyBOelNhZmVBbnkgfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvdHlwZXMnO1xuaW1wb3J0IHsgTnpJMThuU2VydmljZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvaTE4bic7XG5pbXBvcnQgeyBOek1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9tZXNzYWdlJztcblxuaW1wb3J0IHsgWXVuemFpSTE4TlNlcnZpY2UgfSBmcm9tICcuLi95dW56YWktaTE4bi5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAneXVuemFpLW5vdGlmeScsXG4gIHRlbXBsYXRlOiBgXG4gICAgPG5vdGljZS1pY29uXG4gICAgICBbZGF0YV09XCJkYXRhXCJcbiAgICAgIFtjb3VudF09XCJjb3VudFwiXG4gICAgICBbbG9hZGluZ109XCJsb2FkaW5nXCJcbiAgICAgIGJ0bkNsYXNzPVwieXVuemFpLWRlZmF1bHRfX25hdi1pdGVtXCJcbiAgICAgIGJ0bkljb25DbGFzcz1cInl1bnphaS1kZWZhdWx0X19uYXYtaXRlbS1pY29uXCJcbiAgICAgIChzZWxlY3QpPVwic2VsZWN0KCRldmVudClcIlxuICAgICAgKGNsZWFyKT1cImNsZWFyKCRldmVudClcIlxuICAgID48L25vdGljZS1pY29uPlxuICBgLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBZdW56YWlOb3RpZnlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIGRhdGE6IE5vdGljZUl0ZW1bXSA9IFtcbiAgICB7XG4gICAgICBrZXk6ICdtc2cnLFxuICAgICAgdGl0bGU6IHRoaXMueTE4bi5mYW55aSgnbm90aWZ5Lm1lc3NhZ2UnKSxcbiAgICAgIGxpc3Q6IFtdLFxuICAgICAgZW1wdHlUZXh0OiB0aGlzLnkxOG4uZmFueWkoJ25vdGlmeS5tZXNzYWdlLmVtcHR5VGV4dCcpLFxuICAgICAgZW1wdHlJbWFnZTogJy4vYXNzZXRzL3RtcC9pbWcvbWVzc2FnZS5zdmcnLFxuICAgICAgY2xlYXJUZXh0OiB0aGlzLnkxOG4uZmFueWkoJ25vdGlmeS5tZXNzYWdlLmNsZWFyVGV4dCcpXG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6ICd0b2RvJyxcbiAgICAgIHRpdGxlOiB0aGlzLnkxOG4uZmFueWkoJ25vdGlmeS50b2RvJyksXG4gICAgICBsaXN0OiBbXSxcbiAgICAgIGVtcHR5VGV4dDogdGhpcy55MThuLmZhbnlpKCdub3RpZnkudG9kby5lbXB0eVRleHQnKSxcbiAgICAgIGVtcHR5SW1hZ2U6ICcuL2Fzc2V0cy90bXAvaW1nL3RvZG8uc3ZnJyxcbiAgICAgIGNsZWFyVGV4dDogdGhpcy55MThuLmZhbnlpKCdub3RpZnkudG9kby5jbGVhclRleHQnKVxuICAgIH0sXG4gICAge1xuICAgICAga2V5OiAnbm90aWNlJyxcbiAgICAgIHRpdGxlOiB0aGlzLnkxOG4uZmFueWkoJ25vdGlmeS5ub3RpY2UnKSxcbiAgICAgIGxpc3Q6IFtdLFxuICAgICAgZW1wdHlUZXh0OiB0aGlzLnkxOG4uZmFueWkoJ25vdGlmeS5ub3RpY2UuZW1wdHlUZXh0JyksXG4gICAgICBlbXB0eUltYWdlOiAnLi9hc3NldHMvdG1wL2ltZy9ub3RpY2Uuc3ZnJyxcbiAgICAgIGNsZWFyVGV4dDogdGhpcy55MThuLmZhbnlpKCdub3RpZnkubm90aWNlLmNsZWFyVGV4dCcpXG4gICAgfVxuICBdO1xuICBsb2FkaW5nID0gZmFsc2U7XG4gIGNvdW50ID0gMDtcbiAgc3ViczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcml2YXRlIG1zZzogTnpNZXNzYWdlU2VydmljZSxcbiAgICBASW5qZWN0KFlVTlpBSV9JMThOX1RPS0VOKSBwcml2YXRlIHkxOG46IFl1bnphaUkxOE5TZXJ2aWNlLFxuICAgIHByaXZhdGUgbnpJMThuOiBOekkxOG5TZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGh0dHBDbGllbnQ6IF9IdHRwQ2xpZW50XG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWREYXRhKCk7XG4gIH1cblxuICBsb2FkRGF0YSgpOiB2b2lkIHtcbiAgICB0aGlzLmNvdW50ID0gMDtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuc3Vicy5wdXNoKFxuICAgICAgZm9ya0pvaW4odGhpcy5sb2FkVG9kbygpLCB0aGlzLmxvYWRNZXNzYWdlKCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBsb2FkTWVzc2FnZSgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICBsb2coJ25vdGlmeS5jb21wb25lbnQ6ICcsICdmZXRjaCBtZXNzYWdlIGxpc3QnKTtcbiAgICBjb25zdCBmb3JtYXRNZXNzYWdlU3RhdHVzID0gKHN0YXR1czogc3RyaW5nKTogTnpTYWZlQW55ID0+IHtcbiAgICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICAgIGNhc2UgJzAnOlxuICAgICAgICAgIHJldHVybiB7IGV4dHJhOiB0aGlzLnkxOG4uZmFueWkoJ25vdGlmeS51bnJlYWQnKSwgY29sb3I6ICdyZWQnIH07XG4gICAgICAgIGNhc2UgJzEnOlxuICAgICAgICAgIHJldHVybiB7IGV4dHJhOiB0aGlzLnkxOG4uZmFueWkoJ25vdGlmeS5yZWFkZWQnKSwgY29sb3I6ICdncmVlbicgfTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4geyBleHRyYTogdGhpcy55MThuLmZhbnlpKCdub3RpZnkubm9zdGF0dXMnKSwgY29sb3I6ICdwcmltYXJ5JyB9O1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLnBvc3QoYC9tZXNzYWdlLWNlbnRlci0zL215LW1zZy1hbmQtdG9kby9tc2ctbGlzdGAsIHtcbiAgICAgICAgcGFnZU51bTogMSxcbiAgICAgICAgcGFnZVNpemU6IDEwLFxuICAgICAgICBzdGF0dXM6ICcwJ1xuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBOelNhZmVBbnkpID0+IHtcbiAgICAgICAgICBjb25zdCB2aWV3TWVzc2FnZSA9IHRoaXMuZGF0YS5maWx0ZXIoZCA9PiBkLmtleSA9PT0gJ21zZycpWzBdO1xuICAgICAgICAgIHZpZXdNZXNzYWdlLmxpc3QgPSByZXNwb25zZS5kYXRhLmxpc3QubWFwKChtOiBOelNhZmVBbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLm0sXG4gICAgICAgICAgICAgIGF2YXRhcjogbT8uaW1nVXJsIHx8ICcuL2Fzc2V0cy90bXAvaW1nL21lc3NhZ2UucG5nJyxcbiAgICAgICAgICAgICAgdGl0bGU6IG0uc3lzdGVtTmFtZSxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IG0uY29udGVudCxcbiAgICAgICAgICAgICAgZXh0cmE6IGZvcm1hdE1lc3NhZ2VTdGF0dXMobS5zdGF0dXMpLmV4dHJhLFxuICAgICAgICAgICAgICBjb2xvcjogZm9ybWF0TWVzc2FnZVN0YXR1cyhtLnN0YXR1cykuY29sb3IsXG4gICAgICAgICAgICAgIGRhdGV0aW1lOiBmb3JtYXREaXN0YW5jZVRvTm93KG5ldyBEYXRlKG0uZGF0ZSksIHsgbG9jYWxlOiB0aGlzLm56STE4bi5nZXREYXRlTG9jYWxlKCkgfSlcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5jb3VudCArPSB2aWV3TWVzc2FnZS5saXN0Lmxlbmd0aDtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBsb2FkVG9kbygpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICBsb2coJ25vdGlmeS5jb21wb25lbnQ6ICcsICdmZXRjaCB0b2RvIGxpc3QnKTtcbiAgICBjb25zdCBmb3JtYXRUb2RvU3RhdHVzID0gKHN0YXR1czogc3RyaW5nKTogTnpTYWZlQW55ID0+IHtcbiAgICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICAgIGNhc2UgJzAnOlxuICAgICAgICAgIHJldHVybiB7IGV4dHJhOiB0aGlzLnkxOG4uZmFueWkoJ25vdGlmeS51bnN0YXJ0JyksIGNvbG9yOiAncmVkJyB9O1xuICAgICAgICBjYXNlICcxJzpcbiAgICAgICAgICByZXR1cm4geyBleHRyYTogdGhpcy55MThuLmZhbnlpKCdub3RpZnkuc3RhcnRlZCcpLCBjb2xvcjogJ2dyZWVuJyB9O1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiB7IGV4dHJhOiB0aGlzLnkxOG4uZmFueWkoJ25vdGlmeS5ub3N0YXR1cycpLCBjb2xvcjogJ3ByaW1hcnknIH07XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAucG9zdChgL21lc3NhZ2UtY2VudGVyLTMvbXktbXNnLWFuZC10b2RvL3RvZG8tbGlzdGAsIHtcbiAgICAgICAgcGFnZU51bTogMSxcbiAgICAgICAgcGFnZVNpemU6IDEwLFxuICAgICAgICBzdGF0dXM6ICcwJ1xuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBOelNhZmVBbnkpID0+IHtcbiAgICAgICAgICBjb25zdCB2aWV3VG9kbyA9IHRoaXMuZGF0YS5maWx0ZXIoZCA9PiBkLmtleSA9PT0gJ3RvZG8nKVswXTtcbiAgICAgICAgICB2aWV3VG9kby5saXN0ID0gcmVzcG9uc2UuZGF0YS5saXN0Lm1hcCgodDogTnpTYWZlQW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi50LFxuICAgICAgICAgICAgICBhdmF0YXI6IHQ/LmltZ1VybCB8fCAnLi9hc3NldHMvdG1wL2ltZy90b2RvLnBuZycsXG4gICAgICAgICAgICAgIHRpdGxlOiB0LnN5c3RlbU5hbWUsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB0LmNvbnRlbnQsXG4gICAgICAgICAgICAgIGRhdGV0aW1lOiBmb3JtYXREaXN0YW5jZVRvTm93KG5ldyBEYXRlKHQuZGF0ZSksIHsgbG9jYWxlOiB0aGlzLm56STE4bi5nZXREYXRlTG9jYWxlKCkgfSksXG4gICAgICAgICAgICAgIGV4dHJhOiBmb3JtYXRUb2RvU3RhdHVzKHQuc3RhdHVzKS5leHRyYSxcbiAgICAgICAgICAgICAgY29sb3I6IGZvcm1hdFRvZG9TdGF0dXModC5zdGF0dXMpLmNvbG9yXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuY291bnQgKz0gdmlld1RvZG8ubGlzdC5sZW5ndGg7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgY2xlYXIodHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgdCA9IHRoaXMuZGF0YS5maWx0ZXIoZCA9PiBkLnRpdGxlID09PSB0eXBlKVswXTtcbiAgICBpZiAodC5rZXkgPT0gJ21zZycgfHwgdC5rZXkgPT0gJ25vdGljZScpIHtcbiAgICAgIHRoaXMuc3Vicy5wdXNoKFxuICAgICAgICB0aGlzLmh0dHBDbGllbnQucG9zdChgL21lc3NhZ2UtY2VudGVyLTMvbXktbXNnLWFuZC10b2RvL21zZy1jbGVhcmAsIHt9KS5zdWJzY3JpYmUoXyA9PiB7XG4gICAgICAgICAgdGhpcy5tc2cuc3VjY2VzcyhgJHt0aGlzLnkxOG4uZmFueWkoJ25vdGlmeS5jbGVhcicpfSAke3R5cGV9YCk7XG4gICAgICAgICAgdGhpcy5sb2FkRGF0YSgpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHQua2V5ID09ICd0b2RvJykge1xuICAgICAgdGhpcy5sb2FkRGF0YSgpO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdChyZXM6IE5vdGljZUljb25TZWxlY3QpOiB2b2lkIHtcbiAgICB0aGlzLmluamVjdG9yLmdldChXSU5ET1cpLm9wZW4ocmVzLml0ZW0udXJsKTtcbiAgICB0aGlzLmxvYWREYXRhKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnMuZm9yRWFjaChhID0+IGEudW5zdWJzY3JpYmUoKSk7XG4gIH1cbn1cbiJdfQ==