stream-chat-angular 2.19.0 → 3.0.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/assets/version.d.ts +1 -1
  2. package/bundles/stream-chat-angular.umd.js +374 -365
  3. package/bundles/stream-chat-angular.umd.js.map +1 -1
  4. package/esm2015/assets/version.js +2 -2
  5. package/esm2015/lib/channel-header/channel-header.component.js +26 -9
  6. package/esm2015/lib/channel-list/channel-list.component.js +23 -13
  7. package/esm2015/lib/channel.service.js +71 -59
  8. package/esm2015/lib/chat-client.service.js +26 -2
  9. package/esm2015/lib/custom-templates.service.js +55 -0
  10. package/esm2015/lib/message/message.component.js +32 -23
  11. package/esm2015/lib/message-actions-box/message-actions-box.component.js +28 -12
  12. package/esm2015/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.js +13 -13
  13. package/esm2015/lib/message-input/message-input-config.service.js +1 -1
  14. package/esm2015/lib/message-input/message-input.component.js +26 -45
  15. package/esm2015/lib/message-input/textarea.directive.js +2 -18
  16. package/esm2015/lib/message-input/textarea.interface.js +1 -1
  17. package/esm2015/lib/message-list/message-list.component.js +32 -93
  18. package/esm2015/lib/notification/notification.component.js +1 -1
  19. package/esm2015/lib/notification-list/notification-list.component.js +7 -4
  20. package/esm2015/lib/notification.service.js +34 -18
  21. package/esm2015/lib/types.js +1 -1
  22. package/esm2015/public-api.js +2 -1
  23. package/fesm2015/stream-chat-angular.js +325 -270
  24. package/fesm2015/stream-chat-angular.js.map +1 -1
  25. package/lib/channel-header/channel-header.component.d.ts +12 -2
  26. package/lib/channel-list/channel-list.component.d.ts +12 -9
  27. package/lib/channel.service.d.ts +13 -13
  28. package/lib/chat-client.service.d.ts +7 -1
  29. package/lib/custom-templates.service.d.ts +48 -0
  30. package/lib/message/message.component.d.ts +13 -28
  31. package/lib/message-actions-box/message-actions-box.component.d.ts +12 -13
  32. package/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.d.ts +6 -10
  33. package/lib/message-input/message-input-config.service.d.ts +0 -19
  34. package/lib/message-input/message-input.component.d.ts +11 -25
  35. package/lib/message-input/textarea.directive.d.ts +2 -5
  36. package/lib/message-input/textarea.interface.d.ts +1 -4
  37. package/lib/message-list/message-list.component.d.ts +10 -34
  38. package/lib/notification/notification.component.d.ts +1 -1
  39. package/lib/notification-list/notification-list.component.d.ts +6 -2
  40. package/lib/notification.service.d.ts +14 -13
  41. package/lib/types.d.ts +44 -1
  42. package/package.json +1 -1
  43. package/public-api.d.ts +1 -0
  44. package/src/assets/version.ts +1 -1
@@ -1,2 +1,2 @@
1
- export const version = '2.19.0';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2Fzc2V0cy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgdmVyc2lvbiA9ICcyLjE5LjAnO1xuIl19
1
+ export const version = '3.0.0-beta.2';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2Fzc2V0cy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgdmVyc2lvbiA9ICczLjAuMC1iZXRhLjInO1xuIl19
@@ -1,17 +1,22 @@
1
- import { Component } from '@angular/core';
1
+ import { Component, } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
3
  import * as i1 from "../channel.service";
4
4
  import * as i2 from "../channel-list/channel-list-toggle.service";
5
- import * as i3 from "../icon/icon.component";
6
- import * as i4 from "../avatar/avatar.component";
7
- import * as i5 from "@ngx-translate/core";
5
+ import * as i3 from "../custom-templates.service";
6
+ import * as i4 from "../icon/icon.component";
7
+ import * as i5 from "../avatar/avatar.component";
8
+ import * as i6 from "@angular/common";
9
+ import * as i7 from "@ngx-translate/core";
8
10
  /**
9
11
  * The `ChannelHeader` component displays the avatar and name of the currently active channel along with member and watcher information. You can read about [the difference between members and watchers](https://getstream.io/chat/docs/javascript/watch_channel/?language=javascript#watchers-vs-members) in the platform documentation. Please note that number of watchers is only displayed if the user has [`connect-events` capability](https://getstream.io/chat/docs/javascript/channel_capabilities/?language=javascript)
10
12
  */
