stream-chat-angular 5.3.2 → 5.4.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.
- package/assets/i18n/en.d.ts +4 -0
- package/assets/version.d.ts +1 -1
- package/esm2020/assets/i18n/en.mjs +5 -1
- package/esm2020/assets/version.mjs +2 -2
- package/esm2020/lib/attachment-list/attachment-list.component.mjs +4 -4
- package/esm2020/lib/attachment-preview-list/attachment-preview-list.component.mjs +5 -5
- package/esm2020/lib/attachment.service.mjs +60 -10
- package/esm2020/lib/channel-list/channel-list.component.mjs +3 -3
- package/esm2020/lib/channel-preview/channel-preview.component.mjs +1 -1
- package/esm2020/lib/file-utils.mjs +35 -0
- package/esm2020/lib/format-duration.mjs +16 -0
- package/esm2020/lib/icon/icon-placeholder/icon-placeholder.component.mjs +28 -0
- package/esm2020/lib/icon/icon.component.mjs +1 -1
- package/esm2020/lib/icon/icon.module.mjs +37 -0
- package/esm2020/lib/{loading-indicator → icon/loading-indicator}/loading-indicator.component.mjs +1 -1
- package/esm2020/lib/{loading-indicator-placeholder → icon/loading-indicator-placeholder}/loading-indicator-placeholder.component.mjs +2 -2
- package/esm2020/lib/is-safari.mjs +2 -0
- package/esm2020/lib/message/message.component.mjs +6 -6
- package/esm2020/lib/message-input/message-input-config.service.mjs +6 -1
- package/esm2020/lib/message-input/message-input.component.mjs +57 -14
- package/esm2020/lib/message-input/voice-recorder.service.mjs +27 -0
- package/esm2020/lib/message-list/message-list.component.mjs +9 -9
- package/esm2020/lib/modal/modal.component.mjs +1 -1
- package/esm2020/lib/paginated-list/paginated-list.component.mjs +1 -1
- package/esm2020/lib/stream-chat.module.mjs +21 -35
- package/esm2020/lib/thread/thread.component.mjs +1 -1
- package/esm2020/lib/types.mjs +1 -1
- package/esm2020/lib/voice-recorder/amplitude-recorder.service.mjs +119 -0
- package/esm2020/lib/voice-recorder/audio-recorder.service.mjs +79 -0
- package/esm2020/lib/voice-recorder/media-recorder.mjs +190 -0
- package/esm2020/lib/voice-recorder/mp3-transcoder.mjs +61 -0
- package/esm2020/lib/voice-recorder/transcoder.service.mjs +121 -0
- package/esm2020/lib/voice-recorder/voice-recorder-wavebar/voice-recorder-wavebar.component.mjs +35 -0
- package/esm2020/lib/voice-recorder/voice-recorder.component.mjs +80 -0
- package/esm2020/lib/voice-recorder/voice-recorder.module.mjs +34 -0
- package/esm2020/lib/voice-recording/voice-recording-wavebar/voice-recording-wavebar.component.mjs +4 -75
- package/esm2020/lib/voice-recording/voice-recording.component.mjs +4 -15
- package/esm2020/lib/voice-recording/voice-recording.module.mjs +21 -0
- package/esm2020/lib/wave-form-sampler.mjs +72 -0
- package/esm2020/public-api.mjs +18 -5
- package/fesm2015/stream-chat-angular.mjs +1055 -145
- package/fesm2015/stream-chat-angular.mjs.map +1 -1
- package/fesm2020/stream-chat-angular.mjs +1006 -140
- package/fesm2020/stream-chat-angular.mjs.map +1 -1
- package/lib/attachment.service.d.ts +7 -1
- package/lib/file-utils.d.ts +9 -0
- package/lib/format-duration.d.ts +1 -0
- package/lib/{icon-placeholder → icon/icon-placeholder}/icon-placeholder.component.d.ts +3 -3
- package/lib/icon/icon.component.d.ts +1 -1
- package/lib/icon/icon.module.d.ts +11 -0
- package/lib/{loading-indicator-placeholder → icon/loading-indicator-placeholder}/loading-indicator-placeholder.component.d.ts +1 -1
- package/lib/is-safari.d.ts +1 -0
- package/lib/message-input/message-input-config.service.d.ts +5 -0
- package/lib/message-input/message-input.component.d.ts +19 -5
- package/lib/message-input/voice-recorder.service.d.ts +19 -0
- package/lib/message-list/message-list.component.d.ts +0 -1
- package/lib/stream-chat.module.d.ts +20 -24
- package/lib/types.d.ts +11 -1
- package/lib/voice-recorder/amplitude-recorder.service.d.ts +71 -0
- package/lib/voice-recorder/audio-recorder.service.d.ts +46 -0
- package/lib/voice-recorder/media-recorder.d.ts +46 -0
- package/lib/voice-recorder/mp3-transcoder.d.ts +1 -0
- package/lib/voice-recorder/transcoder.service.d.ts +40 -0
- package/lib/voice-recorder/voice-recorder-wavebar/voice-recorder-wavebar.component.d.ts +21 -0
- package/lib/voice-recorder/voice-recorder.component.d.ts +30 -0
- package/lib/voice-recorder/voice-recorder.module.d.ts +12 -0
- package/lib/voice-recording/voice-recording-wavebar/voice-recording-wavebar.component.d.ts +0 -7
- package/lib/voice-recording/voice-recording.component.d.ts +0 -1
- package/lib/voice-recording/voice-recording.module.d.ts +11 -0
- package/lib/wave-form-sampler.d.ts +1 -0
- package/package.json +8 -1
- package/public-api.d.ts +17 -4
- package/src/assets/assets/icons/stream-chat-icons.eot +0 -0
- package/src/assets/assets/icons/stream-chat-icons.svg +4 -0
- package/src/assets/assets/icons/stream-chat-icons.ttf +0 -0
- package/src/assets/assets/icons/stream-chat-icons.woff +0 -0
- package/src/assets/assets/icons/stream-chat-icons.woff2 +0 -0
- package/src/assets/i18n/en.ts +6 -0
- package/src/assets/styles/css/index.css +1 -1
- package/src/assets/styles/css/index.layout.css +1 -1
- package/src/assets/styles/scss/AudioRecorder/AudioRecorder-layout.scss +64 -14
- package/src/assets/styles/scss/AudioRecorder/AudioRecorder-theme.scss +11 -1
- package/src/assets/styles/scss/Icon/Icon-layout.scss +6 -1
- package/src/assets/styles/scss/MessageInput/MessageInput-layout.scss +1 -0
- package/src/assets/styles/scss/MessageInput/MessageInput-theme.scss +1 -0
- package/src/assets/version.ts +1 -1
- package/esm2020/lib/icon-placeholder/icon-placeholder.component.mjs +0 -28
- package/esm2020/lib/is-image-file.mjs +0 -5
- package/lib/is-image-file.d.ts +0 -1
- /package/lib/{loading-indicator → icon/loading-indicator}/loading-indicator.component.d.ts +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
|
-
import { isImageFile } from './
|
|
2
|
+
import { createUriFromBlob, isImageFile } from './file-utils';
|
|
3
3
|
import { BehaviorSubject } from 'rxjs';
|
|
4
4
|
import { isImageAttachment } from './is-image-attachment';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
@@ -29,6 +29,35 @@ export class AttachmentService {
|
|
|
29
29
|
resetAttachmentUploads() {
|
|
30
30
|
this.attachmentUploadsSubject.next([]);
|
|
31
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* Upload a voice recording
|
|
34
|
+
* @param audioRecording
|
|
35
|
+
* @returns A promise with true or false. If false is returned the upload was canceled because of a client side error. The error is emitted via the `NotificationService`.
|
|
36
|
+
*/
|
|
37
|
+
async uploadVoiceRecording(audioRecording) {
|
|
38
|
+
if (!(await this.areAttachmentsHaveValidExtension([audioRecording.recording]))) {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
if (!(await this.areAttachmentsHaveValidSize([audioRecording.recording]))) {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
const upload = {
|
|
45
|
+
file: audioRecording.recording,
|
|
46
|
+
previewUri: audioRecording.asset_url,
|
|
47
|
+
extraData: {
|
|
48
|
+
duration: audioRecording.duration,
|
|
49
|
+
waveform_data: audioRecording.waveform_data,
|
|
50
|
+
},
|
|
51
|
+
state: 'uploading',
|
|
52
|
+
type: 'voiceRecording',
|
|
53
|
+
};
|
|
54
|
+
this.attachmentUploadsSubject.next([
|
|
55
|
+
...this.attachmentUploadsSubject.getValue(),
|
|
56
|
+
upload,
|
|
57
|
+
]);
|
|
58
|
+
await this.uploadAttachments([upload]);
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
32
61
|
/**
|
|
33
62
|
* Uploads the selected files, and creates preview for image files. The result is propagated throught the `attachmentUploads$` stream.
|
|
34
63
|
* @param fileList The files selected by the user, if you have Blobs instead of Files, you can convert them with this method: https://developer.mozilla.org/en-US/docs/Web/API/File/File
|
|
@@ -59,7 +88,7 @@ export class AttachmentService {
|
|
|
59
88
|
dataFiles.push(file);
|
|
60
89
|
}
|
|
61
90
|
});
|
|
62
|
-
imageFiles.forEach((f) => this.createPreview(f));
|
|
91
|
+
imageFiles.forEach((f) => void this.createPreview(f));
|
|
63
92
|
const newUploads = [
|
|
64
93
|
...imageFiles.map((file) => ({
|
|
65
94
|
file,
|
|
@@ -145,7 +174,7 @@ export class AttachmentService {
|
|
|
145
174
|
return attachmentUploads
|
|
146
175
|
.filter((r) => r.state === 'success')
|
|
147
176
|
.map((r) => {
|
|
148
|
-
|
|
177
|
+
let attachment = {
|
|
149
178
|
type: r.type,
|
|
150
179
|
};
|
|
151
180
|
if (r.fromAttachment) {
|
|
@@ -163,6 +192,9 @@ export class AttachmentService {
|
|
|
163
192
|
attachment.file_size = r.file?.size;
|
|
164
193
|
attachment.thumb_url = r.thumb_url;
|
|
165
194
|
}
|
|
195
|
+
if (r.extraData) {
|
|
196
|
+
attachment = { ...attachment, ...r.extraData };
|
|
197
|
+
}
|
|
166
198
|
}
|
|
167
199
|
return attachment;
|
|
168
200
|
});
|
|
@@ -202,6 +234,22 @@ export class AttachmentService {
|
|
|
202
234
|
fromAttachment: attachment,
|
|
203
235
|
});
|
|
204
236
|
}
|
|
237
|
+
else if (attachment.type === 'voiceRecording') {
|
|
238
|
+
attachmentUploads.push({
|
|
239
|
+
url: attachment.asset_url,
|
|
240
|
+
state: 'success',
|
|
241
|
+
file: {
|
|
242
|
+
name: attachment.title,
|
|
243
|
+
size: attachment.file_size,
|
|
244
|
+
type: attachment.mime_type,
|
|
245
|
+
},
|
|
246
|
+
type: 'voiceRecording',
|
|
247
|
+
extraData: {
|
|
248
|
+
duration: attachment.duration,
|
|
249
|
+
waveform_data: attachment.waveform_data,
|
|
250
|
+
},
|
|
251
|
+
});
|
|
252
|
+
}
|
|
205
253
|
});
|
|
206
254
|
if (attachmentUploads.length > 0) {
|
|
207
255
|
this.attachmentUploadsSubject.next([
|
|
@@ -210,18 +258,20 @@ export class AttachmentService {
|
|
|
210
258
|
]);
|
|
211
259
|
}
|
|
212
260
|
}
|
|
213
|
-
createPreview(file) {
|
|
214
|
-
|
|
215
|
-
|
|
261
|
+
async createPreview(file) {
|
|
262
|
+
try {
|
|
263
|
+
const uri = await createUriFromBlob(file);
|
|
216
264
|
const attachmentUploads = this.attachmentUploadsSubject.getValue();
|
|
217
265
|
const upload = attachmentUploads.find((upload) => upload.file === file);
|
|
218
266
|
if (!upload) {
|
|
219
267
|
return;
|
|
220
268
|
}
|
|
221
|
-
upload.previewUri =
|
|
269
|
+
upload.previewUri = uri;
|
|
222
270
|
this.attachmentUploadsSubject.next([...attachmentUploads]);
|
|
223
|
-
}
|
|
224
|
-
|
|
271
|
+
}
|
|
272
|
+
catch (e) {
|
|
273
|
+
this.chatClientService?.chatClient?.logger('error', e instanceof Error ? e.message : `Can't create image preview`, { error: e, tag: ['AttachmentService'] });
|
|
274
|
+
}
|
|
225
275
|
}
|
|
226
276
|
async uploadAttachments(uploads) {
|
|
227
277
|
this.attachmentUploadInProgressCounterSubject.next(this.attachmentUploadInProgressCounterSubject.getValue() + 1);
|
|
@@ -355,4 +405,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
|
|
|
355
405
|
providedIn: 'root',
|
|
356
406
|
}]
|
|
357
407
|
}], ctorParameters: function () { return [{ type: i1.ChannelService }, { type: i2.NotificationService }, { type: i3.ChatClientService }]; } });
|
|
358
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNobWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL2F0dGFjaG1lbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBR25ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7OztBQUsxRDs7OztHQUlHO0FBSUgsTUFBTSxPQUFPLGlCQUFpQjtJQWtCNUIsWUFDVSxjQUE4QixFQUM5QixtQkFBd0MsRUFDeEMsaUJBQW9DO1FBRnBDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5Qix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFWdEMsNkNBQXdDLEdBQzlDLElBQUksZUFBZSxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLDZCQUF3QixHQUFHLElBQUksZUFBZSxDQUNwRCxFQUFFLENBQ0gsQ0FBQztRQVFBLElBQUksQ0FBQyxrQ0FBa0M7WUFDckMsSUFBSSxDQUFDLHdDQUF3QyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQy9ELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdkUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxTQUFTLENBQzNDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDLENBQ2xELENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCxzQkFBc0I7UUFDcEIs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UyxFQUNULFNBQVMsRUFDVCxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FDL0IsQ0FBQztnQkFDRixPQUFPLEdBQUcsS0FBSyxDQUFDO2FBQ2pCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDOzs4R0FqWlUsaUJBQWlCO2tIQUFqQixpQkFBaUIsY0FGaEIsTUFBTTsyRkFFUCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNJbWFnZUZpbGUgfSBmcm9tICcuL2lzLWltYWdlLWZpbGUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBcHBTZXR0aW5ncywgQXR0YWNobWVudCB9IGZyb20gJ3N0cmVhbS1jaGF0JztcbmltcG9ydCB7IENoYW5uZWxTZXJ2aWNlIH0gZnJvbSAnLi9jaGFubmVsLnNlcnZpY2UnO1xuaW1wb3J0IHsgaXNJbWFnZUF0dGFjaG1lbnQgfSBmcm9tICcuL2lzLWltYWdlLWF0dGFjaG1lbnQnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4vbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXR0YWNobWVudFVwbG9hZCwgRGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgQ2hhdENsaWVudFNlcnZpY2UgfSBmcm9tICcuL2NoYXQtY2xpZW50LnNlcnZpY2UnO1xuXG4vKipcbiAqIFRoZSBgQXR0YWNobWVudFNlcnZpY2VgIG1hbmFnZXMgdGhlIHVwbG9hZHMgb2YgYSBtZXNzYWdlIGlucHV0LlxuICpcbiAqIFlvdSBjYW4gcmVhZCBtb3JlIGFib3V0IFt1cGxvYWRzXShodHRwczovL2dldHN0cmVhbS5pby9jaGF0L2RvY3MvamF2YXNjcmlwdC9maWxlX3VwbG9hZHMvP2xhbmd1YWdlPWphdmFzY3JpcHQmcT1zaXplKSBpbiB0aGUgU3RyZWFtIEFQSSBkb2N1bWVudGF0aW9uLiBZb3UgY2FuIHVzZSBTdHJlYW0ncyBBUEkgb3IgdGhlIGRhc2hib2FyZCB0byBjdXN0b21pemUgdGhlIFtmaWxlXShodHRwczovL2dldHN0cmVhbS5pby9jaGF0L2RvY3MvamF2YXNjcmlwdC9hcHBfc2V0dGluZ19vdmVydmlldy8/bGFuZ3VhZ2U9amF2YXNjcmlwdCZxPXNpemUjZmlsZS11cGxvYWRzKSBhbmQgW2ltYWdlIHVwbG9hZF0oaHR0cHM6Ly9nZXRzdHJlYW0uaW8vY2hhdC9kb2NzL2phdmFzY3JpcHQvYXBwX3NldHRpbmdfb3ZlcnZpZXcvP2xhbmd1YWdlPWphdmFzY3JpcHQmcT1zaXplI2ltYWdlLXVwbG9hZHMpIGNvbmZpZ3VyYXRpb24uXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBBdHRhY2htZW50U2VydmljZTxcbiAgVCBleHRlbmRzIERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3MgPSBEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzXG4+IHtcbiAgLyoqXG4gICAqIEVtaXRzIHRoZSBudW1iZXIgb2YgdXBsb2FkcyBpbiBwcm9ncmVzcy5cbiAgICovXG4gIGF0dGFjaG1lbnRVcGxvYWRJblByb2dyZXNzQ291bnRlciQ6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgLyoqXG4gICAqIEVtaXRzIHRoZSBzdGF0ZSBvZiB0aGUgdXBsb2FkcyAoW2BBdHRhY2htZW50VXBsb2FkW11gXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvYmxvYi9tYXN0ZXIvcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL3R5cGVzLnRzKSksIGl0IGFkZHMgYSBzdGF0ZSAoYHN1Y2Nlc3NgLCBgZXJyb3JgIG9yIGB1cGxvYWRpbmdgKSB0byBlYWNoIGZpbGUgdGhlIHVzZXIgc2VsZWN0cyBmb3IgdXBsb2FkLiBJdCBpcyB1c2VkIGJ5IHRoZSBbYEF0dGFjaG1lbnRQcmV2aWV3TGlzdGBdKC4uL2NvbXBvbmVudHMvQXR0YWNobWVudFByZXZpZXdMaXN0Q29tcG9uZW50Lm1keCkgdG8gZGlzcGxheSB0aGUgYXR0YWNobWVudCBwcmV2aWV3cy5cbiAgICovXG4gIGF0dGFjaG1lbnRVcGxvYWRzJDogT2JzZXJ2YWJsZTxBdHRhY2htZW50VXBsb2FkW10+O1xuICBwcml2YXRlIGF0dGFjaG1lbnRVcGxvYWRJblByb2dyZXNzQ291bnRlclN1YmplY3QgPVxuICAgIG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSBhdHRhY2htZW50VXBsb2Fkc1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEF0dGFjaG1lbnRVcGxvYWRbXT4oXG4gICAgW11cbiAgKTtcbiAgcHJpdmF0ZSBhcHBTZXR0aW5nczogQXBwU2V0dGluZ3MgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjaGFubmVsU2VydmljZTogQ2hhbm5lbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhdENsaWVudFNlcnZpY2U6IENoYXRDbGllbnRTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuYXR0YWNobWVudFVwbG9hZEluUHJvZ3Jlc3NDb3VudGVyJCA9XG4gICAgICB0aGlzLmF0dGFjaG1lbnRVcGxvYWRJblByb2dyZXNzQ291bnRlclN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5hdHRhY2htZW50VXBsb2FkcyQgPSB0aGlzLmF0dGFjaG1lbnRVcGxvYWRzU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLmNoYXRDbGllbnRTZXJ2aWNlLmFwcFNldHRpbmdzJC5zdWJzY3JpYmUoXG4gICAgICAoYXBwU2V0dGluZ3MpID0+ICh0aGlzLmFwcFNldHRpbmdzID0gYXBwU2V0dGluZ3MpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhlIGF0dGFjaG1lbnRzIHVwbG9hZHMgKGZvciBleGFtcGxlIGFmdGVyIHRoZSBtZXNzYWdlIHdpdGggdGhlIGF0dGFjaG1lbnRzIHNlbnQgc3VjY2Vzc2Z1bGx5KVxuICAgKi9cbiAgcmVzZXRBdHRhY2htZW50VXBsb2FkcygpIHtcbiAgICB0aGlzLmF0dGFjaG1lbnRVcGxvYWRzU3ViamVjdC5uZXh0KFtdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGxvYWRzIHRoZSBzZWxlY3RlZCBmaWxlcywgYW5kIGNyZWF0ZXMgcHJldmlldyBmb3IgaW1hZ2UgZmlsZXMuIFRoZSByZXN1bHQgaXMgcHJvcGFnYXRlZCB0aHJvdWdodCB0aGUgYGF0dGFjaG1lbnRVcGxvYWRzJGAgc3RyZWFtLlxuICAgKiBAcGFyYW0gZmlsZUxpc3QgVGhlIGZpbGVzIHNlbGVjdGVkIGJ5IHRoZSB1c2VyLCBpZiB5b3UgaGF2ZSBCbG9icyBpbnN0ZWFkIG9mIEZpbGVzLCB5b3UgY2FuIGNvbnZlcnQgdGhlbSB3aXRoIHRoaXMgbWV0aG9kOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmlsZS9GaWxlXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aXRoIHRydWUgb3IgZmFsc2UuIElmIGZhbHNlIGlzIHJldHVybmVkIHRoZSB1cGxvYWQgd2FzIGNhbmNlbGVkIGJlY2F1c2Ugb2YgYSBjbGllbnQgc2lkZSBlcnJvci4gVGhlIGVycm9yIGlzIGVtaXR0ZWQgdmlhIHRoZSBgTm90aWZpY2F0aW9uU2VydmljZWAuXG4gICAqL1xuICBhc3luYyBmaWxlc1NlbGVjdGVkKGZpbGVMaXN0OiBGaWxlTGlzdCB8IEZpbGVbXSB8IG51bGwpIHtcbiAgICBpZiAoIWZpbGVMaXN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZXMgPSBBcnJheS5mcm9tKGZpbGVMaXN0KTtcblxuICAgIGlmICghKGF3YWl0IHRoaXMuYXJlQXR0YWNobWVudHNIYXZlVmFsaWRFeHRlbnNpb24oZmlsZXMpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIShhd2FpdCB0aGlzLmFyZUF0dGFjaG1lbnRzSGF2ZVZhbGlkU2l6ZShmaWxlcykpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGltYWdlRmlsZXM6IEZpbGVbXSA9IFtdO1xuICAgIGNvbnN0IGRhdGFGaWxlczogRmlsZVtdID0gW107XG4gICAgY29uc3QgdmlkZW9GaWxlczogRmlsZVtdID0gW107XG5cbiAgICBmaWxlcy5mb3JFYWNoKChmaWxlKSA9PiB7XG4gICAgICBpZiAoaXNJbWFnZUZpbGUoZmlsZSkpIHtcbiAgICAgICAgaW1hZ2VGaWxlcy5wdXNoKGZpbGUpO1xuICAgICAgfSBlbHNlIGlmIChmaWxlLnR5cGUuc3RhcnRzV2l0aCgndmlkZW8vJykpIHtcbiAgICAgICAgdmlkZW9GaWxlcy5wdXNoKGZpbGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YUZpbGVzLnB1c2goZmlsZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaW1hZ2VGaWxlcy5mb3JFYWNoKChmKSA9PiB0aGlzLmNyZWF0ZVByZXZpZXcoZikpO1xuICAgIGNvbnN0IG5ld1VwbG9hZHMgPSBbXG4gICAgICAuLi5pbWFnZUZpbGVzLm1hcCgoZmlsZSkgPT4gKHtcbiAgICAgICAgZmlsZSxcbiAgICAgICAgc3RhdGU6ICd1cGxvYWRpbmcnIGFzIGNvbnN0LFxuICAgICAgICB0eXBlOiAnaW1hZ2UnIGFzIGNvbnN0LFxuICAgICAgfSkpLFxuICAgICAgLi4udmlkZW9GaWxlcy5tYXAoKGZpbGUpID0+ICh7XG4gICAgICAgIGZpbGUsXG4gICAgICAgIHN0YXRlOiAndXBsb2FkaW5nJyBhcyBjb25zdCxcbiAgICAgICAgdHlwZTogJ3ZpZGVvJyBhcyBjb25zdCxcbiAgICAgIH0pKSxcbiAgICAgIC4uLmRhdGFGaWxlcy5tYXAoKGZpbGUpID0+ICh7XG4gICAgICAgIGZpbGUsXG4gICAgICAgIHN0YXRlOiAndXBsb2FkaW5nJyBhcyBjb25zdCxcbiAgICAgICAgdHlwZTogJ2ZpbGUnIGFzIGNvbnN0LFxuICAgICAgfSkpLFxuICAgIF07XG4gICAgdGhpcy5hdHRhY2htZW50VXBsb2Fkc1N1YmplY3QubmV4dChbXG4gICAgICAuLi50aGlzLmF0dGFjaG1lbnRVcGxvYWRzU3ViamVjdC5nZXRWYWx1ZSgpLFxuICAgICAgLi4ubmV3VXBsb2FkcyxcbiAgICBdKTtcbiAgICBhd2FpdCB0aGlzLnVwbG9hZEF0dGFjaG1lbnRzKG5ld1VwbG9hZHMpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFlvdSBjYW4gYWRkIGN1c3RvbSBgaW1hZ2VgLCBgdmlkZW9gIGFuZCBgZmlsZWAgYXR0YWNobWVudHMgdXNpbmcgdGhpcyBtZXRob2QuXG4gICAqXG4gICAqIE5vdGU6IElmIHlvdSBqdXN0IHdhbnQgdG8gdXNlIHlvdXIgb3duIENETiBmb3IgZmlsZSB1cGxvYWRzLCB5b3UgZG9uJ3QgbmVjZXNzYXJ5IG5lZWQgdGhpcyBtZXRob2QsIHlvdSBjYW4ganVzdCBzcGVjaWZ5IHlvdSBvd24gdXBsb2FkIGZ1bmN0aW9uIGluIHRoZSBbYENoYW5uZWxTZXJ2aWNlYF0oLi9DaGFubmVsU2VydmljZS5tZHgpXG4gICAqIEBwYXJhbSBhdHRhY2htZW50XG4gICAqL1xuICBhZGRBdHRhY2htZW50KGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQ8VD4pIHtcbiAgICBhdHRhY2htZW50LmlzQ3VzdG9tQXR0YWNobWVudCA9IHRydWU7XG4gICAgdGhpcy5jcmVhdGVGcm9tQXR0YWNobWVudHMoW2F0dGFjaG1lbnRdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWVzIHRvIHVwbG9hZCBhbiBhdHRhY2htZW50LlxuICAgKiBAcGFyYW0gZmlsZVxuICAgKiBAcmV0dXJucyBBIHByb21pc2Ugd2l0aCB0aGUgcmVzdWx0XG4gICAqL1xuICBhc3luYyByZXRyeUF0dGFjaG1lbnRVcGxvYWQoZmlsZTogRmlsZSkge1xuICAgIGNvbnN0IGF0dGFjaG1lbnRVcGxvYWRzID0gdGhpcy5hdHRhY2htZW50VXBsb2Fkc1N1YmplY3QuZ2V0VmFsdWUoKTtcbiAgICBjb25zdCB1cGxvYWQgPSBhdHRhY2htZW50VXBsb2Fkcy5maW5kKCh1KSA9PiB1LmZpbGUgPT09IGZpbGUpO1xuICAgIGlmICghdXBsb2FkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHVwbG9hZC5zdGF0ZSA9ICd1cGxvYWRpbmcnO1xuICAgIHRoaXMuYXR0YWNobWVudFVwbG9hZHNTdWJqZWN0Lm5leHQoWy4uLmF0dGFjaG1lbnRVcGxvYWRzXSk7XG4gICAgYXdhaXQgdGhpcy51cGxvYWRBdHRhY2htZW50cyhbdXBsb2FkXSk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyBhbiBhdHRhY2htZW50LCB0aGUgYXR0YWNobWVudCBjYW4gaGF2ZSBhbnkgc3RhdGUgKGBlcnJvcmAsIGB1cGxvYWRpbmdgIG9yIGBzdWNjZXNzYCkuXG4gICAqIEBwYXJhbSB1cGxvYWRcbiAgICovXG4gIGFzeW5jIGRlbGV0ZUF0dGFjaG1lbnQodXBsb2FkOiBBdHRhY2htZW50VXBsb2FkKSB7XG4gICAgY29uc3QgYXR0YWNobWVudFVwbG9hZHMgPSB0aGlzLmF0dGFjaG1lbnRVcGxvYWRzU3ViamVjdC5nZXRWYWx1ZSgpO1xuICAgIGxldCByZXN1bHQhOiBBdHRhY2htZW50VXBsb2FkW107XG4gICAgaWYgKFxuICAgICAgdXBsb2FkLnN0YXRlID09PSAnc3VjY2VzcycgJiZcbiAgICAgICF1cGxvYWQuZnJvbUF0dGFjaG1lbnQ/LmlzQ3VzdG9tQXR0YWNobWVudFxuICAgICkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5jaGFubmVsU2VydmljZS5kZWxldGVBdHRhY2htZW50KHVwbG9hZCk7XG4gICAgICAgIHJlc3VsdCA9IFsuLi5hdHRhY2htZW50VXBsb2Fkc107XG4gICAgICAgIGNvbnN0IGluZGV4ID0gYXR0YWNobWVudFVwbG9hZHMuaW5kZXhPZih1cGxvYWQpO1xuICAgICAgICByZXN1bHQuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHJlc3VsdCA9IGF0dGFjaG1lbnRVcGxvYWRzO1xuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuYWRkVGVtcG9yYXJ5Tm90aWZpY2F0aW9uKFxuICAgICAgICAgICdzdHJlYW1DaGF0LkVycm9yIGRlbGV0aW5nIGF0dGFjaG1lbnQnXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IFsuLi5hdHRhY2htZW50VXBsb2Fkc107XG4gICAgICBjb25zdCBpbmRleCA9IGF0dGFjaG1lbnRVcGxvYWRzLmluZGV4T2YodXBsb2FkKTtcbiAgICAgIHJlc3VsdC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgICB0aGlzLmF0dGFjaG1lbnRVcGxvYWRzU3ViamVjdC5uZXh0KFsuLi5yZXN1bHRdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXBzIHRoZSBjdXJyZW50IHVwbG9hZHMgdG8gYSBmb3JtYXQgdGhhdCBjYW4gYmUgc2VudCBhbG9uZyB3aXRoIHRoZSBtZXNzYWdlIHRvIHRoZSBTdHJlYW0gQVBJLlxuICAgKiBAcmV0dXJucyB0aGUgYXR0YWNobWVudHNcbiAgICovXG4gIG1hcFRvQXR0YWNobWVudHMoKSB7XG4gICAgY29uc3QgYXR0YWNobWVudFVwbG9hZHMgPSB0aGlzLmF0dGFjaG1lbnRVcGxvYWRzU3ViamVjdC5nZXRWYWx1ZSgpO1xuICAgIHJldHVybiBhdHRhY2htZW50VXBsb2Fkc1xuICAgICAgLmZpbHRlcigocikgPT4gci5zdGF0ZSA9PT0gJ3N1Y2Nlc3MnKVxuICAgICAgLm1hcCgocikgPT4ge1xuICAgICAgICBjb25zdCBhdHRhY2htZW50OiBBdHRhY2htZW50ID0ge1xuICAgICAgICAgIHR5cGU6IHIudHlwZSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHIuZnJvbUF0dGFjaG1lbnQpIHtcbiAgICAgICAgICByZXR1cm4gci5mcm9tQXR0YWNobWVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhdHRhY2htZW50Lm1pbWVfdHlwZSA9IHIuZmlsZT8udHlwZTtcbiAgICAgICAgICBpZiAoci50eXBlID09PSAnaW1hZ2UnKSB7XG4gICAgICAgICAgICBhdHRhY2htZW50LmZhbGxiYWNrID0gci5maWxlPy5uYW1lO1xuICAgICAgICAgICAgYXR0YWNobWVudC5pbWFnZV91cmwgPSByLnVybDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXR0YWNobWVudC5hc3NldF91cmwgPSByLnVybDtcbiAgICAgICAgICAgIGF0dGFjaG1lbnQudGl0bGUgPSByLmZpbGU/Lm5hbWU7XG4gICAgICAgICAgICBhdHRhY2htZW50LmZpbGVfc2l6ZSA9IHIuZmlsZT8uc2l6ZTtcbiAgICAgICAgICAgIGF0dGFjaG1lbnQudGh1bWJfdXJsID0gci50aHVtYl91cmw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGF0dGFjaG1lbnQ7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXBzIGF0dGFjaG1lbnRzIHJlY2VpdmVkIGZyb20gdGhlIFN0cmVhbSBBUEkgdG8gdXBsb2Fkcy4gVGhpcyBpcyB1c2VmdWwgd2hlbiBlZGl0aW5nIGEgbWVzc2FnZS5cbiAgICogQHBhcmFtIGF0dGFjaG1lbnRzIEF0dGFjaGVtbnRzIHJlY2VpdmVkIHdpdGggdGhlIG1lc3NhZ2VcbiAgICovXG4gIGNyZWF0ZUZyb21BdHRhY2htZW50cyhhdHRhY2htZW50czogQXR0YWNobWVudDxUPltdKSB7XG4gICAgY29uc3QgYXR0YWNobWVudFVwbG9hZHM6IEF0dGFjaG1lbnRVcGxvYWRbXSA9IFtdO1xuICAgIGF0dGFjaG1lbnRzLmZvckVhY2goKGF0dGFjaG1lbnQpID0+IHtcbiAgICAgIGlmIChpc0ltYWdlQXR0YWNobWVudChhdHRhY2htZW50KSkge1xuICAgICAgICBhdHRhY2htZW50VXBsb2Fkcy5wdXNoKHtcbiAgICAgICAgICB1cmw6IChhdHRhY2htZW50LmltZ191cmwgfHxcbiAgICAgICAgICAgIGF0dGFjaG1lbnQudGh1bWJfdXJsIHx8XG4gICAgICAgICAgICBhdHRhY2htZW50LmltYWdlX3VybCkgYXMgc3RyaW5nLFxuICAgICAgICAgIHN0YXRlOiAnc3VjY2VzcycsXG4gICAgICAgICAgdHlwZTogJ2ltYWdlJyxcbiAgICAgICAgICBmaWxlOiB7XG4gICAgICAgICAgICBuYW1lOiBhdHRhY2htZW50LmZhbGxiYWNrLFxuICAgICAgICAgICAgdHlwZTogYXR0YWNobWVudC5taW1lX3R5cGUsXG4gICAgICAgICAgfSBhcyBGaWxlLFxuICAgICAgICAgIGZyb21BdHRhY2htZW50OiBhdHRhY2htZW50LFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoYXR0YWNobWVudC50eXBlID09PSAnZmlsZScgfHwgYXR0YWNobWVudC50eXBlID09PSAndmlkZW8nKSB7XG4gICAgICAgIGF0dGFjaG1lbnRVcGxvYWRzLnB1c2goe1xuICAgICAgICAgIHVybDogYXR0YWNobWVudC5hc3NldF91cmwsXG4gICAgICAgICAgc3RhdGU6ICdzdWNjZXNzJyxcbiAgICAgICAgICBmaWxlOiB7XG4gICAgICAgICAgICBuYW1lOiBhdHRhY2htZW50LnRpdGxlLFxuICAgICAgICAgICAgc2l6ZTogYXR0YWNobWVudC5maWxlX3NpemUsXG4gICAgICAgICAgICB0eXBlOiBhdHRhY2htZW50Lm1pbWVfdHlwZSxcbiAgICAgICAgICB9IGFzIEZpbGUsXG4gICAgICAgICAgdHlwZTogYXR0YWNobWVudC50eXBlLFxuICAgICAgICAgIHRodW1iX3VybDogYXR0YWNobWVudC50aHVtYl91cmwsXG4gICAgICAgICAgZnJvbUF0dGFjaG1lbnQ6IGF0dGFjaG1lbnQsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKGF0dGFjaG1lbnRVcGxvYWRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuYXR0YWNobWVudFVwbG9hZHNTdWJqZWN0Lm5leHQoW1xuICAgICAgICAuLi50aGlzLmF0dGFjaG1lbnRVcGxvYWRzU3ViamVjdC5nZXRWYWx1ZSgpLFxuICAgICAgICAuLi5hdHRhY2htZW50VXBsb2FkcyxcbiAgICAgIF0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlUHJldmlldyhmaWxlOiBGaWxlIHwgQmxvYikge1xuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgcmVhZGVyLm9ubG9hZCA9IChldmVudCkgPT4ge1xuICAgICAgY29uc3QgYXR0YWNobWVudFVwbG9hZHMgPSB0aGlzLmF0dGFjaG1lbnRVcGxvYWRzU3ViamVjdC5nZXRWYWx1ZSgpO1xuICAgICAgY29uc3QgdXBsb2FkID0gYXR0YWNobWVudFVwbG9hZHMuZmluZCgodXBsb2FkKSA9PiB1cGxvYWQuZmlsZSA9PT0gZmlsZSk7XG4gICAgICBpZiAoIXVwbG9hZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB1cGxvYWQucHJldmlld1VyaSA9IGV2ZW50LnRhcmdldD8ucmVzdWx0IHx8IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuYXR0YWNobWVudFVwbG9hZHNTdWJqZWN0Lm5leHQoWy4uLmF0dGFjaG1lbnRVcGxvYWRzXSk7XG4gICAgfTtcbiAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlIGFzIEJsb2IpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGxvYWRBdHRhY2htZW50cyh1cGxvYWRzOiBBdHRhY2htZW50VXBsb2FkW10pIHtcbiAgICB0aGlzLmF0dGFjaG1lbnRVcGxvYWRJblByb2dyZXNzQ291bnRlclN1YmplY3QubmV4dChcbiAgICAgIHRoaXMuYXR0YWNobWVudFVwbG9hZEluUHJvZ3Jlc3NDb3VudGVyU3ViamVjdC5nZXRWYWx1ZSgpICsgMVxuICAgICk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jaGFubmVsU2VydmljZS51cGxvYWRBdHRhY2htZW50cyh1cGxvYWRzKTtcbiAgICBjb25zdCBhdHRhY2htZW50VXBsb2FkcyA9IHRoaXMuYXR0YWNobWVudFVwbG9hZHNTdWJqZWN0LmdldFZhbHVlKCk7XG4gICAgcmVzdWx0LmZvckVhY2goKHIpID0+IHtcbiAgICAgIGNvbnN0IHVwbG9hZCA9IGF0dGFjaG1lbnRVcGxvYWRzLmZpbmQoKHVwbG9hZCkgPT4gdXBsb2FkLmZpbGUgPT09IHIuZmlsZSk7XG4gICAgICBpZiAoIXVwbG9hZCkge1xuICAgICAgICBpZiAoci51cmwpIHtcbiAgICAgICAgICB2b2lkIHRoaXMuY2hhbm5lbFNlcnZpY2UuZGVsZXRlQXR0YWNobWVudChyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB1cGxvYWQuc3RhdGUgPSByLnN0YXRlO1xuICAgICAgdXBsb2FkLnVybCA9IHIudXJsO1xuICAgICAgdXBsb2FkLnRodW1iX3VybCA9IHIudGh1bWJfdXJsO1xuICAgICAgaWYgKHVwbG9hZC5zdGF0ZSA9PT0gJ2Vycm9yJykge1xuICAgICAgICB1cGxvYWQuZXJyb3JSZWFzb24gPSByLmVycm9yUmVhc29uO1xuICAgICAgICB1cGxvYWQuZXJyb3JFeHRyYUluZm8gPSByLmVycm9yRXh0cmFJbmZvO1xuICAgICAgICBsZXQgZXJyb3JLZXk7XG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZVBhcmFtczogeyBuYW1lOiBzdHJpbmc7IGV4dD86IHN0cmluZzsgbGltaXQ/OiBzdHJpbmcgfSA9XG4gICAgICAgICAgeyBuYW1lOiB1cGxvYWQuZmlsZS5uYW1lIH07XG4gICAgICAgIHN3aXRjaCAodXBsb2FkLmVycm9yUmVhc29uKSB7XG4gICAgICAgICAgY2FzZSAnZmlsZS1leHRlbnNpb24nOlxuICAgICAgICAgICAgZXJyb3JLZXkgPVxuICAgICAgICAgICAgICAnc3RyZWFtQ2hhdC5FcnJvciB1cGxvYWRpbmcgZmlsZSwgZXh0ZW5zaW9uIG5vdCBzdXBwb3J0ZWQnO1xuICAgICAgICAgICAgdHJhbnNsYXRlUGFyYW1zLmV4dCA9IHVwbG9hZC5lcnJvckV4dHJhSW5mbz8uWzBdPy5wYXJhbTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2ZpbGUtc2l6ZSc6XG4gICAgICAgICAgICBlcnJvcktleSA9XG4gICAgICAgICAgICAgICdzdHJlYW1DaGF0LkVycm9yIHVwbG9hZGluZyBmaWxlLCBtYXhpbXVtIGZpbGUgc2l6ZSBleGNlZWRlZCc7XG4gICAgICAgICAgICB0cmFuc2xhdGVQYXJhbXMubGltaXQgPSB1cGxvYWQuZXJyb3JFeHRyYUluZm8/LlswXT8ucGFyYW07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgZXJyb3JLZXkgPSAnc3RyZWFtQ2hhdC5FcnJvciB1cGxvYWRpbmcgZmlsZSc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmFkZFRlbXBvcmFyeU5vdGlmaWNhdGlvbihcbiAgICAgICAgICBlcnJvcktleSxcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB0cmFuc2xhdGVQYXJhbXNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmF0dGFjaG1lbnRVcGxvYWRJblByb2dyZXNzQ291bnRlclN1YmplY3QubmV4dChcbiAgICAgIHRoaXMuYXR0YWNobWVudFVwbG9hZEluUHJvZ3Jlc3NDb3VudGVyU3ViamVjdC5nZXRWYWx1ZSgpIC0gMVxuICAgICk7XG4gICAgdGhpcy5hdHRhY2htZW50VXBsb2Fkc1N1YmplY3QubmV4dChbLi4uYXR0YWNobWVudFVwbG9hZHNdKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYXJlQXR0YWNobWVudHNIYXZlVmFsaWRFeHRlbnNpb24oZmlsZXM6IEZpbGVbXSkge1xuICAgIGlmICghdGhpcy5hcHBTZXR0aW5ncykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5jaGF0Q2xpZW50U2VydmljZS5nZXRBcHBTZXR0aW5ncygpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGxldCBpc1ZhbGlkID0gdHJ1ZTtcbiAgICBmaWxlcy5mb3JFYWNoKChmKSA9PiB7XG4gICAgICBsZXQgaGFzQmxvY2tlZEV4dGVuc2lvbjogYm9vbGVhbjtcbiAgICAgIGxldCBoYXNCbG9ja2VkTWltZVR5cGU6IGJvb2xlYW47XG4gICAgICBsZXQgaGFzTm90QWxsb3dlZEV4dGVuc2lvbjogYm9vbGVhbjtcbiAgICAgIGxldCBoYXNOb3RBbGxvd2VkTWltZVR5cGU6IGJvb2xlYW47XG4gICAgICBpZiAoaXNJbWFnZUZpbGUoZikpIHtcbiAgICAgICAgaGFzQmxvY2tlZEV4dGVuc2lvbiA9XG4gICAgICAgICAgISF0aGlzLmFwcFNldHRpbmdzPy5pbWFnZV91cGxvYWRfY29uZmlnPy5ibG9ja2VkX2ZpbGVfZXh0ZW5zaW9ucz8uZmluZChcbiAgICAgICAgICAgIChleHQpID0+IGYubmFtZS5lbmRzV2l0aChleHQpXG4gICAgICAgICAgKTtcbiAgICAgICAgaGFzQmxvY2tlZE1pbWVUeXBlID1cbiAgICAgICAgICAhIXRoaXMuYXBwU2V0dGluZ3M/LmltYWdlX3VwbG9hZF9jb25maWc/LmJsb2NrZWRfbWltZV90eXBlcz8uZmluZChcbiAgICAgICAgICAgICh0eXBlKSA9PiBmLnR5cGUgPT09IHR5cGVcbiAgICAgICAgICApO1xuICAgICAgICBoYXNOb3RBbGxvd2VkRXh0ZW5zaW9uID1cbiAgICAgICAgICAhIXRoaXMuYXBwU2V0dGluZ3M/LmltYWdlX3VwbG9hZF9jb25maWc/LmFsbG93ZWRfZmlsZV9leHRlbnNpb25zXG4gICAgICAgICAgICA/Lmxlbmd0aCAmJlxuICAgICAgICAgICF0aGlzLmFwcFNldHRpbmdzPy5pbWFnZV91cGxvYWRfY29uZmlnPy5hbGxvd2VkX2ZpbGVfZXh0ZW5zaW9ucz8uZmluZChcbiAgICAgICAgICAgIChleHQpID0+IGYubmFtZS5lbmRzV2l0aChleHQpXG4gICAgICAgICAgKTtcbiAgICAgICAgaGFzTm90QWxsb3dlZE1pbWVUeXBlID1cbiAgICAgICAgICAhIXRoaXMuYXBwU2V0dGluZ3M/LmltYWdlX3VwbG9hZF9jb25maWc/LmFsbG93ZWRfbWltZV90eXBlcz8ubGVuZ3RoICYmXG4gICAgICAgICAgIXRoaXMuYXBwU2V0dGluZ3M/LmltYWdlX3VwbG9hZF9jb25maWc/LmFsbG93ZWRfbWltZV90eXBlcz8uZmluZChcbiAgICAgICAgICAgICh0eXBlKSA9PiBmLnR5cGUgPT09IHR5cGVcbiAgICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGFzQmxvY2tlZEV4dGVuc2lvbiA9XG4gICAgICAgICAgISF0aGlzLmFwcFNldHRpbmdzPy5maWxlX3VwbG9hZF9jb25maWc/LmJsb2NrZWRfZmlsZV9leHRlbnNpb25zPy5maW5kKFxuICAgICAgICAgICAgKGV4dCkgPT4gZi5uYW1lLmVuZHNXaXRoKGV4dClcbiAgICAgICAgICApO1xuICAgICAgICBoYXNCbG9ja2VkTWltZVR5cGUgPVxuICAgICAgICAgICEhdGhpcy5hcHBTZXR0aW5ncz8uZmlsZV91cGxvYWRfY29uZmlnPy5ibG9ja2VkX21pbWVfdHlwZXM/LmZpbmQoXG4gICAgICAgICAgICAodHlwZSkgPT4gZi50eXBlID09PSB0eXBlXG4gICAgICAgICAgKTtcbiAgICAgICAgaGFzTm90QWxsb3dlZEV4dGVuc2lvbiA9XG4gICAgICAgICAgISF0aGlzLmFwcFNldHRpbmdzPy5maWxlX3VwbG9hZF9jb25maWc/LmFsbG93ZWRfZmlsZV9leHRlbnNpb25zXG4gICAgICAgICAgICA/Lmxlbmd0aCAmJlxuICAgICAgICAgICF0aGlzLmFwcFNldHRpbmdzPy5maWxlX3VwbG9hZF9jb25maWc/LmFsbG93ZWRfZmlsZV9leHRlbnNpb25zPy5maW5kKFxuICAgICAgICAgICAgKGV4dCkgPT4gZi5uYW1lLmVuZHNXaXRoKGV4dClcbiAgICAgICAgICApO1xuICAgICAgICBoYXNOb3RBbGxvd2VkTWltZVR5cGUgPVxuICAgICAgICAgICEhdGhpcy5hcHBTZXR0aW5ncz8uZmlsZV91cGxvYWRfY29uZmlnPy5hbGxvd2VkX21pbWVfdHlwZXM/Lmxlbmd0aCAmJlxuICAgICAgICAgICF0aGlzLmFwcFNldHRpbmdzPy5maWxlX3VwbG9hZF9jb25maWc/LmFsbG93ZWRfbWltZV90eXBlcz8uZmluZChcbiAgICAgICAgICAgICh0eXBlKSA9PiBmLnR5cGUgPT09IHR5cGVcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBoYXNCbG9ja2VkRXh0ZW5zaW9uIHx8XG4gICAgICAgIGhhc0Jsb2NrZWRNaW1lVHlwZSB8fFxuICAgICAgICBoYXNOb3RBbGxvd2VkRXh0ZW5zaW9uIHx8XG4gICAgICAgIGhhc05vdEFsbG93ZWRNaW1lVHlwZVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5hZGRUZW1wb3JhcnlOb3RpZmljYXRpb24oXG4gICAgICAgICAgJ3N0cmVhbUNoYXQuRXJyb3IgdXBsb2FkaW5nIGZpbGUsIGV4dGVuc2lvbiBub3Qgc3VwcG9ydGVkJyxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHsgbmFtZTogZi5uYW1lLCBleHQ6IGYudHlwZSB9XG4gICAgICAgICk7XG4gICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gaXNWYWxpZDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYXJlQXR0YWNobWVudHNIYXZlVmFsaWRTaXplKGZpbGVzOiBGaWxlW10pIHtcbiAgICBpZiAoIXRoaXMuYXBwU2V0dGluZ3MpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY2hhdENsaWVudFNlcnZpY2UuZ2V0QXBwU2V0dGluZ3MoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBpbWFnZVNpemVMaW1pdEluQnl0ZXMgPVxuICAgICAgdGhpcy5hcHBTZXR0aW5ncz8uaW1hZ2VfdXBsb2FkX2NvbmZpZz8uc2l6ZV9saW1pdCB8fCAwO1xuICAgIGNvbnN0IGltYWdlU2l6ZUxpbWlTdHJpbmcgPSBgJHtpbWFnZVNpemVMaW1pdEluQnl0ZXMgLyAoMTAyNCAqIDEwMjQpfU1CYDtcbiAgICBjb25zdCBmaWxlU2l6ZUxpbWl0SW5CeXRlcyA9XG4gICAgICB0aGlzLmFwcFNldHRpbmdzPy5maWxlX3VwbG9hZF9jb25maWc/LnNpemVfbGltaXQgfHwgMDtcbiAgICBjb25zdCBmaWxlU2l6ZUxpbWl0SW5TdHJpbmcgPSBgJHtmaWxlU2l6ZUxpbWl0SW5CeXRlcyAvICgxMDI0ICogMTAyNCl9TUJgO1xuICAgIGxldCBpc1ZhbGlkID0gdHJ1ZTtcbiAgICBmaWxlcy5mb3JFYWNoKChmKSA9PiB7XG4gICAgICBsZXQgaXNPdmVyU2l6ZWQgPSBmYWxzZTtcbiAgICAgIGxldCBsaW1pdCA9ICcnO1xuICAgICAgaWYgKGlzSW1hZ2VGaWxlKGYpICYmIGltYWdlU2l6ZUxpbWl0SW5CeXRlcyA+IDApIHtcbiAgICAgICAgaXNPdmVyU2l6ZWQgPSBmLnNpemUgPiBpbWFnZVNpemVMaW1pdEluQnl0ZXM7XG4gICAgICAgIGxpbWl0ID0gaW1hZ2VTaXplTGltaVN0cmluZztcbiAgICAgIH0gZWxzZSBpZiAoZmlsZVNpemVMaW1pdEluQnl0ZXMgPiAwKSB7XG4gICAgICAgIGlzT3ZlclNpemVkID0gZi5zaXplID4gZmlsZVNpemVMaW1pdEluQnl0ZXM7XG4gICAgICAgIGxpbWl0ID0gZmlsZVNpemVMaW1pdEluU3RyaW5nO1xuICAgICAgfVxuICAgICAgaWYgKGlzT3ZlclNpemVkKSB7XG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5hZGRUZW1wb3JhcnlOb3RpZmljYXRpb24oXG4gICAgICAgICAgJ3N0cmVhbUNoYXQuRXJyb3IgdXBsb2FkaW5nIGZpbGUsIG1heGltdW0gZmlsZSBzaXplIGV4Y2VlZGVkJyxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHsgbmFtZTogZi5uYW1lLCBsaW1pdDogbGltaXQgfVxuICAgICAgICApO1xuICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGlzVmFsaWQ7XG4gIH1cbn1cbiJdfQ==
|
|
408
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNobWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL2F0dGFjaG1lbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUduRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7QUFTMUQ7Ozs7R0FJRztBQUlILE1BQU0sT0FBTyxpQkFBaUI7SUFrQjVCLFlBQ1UsY0FBOEIsRUFDOUIsbUJBQXdDLEVBQ3hDLGlCQUFvQztRQUZwQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBVnRDLDZDQUF3QyxHQUM5QyxJQUFJLGVBQWUsQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUN6Qiw2QkFBd0IsR0FBRyxJQUFJLGVBQWUsQ0FDcEQsRUFBRSxDQUNILENBQUM7UUFRQSxJQUFJLENBQUMsa0NBQWtDO1lBQ3JDLElBQUksQ0FBQyx3Q0FBd0MsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMvRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUMzQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQyxDQUNsRCxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsc0JB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LENBQUMsRUFBRSxFQUFFO1lBQ2xCLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQztZQUN4QixJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDZixJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxxQkFBcUIsR0FBRyxDQUFDLEVBQUU7Z0JBQy9DLFdBQVcsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLHFCQUFxQixDQUFDO2dCQUM3QyxLQUFLLEdBQUcsbUJBQW1CLENBQUM7YUFDN0I7aUJBQU0sSUFBSSxvQkFBb0IsR0FBRyxDQUFDLEVBQUU7Z0JBQ25DLFdBQVcsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLG9CQUFvQixDQUFDO2dCQUM1QyxLQUFLLEdBQUcscUJBQXFCLENBQUM7YUFDL0I7WUFDRCxJQUFJLFdBQVcsRUFBRTtnQkFDZixJQUFJLENBQUMsbUJBQW1CLENBQUMsd0JBQXdCLENBQy9DLDZEQUE2RCxFQUM3RCxTQUFTLEVBQ1QsU0FBUyxFQUNULEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUMvQixDQUFDO2dCQUNGLE9BQU8sR0FBRyxLQUFLLENBQUM7YUFDakI7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7OzhHQXpjVSxpQkFBaUI7a0hBQWpCLGlCQUFpQixjQUZoQixNQUFNOzJGQUVQLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjcmVhdGVVcmlGcm9tQmxvYiwgaXNJbWFnZUZpbGUgfSBmcm9tICcuL2ZpbGUtdXRpbHMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBcHBTZXR0aW5ncywgQXR0YWNobWVudCB9IGZyb20gJ3N0cmVhbS1jaGF0JztcbmltcG9ydCB7IENoYW5uZWxTZXJ2aWNlIH0gZnJvbSAnLi9jaGFubmVsLnNlcnZpY2UnO1xuaW1wb3J0IHsgaXNJbWFnZUF0dGFjaG1lbnQgfSBmcm9tICcuL2lzLWltYWdlLWF0dGFjaG1lbnQnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4vbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQXR0YWNobWVudFVwbG9hZCxcbiAgQXVkaW9SZWNvcmRpbmcsXG4gIERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3MsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgQ2hhdENsaWVudFNlcnZpY2UgfSBmcm9tICcuL2NoYXQtY2xpZW50LnNlcnZpY2UnO1xuXG4vKipcbiAqIFRoZSBgQXR0YWNobWVudFNlcnZpY2VgIG1hbmFnZXMgdGhlIHVwbG9hZHMgb2YgYSBtZXNzYWdlIGlucHV0LlxuICpcbiAqIFlvdSBjYW4gcmVhZCBtb3JlIGFib3V0IFt1cGxvYWRzXShodHRwczovL2dldHN0cmVhbS5pby9jaGF0L2RvY3MvamF2YXNjcmlwdC9maWxlX3VwbG9hZHMvP2xhbmd1YWdlPWphdmFzY3JpcHQmcT1zaXplKSBpbiB0aGUgU3RyZWFtIEFQSSBkb2N1bWVudGF0aW9uLiBZb3UgY2FuIHVzZSBTdHJlYW0ncyBBUEkgb3IgdGhlIGRhc2hib2FyZCB0byBjdXN0b21pemUgdGhlIFtmaWxlXShodHRwczovL2dldHN0cmVhbS5pby9jaGF0L2RvY3MvamF2YXNjcmlwdC9hcHBfc2V0dGluZ19vdmVydmlldy8/bGFuZ3VhZ2U9amF2YXNjcmlwdCZxPXNpemUjZmlsZS11cGxvYWRzKSBhbmQgW2ltYWdlIHVwbG9hZF0oaHR0cHM6Ly9nZXRzdHJlYW0uaW8vY2hhdC9kb2NzL2phdmFzY3JpcHQvYXBwX3NldHRpbmdfb3ZlcnZpZXcvP2xhbmd1YWdlPWphdmFzY3JpcHQmcT1zaXplI2ltYWdlLXVwbG9hZHMpIGNvbmZpZ3VyYXRpb24uXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBBdHRhY2htZW50U2VydmljZTxcbiAgVCBleHRlbmRzIERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3MgPSBEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzXG4+IHtcbiAgLyoqXG4gICAqIEVtaXRzIHRoZSBudW1iZXIgb2YgdXBsb2FkcyBpbiBwcm9ncmVzcy5cbiAgICovXG4gIGF0dGFjaG1lbnRVcGxvYWRJblByb2dyZXNzQ291bnRlciQ6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgLyoqXG4gICAqIEVtaXRzIHRoZSBzdGF0ZSBvZiB0aGUgdXBsb2FkcyAoW2BBdHRhY2htZW50VXBsb2FkW11gXShodHRwczovL2dpdGh1Yi5jb20vR2V0U3RyZWFtL3N0cmVhbS1jaGF0LWFuZ3VsYXIvYmxvYi9tYXN0ZXIvcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL3R5cGVzLnRzKSksIGl0IGFkZHMgYSBzdGF0ZSAoYHN1Y2Nlc3NgLCBgZXJyb3JgIG9yIGB1cGxvYWRpbmdgKSB0byBlYWNoIGZpbGUgdGhlIHVzZXIgc2VsZWN0cyBmb3IgdXBsb2FkLiBJdCBpcyB1c2VkIGJ5IHRoZSBbYEF0dGFjaG1lbnRQcmV2aWV3TGlzdGBdKC4uL2NvbXBvbmVudHMvQXR0YWNobWVudFByZXZpZXdMaXN0Q29tcG9uZW50Lm1keCkgdG8gZGlzcGxheSB0aGUgYXR0YWNobWVudCBwcmV2aWV3cy5cbiAgICovXG4gIGF0dGFjaG1lbnRVcGxvYWRzJDogT2JzZXJ2YWJsZTxBdHRhY2htZW50VXBsb2FkW10+O1xuICBwcml2YXRlIGF0dGFjaG1lbnRVcGxvYWRJblByb2dyZXNzQ291bnRlclN1YmplY3QgPVxuICAgIG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSBhdHRhY2htZW50VXBsb2Fkc1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEF0dGFjaG1lbnRVcGxvYWRbXT4oXG4gICAgW11cbiAgKTtcbiAgcHJpdmF0ZSBhcHBTZXR0aW5nczogQXBwU2V0dGluZ3MgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjaGFubmVsU2VydmljZTogQ2hhbm5lbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhdENsaWVudFNlcnZpY2U6IENoYXRDbGllbnRTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuYXR0YWNobWVudFVwbG9hZEluUHJvZ3Jlc3NDb3VudGVyJCA9XG4gICAgICB0aGlzLmF0dGFjaG1lbnRVcGxvYWRJblByb2dyZXNzQ291bnRlclN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5hdHRhY2htZW50VXBsb2FkcyQgPSB0aGlzLmF0dGFjaG1lbnRVcGxvYWRzU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLmNoYXRDbGllbnRTZXJ2aWNlLmFwcFNldHRpbmdzJC5zdWJzY3JpYmUoXG4gICAgICAoYXBwU2V0dGluZ3MpID0+ICh0aGlzLmFwcFNldHRpbmdzID0gYXBwU2V0dGluZ3MpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhlIGF0dGFjaG1lbnRzIHVwbG9hZHMgKGZvciBleGFtcGxlIGFmdGVyIHRoZSBtZXNzYWdlIHdpdGggdGhlIGF0dGFjaG1lbnRzIHNlbnQgc3VjY2Vzc2Z1bGx5KVxuICAgKi9cbiAgcmVzZXRBdHRhY2htZW50VXBsb2FkcygpIHtcbiAgICB0aGlzLmF0dGFjaG1lbnRVcGxvYWRzU3ViamVjdC5uZXh0KFtdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGxvYWQgYSB2b2ljZSByZWNvcmRpbmdcbiAgICogQHBhcmFtIGF1ZGlvUmVjb3JkaW5nXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aXRoIHRydWUgb3IgZmFsc2UuIElmIGZhbHNlIGlzIHJldHVybmVkIHRoZSB1cGxvYWQgd2FzIGNhbmNlbGVkIGJlY2F1c2Ugb2YgYSBjbGllbnQgc2lkZSBlcnJvci4gVGhlIGVycm9yIGlzIGVtaXR0ZWQgdmlhIHRoZSBgTm90aWZpY2F0aW9uU2VydmljZWAuXG4gICAqL1xuICBhc3luYyB1cGxvYWRWb2ljZVJlY29yZGluZyhhdWRpb1JlY29yZGluZzogQXVkaW9SZWNvcmRpbmcpIHtcbiAgICBpZiAoXG4gICAgICAhKGF3YWl0IHRoaXMuYXJlQXR0YWNobWVudHNIYXZlVmFsaWRFeHRlbnNpb24oW2F1ZGlvUmVjb3JkaW5nLnJlY29yZGluZ10pKVxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIShhd2FpdCB0aGlzLmFyZUF0dGFjaG1lbnRzSGF2ZVZhbGlkU2l6ZShbYXVkaW9SZWNvcmRpbmcucmVjb3JkaW5nXSkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgdXBsb2FkID0ge1xuICAgICAgZmlsZTogYXVkaW9SZWNvcmRpbmcucmVjb3JkaW5nLFxuICAgICAgcHJldmlld1VyaTogYXVkaW9SZWNvcmRpbmcuYXNzZXRfdXJsLFxuICAgICAgZXh0cmFEYXRhOiB7XG4gICAgICAgIGR1cmF0aW9uOiBhdWRpb1JlY29yZGluZy5kdXJhdGlvbixcbiAgICAgICAgd2F2ZWZvcm1fZGF0YTogYXVkaW9SZWNvcmRpbmcud2F2ZWZvcm1fZGF0YSxcbiAgICAgIH0sXG4gICAgICBzdGF0ZTogJ3VwbG9hZGluZycgYXMgY29uc3QsXG4gICAgICB0eXBlOiAndm9pY2VSZWNvcmRpbmcnIGFzIGNvbnN0LFxuICAgIH07XG4gICAgdGhpcy5hdHRhY2htZW50VXBsb2Fkc1N1YmplY3QubmV4dChbXG4gICAgICAuLi50aGlzLmF0dGFjaG1lbnRVcGxvYWRzU3ViamVjdC5nZXRWYWx1ZSgpLFxuICAgICAgdXBsb2FkLFxuICAgIF0pO1xuICAgIGF3YWl0IHRoaXMudXBsb2FkQXR0YWNobWVudHMoW3VwbG9hZF0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwbG9hZHMgdGhlIHNlbGVjdGVkIGZpbGVzLCBhbmQgY3JlYXRlcyBwcmV2aWV3IGZvciBpbWFnZSBmaWxlcy4gVGhlIHJlc3VsdCBpcyBwcm9wYWdhdGVkIHRocm91Z2h0IHRoZSBgYXR0YWNobWVudFVwbG9hZHMkYCBzdHJlYW0uXG4gICAqIEBwYXJhbSBmaWxlTGlzdCBUaGUgZmlsZXMgc2VsZWN0ZWQgYnkgdGhlIHVzZXIsIGlmIHlvdSBoYXZlIEJsb2JzIGluc3RlYWQgb2YgRmlsZXMsIHlvdSBjYW4gY29udmVydCB0aGVtIHdpdGggdGhpcyBtZXRob2Q6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GaWxlL0ZpbGVcbiAgICogQHJldHVybnMgQSBwcm9taXNlIHdpdGggdHJ1ZSBvciBmYWxzZS4gSWYgZmFsc2UgaXMgcmV0dXJuZWQgdGhlIHVwbG9hZCB3YXMgY2FuY2VsZWQgYmVjYXVzZSBvZiBhIGNsaWVudCBzaWRlIGVycm9yLiBUaGUgZXJyb3IgaXMgZW1pdHRlZCB2aWEgdGhlIGBOb3RpZmljYXRpb25TZXJ2aWNlYC5cbiAgICovXG4gIGFzeW5jIGZpbGVzU2VsZWN0ZWQoZmlsZUxpc3Q6IEZpbGVMaXN0IHwgRmlsZVtdIHwgbnVsbCkge1xuICAgIGlmICghZmlsZUxpc3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmaWxlcyA9IEFycmF5LmZyb20oZmlsZUxpc3QpO1xuXG4gICAgaWYgKCEoYXdhaXQgdGhpcy5hcmVBdHRhY2htZW50c0hhdmVWYWxpZEV4dGVuc2lvbihmaWxlcykpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghKGF3YWl0IHRoaXMuYXJlQXR0YWNobWVudHNIYXZlVmFsaWRTaXplKGZpbGVzKSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgaW1hZ2VGaWxlczogRmlsZVtdID0gW107XG4gICAgY29uc3QgZGF0YUZpbGVzOiBGaWxlW10gPSBbXTtcbiAgICBjb25zdCB2aWRlb0ZpbGVzOiBGaWxlW10gPSBbXTtcblxuICAgIGZpbGVzLmZvckVhY2goKGZpbGUpID0+IHtcbiAgICAgIGlmIChpc0ltYWdlRmlsZShmaWxlKSkge1xuICAgICAgICBpbWFnZUZpbGVzLnB1c2goZmlsZSk7XG4gICAgICB9IGVsc2UgaWYgKGZpbGUudHlwZS5zdGFydHNXaXRoKCd2aWRlby8nKSkge1xuICAgICAgICB2aWRlb0ZpbGVzLnB1c2goZmlsZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkYXRhRmlsZXMucHVzaChmaWxlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpbWFnZUZpbGVzLmZvckVhY2goKGYpID0+IHZvaWQgdGhpcy5jcmVhdGVQcmV2aWV3KGYpKTtcbiAgICBjb25zdCBuZXdVcGxvYWRzID0gW1xuICAgICAgLi4uaW1hZ2VGaWxlcy5tYXAoKGZpbGUpID0+ICh7XG4gICAgICAgIGZpbGUsXG4gICAgICAgIHN0YXRlOiAndXBsb2FkaW5nJyBhcyBjb25zdCxcbiAgICAgICAgdHlwZTogJ2ltYWdlJyBhcyBjb25zdCxcbiAgICAgIH0pKSxcbiAgICAgIC4uLnZpZGVvRmlsZXMubWFwKChmaWxlKSA9PiAoe1xuICAgICAgICBmaWxlLFxuICAgICAgICBzdGF0ZTogJ3VwbG9hZGluZycgYXMgY29uc3QsXG4gICAgICAgIHR5cGU6ICd2aWRlbycgYXMgY29uc3QsXG4gICAgICB9KSksXG4gICAgICAuLi5kYXRhRmlsZXMubWFwKChmaWxlKSA9PiAoe1xuICAgICAgICBmaWxlLFxuICAgICAgICBzdGF0ZTogJ3VwbG9hZGluZycgYXMgY29uc3QsXG4gICAgICAgIHR5cGU6ICdmaWxlJyBhcyBjb25zdCxcbiAgICAgIH0pKSxcbiAgICBdO1xuICAgIHRoaXMuYXR0YWNobWVudFVwbG9hZHNTdWJqZWN0Lm5leHQoW1xuICAgICAgLi4udGhpcy5hdHRhY2htZW50VXBsb2Fkc1N1YmplY3QuZ2V0VmFsdWUoKSxcbiAgICAgIC4uLm5ld1VwbG9hZHMsXG4gICAgXSk7XG4gICAgYXdhaXQgdGhpcy51cGxvYWRBdHRhY2htZW50cyhuZXdVcGxvYWRzKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBZb3UgY2FuIGFkZCBjdXN0b20gYGltYWdlYCwgYHZpZGVvYCBhbmQgYGZpbGVgIGF0dGFjaG1lbnRzIHVzaW5nIHRoaXMgbWV0aG9kLlxuICAgKlxuICAgKiBOb3RlOiBJZiB5b3UganVzdCB3YW50IHRvIHVzZSB5b3VyIG93biBDRE4gZm9yIGZpbGUgdXBsb2FkcywgeW91IGRvbid0IG5lY2Vzc2FyeSBuZWVkIHRoaXMgbWV0aG9kLCB5b3UgY2FuIGp1c3Qgc3BlY2lmeSB5b3Ugb3duIHVwbG9hZCBmdW5jdGlvbiBpbiB0aGUgW2BDaGFubmVsU2VydmljZWBdKC4vQ2hhbm5lbFNlcnZpY2UubWR4KVxuICAgKiBAcGFyYW0gYXR0YWNobWVudFxuICAgKi9cbiAgYWRkQXR0YWNobWVudChhdHRhY2htZW50OiBBdHRhY2htZW50PFQ+KSB7XG4gICAgYXR0YWNobWVudC5pc0N1c3RvbUF0dGFjaG1lbnQgPSB0cnVlO1xuICAgIHRoaXMuY3JlYXRlRnJvbUF0dGFjaG1lbnRzKFthdHRhY2htZW50XSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmllcyB0byB1cGxvYWQgYW4gYXR0YWNobWVudC5cbiAgICogQHBhcmFtIGZpbGVcbiAgICogQHJldHVybnMgQSBwcm9taXNlIHdpdGggdGhlIHJlc3VsdFxuICAgKi9cbiAgYXN5bmMgcmV0cnlBdHRhY2htZW50VXBsb2FkKGZpbGU6IEZpbGUpIHtcbiAgICBjb25zdCBhdHRhY2htZW50VXBsb2FkcyA9IHRoaXMuYXR0YWNobWVudFVwbG9hZHNTdWJqZWN0LmdldFZhbHVlKCk7XG4gICAgY29uc3QgdXBsb2FkID0gYXR0YWNobWVudFVwbG9hZHMuZmluZCgodSkgPT4gdS5maWxlID09PSBmaWxlKTtcbiAgICBpZiAoIXVwbG9hZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB1cGxvYWQuc3RhdGUgPSAndXBsb2FkaW5nJztcbiAgICB0aGlzLmF0dGFjaG1lbnRVcGxvYWRzU3ViamVjdC5uZXh0KFsuLi5hdHRhY2htZW50VXBsb2Fkc10pO1xuICAgIGF3YWl0IHRoaXMudXBsb2FkQXR0YWNobWVudHMoW3VwbG9hZF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYW4gYXR0YWNobWVudCwgdGhlIGF0dGFjaG1lbnQgY2FuIGhhdmUgYW55IHN0YXRlIChgZXJyb3JgLCBgdXBsb2FkaW5nYCBvciBgc3VjY2Vzc2ApLlxuICAgKiBAcGFyYW0gdXBsb2FkXG4gICAqL1xuICBhc3luYyBkZWxldGVBdHRhY2htZW50KHVwbG9hZDogQXR0YWNobWVudFVwbG9hZCkge1xuICAgIGNvbnN0IGF0dGFjaG1lbnRVcGxvYWRzID0gdGhpcy5hdHRhY2htZW50VXBsb2Fkc1N1YmplY3QuZ2V0VmFsdWUoKTtcbiAgICBsZXQgcmVzdWx0ITogQXR0YWNobWVudFVwbG9hZFtdO1xuICAgIGlmIChcbiAgICAgIHVwbG9hZC5zdGF0ZSA9PT0gJ3N1Y2Nlc3MnICYmXG4gICAgICAhdXBsb2FkLmZyb21BdHRhY2htZW50Py5pc0N1c3RvbUF0dGFjaG1lbnRcbiAgICApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY2hhbm5lbFNlcnZpY2UuZGVsZXRlQXR0YWNobWVudCh1cGxvYWQpO1xuICAgICAgICByZXN1bHQgPSBbLi4uYXR0YWNobWVudFVwbG9hZHNdO1xuICAgICAgICBjb25zdCBpbmRleCA9IGF0dGFjaG1lbnRVcGxvYWRzLmluZGV4T2YodXBsb2FkKTtcbiAgICAgICAgcmVzdWx0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICByZXN1bHQgPSBhdHRhY2htZW50VXBsb2FkcztcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmFkZFRlbXBvcmFyeU5vdGlmaWNhdGlvbihcbiAgICAgICAgICAnc3RyZWFtQ2hhdC5FcnJvciBkZWxldGluZyBhdHRhY2htZW50J1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSBbLi4uYXR0YWNobWVudFVwbG9hZHNdO1xuICAgICAgY29uc3QgaW5kZXggPSBhdHRhY2htZW50VXBsb2Fkcy5pbmRleE9mKHVwbG9hZCk7XG4gICAgICByZXN1bHQuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gICAgdGhpcy5hdHRhY2htZW50VXBsb2Fkc1N1YmplY3QubmV4dChbLi4ucmVzdWx0XSk7XG4gIH1cblxuICAvKipcbiAgICogTWFwcyB0aGUgY3VycmVudCB1cGxvYWRzIHRvIGEgZm9ybWF0IHRoYXQgY2FuIGJlIHNlbnQgYWxvbmcgd2l0aCB0aGUgbWVzc2FnZSB0byB0aGUgU3RyZWFtIEFQSS5cbiAgICogQHJldHVybnMgdGhlIGF0dGFjaG1lbnRzXG4gICAqL1xuICBtYXBUb0F0dGFjaG1lbnRzKCkge1xuICAgIGNvbnN0IGF0dGFjaG1lbnRVcGxvYWRzID0gdGhpcy5hdHRhY2htZW50VXBsb2Fkc1N1YmplY3QuZ2V0VmFsdWUoKTtcbiAgICByZXR1cm4gYXR0YWNobWVudFVwbG9hZHNcbiAgICAgIC5maWx0ZXIoKHIpID0+IHIuc3RhdGUgPT09ICdzdWNjZXNzJylcbiAgICAgIC5tYXAoKHIpID0+IHtcbiAgICAgICAgbGV0IGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQgPSB7XG4gICAgICAgICAgdHlwZTogci50eXBlLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoci5mcm9tQXR0YWNobWVudCkge1xuICAgICAgICAgIHJldHVybiByLmZyb21BdHRhY2htZW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF0dGFjaG1lbnQubWltZV90eXBlID0gci5maWxlPy50eXBlO1xuICAgICAgICAgIGlmIChyLnR5cGUgPT09ICdpbWFnZScpIHtcbiAgICAgICAgICAgIGF0dGFjaG1lbnQuZmFsbGJhY2sgPSByLmZpbGU/Lm5hbWU7XG4gICAgICAgICAgICBhdHRhY2htZW50LmltYWdlX3VybCA9IHIudXJsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhdHRhY2htZW50LmFzc2V0X3VybCA9IHIudXJsO1xuICAgICAgICAgICAgYXR0YWNobWVudC50aXRsZSA9IHIuZmlsZT8ubmFtZTtcbiAgICAgICAgICAgIGF0dGFjaG1lbnQuZmlsZV9zaXplID0gci5maWxlPy5zaXplO1xuICAgICAgICAgICAgYXR0YWNobWVudC50aHVtYl91cmwgPSByLnRodW1iX3VybDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHIuZXh0cmFEYXRhKSB7XG4gICAgICAgICAgICBhdHRhY2htZW50ID0geyAuLi5hdHRhY2htZW50LCAuLi5yLmV4dHJhRGF0YSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhdHRhY2htZW50O1xuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTWFwcyBhdHRhY2htZW50cyByZWNlaXZlZCBmcm9tIHRoZSBTdHJlYW0gQVBJIHRvIHVwbG9hZHMuIFRoaXMgaXMgdXNlZnVsIHdoZW4gZWRpdGluZyBhIG1lc3NhZ2UuXG4gICAqIEBwYXJhbSBhdHRhY2htZW50cyBBdHRhY2hlbW50cyByZWNlaXZlZCB3aXRoIHRoZSBtZXNzYWdlXG4gICAqL1xuICBjcmVhdGVGcm9tQXR0YWNobWVudHMoYXR0YWNobWVudHM6IEF0dGFjaG1lbnQ8VD5bXSkge1xuICAgIGNvbnN0IGF0dGFjaG1lbnRVcGxvYWRzOiBBdHRhY2htZW50VXBsb2FkW10gPSBbXTtcbiAgICBhdHRhY2htZW50cy5mb3JFYWNoKChhdHRhY2htZW50KSA9PiB7XG4gICAgICBpZiAoaXNJbWFnZUF0dGFjaG1lbnQoYXR0YWNobWVudCkpIHtcbiAgICAgICAgYXR0YWNobWVudFVwbG9hZHMucHVzaCh7XG4gICAgICAgICAgdXJsOiAoYXR0YWNobWVudC5pbWdfdXJsIHx8XG4gICAgICAgICAgICBhdHRhY2htZW50LnRodW1iX3VybCB8fFxuICAgICAgICAgICAgYXR0YWNobWVudC5pbWFnZV91cmwpIGFzIHN0cmluZyxcbiAgICAgICAgICBzdGF0ZTogJ3N1Y2Nlc3MnLFxuICAgICAgICAgIHR5cGU6ICdpbWFnZScsXG4gICAgICAgICAgZmlsZToge1xuICAgICAgICAgICAgbmFtZTogYXR0YWNobWVudC5mYWxsYmFjayxcbiAgICAgICAgICAgIHR5cGU6IGF0dGFjaG1lbnQubWltZV90eXBlLFxuICAgICAgICAgIH0gYXMgRmlsZSxcbiAgICAgICAgICBmcm9tQXR0YWNobWVudDogYXR0YWNobWVudCxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGF0dGFjaG1lbnQudHlwZSA9PT0gJ2ZpbGUnIHx8IGF0dGFjaG1lbnQudHlwZSA9PT0gJ3ZpZGVvJykge1xuICAgICAgICBhdHRhY2htZW50VXBsb2Fkcy5wdXNoKHtcbiAgICAgICAgICB1cmw6IGF0dGFjaG1lbnQuYXNzZXRfdXJsLFxuICAgICAgICAgIHN0YXRlOiAnc3VjY2VzcycsXG4gICAgICAgICAgZmlsZToge1xuICAgICAgICAgICAgbmFtZTogYXR0YWNobWVudC50aXRsZSxcbiAgICAgICAgICAgIHNpemU6IGF0dGFjaG1lbnQuZmlsZV9zaXplLFxuICAgICAgICAgICAgdHlwZTogYXR0YWNobWVudC5taW1lX3R5cGUsXG4gICAgICAgICAgfSBhcyBGaWxlLFxuICAgICAgICAgIHR5cGU6IGF0dGFjaG1lbnQudHlwZSxcbiAgICAgICAgICB0aHVtYl91cmw6IGF0dGFjaG1lbnQudGh1bWJfdXJsLFxuICAgICAgICAgIGZyb21BdHRhY2htZW50OiBhdHRhY2htZW50LFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoYXR0YWNobWVudC50eXBlID09PSAndm9pY2VSZWNvcmRpbmcnKSB7XG4gICAgICAgIGF0dGFjaG1lbnRVcGxvYWRzLnB1c2goe1xuICAgICAgICAgIHVybDogYXR0YWNobWVudC5hc3NldF91cmwsXG4gICAgICAgICAgc3RhdGU6ICdzdWNjZXNzJyxcbiAgICAgICAgICBmaWxlOiB7XG4gICAgICAgICAgICBuYW1lOiBhdHRhY2htZW50LnRpdGxlLFxuICAgICAgICAgICAgc2l6ZTogYXR0YWNobWVudC5maWxlX3NpemUsXG4gICAgICAgICAgICB0eXBlOiBhdHRhY2htZW50Lm1pbWVfdHlwZSxcbiAgICAgICAgICB9IGFzIEZpbGUsXG4gICAgICAgICAgdHlwZTogJ3ZvaWNlUmVjb3JkaW5nJyxcbiAgICAgICAgICBleHRyYURhdGE6IHtcbiAgICAgICAgICAgIGR1cmF0aW9uOiBhdHRhY2htZW50LmR1cmF0aW9uLFxuICAgICAgICAgICAgd2F2ZWZvcm1fZGF0YTogYXR0YWNobWVudC53YXZlZm9ybV9kYXRhLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKGF0dGFjaG1lbnRVcGxvYWRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuYXR0YWNobWVudFVwbG9hZHNTdWJqZWN0Lm5leHQoW1xuICAgICAgICAuLi50aGlzLmF0dGFjaG1lbnRVcGxvYWRzU3ViamVjdC5nZXRWYWx1ZSgpLFxuICAgICAgICAuLi5hdHRhY2htZW50VXBsb2FkcyxcbiAgICAgIF0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY3JlYXRlUHJldmlldyhmaWxlOiBGaWxlIHwgQmxvYikge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB1cmkgPSBhd2FpdCBjcmVhdGVVcmlGcm9tQmxvYihmaWxlKTtcbiAgICAgIGNvbnN0IGF0dGFjaG1lbnRVcGxvYWRzID0gdGhpcy5hdHRhY2htZW50VXBsb2Fkc1N1YmplY3QuZ2V0VmFsdWUoKTtcbiAgICAgIGNvbnN0IHVwbG9hZCA9IGF0dGFjaG1lbnRVcGxvYWRzLmZpbmQoKHVwbG9hZCkgPT4gdXBsb2FkLmZpbGUgPT09IGZpbGUpO1xuICAgICAgaWYgKCF1cGxvYWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdXBsb2FkLnByZXZpZXdVcmkgPSB1cmk7XG4gICAgICB0aGlzLmF0dGFjaG1lbnRVcGxvYWRzU3ViamVjdC5uZXh0KFsuLi5hdHRhY2htZW50VXBsb2Fkc10pO1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIHRoaXMuY2hhdENsaWVudFNlcnZpY2U/LmNoYXRDbGllbnQ/LmxvZ2dlcihcbiAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogYENhbid0IGNyZWF0ZSBpbWFnZSBwcmV2aWV3YCxcbiAgICAgICAgeyBlcnJvcjogZSwgdGFnOiBbJ0F0dGFjaG1lbnRTZXJ2aWNlJ10gfVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwbG9hZEF0dGFjaG1lbnRzKHVwbG9hZHM6IEF0dGFjaG1lbnRVcGxvYWRbXSkge1xuICAgIHRoaXMuYXR0YWNobWVudFVwbG9hZEluUHJvZ3Jlc3NDb3VudGVyU3ViamVjdC5uZXh0KFxuICAgICAgdGhpcy5hdHRhY2htZW50VXBsb2FkSW5Qcm9ncmVzc0NvdW50ZXJTdWJqZWN0LmdldFZhbHVlKCkgKyAxXG4gICAgKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmNoYW5uZWxTZXJ2aWNlLnVwbG9hZEF0dGFjaG1lbnRzKHVwbG9hZHMpO1xuICAgIGNvbnN0IGF0dGFjaG1lbnRVcGxvYWRzID0gdGhpcy5hdHRhY2htZW50VXBsb2Fkc1N1YmplY3QuZ2V0VmFsdWUoKTtcbiAgICByZXN1bHQuZm9yRWFjaCgocikgPT4ge1xuICAgICAgY29uc3QgdXBsb2FkID0gYXR0YWNobWVudFVwbG9hZHMuZmluZCgodXBsb2FkKSA9PiB1cGxvYWQuZmlsZSA9PT0gci5maWxlKTtcbiAgICAgIGlmICghdXBsb2FkKSB7XG4gICAgICAgIGlmIChyLnVybCkge1xuICAgICAgICAgIHZvaWQgdGhpcy5jaGFubmVsU2VydmljZS5kZWxldGVBdHRhY2htZW50KHIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHVwbG9hZC5zdGF0ZSA9IHIuc3RhdGU7XG4gICAgICB1cGxvYWQudXJsID0gci51cmw7XG4gICAgICB1cGxvYWQudGh1bWJfdXJsID0gci50aHVtYl91cmw7XG4gICAgICBpZiAodXBsb2FkLnN0YXRlID09PSAnZXJyb3InKSB7XG4gICAgICAgIHVwbG9hZC5lcnJvclJlYXNvbiA9IHIuZXJyb3JSZWFzb247XG4gICAgICAgIHVwbG9hZC5lcnJvckV4dHJhSW5mbyA9IHIuZXJyb3JFeHRyYUluZm87XG4gICAgICAgIGxldCBlcnJvcktleTtcbiAgICAgICAgY29uc3QgdHJhbnNsYXRlUGFyYW1zOiB7IG5hbWU6IHN0cmluZzsgZXh0Pzogc3RyaW5nOyBsaW1pdD86IHN0cmluZyB9ID1cbiAgICAgICAgICB7IG5hbWU6IHVwbG9hZC5maWxlLm5hbWUgfTtcbiAgICAgICAgc3dpdGNoICh1cGxvYWQuZXJyb3JSZWFzb24pIHtcbiAgICAgICAgICBjYXNlICdmaWxlLWV4dGVuc2lvbic6XG4gICAgICAgICAgICBlcnJvcktleSA9XG4gICAgICAgICAgICAgICdzdHJlYW1DaGF0LkVycm9yIHVwbG9hZGluZyBmaWxlLCBleHRlbnNpb24gbm90IHN1cHBvcnRlZCc7XG4gICAgICAgICAgICB0cmFuc2xhdGVQYXJhbXMuZXh0ID0gdXBsb2FkLmVycm9yRXh0cmFJbmZvPy5bMF0/LnBhcmFtO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnZmlsZS1zaXplJzpcbiAgICAgICAgICAgIGVycm9yS2V5ID1cbiAgICAgICAgICAgICAgJ3N0cmVhbUNoYXQuRXJyb3IgdXBsb2FkaW5nIGZpbGUsIG1heGltdW0gZmlsZSBzaXplIGV4Y2VlZGVkJztcbiAgICAgICAgICAgIHRyYW5zbGF0ZVBhcmFtcy5saW1pdCA9IHVwbG9hZC5lcnJvckV4dHJhSW5mbz8uWzBdPy5wYXJhbTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBlcnJvcktleSA9ICdzdHJlYW1DaGF0LkVycm9yIHVwbG9hZGluZyBmaWxlJztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuYWRkVGVtcG9yYXJ5Tm90aWZpY2F0aW9uKFxuICAgICAgICAgIGVycm9yS2V5LFxuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHRyYW5zbGF0ZVBhcmFtc1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuYXR0YWNobWVudFVwbG9hZEluUHJvZ3Jlc3NDb3VudGVyU3ViamVjdC5uZXh0KFxuICAgICAgdGhpcy5hdHRhY2htZW50VXBsb2FkSW5Qcm9ncmVzc0NvdW50ZXJTdWJqZWN0LmdldFZhbHVlKCkgLSAxXG4gICAgKTtcbiAgICB0aGlzLmF0dGFjaG1lbnRVcGxvYWRzU3ViamVjdC5uZXh0KFsuLi5hdHRhY2htZW50VXBsb2Fkc10pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhcmVBdHRhY2htZW50c0hhdmVWYWxpZEV4dGVuc2lvbihmaWxlczogRmlsZVtdKSB7XG4gICAgaWYgKCF0aGlzLmFwcFNldHRpbmdzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmNoYXRDbGllbnRTZXJ2aWNlLmdldEFwcFNldHRpbmdzKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IGlzVmFsaWQgPSB0cnVlO1xuICAgIGZpbGVzLmZvckVhY2goKGYpID0+IHtcbiAgICAgIGxldCBoYXNCbG9ja2VkRXh0ZW5zaW9uOiBib29sZWFuO1xuICAgICAgbGV0IGhhc0Jsb2NrZWRNaW1lVHlwZTogYm9vbGVhbjtcbiAgICAgIGxldCBoYXNOb3RBbGxvd2VkRXh0ZW5zaW9uOiBib29sZWFuO1xuICAgICAgbGV0IGhhc05vdEFsbG93ZWRNaW1lVHlwZTogYm9vbGVhbjtcbiAgICAgIGlmIChpc0ltYWdlRmlsZShmKSkge1xuICAgICAgICBoYXNCbG9ja2VkRXh0ZW5zaW9uID1cbiAgICAgICAgICAhIXRoaXMuYXBwU2V0dGluZ3M/LmltYWdlX3VwbG9hZF9jb25maWc/LmJsb2NrZWRfZmlsZV9leHRlbnNpb25zPy5maW5kKFxuICAgICAgICAgICAgKGV4dCkgPT4gZi5uYW1lLmVuZHNXaXRoKGV4dClcbiAgICAgICAgICApO1xuICAgICAgICBoYXNCbG9ja2VkTWltZVR5cGUgPVxuICAgICAgICAgICEhdGhpcy5hcHBTZXR0aW5ncz8uaW1hZ2VfdXBsb2FkX2NvbmZpZz8uYmxvY2tlZF9taW1lX3R5cGVzPy5maW5kKFxuICAgICAgICAgICAgKHR5cGUpID0+IGYudHlwZSA9PT0gdHlwZVxuICAgICAgICAgICk7XG4gICAgICAgIGhhc05vdEFsbG93ZWRFeHRlbnNpb24gPVxuICAgICAgICAgICEhdGhpcy5hcHBTZXR0aW5ncz8uaW1hZ2VfdXBsb2FkX2NvbmZpZz8uYWxsb3dlZF9maWxlX2V4dGVuc2lvbnNcbiAgICAgICAgICAgID8ubGVuZ3RoICYmXG4gICAgICAgICAgIXRoaXMuYXBwU2V0dGluZ3M/LmltYWdlX3VwbG9hZF9jb25maWc/LmFsbG93ZWRfZmlsZV9leHRlbnNpb25zPy5maW5kKFxuICAgICAgICAgICAgKGV4dCkgPT4gZi5uYW1lLmVuZHNXaXRoKGV4dClcbiAgICAgICAgICApO1xuICAgICAgICBoYXNOb3RBbGxvd2VkTWltZVR5cGUgPVxuICAgICAgICAgICEhdGhpcy5hcHBTZXR0aW5ncz8uaW1hZ2VfdXBsb2FkX2NvbmZpZz8uYWxsb3dlZF9taW1lX3R5cGVzPy5sZW5ndGggJiZcbiAgICAgICAgICAhdGhpcy5hcHBTZXR0aW5ncz8uaW1hZ2VfdXBsb2FkX2NvbmZpZz8uYWxsb3dlZF9taW1lX3R5cGVzPy5maW5kKFxuICAgICAgICAgICAgKHR5cGUpID0+IGYudHlwZSA9PT0gdHlwZVxuICAgICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYXNCbG9ja2VkRXh0ZW5zaW9uID1cbiAgICAgICAgICAhIXRoaXMuYXBwU2V0dGluZ3M/LmZpbGVfdXBsb2FkX2NvbmZpZz8uYmxvY2tlZF9maWxlX2V4dGVuc2lvbnM/LmZpbmQoXG4gICAgICAgICAgICAoZXh0KSA9PiBmLm5hbWUuZW5kc1dpdGgoZXh0KVxuICAgICAgICAgICk7XG4gICAgICAgIGhhc0Jsb2NrZWRNaW1lVHlwZSA9XG4gICAgICAgICAgISF0aGlzLmFwcFNldHRpbmdzPy5maWxlX3VwbG9hZF9jb25maWc/LmJsb2NrZWRfbWltZV90eXBlcz8uZmluZChcbiAgICAgICAgICAgICh0eXBlKSA9PiBmLnR5cGUgPT09IHR5cGVcbiAgICAgICAgICApO1xuICAgICAgICBoYXNOb3RBbGxvd2VkRXh0ZW5zaW9uID1cbiAgICAgICAgICAhIXRoaXMuYXBwU2V0dGluZ3M/LmZpbGVfdXBsb2FkX2NvbmZpZz8uYWxsb3dlZF9maWxlX2V4dGVuc2lvbnNcbiAgICAgICAgICAgID8ubGVuZ3RoICYmXG4gICAgICAgICAgIXRoaXMuYXBwU2V0dGluZ3M/LmZpbGVfdXBsb2FkX2NvbmZpZz8uYWxsb3dlZF9maWxlX2V4dGVuc2lvbnM/LmZpbmQoXG4gICAgICAgICAgICAoZXh0KSA9PiBmLm5hbWUuZW5kc1dpdGgoZXh0KVxuICAgICAgICAgICk7XG4gICAgICAgIGhhc05vdEFsbG93ZWRNaW1lVHlwZSA9XG4gICAgICAgICAgISF0aGlzLmFwcFNldHRpbmdzPy5maWxlX3VwbG9hZF9jb25maWc/LmFsbG93ZWRfbWltZV90eXBlcz8ubGVuZ3RoICYmXG4gICAgICAgICAgIXRoaXMuYXBwU2V0dGluZ3M/LmZpbGVfdXBsb2FkX2NvbmZpZz8uYWxsb3dlZF9taW1lX3R5cGVzPy5maW5kKFxuICAgICAgICAgICAgKHR5cGUpID0+IGYudHlwZSA9PT0gdHlwZVxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGhhc0Jsb2NrZWRFeHRlbnNpb24gfHxcbiAgICAgICAgaGFzQmxvY2tlZE1pbWVUeXBlIHx8XG4gICAgICAgIGhhc05vdEFsbG93ZWRFeHRlbnNpb24gfHxcbiAgICAgICAgaGFzTm90QWxsb3dlZE1pbWVUeXBlXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmFkZFRlbXBvcmFyeU5vdGlmaWNhdGlvbihcbiAgICAgICAgICAnc3RyZWFtQ2hhdC5FcnJvciB1cGxvYWRpbmcgZmlsZSwgZXh0ZW5zaW9uIG5vdCBzdXBwb3J0ZWQnLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgeyBuYW1lOiBmLm5hbWUsIGV4dDogZi50eXBlIH1cbiAgICAgICAgKTtcbiAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBpc1ZhbGlkO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhcmVBdHRhY2htZW50c0hhdmVWYWxpZFNpemUoZmlsZXM6IEZpbGVbXSkge1xuICAgIGlmICghdGhpcy5hcHBTZXR0aW5ncykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5jaGF0Q2xpZW50U2VydmljZS5nZXRBcHBTZXR0aW5ncygpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGltYWdlU2l6ZUxpbWl0SW5CeXRlcyA9XG4gICAgICB0aGlzLmFwcFNldHRpbmdzPy5pbWFnZV91cGxvYWRfY29uZmlnPy5zaXplX2xpbWl0IHx8IDA7XG4gICAgY29uc3QgaW1hZ2VTaXplTGltaVN0cmluZyA9IGAke2ltYWdlU2l6ZUxpbWl0SW5CeXRlcyAvICgxMDI0ICogMTAyNCl9TUJgO1xuICAgIGNvbnN0IGZpbGVTaXplTGltaXRJbkJ5dGVzID1cbiAgICAgIHRoaXMuYXBwU2V0dGluZ3M/LmZpbGVfdXBsb2FkX2NvbmZpZz8uc2l6ZV9saW1pdCB8fCAwO1xuICAgIGNvbnN0IGZpbGVTaXplTGltaXRJblN0cmluZyA9IGAke2ZpbGVTaXplTGltaXRJbkJ5dGVzIC8gKDEwMjQgKiAxMDI0KX1NQmA7XG4gICAgbGV0IGlzVmFsaWQgPSB0cnVlO1xuICAgIGZpbGVzLmZvckVhY2goKGYpID0+IHtcbiAgICAgIGxldCBpc092ZXJTaXplZCA9IGZhbHNlO1xuICAgICAgbGV0IGxpbWl0ID0gJyc7XG4gICAgICBpZiAoaXNJbWFnZUZpbGUoZikgJiYgaW1hZ2VTaXplTGltaXRJbkJ5dGVzID4gMCkge1xuICAgICAgICBpc092ZXJTaXplZCA9IGYuc2l6ZSA+IGltYWdlU2l6ZUxpbWl0SW5CeXRlcztcbiAgICAgICAgbGltaXQgPSBpbWFnZVNpemVMaW1pU3RyaW5nO1xuICAgICAgfSBlbHNlIGlmIChmaWxlU2l6ZUxpbWl0SW5CeXRlcyA+IDApIHtcbiAgICAgICAgaXNPdmVyU2l6ZWQgPSBmLnNpemUgPiBmaWxlU2l6ZUxpbWl0SW5CeXRlcztcbiAgICAgICAgbGltaXQgPSBmaWxlU2l6ZUxpbWl0SW5TdHJpbmc7XG4gICAgICB9XG4gICAgICBpZiAoaXNPdmVyU2l6ZWQpIHtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmFkZFRlbXBvcmFyeU5vdGlmaWNhdGlvbihcbiAgICAgICAgICAnc3RyZWFtQ2hhdC5FcnJvciB1cGxvYWRpbmcgZmlsZSwgbWF4aW11bSBmaWxlIHNpemUgZXhjZWVkZWQnLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgeyBuYW1lOiBmLm5hbWUsIGxpbWl0OiBsaW1pdCB9XG4gICAgICAgICk7XG4gICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gaXNWYWxpZDtcbiAgfVxufVxuIl19
|
|
@@ -5,8 +5,8 @@ import * as i1 from "../channel.service";
|
|
|
5
5
|
import * as i2 from "../custom-templates.service";
|
|
6
6
|
import * as i3 from "../theme.service";
|
|
7
7
|
import * as i4 from "@angular/common";
|
|
8
|
-
import * as i5 from "../
|
|
9
|
-
import * as i6 from "../
|
|
8
|
+
import * as i5 from "../icon/icon.component";
|
|
9
|
+
import * as i6 from "../channel-preview/channel-preview.component";
|
|
10
10
|
import * as i7 from "../paginated-list/paginated-list.component";
|
|
11
11
|
import * as i8 from "@ngx-translate/core";
|
|
12
12
|
/**
|
|
@@ -39,7 +39,7 @@ export class ChannelListComponent {
|
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
ChannelListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ChannelListComponent, deps: [{ token: i1.ChannelService }, { token: i2.CustomTemplatesService }, { token: i3.ThemeService }], target: i0.ɵɵFactoryTarget.Component });
|
|
42
|
-
ChannelListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: ChannelListComponent, selector: "stream-channel-list", ngImport: i0, template: "<div\n #container\n data-testid=\"channel-list-container\"\n class=\"str-chat str-chat-angular__channel-list str-chat__channel-list str-chat-channel-list messaging str-chat__theme-{{\n theme$ | async\n }}\"\n>\n <div\n *ngIf=\"\n (isError$ | async) === false && (isInitializing$ | async) === false;\n else statusIndicator\n \"\n class=\"str-chat__channel-list-messenger\"\n >\n <div class=\"str-chat__channel-list-messenger__main\">\n <ng-content select=\"[channel-list-top]\"></ng-content>\n <div\n *ngIf=\"!(channels$ | async)?.length\"\n class=\"str-chat__channel-list-empty\"\n >\n <stream-icon icon=\"chat-bubble\"></stream-icon>\n <p data-testid=\"empty-channel-list-indicator\">\n {{ \"streamChat.You have no channels currently\" | translate }}\n </p>\n </div>\n <p\n *ngIf=\"!(channels$ | async)?.length\"\n class=\"str-chat__channel-list-empty-v1\"\n data-testid=\"empty-channel-list-indicator\"\n >\n {{ \"streamChat.You have no channels currently\" | translate }}\n </p>\n <stream-paginated-list\n [items]=\"(channels$ | async) ?? []\"\n [hasMore]=\"(hasMoreChannels$ | async) ?? false\"\n [isLoading]=\"isLoadingMoreChannels\"\n (loadMore)=\"loadMoreChannels()\"\n [trackBy]=\"trackByChannelId\"\n >\n <ng-template let-channel=\"item\">\n <ng-template #defaultTemplate let-channelInput=\"channel\">\n <stream-channel-preview\n data-testclass=\"channel-preview\"\n [channel]=\"channelInput\"\n ></stream-channel-preview>\n </ng-template>\n <div>\n <ng-container\n *ngTemplateOutlet=\"\n customChannelPreviewTemplate || defaultTemplate;\n context: { channel: channel }\n \"\n ></ng-container>\n </div>\n </ng-template>\n </stream-paginated-list>\n <ng-content select=\"[channel-list-bottom]\"></ng-content>\n </div>\n </div>\n</div>\n\n<ng-template #statusIndicator>\n <ng-container *ngIf=\"isError$ | async\">\n <ng-container *ngTemplateOutlet=\"chatDown\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"isInitializing$ | async\">\n <ng-container *ngTemplateOutlet=\"loadingChannels\"></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #chatDown>\n <div data-testid=\"chatdown-container\" class=\"str-chat__down\">\n <ng-container *ngTemplateOutlet=\"loadingChannels\"></ng-container>\n </div>\n</ng-template>\n\n<ng-template #loadingChannels>\n <div\n data-testid=\"loading-indicator-full-size\"\n class=\"str-chat__loading-channels\"\n >\n <ng-container *ngTemplateOutlet=\"loadingChannel\"></ng-container>\n <ng-container *ngTemplateOutlet=\"loadingChannel\"></ng-container>\n <ng-container *ngTemplateOutlet=\"loadingChannel\"></ng-container>\n </div>\n</ng-template>\n\n<ng-template #loadingChannel>\n <div\n class=\"str-chat__loading-channels-item str-chat__channel-preview-loading\"\n >\n <div class=\"str-chat__loading-channels-avatar\"></div>\n <div\n class=\"str-chat__loading-channels-meta str-chat__channel-preview-end-loading\"\n >\n <div class=\"str-chat__loading-channels-username\"></div>\n <div class=\"str-chat__loading-channels-status\"></div>\n </div>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.
|
|
42
|
+
ChannelListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: ChannelListComponent, selector: "stream-channel-list", ngImport: i0, template: "<div\n #container\n data-testid=\"channel-list-container\"\n class=\"str-chat str-chat-angular__channel-list str-chat__channel-list str-chat-channel-list messaging str-chat__theme-{{\n theme$ | async\n }}\"\n>\n <div\n *ngIf=\"\n (isError$ | async) === false && (isInitializing$ | async) === false;\n else statusIndicator\n \"\n class=\"str-chat__channel-list-messenger\"\n >\n <div class=\"str-chat__channel-list-messenger__main\">\n <ng-content select=\"[channel-list-top]\"></ng-content>\n <div\n *ngIf=\"!(channels$ | async)?.length\"\n class=\"str-chat__channel-list-empty\"\n >\n <stream-icon icon=\"chat-bubble\"></stream-icon>\n <p data-testid=\"empty-channel-list-indicator\">\n {{ \"streamChat.You have no channels currently\" | translate }}\n </p>\n </div>\n <p\n *ngIf=\"!(channels$ | async)?.length\"\n class=\"str-chat__channel-list-empty-v1\"\n data-testid=\"empty-channel-list-indicator\"\n >\n {{ \"streamChat.You have no channels currently\" | translate }}\n </p>\n <stream-paginated-list\n [items]=\"(channels$ | async) ?? []\"\n [hasMore]=\"(hasMoreChannels$ | async) ?? false\"\n [isLoading]=\"isLoadingMoreChannels\"\n (loadMore)=\"loadMoreChannels()\"\n [trackBy]=\"trackByChannelId\"\n >\n <ng-template let-channel=\"item\">\n <ng-template #defaultTemplate let-channelInput=\"channel\">\n <stream-channel-preview\n data-testclass=\"channel-preview\"\n [channel]=\"channelInput\"\n ></stream-channel-preview>\n </ng-template>\n <div>\n <ng-container\n *ngTemplateOutlet=\"\n customChannelPreviewTemplate || defaultTemplate;\n context: { channel: channel }\n \"\n ></ng-container>\n </div>\n </ng-template>\n </stream-paginated-list>\n <ng-content select=\"[channel-list-bottom]\"></ng-content>\n </div>\n </div>\n</div>\n\n<ng-template #statusIndicator>\n <ng-container *ngIf=\"isError$ | async\">\n <ng-container *ngTemplateOutlet=\"chatDown\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"isInitializing$ | async\">\n <ng-container *ngTemplateOutlet=\"loadingChannels\"></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #chatDown>\n <div data-testid=\"chatdown-container\" class=\"str-chat__down\">\n <ng-container *ngTemplateOutlet=\"loadingChannels\"></ng-container>\n </div>\n</ng-template>\n\n<ng-template #loadingChannels>\n <div\n data-testid=\"loading-indicator-full-size\"\n class=\"str-chat__loading-channels\"\n >\n <ng-container *ngTemplateOutlet=\"loadingChannel\"></ng-container>\n <ng-container *ngTemplateOutlet=\"loadingChannel\"></ng-container>\n <ng-container *ngTemplateOutlet=\"loadingChannel\"></ng-container>\n </div>\n</ng-template>\n\n<ng-template #loadingChannel>\n <div\n class=\"str-chat__loading-channels-item str-chat__channel-preview-loading\"\n >\n <div class=\"str-chat__loading-channels-avatar\"></div>\n <div\n class=\"str-chat__loading-channels-meta str-chat__channel-preview-end-loading\"\n >\n <div class=\"str-chat__loading-channels-username\"></div>\n <div class=\"str-chat__loading-channels-status\"></div>\n </div>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.IconComponent, selector: "stream-icon", inputs: ["icon"] }, { kind: "component", type: i6.ChannelPreviewComponent, selector: "stream-channel-preview", inputs: ["channel"] }, { kind: "component", type: i7.PaginatedListComponent, selector: "stream-paginated-list", inputs: ["items", "isLoading", "hasMore", "trackBy"], outputs: ["loadMore"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }] });
|
|
43
43
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ChannelListComponent, decorators: [{
|
|
44
44
|
type: Component,
|
|
45
45
|
args: [{ selector: 'stream-channel-list', template: "<div\n #container\n data-testid=\"channel-list-container\"\n class=\"str-chat str-chat-angular__channel-list str-chat__channel-list str-chat-channel-list messaging str-chat__theme-{{\n theme$ | async\n }}\"\n>\n <div\n *ngIf=\"\n (isError$ | async) === false && (isInitializing$ | async) === false;\n else statusIndicator\n \"\n class=\"str-chat__channel-list-messenger\"\n >\n <div class=\"str-chat__channel-list-messenger__main\">\n <ng-content select=\"[channel-list-top]\"></ng-content>\n <div\n *ngIf=\"!(channels$ | async)?.length\"\n class=\"str-chat__channel-list-empty\"\n >\n <stream-icon icon=\"chat-bubble\"></stream-icon>\n <p data-testid=\"empty-channel-list-indicator\">\n {{ \"streamChat.You have no channels currently\" | translate }}\n </p>\n </div>\n <p\n *ngIf=\"!(channels$ | async)?.length\"\n class=\"str-chat__channel-list-empty-v1\"\n data-testid=\"empty-channel-list-indicator\"\n >\n {{ \"streamChat.You have no channels currently\" | translate }}\n </p>\n <stream-paginated-list\n [items]=\"(channels$ | async) ?? []\"\n [hasMore]=\"(hasMoreChannels$ | async) ?? false\"\n [isLoading]=\"isLoadingMoreChannels\"\n (loadMore)=\"loadMoreChannels()\"\n [trackBy]=\"trackByChannelId\"\n >\n <ng-template let-channel=\"item\">\n <ng-template #defaultTemplate let-channelInput=\"channel\">\n <stream-channel-preview\n data-testclass=\"channel-preview\"\n [channel]=\"channelInput\"\n ></stream-channel-preview>\n </ng-template>\n <div>\n <ng-container\n *ngTemplateOutlet=\"\n customChannelPreviewTemplate || defaultTemplate;\n context: { channel: channel }\n \"\n ></ng-container>\n </div>\n </ng-template>\n </stream-paginated-list>\n <ng-content select=\"[channel-list-bottom]\"></ng-content>\n </div>\n </div>\n</div>\n\n<ng-template #statusIndicator>\n <ng-container *ngIf=\"isError$ | async\">\n <ng-container *ngTemplateOutlet=\"chatDown\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"isInitializing$ | async\">\n <ng-container *ngTemplateOutlet=\"loadingChannels\"></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #chatDown>\n <div data-testid=\"chatdown-container\" class=\"str-chat__down\">\n <ng-container *ngTemplateOutlet=\"loadingChannels\"></ng-container>\n </div>\n</ng-template>\n\n<ng-template #loadingChannels>\n <div\n data-testid=\"loading-indicator-full-size\"\n class=\"str-chat__loading-channels\"\n >\n <ng-container *ngTemplateOutlet=\"loadingChannel\"></ng-container>\n <ng-container *ngTemplateOutlet=\"loadingChannel\"></ng-container>\n <ng-container *ngTemplateOutlet=\"loadingChannel\"></ng-container>\n </div>\n</ng-template>\n\n<ng-template #loadingChannel>\n <div\n class=\"str-chat__loading-channels-item str-chat__channel-preview-loading\"\n >\n <div class=\"str-chat__loading-channels-avatar\"></div>\n <div\n class=\"str-chat__loading-channels-meta str-chat__channel-preview-end-loading\"\n >\n <div class=\"str-chat__loading-channels-username\"></div>\n <div class=\"str-chat__loading-channels-status\"></div>\n </div>\n </div>\n</ng-template>\n" }]
|
|
@@ -12,7 +12,7 @@ import * as i4 from "../custom-templates.service";
|
|
|
12
12
|
import * as i5 from "../date-parser.service";
|
|
13
13
|
import * as i6 from "@angular/common";
|
|
14
14
|
import * as i7 from "../avatar-placeholder/avatar-placeholder.component";
|
|
15
|
-
import * as i8 from "../icon-placeholder/icon-placeholder.component";
|
|
15
|
+
import * as i8 from "../icon/icon-placeholder/icon-placeholder.component";
|
|
16
16
|
import * as i9 from "@ngx-translate/core";
|
|
17
17
|
/**
|
|
18
18
|
* The `ChannelPreview` component displays a channel preview in the channel list, it consists of the image, name and latest message of the channel.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export const isImageFile = (file) => {
|
|
2
|
+
// photoshop files begin with 'image/'
|
|
3
|
+
return file.type.startsWith('image/') && !file.type.endsWith('.photoshop');
|
|
4
|
+
};
|
|
5
|
+
export const readBlobAsArrayBuffer = (blob) => new Promise((resolve, reject) => {
|
|
6
|
+
const fileReader = new FileReader();
|
|
7
|
+
fileReader.onload = () => {
|
|
8
|
+
resolve(fileReader.result);
|
|
9
|
+
};
|
|
10
|
+
fileReader.onerror = () => {
|
|
11
|
+
reject(fileReader.error);
|
|
12
|
+
};
|
|
13
|
+
fileReader.readAsArrayBuffer(blob);
|
|
14
|
+
});
|
|
15
|
+
export const createFileFromBlobs = ({ blobsArray, fileName, mimeType, }) => {
|
|
16
|
+
const concatenatedBlob = new Blob(blobsArray, { type: mimeType });
|
|
17
|
+
return new File([concatenatedBlob], fileName, {
|
|
18
|
+
type: concatenatedBlob.type,
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
export const getExtensionFromMimeType = (mimeType) => {
|
|
22
|
+
const match = mimeType.match(/\/([^/;]+)/);
|
|
23
|
+
return match && match[1];
|
|
24
|
+
};
|
|
25
|
+
export const createUriFromBlob = (blob) => {
|
|
26
|
+
return new Promise((resolve, reject) => {
|
|
27
|
+
const reader = new FileReader();
|
|
28
|
+
reader.onload = (event) => {
|
|
29
|
+
resolve(event.target?.result ?? undefined);
|
|
30
|
+
};
|
|
31
|
+
reader.onerror = (e) => reject(e);
|
|
32
|
+
reader.readAsDataURL(blob);
|
|
33
|
+
});
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9maWxlLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLElBQVUsRUFBRSxFQUFFO0lBQ3hDLHNDQUFzQztJQUN0QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDN0UsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxJQUFVLEVBQXdCLEVBQUUsQ0FDeEUsSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7SUFDOUIsTUFBTSxVQUFVLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztJQUNwQyxVQUFVLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtRQUN2QixPQUFPLENBQUMsVUFBVSxDQUFDLE1BQXFCLENBQUMsQ0FBQztJQUM1QyxDQUFDLENBQUM7SUFFRixVQUFVLENBQUMsT0FBTyxHQUFHLEdBQUcsRUFBRTtRQUN4QixNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLENBQUMsQ0FBQztJQUVGLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQyxDQUFDLENBQUMsQ0FBQztBQUVMLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsRUFDbEMsVUFBVSxFQUNWLFFBQVEsRUFDUixRQUFRLEdBS1QsRUFBRSxFQUFFO0lBQ0gsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNsRSxPQUFPLElBQUksSUFBSSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxRQUFRLEVBQUU7UUFDNUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLElBQUk7S0FDNUIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxRQUFnQixFQUFFLEVBQUU7SUFDM0QsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMzQyxPQUFPLEtBQUssSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxJQUFVLEVBQUUsRUFBRTtJQUM5QyxPQUFPLElBQUksT0FBTyxDQUFtQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUN2RSxNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN4QixPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLElBQUksU0FBUyxDQUFDLENBQUM7UUFDN0MsQ0FBQyxDQUFDO1FBQ0YsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgaXNJbWFnZUZpbGUgPSAoZmlsZTogRmlsZSkgPT4ge1xuICAvLyBwaG90b3Nob3AgZmlsZXMgYmVnaW4gd2l0aCAnaW1hZ2UvJ1xuICByZXR1cm4gZmlsZS50eXBlLnN0YXJ0c1dpdGgoJ2ltYWdlLycpICYmICFmaWxlLnR5cGUuZW5kc1dpdGgoJy5waG90b3Nob3AnKTtcbn07XG5cbmV4cG9ydCBjb25zdCByZWFkQmxvYkFzQXJyYXlCdWZmZXIgPSAoYmxvYjogQmxvYik6IFByb21pc2U8QXJyYXlCdWZmZXI+ID0+XG4gIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBmaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICBmaWxlUmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIHJlc29sdmUoZmlsZVJlYWRlci5yZXN1bHQgYXMgQXJyYXlCdWZmZXIpO1xuICAgIH07XG5cbiAgICBmaWxlUmVhZGVyLm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICByZWplY3QoZmlsZVJlYWRlci5lcnJvcik7XG4gICAgfTtcblxuICAgIGZpbGVSZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoYmxvYik7XG4gIH0pO1xuXG5leHBvcnQgY29uc3QgY3JlYXRlRmlsZUZyb21CbG9icyA9ICh7XG4gIGJsb2JzQXJyYXksXG4gIGZpbGVOYW1lLFxuICBtaW1lVHlwZSxcbn06IHtcbiAgYmxvYnNBcnJheTogQmxvYltdO1xuICBmaWxlTmFtZTogc3RyaW5nO1xuICBtaW1lVHlwZTogc3RyaW5nO1xufSkgPT4ge1xuICBjb25zdCBjb25jYXRlbmF0ZWRCbG9iID0gbmV3IEJsb2IoYmxvYnNBcnJheSwgeyB0eXBlOiBtaW1lVHlwZSB9KTtcbiAgcmV0dXJuIG5ldyBGaWxlKFtjb25jYXRlbmF0ZWRCbG9iXSwgZmlsZU5hbWUsIHtcbiAgICB0eXBlOiBjb25jYXRlbmF0ZWRCbG9iLnR5cGUsXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEV4dGVuc2lvbkZyb21NaW1lVHlwZSA9IChtaW1lVHlwZTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IG1hdGNoID0gbWltZVR5cGUubWF0Y2goL1xcLyhbXi87XSspLyk7XG4gIHJldHVybiBtYXRjaCAmJiBtYXRjaFsxXTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVVcmlGcm9tQmxvYiA9IChibG9iOiBCbG9iKSA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTxzdHJpbmcgfCBBcnJheUJ1ZmZlciB8IHVuZGVmaW5lZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgcmVhZGVyLm9ubG9hZCA9IChldmVudCkgPT4ge1xuICAgICAgcmVzb2x2ZShldmVudC50YXJnZXQ/LnJlc3VsdCA/PyB1bmRlZmluZWQpO1xuICAgIH07XG4gICAgcmVhZGVyLm9uZXJyb3IgPSAoZSkgPT4gcmVqZWN0KGUpO1xuICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGJsb2IpO1xuICB9KTtcbn07XG4iXX0=
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export const formatDuration = (durationInSeconds) => {
|
|
2
|
+
if (durationInSeconds === undefined || durationInSeconds <= 0)
|
|
3
|
+
return '00:00';
|
|
4
|
+
const [hours, hoursLeftover] = divMod(durationInSeconds, 3600);
|
|
5
|
+
const [minutes, seconds] = divMod(hoursLeftover, 60);
|
|
6
|
+
const roundedSeconds = Math.ceil(seconds);
|
|
7
|
+
const prependHrsZero = hours.toString().length === 1 ? '0' : '';
|
|
8
|
+
const prependMinZero = minutes.toString().length === 1 ? '0' : '';
|
|
9
|
+
const prependSecZero = roundedSeconds.toString().length === 1 ? '0' : '';
|
|
10
|
+
const minSec = `${prependMinZero}${minutes}:${prependSecZero}${roundedSeconds}`;
|
|
11
|
+
return hours ? `${prependHrsZero}${hours}:` + minSec : minSec;
|
|
12
|
+
};
|
|
13
|
+
const divMod = (num, divisor) => {
|
|
14
|
+
return [Math.floor(num / divisor), num % divisor];
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LWR1cmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL2Zvcm1hdC1kdXJhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxpQkFBMEIsRUFBRSxFQUFFO0lBQzNELElBQUksaUJBQWlCLEtBQUssU0FBUyxJQUFJLGlCQUFpQixJQUFJLENBQUM7UUFBRSxPQUFPLE9BQU8sQ0FBQztJQUU5RSxNQUFNLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMvRCxNQUFNLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDckQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUUxQyxNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDaEUsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ2xFLE1BQU0sY0FBYyxHQUFHLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN6RSxNQUFNLE1BQU0sR0FBRyxHQUFHLGNBQWMsR0FBRyxPQUFPLElBQUksY0FBYyxHQUFHLGNBQWMsRUFBRSxDQUFDO0lBRWhGLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLGNBQWMsR0FBRyxLQUFLLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUNoRSxDQUFDLENBQUM7QUFFRixNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQVcsRUFBRSxPQUFlLEVBQUUsRUFBRTtJQUM5QyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLEVBQUUsR0FBRyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0FBQ3BELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBmb3JtYXREdXJhdGlvbiA9IChkdXJhdGlvbkluU2Vjb25kcz86IG51bWJlcikgPT4ge1xuICBpZiAoZHVyYXRpb25JblNlY29uZHMgPT09IHVuZGVmaW5lZCB8fCBkdXJhdGlvbkluU2Vjb25kcyA8PSAwKSByZXR1cm4gJzAwOjAwJztcblxuICBjb25zdCBbaG91cnMsIGhvdXJzTGVmdG92ZXJdID0gZGl2TW9kKGR1cmF0aW9uSW5TZWNvbmRzLCAzNjAwKTtcbiAgY29uc3QgW21pbnV0ZXMsIHNlY29uZHNdID0gZGl2TW9kKGhvdXJzTGVmdG92ZXIsIDYwKTtcbiAgY29uc3Qgcm91bmRlZFNlY29uZHMgPSBNYXRoLmNlaWwoc2Vjb25kcyk7XG5cbiAgY29uc3QgcHJlcGVuZEhyc1plcm8gPSBob3Vycy50b1N0cmluZygpLmxlbmd0aCA9PT0gMSA/ICcwJyA6ICcnO1xuICBjb25zdCBwcmVwZW5kTWluWmVybyA9IG1pbnV0ZXMudG9TdHJpbmcoKS5sZW5ndGggPT09IDEgPyAnMCcgOiAnJztcbiAgY29uc3QgcHJlcGVuZFNlY1plcm8gPSByb3VuZGVkU2Vjb25kcy50b1N0cmluZygpLmxlbmd0aCA9PT0gMSA/ICcwJyA6ICcnO1xuICBjb25zdCBtaW5TZWMgPSBgJHtwcmVwZW5kTWluWmVyb30ke21pbnV0ZXN9OiR7cHJlcGVuZFNlY1plcm99JHtyb3VuZGVkU2Vjb25kc31gO1xuXG4gIHJldHVybiBob3VycyA/IGAke3ByZXBlbmRIcnNaZXJvfSR7aG91cnN9OmAgKyBtaW5TZWMgOiBtaW5TZWM7XG59O1xuXG5jb25zdCBkaXZNb2QgPSAobnVtOiBudW1iZXIsIGRpdmlzb3I6IG51bWJlcikgPT4ge1xuICByZXR1cm4gW01hdGguZmxvb3IobnVtIC8gZGl2aXNvciksIG51bSAlIGRpdmlzb3JdO1xufTtcbiJdfQ==
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "../../custom-templates.service";
|
|
4
|
+
import * as i2 from "@angular/common";
|
|
5
|
+
import * as i3 from "../icon.component";
|
|
6
|
+
/**
|
|
7
|
+
* The `IconPlaceholder` component displays the [default icons](./IconComponent.mdx) unless a [custom template](../services/CustomTemplatesService.mdx) is provided. This component is used by the SDK internally, you likely won't need to use it.
|
|
8
|
+
*/
|
|
9
|
+
export class IconPlaceholderComponent {
|
|
10
|
+
constructor(customTemplatesService) {
|
|
11
|
+
this.customTemplatesService = customTemplatesService;
|
|
12
|
+
this.iconContext = { icon: undefined };
|
|
13
|
+
}
|
|
14
|
+
ngOnChanges() {
|
|
15
|
+
this.iconContext = {
|
|
16
|
+
icon: this.icon,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
IconPlaceholderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: IconPlaceholderComponent, deps: [{ token: i1.CustomTemplatesService }], target: i0.ɵɵFactoryTarget.Component });
|
|
21
|
+
IconPlaceholderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: IconPlaceholderComponent, selector: "stream-icon-placeholder", inputs: { icon: "icon" }, usesOnChanges: true, ngImport: i0, template: "<ng-template #defaultIcon let-icon=\"icon\">\n <stream-icon [icon]=\"icon\"></stream-icon>\n</ng-template>\n<ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.iconTemplate$ | async) || defaultIcon;\n context: iconContext\n \"\n></ng-container>\n", dependencies: [{ kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.IconComponent, selector: "stream-icon", inputs: ["icon"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }] });
|
|
22
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: IconPlaceholderComponent, decorators: [{
|
|
23
|
+
type: Component,
|
|
24
|
+
args: [{ selector: 'stream-icon-placeholder', template: "<ng-template #defaultIcon let-icon=\"icon\">\n <stream-icon [icon]=\"icon\"></stream-icon>\n</ng-template>\n<ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.iconTemplate$ | async) || defaultIcon;\n context: iconContext\n \"\n></ng-container>\n" }]
|
|
25
|
+
}], ctorParameters: function () { return [{ type: i1.CustomTemplatesService }]; }, propDecorators: { icon: [{
|
|
26
|
+
type: Input
|
|
27
|
+
}] } });
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi1wbGFjZWhvbGRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvaWNvbi9pY29uLXBsYWNlaG9sZGVyL2ljb24tcGxhY2Vob2xkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL2ljb24vaWNvbi1wbGFjZWhvbGRlci9pY29uLXBsYWNlaG9sZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFhLE1BQU0sZUFBZSxDQUFDOzs7OztBQUs1RDs7R0FFRztBQU1ILE1BQU0sT0FBTyx3QkFBd0I7SUFPbkMsWUFBbUIsc0JBQThDO1FBQTlDLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFGakUsZ0JBQVcsR0FBZ0IsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUM7SUFFcUIsQ0FBQztJQUVyRSxXQUFXO1FBQ1QsSUFBSSxDQUFDLFdBQVcsR0FBRztZQUNqQixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7U0FDaEIsQ0FBQztJQUNKLENBQUM7O3FIQWJVLHdCQUF3Qjt5R0FBeEIsd0JBQXdCLDhHQ2JyQyw0UUFTQTsyRkRJYSx3QkFBd0I7a0JBTHBDLFNBQVM7K0JBQ0UseUJBQXlCOzZHQVExQixJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEljb24gfSBmcm9tICcuLi9pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJY29uQ29udGV4dCB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9jdXN0b20tdGVtcGxhdGVzLnNlcnZpY2UnO1xuXG4vKipcbiAqIFRoZSBgSWNvblBsYWNlaG9sZGVyYCBjb21wb25lbnQgZGlzcGxheXMgdGhlIFtkZWZhdWx0IGljb25zXSguL0ljb25Db21wb25lbnQubWR4KSB1bmxlc3MgYSBbY3VzdG9tIHRlbXBsYXRlXSguLi9zZXJ2aWNlcy9DdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLm1keCkgaXMgcHJvdmlkZWQuIFRoaXMgY29tcG9uZW50IGlzIHVzZWQgYnkgdGhlIFNESyBpbnRlcm5hbGx5LCB5b3UgbGlrZWx5IHdvbid0IG5lZWQgdG8gdXNlIGl0LlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdHJlYW0taWNvbi1wbGFjZWhvbGRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9pY29uLXBsYWNlaG9sZGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVzOiBbXSxcbn0pXG5leHBvcnQgY2xhc3MgSWNvblBsYWNlaG9sZGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgLyoqXG4gICAqIFRoZSBpY29uIHRvIGRpc3BsYXksIHRoZSBsaXN0IG9mIFtzdXBwb3J0ZWQgaWNvbnNdKGh0dHBzOi8vZ2l0aHViLmNvbS9HZXRTdHJlYW0vc3RyZWFtLWNoYXQtYW5ndWxhci90cmVlL21hc3Rlci9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvaWNvbi9pY29uLmNvbXBvbmVudC50cykgY2FuIGJlIGZvdW5kIG9uIEdpdEh1Yi5cbiAgICovXG4gIEBJbnB1dCgpIGljb246IEljb24gfCB1bmRlZmluZWQ7XG4gIGljb25Db250ZXh0OiBJY29uQ29udGV4dCA9IHsgaWNvbjogdW5kZWZpbmVkIH07XG5cbiAgY29uc3RydWN0b3IocHVibGljIGN1c3RvbVRlbXBsYXRlc1NlcnZpY2U6IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2UpIHt9XG5cbiAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5pY29uQ29udGV4dCA9IHtcbiAgICAgIGljb246IHRoaXMuaWNvbixcbiAgICB9O1xuICB9XG59XG4iLCI8bmctdGVtcGxhdGUgI2RlZmF1bHRJY29uIGxldC1pY29uPVwiaWNvblwiPlxuICA8c3RyZWFtLWljb24gW2ljb25dPVwiaWNvblwiPjwvc3RyZWFtLWljb24+XG48L25nLXRlbXBsYXRlPlxuPG5nLWNvbnRhaW5lclxuICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgIChjdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLmljb25UZW1wbGF0ZSQgfCBhc3luYykgfHwgZGVmYXVsdEljb247XG4gICAgY29udGV4dDogaWNvbkNvbnRleHRcbiAgXCJcbj48L25nLWNvbnRhaW5lcj5cbiJdfQ==
|
|
@@ -14,4 +14,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
|
|
|
14
14
|
}], ctorParameters: function () { return []; }, propDecorators: { icon: [{
|
|
15
15
|
type: Input
|
|
16
16
|
}] } });
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvaWNvbi9pY29uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9pY29uL2ljb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBMEJqRDs7R0FFRztBQU1ILE1BQU0sT0FBTyxhQUFhO0lBS3hCLGdCQUFlLENBQUM7OzBHQUxMLGFBQWE7OEZBQWIsYUFBYSw2RUNsQzFCLG1FQUNBOzJGRGlDYSxhQUFhO2tCQUx6QixTQUFTOytCQUNFLGFBQWE7MEVBUWQsSUFBSTtzQkFBWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgdHlwZSBJY29uID1cbiAgfCAnYWN0aW9uJ1xuICB8ICdkZWxpdmVyZWQnXG4gIHwgJ3JlYWQnXG4gIHwgJ3JlYWN0aW9uJ1xuICB8ICdzZW5kJ1xuICB8ICdyZXRyeSdcbiAgfCAnY2xvc2UnXG4gIHwgJ2F1ZGlvLWZpbGUnXG4gIHwgJ3JlcGx5LWluLXRocmVhZCdcbiAgfCAnYXJyb3ctbGVmdCdcbiAgfCAnYXJyb3ctdXAnXG4gIHwgJ2Fycm93LWRvd24nXG4gIHwgJ2Fycm93LXJpZ2h0J1xuICB8ICdjaGF0LWJ1YmJsZSdcbiAgfCAnYXR0YWNoJ1xuICB8ICd1bnNwZWNpZmllZC1maWxldHlwZSdcbiAgfCAnZG93bmxvYWQnXG4gIHwgJ2Vycm9yJ1xuICB8ICdwbGF5J1xuICB8ICdwYXVzZSdcbiAgfCAnbWljJ1xuICB8ICdiaW4nO1xuXG4vKipcbiAqIFRoZSBgSWNvbmAgY29tcG9uZW50IGNhbiBiZSB1c2VkIHRvIGRpc3BsYXkgZGlmZmVyZW50IGljb25zIChpLiBlLiBtZXNzYWdlIGRlbGl2ZXJlZCBpY29uKS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3RyZWFtLWljb24nLFxuICB0ZW1wbGF0ZVVybDogJy4vaWNvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlczogW10sXG59KVxuZXhwb3J0IGNsYXNzIEljb25Db21wb25lbnQge1xuICAvKipcbiAgICogVGhlIGljb24gdG8gZGlzcGxheSwgdGhlIGxpc3Qgb2YgW3N1cHBvcnRlZCBpY29uc10oaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL3RyZWUvbWFzdGVyL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9pY29uL2ljb24uY29tcG9uZW50LnRzKSBjYW4gYmUgZm91bmQgb24gR2l0SHViLlxuICAgKi9cbiAgQElucHV0KCkgaWNvbjogSWNvbiB8IHVuZGVmaW5lZDtcbiAgY29uc3RydWN0b3IoKSB7fVxufVxuIiwiPGRpdiBjbGFzcz1cInN0ci1jaGF0X19pY29uIHN0ci1jaGF0X19pY29uLS17eyBpY29uIH19XCI+PC9kaXY+XG4iXX0=
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { IconComponent } from './icon.component';
|
|
3
|
+
import { CommonModule } from '@angular/common';
|
|
4
|
+
import { LoadingIndicatorComponent } from './loading-indicator/loading-indicator.component';
|
|
5
|
+
import { IconPlaceholderComponent } from './icon-placeholder/icon-placeholder.component';
|
|
6
|
+
import { LoadingIndicatorPlaceholderComponent } from './loading-indicator-placeholder/loading-indicator-placeholder.component';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
export class IconModule {
|
|
9
|
+
}
|
|
10
|
+
IconModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: IconModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
11
|
+
IconModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.4", ngImport: i0, type: IconModule, declarations: [IconComponent,
|
|
12
|
+
IconPlaceholderComponent,
|
|
13
|
+
LoadingIndicatorComponent,
|
|
14
|
+
LoadingIndicatorPlaceholderComponent], imports: [CommonModule], exports: [IconComponent,
|
|
15
|
+
IconPlaceholderComponent,
|
|
16
|
+
LoadingIndicatorComponent,
|
|
17
|
+
LoadingIndicatorPlaceholderComponent] });
|
|
18
|
+
IconModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: IconModule, imports: [CommonModule] });
|
|
19
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: IconModule, decorators: [{
|
|
20
|
+
type: NgModule,
|
|
21
|
+
args: [{
|
|
22
|
+
declarations: [
|
|
23
|
+
IconComponent,
|
|
24
|
+
IconPlaceholderComponent,
|
|
25
|
+
LoadingIndicatorComponent,
|
|
26
|
+
LoadingIndicatorPlaceholderComponent,
|
|
27
|
+
],
|
|
28
|
+
imports: [CommonModule],
|
|
29
|
+
exports: [
|
|
30
|
+
IconComponent,
|
|
31
|
+
IconPlaceholderComponent,
|
|
32
|
+
LoadingIndicatorComponent,
|
|
33
|
+
LoadingIndicatorPlaceholderComponent,
|
|
34
|
+
],
|
|
35
|
+
}]
|
|
36
|
+
}] });
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvaWNvbi9pY29uLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDNUYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDekYsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0seUVBQXlFLENBQUM7O0FBaUIvSCxNQUFNLE9BQU8sVUFBVTs7dUdBQVYsVUFBVTt3R0FBVixVQUFVLGlCQWJuQixhQUFhO1FBQ2Isd0JBQXdCO1FBQ3hCLHlCQUF5QjtRQUN6QixvQ0FBb0MsYUFFNUIsWUFBWSxhQUVwQixhQUFhO1FBQ2Isd0JBQXdCO1FBQ3hCLHlCQUF5QjtRQUN6QixvQ0FBb0M7d0dBRzNCLFVBQVUsWUFSWCxZQUFZOzJGQVFYLFVBQVU7a0JBZnRCLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFO3dCQUNaLGFBQWE7d0JBQ2Isd0JBQXdCO3dCQUN4Qix5QkFBeUI7d0JBQ3pCLG9DQUFvQztxQkFDckM7b0JBQ0QsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO29CQUN2QixPQUFPLEVBQUU7d0JBQ1AsYUFBYTt3QkFDYix3QkFBd0I7d0JBQ3hCLHlCQUF5Qjt3QkFDekIsb0NBQW9DO3FCQUNyQztpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJY29uQ29tcG9uZW50IH0gZnJvbSAnLi9pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTG9hZGluZ0luZGljYXRvckNvbXBvbmVudCB9IGZyb20gJy4vbG9hZGluZy1pbmRpY2F0b3IvbG9hZGluZy1pbmRpY2F0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IEljb25QbGFjZWhvbGRlckNvbXBvbmVudCB9IGZyb20gJy4vaWNvbi1wbGFjZWhvbGRlci9pY29uLXBsYWNlaG9sZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMb2FkaW5nSW5kaWNhdG9yUGxhY2Vob2xkZXJDb21wb25lbnQgfSBmcm9tICcuL2xvYWRpbmctaW5kaWNhdG9yLXBsYWNlaG9sZGVyL2xvYWRpbmctaW5kaWNhdG9yLXBsYWNlaG9sZGVyLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1xuICAgIEljb25Db21wb25lbnQsXG4gICAgSWNvblBsYWNlaG9sZGVyQ29tcG9uZW50LFxuICAgIExvYWRpbmdJbmRpY2F0b3JDb21wb25lbnQsXG4gICAgTG9hZGluZ0luZGljYXRvclBsYWNlaG9sZGVyQ29tcG9uZW50LFxuICBdLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgZXhwb3J0czogW1xuICAgIEljb25Db21wb25lbnQsXG4gICAgSWNvblBsYWNlaG9sZGVyQ29tcG9uZW50LFxuICAgIExvYWRpbmdJbmRpY2F0b3JDb21wb25lbnQsXG4gICAgTG9hZGluZ0luZGljYXRvclBsYWNlaG9sZGVyQ29tcG9uZW50LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBJY29uTW9kdWxlIHt9XG4iXX0=
|
package/esm2020/lib/{loading-indicator → icon/loading-indicator}/loading-indicator.component.mjs
RENAMED
|
@@ -12,4 +12,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
|
|
|
12
12
|
type: Component,
|
|
13
13
|
args: [{ selector: 'stream-loading-indicator', template: "<div class=\"str-chat__loading-indicator\">\n <svg\n viewBox=\"0 0 30 30\"\n data-testid=\"loading-indicator\"\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"30\"\n width=\"30\"\n >\n <defs>\n <linearGradient\n x1=\"50%\"\n x2=\"50%\"\n y1=\"0%\"\n y2=\"100%\"\n id=\"stream-chat-loading-circle\"\n >\n <stop offset=\"0%\" stop-color=\"#FFF\" stop-opacity=\"0\" />\n <stop data-testid=\"stop-color\" offset=\"100%\" stop-opacity=\"1\" />\n </linearGradient>\n </defs>\n <path\n d=\"M2.518 23.321l1.664-1.11A12.988 12.988 0 0 0 15 28c7.18 0 13-5.82 13-13S22.18 2 15 2V0c8.284 0 15 6.716 15 15 0 8.284-6.716 15-15 15-5.206 0-9.792-2.652-12.482-6.679z\"\n fillRule=\"evenodd\"\n fill=\"url(#stream-chat-loading-circle)\"\n />\n </svg>\n</div>\n" }]
|
|
14
14
|
}], ctorParameters: function () { return []; } });
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGluZy1pbmRpY2F0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL2ljb24vbG9hZGluZy1pbmRpY2F0b3IvbG9hZGluZy1pbmRpY2F0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL2ljb24vbG9hZGluZy1pbmRpY2F0b3IvbG9hZGluZy1pbmRpY2F0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFFMUM7O0dBRUc7QUFNSCxNQUFNLE9BQU8seUJBQXlCO0lBQ3BDLGdCQUFlLENBQUM7O3NIQURMLHlCQUF5QjswR0FBekIseUJBQXlCLGdFQ1Z0Qyx1MUJBMkJBOzJGRGpCYSx5QkFBeUI7a0JBTHJDLFNBQVM7K0JBQ0UsMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogVGhlIGBMb2FkaW5nSW5kaWNhdG9yYCBjb21wb25lbnQgZGlzcGxheXMgYSBzcGlubmVyIHRvIGluZGljYXRlIHRoYXQgYW4gYWN0aW9uIGlzIGluIHByb2dyZXNzLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdHJlYW0tbG9hZGluZy1pbmRpY2F0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vbG9hZGluZy1pbmRpY2F0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBMb2FkaW5nSW5kaWNhdG9yQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoKSB7fVxufVxuIiwiPGRpdiBjbGFzcz1cInN0ci1jaGF0X19sb2FkaW5nLWluZGljYXRvclwiPlxuICA8c3ZnXG4gICAgdmlld0JveD1cIjAgMCAzMCAzMFwiXG4gICAgZGF0YS10ZXN0aWQ9XCJsb2FkaW5nLWluZGljYXRvclwiXG4gICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgaGVpZ2h0PVwiMzBcIlxuICAgIHdpZHRoPVwiMzBcIlxuICA+XG4gICAgPGRlZnM+XG4gICAgICA8bGluZWFyR3JhZGllbnRcbiAgICAgICAgeDE9XCI1MCVcIlxuICAgICAgICB4Mj1cIjUwJVwiXG4gICAgICAgIHkxPVwiMCVcIlxuICAgICAgICB5Mj1cIjEwMCVcIlxuICAgICAgICBpZD1cInN0cmVhbS1jaGF0LWxvYWRpbmctY2lyY2xlXCJcbiAgICAgID5cbiAgICAgICAgPHN0b3Agb2Zmc2V0PVwiMCVcIiBzdG9wLWNvbG9yPVwiI0ZGRlwiIHN0b3Atb3BhY2l0eT1cIjBcIiAvPlxuICAgICAgICA8c3RvcCBkYXRhLXRlc3RpZD1cInN0b3AtY29sb3JcIiBvZmZzZXQ9XCIxMDAlXCIgc3RvcC1vcGFjaXR5PVwiMVwiIC8+XG4gICAgICA8L2xpbmVhckdyYWRpZW50PlxuICAgIDwvZGVmcz5cbiAgICA8cGF0aFxuICAgICAgZD1cIk0yLjUxOCAyMy4zMjFsMS42NjQtMS4xMUExMi45ODggMTIuOTg4IDAgMCAwIDE1IDI4YzcuMTggMCAxMy01LjgyIDEzLTEzUzIyLjE4IDIgMTUgMlYwYzguMjg0IDAgMTUgNi43MTYgMTUgMTUgMCA4LjI4NC02LjcxNiAxNS0xNSAxNS01LjIwNiAwLTkuNzkyLTIuNjUyLTEyLjQ4Mi02LjY3OXpcIlxuICAgICAgZmlsbFJ1bGU9XCJldmVub2RkXCJcbiAgICAgIGZpbGw9XCJ1cmwoI3N0cmVhbS1jaGF0LWxvYWRpbmctY2lyY2xlKVwiXG4gICAgLz5cbiAgPC9zdmc+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Component } from '@angular/core';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
|
-
import * as i1 from "
|
|
3
|
+
import * as i1 from "../../custom-templates.service";
|
|
4
4
|
import * as i2 from "@angular/common";
|
|
5
5
|
import * as i3 from "../loading-indicator/loading-indicator.component";
|
|
6
6
|
/**
|
|
@@ -17,4 +17,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
|
|
|
17
17
|
type: Component,
|
|
18
18
|
args: [{ selector: 'stream-loading-indicator-placeholder', template: "<ng-template #defaultLoadingIndicator>\n <stream-loading-indicator></stream-loading-indicator>\n</ng-template>\n<ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.loadingIndicatorTemplate$ | async) ||\n defaultLoadingIndicator\n \"\n></ng-container>\n" }]
|
|
19
19
|
}], ctorParameters: function () { return [{ type: i1.CustomTemplatesService }]; } });
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGluZy1pbmRpY2F0b3ItcGxhY2Vob2xkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL2ljb24vbG9hZGluZy1pbmRpY2F0b3ItcGxhY2Vob2xkZXIvbG9hZGluZy1pbmRpY2F0b3ItcGxhY2Vob2xkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL2ljb24vbG9hZGluZy1pbmRpY2F0b3ItcGxhY2Vob2xkZXIvbG9hZGluZy1pbmRpY2F0b3ItcGxhY2Vob2xkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFHMUM7O0dBRUc7QUFNSCxNQUFNLE9BQU8sb0NBQW9DO0lBQy9DLFlBQW1CLHNCQUE4QztRQUE5QywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO0lBQUcsQ0FBQzs7aUlBRDFELG9DQUFvQztxSEFBcEMsb0NBQW9DLDRFQ1hqRCxrUkFTQTsyRkRFYSxvQ0FBb0M7a0JBTGhELFNBQVM7K0JBQ0Usc0NBQXNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDdXN0b21UZW1wbGF0ZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY3VzdG9tLXRlbXBsYXRlcy5zZXJ2aWNlJztcblxuLyoqXG4gKiBUaGUgYExvYWRpbmdJbmZpY2F0b3JQbGFjZWhvbGRlcmAgY29tcG9uZW50IGRpc3BsYXlzIHRoZSBbZGVmYXVsdCBsb2FkaW5nIGluZGljYXRvcl0oLi9Mb2FkaW5nSW5kaWNhdG9yQ29tcG9uZW50Lm1keCkgdW5sZXNzIGEgW2N1c3RvbSB0ZW1wbGF0ZV0oLi4vc2VydmljZXMvQ3VzdG9tVGVtcGxhdGVzU2VydmljZS5tZHgpIGlzIHByb3ZpZGVkLiBUaGlzIGNvbXBvbmVudCBpcyB1c2VkIGJ5IHRoZSBTREsgaW50ZXJuYWxseSwgeW91IGxpa2VseSB3b24ndCBuZWVkIHRvIHVzZSBpdC5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3RyZWFtLWxvYWRpbmctaW5kaWNhdG9yLXBsYWNlaG9sZGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xvYWRpbmctaW5kaWNhdG9yLXBsYWNlaG9sZGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVzOiBbXSxcbn0pXG5leHBvcnQgY2xhc3MgTG9hZGluZ0luZGljYXRvclBsYWNlaG9sZGVyQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHVibGljIGN1c3RvbVRlbXBsYXRlc1NlcnZpY2U6IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2UpIHt9XG59XG4iLCI8bmctdGVtcGxhdGUgI2RlZmF1bHRMb2FkaW5nSW5kaWNhdG9yPlxuICA8c3RyZWFtLWxvYWRpbmctaW5kaWNhdG9yPjwvc3RyZWFtLWxvYWRpbmctaW5kaWNhdG9yPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy1jb250YWluZXJcbiAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAoY3VzdG9tVGVtcGxhdGVzU2VydmljZS5sb2FkaW5nSW5kaWNhdG9yVGVtcGxhdGUkIHwgYXN5bmMpIHx8XG4gICAgZGVmYXVsdExvYWRpbmdJbmRpY2F0b3JcbiAgXCJcbj48L25nLWNvbnRhaW5lcj5cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMtc2FmYXJpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL2lzLXNhZmFyaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsZ0NBQWdDLENBQUMsSUFBSSxDQUMzRCxTQUFTLENBQUMsU0FBUyxDQUNwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGlzU2FmYXJpID0gL14oKD8hY2hyb21lfGFuZHJvaWQpLikqc2FmYXJpL2kudGVzdChcbiAgbmF2aWdhdG9yLnVzZXJBZ2VudFxuKTtcbiJdfQ==
|