11
13
  export class ChannelHeaderComponent {
12
- constructor(channelService, channelListToggleService) {
14
+ constructor(channelService, channelListToggleService, customTemplatesService, cdRef) {
13
15
  this.channelService = channelService;
14
16
  this.channelListToggleService = channelListToggleService;
17
+ this.customTemplatesService = customTemplatesService;
18
+ this.cdRef = cdRef;
19
+ this.subscriptions = [];
15
20
  this.channelService.activeChannel$.subscribe((c) => {
16
21
  var _a, _b;
17
22
  this.activeChannel = c;
@@ -23,10 +28,22 @@ export class ChannelHeaderComponent {
23
28
  capabilities.indexOf('connect-events') !== -1;
24
29
  });
25
30
  }
31
+ ngOnInit() {
32
+ this.subscriptions.push(this.customTemplatesService.channelActionsTemplate$.subscribe((template) => {
33
+ this.channelActionsTemplate = template;
34
+ this.cdRef.detectChanges();
35
+ }));
36
+ }
37
+ ngOnDestroy() {
38
+ this.subscriptions.forEach((s) => s.unsubscribe());
39
+ }
26
40
  toggleMenu(event) {
27
41
  event.stopPropagation();
28
42
  this.channelListToggleService.toggle();
29
43
  }
44
+ getChannelActionsContext() {
45
+ return { channel: this.activeChannel };
46
+ }
30
47
  get memberCountParam() {
31
48
  var _a, _b;
32
49
  return { memberCount: ((_b = (_a = this.activeChannel) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.member_count) || 0 };
@@ -36,8 +53,8 @@ export class ChannelHeaderComponent {
36
53
  return { watcherCount: ((_b = (_a = this.activeChannel) === null || _a === void 0 ? void 0 : _a.state) === null || _b === void 0 ? void 0 : _b.watcher_count) || 0 };
37
54
  }
38
55
  }
39
- ChannelHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: ChannelHeaderComponent, deps: [{ token: i1.ChannelService }, { token: i2.ChannelListToggleService }], target: i0.ɵɵFactoryTarget.Component });
40
- ChannelHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: ChannelHeaderComponent, selector: "stream-channel-header", ngImport: i0, template: "<div class=\"str-chat__header-livestream\">\n <div\n class=\"str-chat__header-hamburger\"\n (click)=\"toggleMenu($event)\"\n (keyup.enter)=\"toggleMenu($event)\"\n >\n <stream-icon icon=\"menu\"></stream-icon>\n </div>\n <stream-avatar\n imageUrl=\"{{ activeChannel?.data?.image }}\"\n name=\"{{ activeChannel?.data?.name }}\"\n ></stream-avatar>\n <div class=\"str-chat__header-livestream-left\">\n <p data-testid=\"name\" class=\"str-chat__header-livestream-left--title\">\n {{ activeChannel?.data?.name }}\n </p>\n <p data-testid=\"info\" class=\"str-chat__header-livestream-left--members\">\n {{'streamChat.{{ memberCount }} members' | translate:memberCountParam}}\n {{canReceiveConnectEvents ? ('streamChat.{{ watcherCount }} online' |\n translate:watcherCountParam) : ''}}\n </p>\n </div>\n</div>\n", components: [{ type: i3.IconComponent, selector: "stream-icon", inputs: ["icon", "size"] }, { type: i4.AvatarComponent, selector: "stream-avatar", inputs: ["name", "imageUrl", "size"] }], pipes: { "translate": i5.TranslatePipe } });
56
+ ChannelHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: ChannelHeaderComponent, deps: [{ token: i1.ChannelService }, { token: i2.ChannelListToggleService }, { token: i3.CustomTemplatesService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
57
+ ChannelHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: ChannelHeaderComponent, selector: "stream-channel-header", ngImport: i0, template: "<div class=\"str-chat__header-livestream\">\n <div\n class=\"str-chat__header-hamburger\"\n (click)=\"toggleMenu($event)\"\n (keyup.enter)=\"toggleMenu($event)\"\n >\n <stream-icon icon=\"menu\"></stream-icon>\n </div>\n <stream-avatar\n imageUrl=\"{{ activeChannel?.data?.image }}\"\n name=\"{{ activeChannel?.data?.name }}\"\n ></stream-avatar>\n <div class=\"str-chat__header-livestream-left\">\n <p data-testid=\"name\" class=\"str-chat__header-livestream-left--title\">\n {{ activeChannel?.data?.name }}\n </p>\n <p data-testid=\"info\" class=\"str-chat__header-livestream-left--members\">\n {{'streamChat.{{ memberCount }} members' | translate:memberCountParam}}\n {{canReceiveConnectEvents ? ('streamChat.{{ watcherCount }} online' |\n translate:watcherCountParam) : ''}}\n </p>\n </div>\n <ng-container *ngIf=\"channelActionsTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n channelActionsTemplate;\n context: getChannelActionsContext()\n \"\n ></ng-container>\n </ng-container>\n</div>\n", components: [{ type: i4.IconComponent, selector: "stream-icon", inputs: ["icon", "size"] }, { type: i5.AvatarComponent, selector: "stream-avatar", inputs: ["name", "imageUrl", "size"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "translate": i7.TranslatePipe } });
41
58
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: ChannelHeaderComponent, decorators: [{
42
59
  type: Component,
43
60
  args: [{
@@ -45,5 +62,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImpor
45
62
  templateUrl: './channel-header.component.html',
46
63
  styles: [],
47
64
  }]
48
- }], ctorParameters: function () { return [{ type: i1.ChannelService }, { type: i2.ChannelListToggleService }]; } });
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbm5lbC1oZWFkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL2NoYW5uZWwtaGVhZGVyL2NoYW5uZWwtaGVhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9jaGFubmVsLWhlYWRlci9jaGFubmVsLWhlYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7O0FBSzFDOztHQUVHO0FBTUgsTUFBTSxPQUFPLHNCQUFzQjtJQUlqQyxZQUNVLGNBQThCLEVBQzlCLHdCQUFrRDtRQURsRCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUUxRCxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTs7WUFDakQsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7WUFDdkIsTUFBTSxZQUFZLEdBQUcsTUFBQSxNQUFBLElBQUksQ0FBQyxhQUFhLDBDQUFFLElBQUksMENBQ3pDLGdCQUE0QixDQUFDO1lBQ2pDLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ2pCLE9BQU87YUFDUjtZQUNELElBQUksQ0FBQyx1QkFBdUI7Z0JBQzFCLFlBQVksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNsRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBWTtRQUNyQixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxJQUFJLGdCQUFnQjs7UUFDbEIsT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFBLE1BQUEsTUFBQSxJQUFJLENBQUMsYUFBYSwwQ0FBRSxJQUFJLDBDQUFFLFlBQVksS0FBSSxDQUFDLEVBQUUsQ0FBQztJQUN0RSxDQUFDO0lBRUQsSUFBSSxpQkFBaUI7O1FBQ25CLE9BQU8sRUFBRSxZQUFZLEVBQUUsQ0FBQSxNQUFBLE1BQUEsSUFBSSxDQUFDLGFBQWEsMENBQUUsS0FBSywwQ0FBRSxhQUFhLEtBQUksQ0FBQyxFQUFFLENBQUM7SUFDekUsQ0FBQzs7bUhBL0JVLHNCQUFzQjt1R0FBdEIsc0JBQXNCLDZEQ2JuQywrMUJBdUJBOzJGRFZhLHNCQUFzQjtrQkFMbEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsdUJBQXVCO29CQUNqQyxXQUFXLEVBQUUsaUNBQWlDO29CQUM5QyxNQUFNLEVBQUUsRUFBRTtpQkFDWCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2hhbm5lbCB9IGZyb20gJ3N0cmVhbS1jaGF0JztcbmltcG9ydCB7IENoYW5uZWxMaXN0VG9nZ2xlU2VydmljZSB9IGZyb20gJy4uL2NoYW5uZWwtbGlzdC9jaGFubmVsLWxpc3QtdG9nZ2xlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhbm5lbFNlcnZpY2UgfSBmcm9tICcuLi9jaGFubmVsLnNlcnZpY2UnO1xuXG4vKipcbiAqIFRoZSBgQ2hhbm5lbEhlYWRlcmAgY29tcG9uZW50IGRpc3BsYXlzIHRoZSBhdmF0YXIgYW5kIG5hbWUgb2YgdGhlIGN1cnJlbnRseSBhY3RpdmUgY2hhbm5lbCBhbG9uZyB3aXRoIG1lbWJlciBhbmQgd2F0Y2hlciBpbmZvcm1hdGlvbi4gWW91IGNhbiByZWFkIGFib3V0IFt0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIG1lbWJlcnMgYW5kIHdhdGNoZXJzXShodHRwczovL2dldHN0cmVhbS5pby9jaGF0L2RvY3MvamF2YXNjcmlwdC93YXRjaF9jaGFubmVsLz9sYW5ndWFnZT1qYXZhc2NyaXB0I3dhdGNoZXJzLXZzLW1lbWJlcnMpIGluIHRoZSBwbGF0Zm9ybSBkb2N1bWVudGF0aW9uLiBQbGVhc2Ugbm90ZSB0aGF0IG51bWJlciBvZiB3YXRjaGVycyBpcyBvbmx5IGRpc3BsYXllZCBpZiB0aGUgdXNlciBoYXMgW2Bjb25uZWN0LWV2ZW50c2AgY2FwYWJpbGl0eV0oaHR0cHM6Ly9nZXRzdHJlYW0uaW8vY2hhdC9kb2NzL2phdmFzY3JpcHQvY2hhbm5lbF9jYXBhYmlsaXRpZXMvP2xhbmd1YWdlPWphdmFzY3JpcHQpXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N0cmVhbS1jaGFubmVsLWhlYWRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGFubmVsLWhlYWRlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlczogW10sXG59KVxuZXhwb3J0IGNsYXNzIENoYW5uZWxIZWFkZXJDb21wb25lbnQge1xuICBhY3RpdmVDaGFubmVsOiBDaGFubmVsIHwgdW5kZWZpbmVkO1xuICBjYW5SZWNlaXZlQ29ubmVjdEV2ZW50czogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNoYW5uZWxTZXJ2aWNlOiBDaGFubmVsU2VydmljZSxcbiAgICBwcml2YXRlIGNoYW5uZWxMaXN0VG9nZ2xlU2VydmljZTogQ2hhbm5lbExpc3RUb2dnbGVTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuY2hhbm5lbFNlcnZpY2UuYWN0aXZlQ2hhbm5lbCQuc3Vic2NyaWJlKChjKSA9PiB7XG4gICAgICB0aGlzLmFjdGl2ZUNoYW5uZWwgPSBjO1xuICAgICAgY29uc3QgY2FwYWJpbGl0aWVzID0gdGhpcy5hY3RpdmVDaGFubmVsPy5kYXRhXG4gICAgICAgID8ub3duX2NhcGFiaWxpdGllcyBhcyBzdHJpbmdbXTtcbiAgICAgIGlmICghY2FwYWJpbGl0aWVzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2FuUmVjZWl2ZUNvbm5lY3RFdmVudHMgPVxuICAgICAgICBjYXBhYmlsaXRpZXMuaW5kZXhPZignY29ubmVjdC1ldmVudHMnKSAhPT0gLTE7XG4gICAgfSk7XG4gIH1cblxuICB0b2dnbGVNZW51KGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuY2hhbm5lbExpc3RUb2dnbGVTZXJ2aWNlLnRvZ2dsZSgpO1xuICB9XG5cbiAgZ2V0IG1lbWJlckNvdW50UGFyYW0oKSB7XG4gICAgcmV0dXJuIHsgbWVtYmVyQ291bnQ6IHRoaXMuYWN0aXZlQ2hhbm5lbD8uZGF0YT8ubWVtYmVyX2NvdW50IHx8IDAgfTtcbiAgfVxuXG4gIGdldCB3YXRjaGVyQ291bnRQYXJhbSgpIHtcbiAgICByZXR1cm4geyB3YXRjaGVyQ291bnQ6IHRoaXMuYWN0aXZlQ2hhbm5lbD8uc3RhdGU/LndhdGNoZXJfY291bnQgfHwgMCB9O1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX2hlYWRlci1saXZlc3RyZWFtXCI+XG4gIDxkaXZcbiAgICBjbGFzcz1cInN0ci1jaGF0X19oZWFkZXItaGFtYnVyZ2VyXCJcbiAgICAoY2xpY2spPVwidG9nZ2xlTWVudSgkZXZlbnQpXCJcbiAgICAoa2V5dXAuZW50ZXIpPVwidG9nZ2xlTWVudSgkZXZlbnQpXCJcbiAgPlxuICAgIDxzdHJlYW0taWNvbiBpY29uPVwibWVudVwiPjwvc3RyZWFtLWljb24+XG4gIDwvZGl2PlxuICA8c3RyZWFtLWF2YXRhclxuICAgIGltYWdlVXJsPVwie3sgYWN0aXZlQ2hhbm5lbD8uZGF0YT8uaW1hZ2UgfX1cIlxuICAgIG5hbWU9XCJ7eyBhY3RpdmVDaGFubmVsPy5kYXRhPy5uYW1lIH19XCJcbiAgPjwvc3RyZWFtLWF2YXRhcj5cbiAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19oZWFkZXItbGl2ZXN0cmVhbS1sZWZ0XCI+XG4gICAgPHAgZGF0YS10ZXN0aWQ9XCJuYW1lXCIgY2xhc3M9XCJzdHItY2hhdF9faGVhZGVyLWxpdmVzdHJlYW0tbGVmdC0tdGl0bGVcIj5cbiAgICAgIHt7IGFjdGl2ZUNoYW5uZWw/LmRhdGE/Lm5hbWUgfX1cbiAgICA8L3A+XG4gICAgPHAgZGF0YS10ZXN0aWQ9XCJpbmZvXCIgY2xhc3M9XCJzdHItY2hhdF9faGVhZGVyLWxpdmVzdHJlYW0tbGVmdC0tbWVtYmVyc1wiPlxuICAgICAge3snc3RyZWFtQ2hhdC57eyBtZW1iZXJDb3VudCB9fSBtZW1iZXJzJyB8IHRyYW5zbGF0ZTptZW1iZXJDb3VudFBhcmFtfX1cbiAgICAgIHt7Y2FuUmVjZWl2ZUNvbm5lY3RFdmVudHMgPyAoJ3N0cmVhbUNoYXQue3sgd2F0Y2hlckNvdW50IH19IG9ubGluZScgfFxuICAgICAgdHJhbnNsYXRlOndhdGNoZXJDb3VudFBhcmFtKSA6ICcnfX1cbiAgICA8L3A+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
65
+ }], ctorParameters: function () { return [{ type: i1.ChannelService }, { type: i2.ChannelListToggleService }, { type: i3.CustomTemplatesService }, { type: i0.ChangeDetectorRef }]; } });
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbm5lbC1oZWFkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL2NoYW5uZWwtaGVhZGVyL2NoYW5uZWwtaGVhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9jaGFubmVsLWhlYWRlci9jaGFubmVsLWhlYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxHQUlWLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7QUFRdkI7O0dBRUc7QUFNSCxNQUFNLE9BQU8sc0JBQXNCO0lBTWpDLFlBQ1UsY0FBOEIsRUFDOUIsd0JBQWtELEVBQ2xELHNCQUE4QyxFQUM5QyxLQUF3QjtRQUh4QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBTjFCLGtCQUFhLEdBQW1CLEVBQUUsQ0FBQztRQVF6QyxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTs7WUFDakQsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7WUFDdkIsTUFBTSxZQUFZLEdBQUcsTUFBQSxNQUFBLElBQUksQ0FBQyxhQUFhLDBDQUFFLElBQUksMENBQ3pDLGdCQUE0QixDQUFDO1lBQ2pDLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ2pCLE9BQU87YUFDUjtZQUNELElBQUksQ0FBQyx1QkFBdUI7Z0JBQzFCLFlBQVksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNsRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ3JCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLENBQzNELENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDWCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsUUFBUSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDN0IsQ0FBQyxDQUNGLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxVQUFVLENBQUMsS0FBWTtRQUNyQixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFFRCx3QkFBd0I7UUFDdEIsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYyxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVELElBQUksZ0JBQWdCOztRQUNsQixPQUFPLEVBQUUsV0FBVyxFQUFFLENBQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxhQUFhLDBDQUFFLElBQUksMENBQUUsWUFBWSxLQUFJLENBQUMsRUFBRSxDQUFDO0lBQ3RFLENBQUM7SUFFRCxJQUFJLGlCQUFpQjs7UUFDbkIsT0FBTyxFQUFFLFlBQVksRUFBRSxDQUFBLE1BQUEsTUFBQSxJQUFJLENBQUMsYUFBYSwwQ0FBRSxLQUFLLDBDQUFFLGFBQWEsS0FBSSxDQUFDLEVBQUUsQ0FBQztJQUN6RSxDQUFDOzttSEFyRFUsc0JBQXNCO3VHQUF0QixzQkFBc0IsNkRDdEJuQyxra0NBK0JBOzJGRFRhLHNCQUFzQjtrQkFMbEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsdUJBQXVCO29CQUNqQyxXQUFXLEVBQUUsaUNBQWlDO29CQUM5QyxNQUFNLEVBQUUsRUFBRTtpQkFDWCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBUZW1wbGF0ZVJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENoYW5uZWwgfSBmcm9tICdzdHJlYW0tY2hhdCc7XG5pbXBvcnQgeyBDaGFubmVsTGlzdFRvZ2dsZVNlcnZpY2UgfSBmcm9tICcuLi9jaGFubmVsLWxpc3QvY2hhbm5lbC1saXN0LXRvZ2dsZS5zZXJ2aWNlJztcbmltcG9ydCB7IENoYW5uZWxTZXJ2aWNlIH0gZnJvbSAnLi4vY2hhbm5lbC5zZXJ2aWNlJztcbmltcG9ydCB7IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2UgfSBmcm9tICcuLi9jdXN0b20tdGVtcGxhdGVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhbm5lbEFjdGlvbnNDb250ZXh0IH0gZnJvbSAnLi4vdHlwZXMnO1xuXG4vKipcbiAqIFRoZSBgQ2hhbm5lbEhlYWRlcmAgY29tcG9uZW50IGRpc3BsYXlzIHRoZSBhdmF0YXIgYW5kIG5hbWUgb2YgdGhlIGN1cnJlbnRseSBhY3RpdmUgY2hhbm5lbCBhbG9uZyB3aXRoIG1lbWJlciBhbmQgd2F0Y2hlciBpbmZvcm1hdGlvbi4gWW91IGNhbiByZWFkIGFib3V0IFt0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIG1lbWJlcnMgYW5kIHdhdGNoZXJzXShodHRwczovL2dldHN0cmVhbS5pby9jaGF0L2RvY3MvamF2YXNjcmlwdC93YXRjaF9jaGFubmVsLz9sYW5ndWFnZT1qYXZhc2NyaXB0I3dhdGNoZXJzLXZzLW1lbWJlcnMpIGluIHRoZSBwbGF0Zm9ybSBkb2N1bWVudGF0aW9uLiBQbGVhc2Ugbm90ZSB0aGF0IG51bWJlciBvZiB3YXRjaGVycyBpcyBvbmx5IGRpc3BsYXllZCBpZiB0aGUgdXNlciBoYXMgW2Bjb25uZWN0LWV2ZW50c2AgY2FwYWJpbGl0eV0oaHR0cHM6Ly9nZXRzdHJlYW0uaW8vY2hhdC9kb2NzL2phdmFzY3JpcHQvY2hhbm5lbF9jYXBhYmlsaXRpZXMvP2xhbmd1YWdlPWphdmFzY3JpcHQpXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N0cmVhbS1jaGFubmVsLWhlYWRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGFubmVsLWhlYWRlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlczogW10sXG59KVxuZXhwb3J0IGNsYXNzIENoYW5uZWxIZWFkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIGNoYW5uZWxBY3Rpb25zVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxDaGFubmVsQWN0aW9uc0NvbnRleHQ+O1xuICBhY3RpdmVDaGFubmVsOiBDaGFubmVsIHwgdW5kZWZpbmVkO1xuICBjYW5SZWNlaXZlQ29ubmVjdEV2ZW50czogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2hhbm5lbFNlcnZpY2U6IENoYW5uZWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhbm5lbExpc3RUb2dnbGVTZXJ2aWNlOiBDaGFubmVsTGlzdFRvZ2dsZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjdXN0b21UZW1wbGF0ZXNTZXJ2aWNlOiBDdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmXG4gICkge1xuICAgIHRoaXMuY2hhbm5lbFNlcnZpY2UuYWN0aXZlQ2hhbm5lbCQuc3Vic2NyaWJlKChjKSA9PiB7XG4gICAgICB0aGlzLmFjdGl2ZUNoYW5uZWwgPSBjO1xuICAgICAgY29uc3QgY2FwYWJpbGl0aWVzID0gdGhpcy5hY3RpdmVDaGFubmVsPy5kYXRhXG4gICAgICAgID8ub3duX2NhcGFiaWxpdGllcyBhcyBzdHJpbmdbXTtcbiAgICAgIGlmICghY2FwYWJpbGl0aWVzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2FuUmVjZWl2ZUNvbm5lY3RFdmVudHMgPVxuICAgICAgICBjYXBhYmlsaXRpZXMuaW5kZXhPZignY29ubmVjdC1ldmVudHMnKSAhPT0gLTE7XG4gICAgfSk7XG4gIH1cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmN1c3RvbVRlbXBsYXRlc1NlcnZpY2UuY2hhbm5lbEFjdGlvbnNUZW1wbGF0ZSQuc3Vic2NyaWJlKFxuICAgICAgICAodGVtcGxhdGUpID0+IHtcbiAgICAgICAgICB0aGlzLmNoYW5uZWxBY3Rpb25zVGVtcGxhdGUgPSB0ZW1wbGF0ZTtcbiAgICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaCgocykgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgfVxuXG4gIHRvZ2dsZU1lbnUoZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5jaGFubmVsTGlzdFRvZ2dsZVNlcnZpY2UudG9nZ2xlKCk7XG4gIH1cblxuICBnZXRDaGFubmVsQWN0aW9uc0NvbnRleHQoKTogQ2hhbm5lbEFjdGlvbnNDb250ZXh0IHtcbiAgICByZXR1cm4geyBjaGFubmVsOiB0aGlzLmFjdGl2ZUNoYW5uZWwhIH07XG4gIH1cblxuICBnZXQgbWVtYmVyQ291bnRQYXJhbSgpIHtcbiAgICByZXR1cm4geyBtZW1iZXJDb3VudDogdGhpcy5hY3RpdmVDaGFubmVsPy5kYXRhPy5tZW1iZXJfY291bnQgfHwgMCB9O1xuICB9XG5cbiAgZ2V0IHdhdGNoZXJDb3VudFBhcmFtKCkge1xuICAgIHJldHVybiB7IHdhdGNoZXJDb3VudDogdGhpcy5hY3RpdmVDaGFubmVsPy5zdGF0ZT8ud2F0Y2hlcl9jb3VudCB8fCAwIH07XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJzdHItY2hhdF9faGVhZGVyLWxpdmVzdHJlYW1cIj5cbiAgPGRpdlxuICAgIGNsYXNzPVwic3RyLWNoYXRfX2hlYWRlci1oYW1idXJnZXJcIlxuICAgIChjbGljayk9XCJ0b2dnbGVNZW51KCRldmVudClcIlxuICAgIChrZXl1cC5lbnRlcik9XCJ0b2dnbGVNZW51KCRldmVudClcIlxuICA+XG4gICAgPHN0cmVhbS1pY29uIGljb249XCJtZW51XCI+PC9zdHJlYW0taWNvbj5cbiAgPC9kaXY+XG4gIDxzdHJlYW0tYXZhdGFyXG4gICAgaW1hZ2VVcmw9XCJ7eyBhY3RpdmVDaGFubmVsPy5kYXRhPy5pbWFnZSB9fVwiXG4gICAgbmFtZT1cInt7IGFjdGl2ZUNoYW5uZWw/LmRhdGE/Lm5hbWUgfX1cIlxuICA+PC9zdHJlYW0tYXZhdGFyPlxuICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX2hlYWRlci1saXZlc3RyZWFtLWxlZnRcIj5cbiAgICA8cCBkYXRhLXRlc3RpZD1cIm5hbWVcIiBjbGFzcz1cInN0ci1jaGF0X19oZWFkZXItbGl2ZXN0cmVhbS1sZWZ0LS10aXRsZVwiPlxuICAgICAge3sgYWN0aXZlQ2hhbm5lbD8uZGF0YT8ubmFtZSB9fVxuICAgIDwvcD5cbiAgICA8cCBkYXRhLXRlc3RpZD1cImluZm9cIiBjbGFzcz1cInN0ci1jaGF0X19oZWFkZXItbGl2ZXN0cmVhbS1sZWZ0LS1tZW1iZXJzXCI+XG4gICAgICB7eydzdHJlYW1DaGF0Lnt7IG1lbWJlckNvdW50IH19IG1lbWJlcnMnIHwgdHJhbnNsYXRlOm1lbWJlckNvdW50UGFyYW19fVxuICAgICAge3tjYW5SZWNlaXZlQ29ubmVjdEV2ZW50cyA/ICgnc3RyZWFtQ2hhdC57eyB3YXRjaGVyQ291bnQgfX0gb25saW5lJyB8XG4gICAgICB0cmFuc2xhdGU6d2F0Y2hlckNvdW50UGFyYW0pIDogJyd9fVxuICAgIDwvcD5cbiAgPC9kaXY+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJjaGFubmVsQWN0aW9uc1RlbXBsYXRlXCI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgY2hhbm5lbEFjdGlvbnNUZW1wbGF0ZTtcbiAgICAgICAgY29udGV4dDogZ2V0Q2hhbm5lbEFjdGlvbnNDb250ZXh0KClcbiAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuIl19
@@ -1,32 +1,39 @@
1
1
  import { __awaiter } from "tslib";
2
- import { Component, Input, ViewChild, } from '@angular/core';
2
+ import { Component, ViewChild, } from '@angular/core';
3
3
  import { of } from 'rxjs';
4
4
  import { catchError, map, startWith } from 'rxjs/operators';
5
5
  import * as i0 from "@angular/core";
6
6
  import * as i1 from "../channel.service";
7
7
  import * as i2 from "./channel-list-toggle.service";
8
- import * as i3 from "../channel-preview/channel-preview.component";
9
- import * as i4 from "../loading-indicator/loading-indicator.component";
10
- import * as i5 from "../icon/icon.component";
11
- import * as i6 from "@angular/common";
12
- import * as i7 from "@ngx-translate/core";
8
+ import * as i3 from "../custom-templates.service";
9
+ import * as i4 from "../channel-preview/channel-preview.component";
10
+ import * as i5 from "../loading-indicator/loading-indicator.component";
11
+ import * as i6 from "../icon/icon.component";
12
+ import * as i7 from "@angular/common";
13
+ import * as i8 from "@ngx-translate/core";
13
14
  /**
14
15
  * The `ChannelList` component renders the list of channels.
15
16
  */
16
17
  export class ChannelListComponent {
17
- constructor(channelService, channelListToggleService) {
18
+ constructor(channelService, channelListToggleService, customTemplatesService) {
18
19
  this.channelService = channelService;
19
20
  this.channelListToggleService = channelListToggleService;
21
+ this.customTemplatesService = customTemplatesService;
20
22
  this.isLoadingMoreChannels = false;
23
+ this.subscriptions = [];
21
24
  this.isOpen$ = this.channelListToggleService.isOpen$;
22
25
  this.channels$ = this.channelService.channels$;
23
26
  this.hasMoreChannels$ = this.channelService.hasMoreChannels$;
24
27
  this.isError$ = this.channels$.pipe(map(() => false), catchError(() => of(true)), startWith(false));
25
28
  this.isInitializing$ = this.channels$.pipe(map((channels) => !channels), catchError(() => of(false)));
29
+ this.subscriptions.push(this.customTemplatesService.channelPreviewTemplate$.subscribe((template) => (this.customChannelPreviewTemplate = template)));
26
30
  }
27
31
  ngAfterViewInit() {
28
32
  this.channelListToggleService.setMenuElement(this.container.nativeElement);
29
33
  }
34
+ ngOnDestroy() {
35
+ this.subscriptions.forEach((s) => s.unsubscribe());
36
+ }
30
37
  loadMoreChannels() {
31
38
  return __awaiter(this, void 0, void 0, function* () {
32
39
  this.isLoadingMoreChannels = true;
@@ -40,9 +47,14 @@ export class ChannelListComponent {
40
47
  channelSelected() {
41
48
  this.channelListToggleService.channelSelected();
42
49
  }
50
+ getChannelPreviewContext(channel) {
51
+ return {
52
+ channel,
53
+ };
54
+ }
43
55
  }
44
- ChannelListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: ChannelListComponent, deps: [{ token: i1.ChannelService }, { token: i2.ChannelListToggleService }], target: i0.ɵɵFactoryTarget.Component });
45
- ChannelListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: ChannelListComponent, selector: "stream-channel-list", inputs: { customChannelPreviewTemplate: "customChannelPreviewTemplate" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], ngImport: i0, template: "<div\n #container\n data-testid=\"channel-list-container\"\n class=\"str-chat str-chat-channel-list messaging\"\n [class.str-chat-channel-list--open]=\"(isOpen$ | async) === true\"\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 <p\n data-testid=\"empty-channel-list-indicator\"\n *ngIf=\"!(channels$ | async)?.length\"\n >\n {{ \"streamChat.You have no channels currently\" | translate }}\n </p>\n <ng-container\n *ngFor=\"let channel of channels$ | async; trackBy: trackByChannelId\"\n >\n <ng-container\n *ngIf=\"customChannelPreviewTemplate; else defaultTemplate\"\n >\n <div (click)=\"channelSelected()\" (keyup.enter)=\"channelSelected()\">\n <ng-container\n *ngTemplateOutlet=\"\n customChannelPreviewTemplate;\n context: { channel: channel }\n \"\n ></ng-container>\n </div>\n </ng-container>\n <ng-template #defaultTemplate>\n <stream-channel-preview\n data-testclass=\"channel-preview\"\n [channel]=\"channel\"\n (click)=\"channelSelected()\"\n (keyup.enter)=\"channelSelected()\"\n ></stream-channel-preview>\n </ng-template>\n </ng-container>\n <div\n *ngIf=\"hasMoreChannels$ | async\"\n class=\"str-chat__load-more-button\"\n (click)=\"loadMoreChannels()\"\n (keyup.enter)=\"loadMoreChannels()\"\n data-testid=\"load-more\"\n >\n <button\n class=\"str-chat__load-more-button__button\"\n data-testid=\"load-more-button\"\n [disabled]=\"isLoadingMoreChannels\"\n >\n <span *ngIf=\"!isLoadingMoreChannels; else loadingIndicator\">{{\n \"Load more\" | translate\n }}</span>\n <ng-template #loadingIndicator\n ><stream-loading-indicator></stream-loading-indicator\n ></ng-template>\n </button>\n </div>\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 class=\"str-chat__down-main\">\n <stream-icon icon=\"connection-error\"></stream-icon>\n <h1>{{ \"streamChat.Connection error\" | translate }}</h1>\n <h3>\n {{\n \"streamChat.Error connecting to chat, refresh the page to try again.\"\n | translate\n }}\n </h3>\n </div>\n </div>\n</ng-template>\n\n<ng-template #loadingChannels>\n <div data-testid=\"loading-indicator\" class=\"str-chat__loading-channels\">\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 class=\"str-chat__loading-channels-item\">\n <div class=\"str-chat__loading-channels-avatar\"></div>\n <div class=\"str-chat__loading-channels-meta\">\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", components: [{ type: i3.ChannelPreviewComponent, selector: "stream-channel-preview", inputs: ["channel"] }, { type: i4.LoadingIndicatorComponent, selector: "stream-loading-indicator", inputs: ["size", "color"] }, { type: i5.IconComponent, selector: "stream-icon", inputs: ["icon", "size"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "async": i6.AsyncPipe, "translate": i7.TranslatePipe } });
56
+ ChannelListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: ChannelListComponent, deps: [{ token: i1.ChannelService }, { token: i2.ChannelListToggleService }, { token: i3.CustomTemplatesService }], target: i0.ɵɵFactoryTarget.Component });
57
+ ChannelListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: ChannelListComponent, selector: "stream-channel-list", viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], ngImport: i0, template: "<div\n #container\n data-testid=\"channel-list-container\"\n class=\"str-chat str-chat-channel-list messaging\"\n [class.str-chat-channel-list--open]=\"(isOpen$ | async) === true\"\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 <p\n data-testid=\"empty-channel-list-indicator\"\n *ngIf=\"!(channels$ | async)?.length\"\n >\n {{ \"streamChat.You have no channels currently\" | translate }}\n </p>\n <ng-container\n *ngFor=\"let channel of channels$ | async; trackBy: trackByChannelId\"\n >\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 (click)=\"channelSelected()\" (keyup.enter)=\"channelSelected()\">\n <ng-container\n *ngTemplateOutlet=\"\n customChannelPreviewTemplate || defaultTemplate;\n context: getChannelPreviewContext(channel)\n \"\n ></ng-container>\n </div>\n </ng-container>\n <div\n *ngIf=\"hasMoreChannels$ | async\"\n class=\"str-chat__load-more-button\"\n (click)=\"loadMoreChannels()\"\n (keyup.enter)=\"loadMoreChannels()\"\n data-testid=\"load-more\"\n >\n <button\n class=\"str-chat__load-more-button__button\"\n data-testid=\"load-more-button\"\n [disabled]=\"isLoadingMoreChannels\"\n >\n <span *ngIf=\"!isLoadingMoreChannels; else loadingIndicator\">{{\n \"Load more\" | translate\n }}</span>\n <ng-template #loadingIndicator\n ><stream-loading-indicator></stream-loading-indicator\n ></ng-template>\n </button>\n </div>\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 class=\"str-chat__down-main\">\n <stream-icon icon=\"connection-error\"></stream-icon>\n <h1>{{ \"streamChat.Connection error\" | translate }}</h1>\n <h3>\n {{\n \"streamChat.Error connecting to chat, refresh the page to try again.\"\n | translate\n }}\n </h3>\n </div>\n </div>\n</ng-template>\n\n<ng-template #loadingChannels>\n <div data-testid=\"loading-indicator\" class=\"str-chat__loading-channels\">\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 class=\"str-chat__loading-channels-item\">\n <div class=\"str-chat__loading-channels-avatar\"></div>\n <div class=\"str-chat__loading-channels-meta\">\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", components: [{ type: i4.ChannelPreviewComponent, selector: "stream-channel-preview", inputs: ["channel"] }, { type: i5.LoadingIndicatorComponent, selector: "stream-loading-indicator", inputs: ["size", "color"] }, { type: i6.IconComponent, selector: "stream-icon", inputs: ["icon", "size"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "async": i7.AsyncPipe, "translate": i8.TranslatePipe } });
46
58
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: ChannelListComponent, decorators: [{
47
59
  type: Component,
48
60
  args: [{
@@ -50,10 +62,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImpor
50
62
  templateUrl: './channel-list.component.html',
51
63
  styles: [],
52
64
  }]
53
- }], ctorParameters: function () { return [{ type: i1.ChannelService }, { type: i2.ChannelListToggleService }]; }, propDecorators: { customChannelPreviewTemplate: [{
54
- type: Input
55
- }], container: [{
65
+ }], ctorParameters: function () { return [{ type: i1.ChannelService }, { type: i2.ChannelListToggleService }, { type: i3.CustomTemplatesService }]; }, propDecorators: { container: [{
56
66
  type: ViewChild,
57
67
  args: ['container']
58
68
  }] } });
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbm5lbC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9jaGFubmVsLWxpc3QvY2hhbm5lbC1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9jaGFubmVsLWxpc3QvY2hhbm5lbC1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUwsU0FBUyxFQUVULEtBQUssRUFFTCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7O0FBSzVEOztHQUVHO0FBTUgsTUFBTSxPQUFPLG9CQUFvQjtJQWEvQixZQUNVLGNBQThCLEVBQzlCLHdCQUFrRDtRQURsRCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQVA1RCwwQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFTNUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsT0FBTyxDQUFDO1FBQ3JELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7UUFDL0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUM7UUFDN0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FDakMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUNoQixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQzFCLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FDakIsQ0FBQztRQUNGLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQ3hDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFDNUIsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUM1QixDQUFDO0lBQ0osQ0FBQztJQUNELGVBQWU7UUFDYixJQUFJLENBQUMsd0JBQXdCLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVLLGdCQUFnQjs7WUFDcEIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztZQUNsQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUM3QyxJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBQ3JDLENBQUM7S0FBQTtJQUVELGdCQUFnQixDQUFDLEtBQWEsRUFBRSxJQUFhO1FBQzNDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNsQixDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUNsRCxDQUFDOztpSEE5Q1Usb0JBQW9CO3FHQUFwQixvQkFBb0IsNk9DdEJqQyxxd0hBOEdBOzJGRHhGYSxvQkFBb0I7a0JBTGhDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHFCQUFxQjtvQkFDL0IsV0FBVyxFQUFFLCtCQUErQjtvQkFDNUMsTUFBTSxFQUFFLEVBQUU7aUJBQ1g7NElBS1UsNEJBQTRCO3NCQUFwQyxLQUFLO2dCQU8wQixTQUFTO3NCQUF4QyxTQUFTO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENoYW5uZWwgfSBmcm9tICdzdHJlYW0tY2hhdCc7XG5pbXBvcnQgeyBDaGFubmVsU2VydmljZSB9IGZyb20gJy4uL2NoYW5uZWwuc2VydmljZSc7XG5pbXBvcnQgeyBDaGFubmVsTGlzdFRvZ2dsZVNlcnZpY2UgfSBmcm9tICcuL2NoYW5uZWwtbGlzdC10b2dnbGUuc2VydmljZSc7XG5cbi8qKlxuICogVGhlIGBDaGFubmVsTGlzdGAgY29tcG9uZW50IHJlbmRlcnMgdGhlIGxpc3Qgb2YgY2hhbm5lbHMuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N0cmVhbS1jaGFubmVsLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2hhbm5lbC1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVzOiBbXSxcbn0pXG5leHBvcnQgY2xhc3MgQ2hhbm5lbExpc3RDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBbZGVmYXVsdCBwcmV2aWV3IGNvbXBvbmVudF0oLi9DaGFubmVsUHJldmlld0NvbXBvbmVudC5tZHgpIGlzIHVzZWQuIFRvIGNoYW5nZSB0aGUgY29udGVudHMgb2YgdGhlIGNoYW5uZWwgbGlzdCwgW3Byb3ZpZGUgeW91ciBvd24gY3VzdG9tIHRlbXBsYXRlXSguL0NoYW5uZWxQcmV2aWV3Q29tcG9uZW50Lm1keC8jY3VzdG9taXphdGlvbikuXG4gICAqL1xuICBASW5wdXQoKSBjdXN0b21DaGFubmVsUHJldmlld1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xuICBjaGFubmVscyQ6IE9ic2VydmFibGU8Q2hhbm5lbFtdIHwgdW5kZWZpbmVkPjtcbiAgaXNFcnJvciQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIGlzSW5pdGlhbGl6aW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgaXNMb2FkaW5nTW9yZUNoYW5uZWxzID0gZmFsc2U7XG4gIGlzT3BlbiQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIGhhc01vcmVDaGFubmVscyQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicpIHByaXZhdGUgY29udGFpbmVyITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjaGFubmVsU2VydmljZTogQ2hhbm5lbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjaGFubmVsTGlzdFRvZ2dsZVNlcnZpY2U6IENoYW5uZWxMaXN0VG9nZ2xlU2VydmljZVxuICApIHtcbiAgICB0aGlzLmlzT3BlbiQgPSB0aGlzLmNoYW5uZWxMaXN0VG9nZ2xlU2VydmljZS5pc09wZW4kO1xuICAgIHRoaXMuY2hhbm5lbHMkID0gdGhpcy5jaGFubmVsU2VydmljZS5jaGFubmVscyQ7XG4gICAgdGhpcy5oYXNNb3JlQ2hhbm5lbHMkID0gdGhpcy5jaGFubmVsU2VydmljZS5oYXNNb3JlQ2hhbm5lbHMkO1xuICAgIHRoaXMuaXNFcnJvciQgPSB0aGlzLmNoYW5uZWxzJC5waXBlKFxuICAgICAgbWFwKCgpID0+IGZhbHNlKSxcbiAgICAgIGNhdGNoRXJyb3IoKCkgPT4gb2YodHJ1ZSkpLFxuICAgICAgc3RhcnRXaXRoKGZhbHNlKVxuICAgICk7XG4gICAgdGhpcy5pc0luaXRpYWxpemluZyQgPSB0aGlzLmNoYW5uZWxzJC5waXBlKFxuICAgICAgbWFwKChjaGFubmVscykgPT4gIWNoYW5uZWxzKSxcbiAgICAgIGNhdGNoRXJyb3IoKCkgPT4gb2YoZmFsc2UpKVxuICAgICk7XG4gIH1cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY2hhbm5lbExpc3RUb2dnbGVTZXJ2aWNlLnNldE1lbnVFbGVtZW50KHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgYXN5bmMgbG9hZE1vcmVDaGFubmVscygpIHtcbiAgICB0aGlzLmlzTG9hZGluZ01vcmVDaGFubmVscyA9IHRydWU7XG4gICAgYXdhaXQgdGhpcy5jaGFubmVsU2VydmljZS5sb2FkTW9yZUNoYW5uZWxzKCk7XG4gICAgdGhpcy5pc0xvYWRpbmdNb3JlQ2hhbm5lbHMgPSBmYWxzZTtcbiAgfVxuXG4gIHRyYWNrQnlDaGFubmVsSWQoaW5kZXg6IG51bWJlciwgaXRlbTogQ2hhbm5lbCkge1xuICAgIHJldHVybiBpdGVtLmNpZDtcbiAgfVxuXG4gIGNoYW5uZWxTZWxlY3RlZCgpIHtcbiAgICB0aGlzLmNoYW5uZWxMaXN0VG9nZ2xlU2VydmljZS5jaGFubmVsU2VsZWN0ZWQoKTtcbiAgfVxufVxuIiwiPGRpdlxuICAjY29udGFpbmVyXG4gIGRhdGEtdGVzdGlkPVwiY2hhbm5lbC1saXN0LWNvbnRhaW5lclwiXG4gIGNsYXNzPVwic3RyLWNoYXQgc3RyLWNoYXQtY2hhbm5lbC1saXN0IG1lc3NhZ2luZ1wiXG4gIFtjbGFzcy5zdHItY2hhdC1jaGFubmVsLWxpc3QtLW9wZW5dPVwiKGlzT3BlbiQgfCBhc3luYykgPT09IHRydWVcIlxuPlxuICA8ZGl2XG4gICAgKm5nSWY9XCJcbiAgICAgIChpc0Vycm9yJCB8IGFzeW5jKSA9PT0gZmFsc2UgJiYgKGlzSW5pdGlhbGl6aW5nJCB8IGFzeW5jKSA9PT0gZmFsc2U7XG4gICAgICBlbHNlIHN0YXR1c0luZGljYXRvclxuICAgIFwiXG4gICAgY2xhc3M9XCJzdHItY2hhdF9fY2hhbm5lbC1saXN0LW1lc3NlbmdlclwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX2NoYW5uZWwtbGlzdC1tZXNzZW5nZXJfX21haW5cIj5cbiAgICAgIDxwXG4gICAgICAgIGRhdGEtdGVzdGlkPVwiZW1wdHktY2hhbm5lbC1saXN0LWluZGljYXRvclwiXG4gICAgICAgICpuZ0lmPVwiIShjaGFubmVscyQgfCBhc3luYyk/Lmxlbmd0aFwiXG4gICAgICA+XG4gICAgICAgIHt7IFwic3RyZWFtQ2hhdC5Zb3UgaGF2ZSBubyBjaGFubmVscyBjdXJyZW50bHlcIiB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9wPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdGb3I9XCJsZXQgY2hhbm5lbCBvZiBjaGFubmVscyQgfCBhc3luYzsgdHJhY2tCeTogdHJhY2tCeUNoYW5uZWxJZFwiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdJZj1cImN1c3RvbUNoYW5uZWxQcmV2aWV3VGVtcGxhdGU7IGVsc2UgZGVmYXVsdFRlbXBsYXRlXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImNoYW5uZWxTZWxlY3RlZCgpXCIgKGtleXVwLmVudGVyKT1cImNoYW5uZWxTZWxlY3RlZCgpXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgY3VzdG9tQ2hhbm5lbFByZXZpZXdUZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB7IGNoYW5uZWw6IGNoYW5uZWwgfVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0VGVtcGxhdGU+XG4gICAgICAgICAgPHN0cmVhbS1jaGFubmVsLXByZXZpZXdcbiAgICAgICAgICAgIGRhdGEtdGVzdGNsYXNzPVwiY2hhbm5lbC1wcmV2aWV3XCJcbiAgICAgICAgICAgIFtjaGFubmVsXT1cImNoYW5uZWxcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNoYW5uZWxTZWxlY3RlZCgpXCJcbiAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJjaGFubmVsU2VsZWN0ZWQoKVwiXG4gICAgICAgICAgPjwvc3RyZWFtLWNoYW5uZWwtcHJldmlldz5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cImhhc01vcmVDaGFubmVscyQgfCBhc3luY1wiXG4gICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2xvYWQtbW9yZS1idXR0b25cIlxuICAgICAgICAoY2xpY2spPVwibG9hZE1vcmVDaGFubmVscygpXCJcbiAgICAgICAgKGtleXVwLmVudGVyKT1cImxvYWRNb3JlQ2hhbm5lbHMoKVwiXG4gICAgICAgIGRhdGEtdGVzdGlkPVwibG9hZC1tb3JlXCJcbiAgICAgID5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2xvYWQtbW9yZS1idXR0b25fX2J1dHRvblwiXG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJsb2FkLW1vcmUtYnV0dG9uXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nTW9yZUNoYW5uZWxzXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWlzTG9hZGluZ01vcmVDaGFubmVsczsgZWxzZSBsb2FkaW5nSW5kaWNhdG9yXCI+e3tcbiAgICAgICAgICAgIFwiTG9hZCBtb3JlXCIgfCB0cmFuc2xhdGVcbiAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2xvYWRpbmdJbmRpY2F0b3JcbiAgICAgICAgICAgID48c3RyZWFtLWxvYWRpbmctaW5kaWNhdG9yPjwvc3RyZWFtLWxvYWRpbmctaW5kaWNhdG9yXG4gICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjc3RhdHVzSW5kaWNhdG9yPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNFcnJvciQgfCBhc3luY1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjaGF0RG93blwiPjwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzSW5pdGlhbGl6aW5nJCB8IGFzeW5jXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxvYWRpbmdDaGFubmVsc1wiPjwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY2hhdERvd24+XG4gIDxkaXYgZGF0YS10ZXN0aWQ9XCJjaGF0ZG93bi1jb250YWluZXJcIiBjbGFzcz1cInN0ci1jaGF0X19kb3duXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxvYWRpbmdDaGFubmVsc1wiPjwvbmctY29udGFpbmVyPlxuICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fZG93bi1tYWluXCI+XG4gICAgICA8c3RyZWFtLWljb24gaWNvbj1cImNvbm5lY3Rpb24tZXJyb3JcIj48L3N0cmVhbS1pY29uPlxuICAgICAgPGgxPnt7IFwic3RyZWFtQ2hhdC5Db25uZWN0aW9uIGVycm9yXCIgfCB0cmFuc2xhdGUgfX08L2gxPlxuICAgICAgPGgzPlxuICAgICAgICB7e1xuICAgICAgICAgIFwic3RyZWFtQ2hhdC5FcnJvciBjb25uZWN0aW5nIHRvIGNoYXQsIHJlZnJlc2ggdGhlIHBhZ2UgdG8gdHJ5IGFnYWluLlwiXG4gICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICB9fVxuICAgICAgPC9oMz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2xvYWRpbmdDaGFubmVscz5cbiAgPGRpdiBkYXRhLXRlc3RpZD1cImxvYWRpbmctaW5kaWNhdG9yXCIgY2xhc3M9XCJzdHItY2hhdF9fbG9hZGluZy1jaGFubmVsc1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkaW5nQ2hhbm5lbFwiPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkaW5nQ2hhbm5lbFwiPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkaW5nQ2hhbm5lbFwiPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbG9hZGluZ0NoYW5uZWw+XG4gIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbG9hZGluZy1jaGFubmVscy1pdGVtXCI+XG4gICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19sb2FkaW5nLWNoYW5uZWxzLWF2YXRhclwiPjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbG9hZGluZy1jaGFubmVscy1tZXRhXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX2xvYWRpbmctY2hhbm5lbHMtdXNlcm5hbWVcIj48L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbG9hZGluZy1jaGFubmVscy1zdGF0dXNcIj48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbm5lbC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9jaGFubmVsLWxpc3QvY2hhbm5lbC1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9jaGFubmVsLWxpc3QvY2hhbm5lbC1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUwsU0FBUyxFQUlULFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWMsRUFBRSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUNwRCxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7OztBQU81RDs7R0FFRztBQU1ILE1BQU0sT0FBTyxvQkFBb0I7SUFXL0IsWUFDVSxjQUE4QixFQUM5Qix3QkFBa0QsRUFDbEQsc0JBQThDO1FBRjlDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5Qiw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQTBCO1FBQ2xELDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFWeEQsMEJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBSTlCLGtCQUFhLEdBQW1CLEVBQUUsQ0FBQztRQVFqQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUM7UUFDckQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQztRQUMvQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQztRQUM3RCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUNqQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQ2hCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsRUFDMUIsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUNqQixDQUFDO1FBQ0YsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FDeEMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUM1QixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQzVCLENBQUM7UUFDRixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDckIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLHVCQUF1QixDQUFDLFNBQVMsQ0FDM0QsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLDRCQUE0QixHQUFHLFFBQVEsQ0FBQyxDQUM3RCxDQUNGLENBQUM7SUFDSixDQUFDO0lBQ0QsZUFBZTtRQUNiLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUssZ0JBQWdCOztZQUNwQixJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO1lBQ2xDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzdDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFDckMsQ0FBQztLQUFBO0lBRUQsZ0JBQWdCLENBQUMsS0FBYSxFQUFFLElBQWE7UUFDM0MsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ2xCLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ2xELENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxPQUFnQjtRQUN2QyxPQUFPO1lBQ0wsT0FBTztTQUNSLENBQUM7SUFDSixDQUFDOztpSEE1RFUsb0JBQW9CO3FHQUFwQixvQkFBb0IsbUtDeEJqQyx3bEhBd0dBOzJGRGhGYSxvQkFBb0I7a0JBTGhDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHFCQUFxQjtvQkFDL0IsV0FBVyxFQUFFLCtCQUErQjtvQkFDNUMsTUFBTSxFQUFFLEVBQUU7aUJBQ1g7aUxBVWlDLFNBQVM7c0JBQXhDLFNBQVM7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgT25EZXN0cm95LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgc3RhcnRXaXRoIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ2hhbm5lbCB9IGZyb20gJ3N0cmVhbS1jaGF0JztcbmltcG9ydCB7IENoYW5uZWxTZXJ2aWNlIH0gZnJvbSAnLi4vY2hhbm5lbC5zZXJ2aWNlJztcbmltcG9ydCB7IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2UgfSBmcm9tICcuLi9jdXN0b20tdGVtcGxhdGVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhbm5lbFByZXZpZXdDb250ZXh0IH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgQ2hhbm5lbExpc3RUb2dnbGVTZXJ2aWNlIH0gZnJvbSAnLi9jaGFubmVsLWxpc3QtdG9nZ2xlLnNlcnZpY2UnO1xuXG4vKipcbiAqIFRoZSBgQ2hhbm5lbExpc3RgIGNvbXBvbmVudCByZW5kZXJzIHRoZSBsaXN0IG9mIGNoYW5uZWxzLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdHJlYW0tY2hhbm5lbC1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NoYW5uZWwtbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlczogW10sXG59KVxuZXhwb3J0IGNsYXNzIENoYW5uZWxMaXN0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgY2hhbm5lbHMkOiBPYnNlcnZhYmxlPENoYW5uZWxbXSB8IHVuZGVmaW5lZD47XG4gIGlzRXJyb3IkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBpc0luaXRpYWxpemluZyQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIGlzTG9hZGluZ01vcmVDaGFubmVscyA9IGZhbHNlO1xuICBpc09wZW4kOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBoYXNNb3JlQ2hhbm5lbHMkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBjdXN0b21DaGFubmVsUHJldmlld1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxDaGFubmVsUHJldmlld0NvbnRleHQ+IHwgdW5kZWZpbmVkO1xuICBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuICBAVmlld0NoaWxkKCdjb250YWluZXInKSBwcml2YXRlIGNvbnRhaW5lciE6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2hhbm5lbFNlcnZpY2U6IENoYW5uZWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhbm5lbExpc3RUb2dnbGVTZXJ2aWNlOiBDaGFubmVsTGlzdFRvZ2dsZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjdXN0b21UZW1wbGF0ZXNTZXJ2aWNlOiBDdXN0b21UZW1wbGF0ZXNTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuaXNPcGVuJCA9IHRoaXMuY2hhbm5lbExpc3RUb2dnbGVTZXJ2aWNlLmlzT3BlbiQ7XG4gICAgdGhpcy5jaGFubmVscyQgPSB0aGlzLmNoYW5uZWxTZXJ2aWNlLmNoYW5uZWxzJDtcbiAgICB0aGlzLmhhc01vcmVDaGFubmVscyQgPSB0aGlzLmNoYW5uZWxTZXJ2aWNlLmhhc01vcmVDaGFubmVscyQ7XG4gICAgdGhpcy5pc0Vycm9yJCA9IHRoaXMuY2hhbm5lbHMkLnBpcGUoXG4gICAgICBtYXAoKCkgPT4gZmFsc2UpLFxuICAgICAgY2F0Y2hFcnJvcigoKSA9PiBvZih0cnVlKSksXG4gICAgICBzdGFydFdpdGgoZmFsc2UpXG4gICAgKTtcbiAgICB0aGlzLmlzSW5pdGlhbGl6aW5nJCA9IHRoaXMuY2hhbm5lbHMkLnBpcGUoXG4gICAgICBtYXAoKGNoYW5uZWxzKSA9PiAhY2hhbm5lbHMpLFxuICAgICAgY2F0Y2hFcnJvcigoKSA9PiBvZihmYWxzZSkpXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVzU2VydmljZS5jaGFubmVsUHJldmlld1RlbXBsYXRlJC5zdWJzY3JpYmUoXG4gICAgICAgICh0ZW1wbGF0ZSkgPT4gKHRoaXMuY3VzdG9tQ2hhbm5lbFByZXZpZXdUZW1wbGF0ZSA9IHRlbXBsYXRlKVxuICAgICAgKVxuICAgICk7XG4gIH1cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY2hhbm5lbExpc3RUb2dnbGVTZXJ2aWNlLnNldE1lbnVFbGVtZW50KHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goKHMpID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gIH1cblxuICBhc3luYyBsb2FkTW9yZUNoYW5uZWxzKCkge1xuICAgIHRoaXMuaXNMb2FkaW5nTW9yZUNoYW5uZWxzID0gdHJ1ZTtcbiAgICBhd2FpdCB0aGlzLmNoYW5uZWxTZXJ2aWNlLmxvYWRNb3JlQ2hhbm5lbHMoKTtcbiAgICB0aGlzLmlzTG9hZGluZ01vcmVDaGFubmVscyA9IGZhbHNlO1xuICB9XG5cbiAgdHJhY2tCeUNoYW5uZWxJZChpbmRleDogbnVtYmVyLCBpdGVtOiBDaGFubmVsKSB7XG4gICAgcmV0dXJuIGl0ZW0uY2lkO1xuICB9XG5cbiAgY2hhbm5lbFNlbGVjdGVkKCkge1xuICAgIHRoaXMuY2hhbm5lbExpc3RUb2dnbGVTZXJ2aWNlLmNoYW5uZWxTZWxlY3RlZCgpO1xuICB9XG5cbiAgZ2V0Q2hhbm5lbFByZXZpZXdDb250ZXh0KGNoYW5uZWw6IENoYW5uZWwpOiBDaGFubmVsUHJldmlld0NvbnRleHQge1xuICAgIHJldHVybiB7XG4gICAgICBjaGFubmVsLFxuICAgIH07XG4gIH1cbn1cbiIsIjxkaXZcbiAgI2NvbnRhaW5lclxuICBkYXRhLXRlc3RpZD1cImNoYW5uZWwtbGlzdC1jb250YWluZXJcIlxuICBjbGFzcz1cInN0ci1jaGF0IHN0ci1jaGF0LWNoYW5uZWwtbGlzdCBtZXNzYWdpbmdcIlxuICBbY2xhc3Muc3RyLWNoYXQtY2hhbm5lbC1saXN0LS1vcGVuXT1cIihpc09wZW4kIHwgYXN5bmMpID09PSB0cnVlXCJcbj5cbiAgPGRpdlxuICAgICpuZ0lmPVwiXG4gICAgICAoaXNFcnJvciQgfCBhc3luYykgPT09IGZhbHNlICYmIChpc0luaXRpYWxpemluZyQgfCBhc3luYykgPT09IGZhbHNlO1xuICAgICAgZWxzZSBzdGF0dXNJbmRpY2F0b3JcbiAgICBcIlxuICAgIGNsYXNzPVwic3RyLWNoYXRfX2NoYW5uZWwtbGlzdC1tZXNzZW5nZXJcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19jaGFubmVsLWxpc3QtbWVzc2VuZ2VyX19tYWluXCI+XG4gICAgICA8cFxuICAgICAgICBkYXRhLXRlc3RpZD1cImVtcHR5LWNoYW5uZWwtbGlzdC1pbmRpY2F0b3JcIlxuICAgICAgICAqbmdJZj1cIiEoY2hhbm5lbHMkIHwgYXN5bmMpPy5sZW5ndGhcIlxuICAgICAgPlxuICAgICAgICB7eyBcInN0cmVhbUNoYXQuWW91IGhhdmUgbm8gY2hhbm5lbHMgY3VycmVudGx5XCIgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvcD5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nRm9yPVwibGV0IGNoYW5uZWwgb2YgY2hhbm5lbHMkIHwgYXN5bmM7IHRyYWNrQnk6IHRyYWNrQnlDaGFubmVsSWRcIlxuICAgICAgPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRUZW1wbGF0ZSBsZXQtY2hhbm5lbElucHV0PVwiY2hhbm5lbFwiPlxuICAgICAgICAgIDxzdHJlYW0tY2hhbm5lbC1wcmV2aWV3XG4gICAgICAgICAgICBkYXRhLXRlc3RjbGFzcz1cImNoYW5uZWwtcHJldmlld1wiXG4gICAgICAgICAgICBbY2hhbm5lbF09XCJjaGFubmVsSW5wdXRcIlxuICAgICAgICAgID48L3N0cmVhbS1jaGFubmVsLXByZXZpZXc+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxkaXYgKGNsaWNrKT1cImNoYW5uZWxTZWxlY3RlZCgpXCIgKGtleXVwLmVudGVyKT1cImNoYW5uZWxTZWxlY3RlZCgpXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgY3VzdG9tQ2hhbm5lbFByZXZpZXdUZW1wbGF0ZSB8fCBkZWZhdWx0VGVtcGxhdGU7XG4gICAgICAgICAgICAgIGNvbnRleHQ6IGdldENoYW5uZWxQcmV2aWV3Q29udGV4dChjaGFubmVsKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiaGFzTW9yZUNoYW5uZWxzJCB8IGFzeW5jXCJcbiAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fbG9hZC1tb3JlLWJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJsb2FkTW9yZUNoYW5uZWxzKClcIlxuICAgICAgICAoa2V5dXAuZW50ZXIpPVwibG9hZE1vcmVDaGFubmVscygpXCJcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJsb2FkLW1vcmVcIlxuICAgICAgPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fbG9hZC1tb3JlLWJ1dHRvbl9fYnV0dG9uXCJcbiAgICAgICAgICBkYXRhLXRlc3RpZD1cImxvYWQtbW9yZS1idXR0b25cIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0xvYWRpbmdNb3JlQ2hhbm5lbHNcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCIhaXNMb2FkaW5nTW9yZUNoYW5uZWxzOyBlbHNlIGxvYWRpbmdJbmRpY2F0b3JcIj57e1xuICAgICAgICAgICAgXCJMb2FkIG1vcmVcIiB8IHRyYW5zbGF0ZVxuICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbG9hZGluZ0luZGljYXRvclxuICAgICAgICAgICAgPjxzdHJlYW0tbG9hZGluZy1pbmRpY2F0b3I+PC9zdHJlYW0tbG9hZGluZy1pbmRpY2F0b3JcbiAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNzdGF0dXNJbmRpY2F0b3I+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0Vycm9yJCB8IGFzeW5jXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNoYXREb3duXCI+PC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNJbml0aWFsaXppbmckIHwgYXN5bmNcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9hZGluZ0NoYW5uZWxzXCI+PC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjaGF0RG93bj5cbiAgPGRpdiBkYXRhLXRlc3RpZD1cImNoYXRkb3duLWNvbnRhaW5lclwiIGNsYXNzPVwic3RyLWNoYXRfX2Rvd25cIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9hZGluZ0NoYW5uZWxzXCI+PC9uZy1jb250YWluZXI+XG4gICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19kb3duLW1haW5cIj5cbiAgICAgIDxzdHJlYW0taWNvbiBpY29uPVwiY29ubmVjdGlvbi1lcnJvclwiPjwvc3RyZWFtLWljb24+XG4gICAgICA8aDE+e3sgXCJzdHJlYW1DaGF0LkNvbm5lY3Rpb24gZXJyb3JcIiB8IHRyYW5zbGF0ZSB9fTwvaDE+XG4gICAgICA8aDM+XG4gICAgICAgIHt7XG4gICAgICAgICAgXCJzdHJlYW1DaGF0LkVycm9yIGNvbm5lY3RpbmcgdG8gY2hhdCwgcmVmcmVzaCB0aGUgcGFnZSB0byB0cnkgYWdhaW4uXCJcbiAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgIH19XG4gICAgICA8L2gzPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbG9hZGluZ0NoYW5uZWxzPlxuICA8ZGl2IGRhdGEtdGVzdGlkPVwibG9hZGluZy1pbmRpY2F0b3JcIiBjbGFzcz1cInN0ci1jaGF0X19sb2FkaW5nLWNoYW5uZWxzXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxvYWRpbmdDaGFubmVsXCI+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxvYWRpbmdDaGFubmVsXCI+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxvYWRpbmdDaGFubmVsXCI+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNsb2FkaW5nQ2hhbm5lbD5cbiAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19sb2FkaW5nLWNoYW5uZWxzLWl0ZW1cIj5cbiAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX2xvYWRpbmctY2hhbm5lbHMtYXZhdGFyXCI+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19sb2FkaW5nLWNoYW5uZWxzLW1ldGFcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbG9hZGluZy1jaGFubmVscy11c2VybmFtZVwiPjwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19sb2FkaW5nLWNoYW5uZWxzLXN0YXR1c1wiPjwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=