stream-chat-angular 5.13.0 → 6.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 (165) hide show
  1. package/assets/i18n/en.d.ts +1 -0
  2. package/assets/version.d.ts +1 -1
  3. package/{esm2020 → esm2022}/assets/i18n/en.mjs +2 -1
  4. package/{esm2020 → esm2022}/assets/version.mjs +2 -2
  5. package/{esm2020 → esm2022}/lib/attachment-configuration.service.mjs +4 -4
  6. package/esm2022/lib/attachment-list/attachment-list.component.mjs +212 -0
  7. package/esm2022/lib/attachment-preview-list/attachment-preview-list.component.mjs +55 -0
  8. package/{esm2020 → esm2022}/lib/attachment.service.mjs +5 -5
  9. package/esm2022/lib/avatar/avatar.component.mjs +157 -0
  10. package/{esm2020 → esm2022}/lib/avatar-placeholder/avatar-placeholder.component.mjs +6 -6
  11. package/esm2022/lib/channel/channel.component.mjs +45 -0
  12. package/esm2022/lib/channel-header/channel-header.component.mjs +72 -0
  13. package/esm2022/lib/channel-list/channel-list.component.mjs +50 -0
  14. package/esm2022/lib/channel-preview/channel-preview.component.mjs +150 -0
  15. package/esm2022/lib/channel.service.mjs +1389 -0
  16. package/esm2022/lib/chat-client.service.mjs +227 -0
  17. package/{esm2020 → esm2022}/lib/custom-templates.service.mjs +5 -5
  18. package/{esm2020 → esm2022}/lib/date-parser.service.mjs +5 -5
  19. package/esm2022/lib/file-utils.mjs +35 -0
  20. package/{esm2020 → esm2022}/lib/get-channel-display-text.mjs +1 -1
  21. package/{esm2020 → esm2022}/lib/get-message-translation.mjs +1 -1
  22. package/{esm2020 → esm2022}/lib/icon/icon-placeholder/icon-placeholder.component.mjs +6 -6
  23. package/{esm2020 → esm2022}/lib/icon/icon.component.mjs +5 -5
  24. package/{esm2020 → esm2022}/lib/icon/icon.module.mjs +11 -11
  25. package/{esm2020 → esm2022}/lib/icon/loading-indicator/loading-indicator.component.mjs +5 -5
  26. package/{esm2020 → esm2022}/lib/icon/loading-indicator-placeholder/loading-indicator-placeholder.component.mjs +6 -6
  27. package/{esm2020 → esm2022}/lib/list-users.mjs +1 -1
  28. package/esm2022/lib/message/message.component.mjs +486 -0
  29. package/esm2022/lib/message-actions-box/message-actions-box.component.mjs +120 -0
  30. package/{esm2020 → esm2022}/lib/message-actions.service.mjs +5 -5
  31. package/esm2022/lib/message-bounce-prompt/message-bounce-prompt.component.mjs +71 -0
  32. package/{esm2020 → esm2022}/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.mjs +6 -6
  33. package/{esm2020 → esm2022}/lib/message-input/emoji-input.service.mjs +5 -5
  34. package/{esm2020 → esm2022}/lib/message-input/message-input-config.service.mjs +5 -5
  35. package/esm2022/lib/message-input/message-input.component.mjs +507 -0
  36. package/{esm2020 → esm2022}/lib/message-input/textarea/textarea.component.mjs +5 -5
  37. package/{esm2020 → esm2022}/lib/message-input/textarea.directive.mjs +5 -5
  38. package/{esm2020 → esm2022}/lib/message-input/voice-recorder.service.mjs +5 -5
  39. package/{esm2020 → esm2022}/lib/message-list/group-styles.mjs +1 -1
  40. package/esm2022/lib/message-list/message-list.component.mjs +715 -0
  41. package/{esm2020 → esm2022}/lib/message-preview.mjs +1 -1
  42. package/esm2022/lib/message-reactions/message-reactions.component.mjs +165 -0
  43. package/esm2022/lib/message-reactions-selector/message-reactions-selector.component.mjs +57 -0
  44. package/{esm2020 → esm2022}/lib/message-reactions.service.mjs +5 -5
  45. package/{esm2020 → esm2022}/lib/message-text/message-text.component.mjs +6 -6
  46. package/esm2022/lib/message.service.mjs +43 -0
  47. package/{esm2020 → esm2022}/lib/modal/modal.component.mjs +6 -6
  48. package/{esm2020 → esm2022}/lib/notification/notification.component.mjs +6 -6
  49. package/esm2022/lib/notification-list/notification-list.component.mjs +33 -0
  50. package/{esm2020 → esm2022}/lib/notification.service.mjs +5 -5
  51. package/esm2022/lib/paginated-list/paginated-list.component.mjs +94 -0
  52. package/{esm2020 → esm2022}/lib/parse-date.mjs +1 -1
  53. package/{esm2020 → esm2022}/lib/read-by.mjs +1 -1
  54. package/esm2022/lib/stream-autocomplete-textarea.module.mjs +33 -0
  55. package/{esm2020 → esm2022}/lib/stream-avatar.module.mjs +5 -5
  56. package/{esm2020 → esm2022}/lib/stream-chat.module.mjs +59 -59
  57. package/{esm2020 → esm2022}/lib/stream-i18n.service.mjs +5 -5
  58. package/esm2022/lib/stream-textarea.module.mjs +31 -0
  59. package/{esm2020 → esm2022}/lib/theme.service.mjs +5 -5
  60. package/{esm2020 → esm2022}/lib/thread/thread.component.mjs +6 -6
  61. package/{esm2020 → esm2022}/lib/transliteration.service.mjs +5 -5
  62. package/esm2022/lib/types.mjs +2 -0
  63. package/{esm2020 → esm2022}/lib/user-list/user-list.component.mjs +5 -5
  64. package/esm2022/lib/virtualized-list.service.mjs +273 -0
  65. package/{esm2020 → esm2022}/lib/virtualized-message-list.service.mjs +1 -1
  66. package/{esm2020 → esm2022}/lib/voice-recorder/amplitude-recorder.service.mjs +5 -5
  67. package/{esm2020 → esm2022}/lib/voice-recorder/audio-recorder.service.mjs +5 -5
  68. package/{esm2020 → esm2022}/lib/voice-recorder/media-recorder.mjs +1 -1
  69. package/esm2022/lib/voice-recorder/mp3-transcoder.mjs +61 -0
  70. package/esm2022/lib/voice-recorder/transcoder.service.mjs +121 -0
  71. package/esm2022/lib/voice-recorder/voice-recorder-wavebar/voice-recorder-wavebar.component.mjs +32 -0
  72. package/esm2022/lib/voice-recorder/voice-recorder.component.mjs +80 -0
  73. package/{esm2020 → esm2022}/lib/voice-recorder/voice-recorder.module.mjs +9 -9
  74. package/esm2022/lib/voice-recording/voice-recording-wavebar/voice-recording-wavebar.component.mjs +112 -0
  75. package/esm2022/lib/voice-recording/voice-recording.component.mjs +91 -0
  76. package/{esm2020 → esm2022}/lib/voice-recording/voice-recording.module.mjs +5 -5
  77. package/{esm2020 → esm2022}/lib/wave-form-sampler.mjs +1 -1
  78. package/esm2022/public-api.mjs +82 -0
  79. package/{fesm2020 → fesm2022}/stream-chat-angular.mjs +865 -1140
  80. package/fesm2022/stream-chat-angular.mjs.map +1 -0
  81. package/lib/attachment-list/attachment-list.component.d.ts +2 -5
  82. package/lib/attachment-preview-list/attachment-preview-list.component.d.ts +2 -2
  83. package/lib/attachment.service.d.ts +1 -1
  84. package/lib/avatar/avatar.component.d.ts +4 -4
  85. package/lib/avatar-placeholder/avatar-placeholder.component.d.ts +1 -1
  86. package/lib/channel-list/channel-list.component.d.ts +1 -0
  87. package/lib/channel-preview/channel-preview.component.d.ts +3 -4
  88. package/lib/channel.service.d.ts +40 -106
  89. package/lib/chat-client.service.d.ts +1 -4
  90. package/lib/custom-templates.service.d.ts +10 -10
  91. package/lib/icon/icon-placeholder/icon-placeholder.component.d.ts +1 -1
  92. package/lib/icon/icon.component.d.ts +2 -2
  93. package/lib/message/message.component.d.ts +2 -2
  94. package/lib/message-actions-box/message-actions-box.component.d.ts +2 -3
  95. package/lib/message-actions.service.d.ts +1 -1
  96. package/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.d.ts +2 -2
  97. package/lib/message-input/message-input.component.d.ts +2 -2
  98. package/lib/message-input/textarea/textarea.component.d.ts +1 -1
  99. package/lib/message-input/textarea.directive.d.ts +2 -2
  100. package/lib/message-list/group-styles.d.ts +1 -1
  101. package/lib/message-list/message-list.component.d.ts +2 -3
  102. package/lib/message-reactions/message-reactions.component.d.ts +2 -3
  103. package/lib/message-reactions-selector/message-reactions-selector.component.d.ts +1 -2
  104. package/lib/message-text/message-text.component.d.ts +2 -2
  105. package/lib/modal/modal.component.d.ts +1 -1
  106. package/lib/notification/notification.component.d.ts +1 -1
  107. package/lib/notification-list/notification-list.component.d.ts +0 -1
  108. package/lib/paginated-list/paginated-list.component.d.ts +5 -2
  109. package/lib/read-by.d.ts +1 -1
  110. package/lib/types.d.ts +98 -84
  111. package/lib/user-list/user-list.component.d.ts +1 -1
  112. package/lib/voice-recorder/amplitude-recorder.service.d.ts +2 -2
  113. package/lib/voice-recorder/media-recorder.d.ts +2 -2
  114. package/lib/voice-recorder/transcoder.service.d.ts +4 -4
  115. package/lib/voice-recorder/voice-recorder-wavebar/voice-recorder-wavebar.component.d.ts +0 -1
  116. package/lib/voice-recorder/voice-recorder.component.d.ts +2 -2
  117. package/lib/voice-recording/voice-recording-wavebar/voice-recording-wavebar.component.d.ts +3 -3
  118. package/lib/voice-recording/voice-recording.component.d.ts +1 -1
  119. package/package.json +15 -21
  120. package/public-api.d.ts +0 -1
  121. package/src/assets/i18n/en.ts +1 -0
  122. package/src/assets/version.ts +1 -1
  123. package/esm2020/lib/attachment-list/attachment-list.component.mjs +0 -224
  124. package/esm2020/lib/attachment-preview-list/attachment-preview-list.component.mjs +0 -55
  125. package/esm2020/lib/avatar/avatar.component.mjs +0 -160
  126. package/esm2020/lib/channel/channel.component.mjs +0 -45
  127. package/esm2020/lib/channel-header/channel-header.component.mjs +0 -72
  128. package/esm2020/lib/channel-list/channel-list.component.mjs +0 -47
  129. package/esm2020/lib/channel-preview/channel-preview.component.mjs +0 -155
  130. package/esm2020/lib/channel-query.mjs +0 -77
  131. package/esm2020/lib/channel.service.mjs +0 -1546
  132. package/esm2020/lib/chat-client.service.mjs +0 -238
  133. package/esm2020/lib/file-utils.mjs +0 -35
  134. package/esm2020/lib/message/message.component.mjs +0 -486
  135. package/esm2020/lib/message-actions-box/message-actions-box.component.mjs +0 -123
  136. package/esm2020/lib/message-bounce-prompt/message-bounce-prompt.component.mjs +0 -71
  137. package/esm2020/lib/message-input/message-input.component.mjs +0 -507
  138. package/esm2020/lib/message-list/message-list.component.mjs +0 -717
  139. package/esm2020/lib/message-reactions/message-reactions.component.mjs +0 -168
  140. package/esm2020/lib/message-reactions-selector/message-reactions-selector.component.mjs +0 -61
  141. package/esm2020/lib/message.service.mjs +0 -43
  142. package/esm2020/lib/notification-list/notification-list.component.mjs +0 -36
  143. package/esm2020/lib/paginated-list/paginated-list.component.mjs +0 -94
  144. package/esm2020/lib/stream-autocomplete-textarea.module.mjs +0 -33
  145. package/esm2020/lib/stream-textarea.module.mjs +0 -31
  146. package/esm2020/lib/types.mjs +0 -2
  147. package/esm2020/lib/virtualized-list.service.mjs +0 -271
  148. package/esm2020/lib/voice-recorder/mp3-transcoder.mjs +0 -61
  149. package/esm2020/lib/voice-recorder/transcoder.service.mjs +0 -121
  150. package/esm2020/lib/voice-recorder/voice-recorder-wavebar/voice-recorder-wavebar.component.mjs +0 -35
  151. package/esm2020/lib/voice-recorder/voice-recorder.component.mjs +0 -80
  152. package/esm2020/lib/voice-recording/voice-recording-wavebar/voice-recording-wavebar.component.mjs +0 -112
  153. package/esm2020/lib/voice-recording/voice-recording.component.mjs +0 -91
  154. package/esm2020/public-api.mjs +0 -83
  155. package/fesm2015/stream-chat-angular.mjs +0 -9152
  156. package/fesm2015/stream-chat-angular.mjs.map +0 -1
  157. package/fesm2020/stream-chat-angular.mjs.map +0 -1
  158. package/lib/channel-query.d.ts +0 -26
  159. /package/{esm2020 → esm2022}/lib/format-duration.mjs +0 -0
  160. /package/{esm2020 → esm2022}/lib/injection-tokens.mjs +0 -0
  161. /package/{esm2020 → esm2022}/lib/is-image-attachment.mjs +0 -0
  162. /package/{esm2020 → esm2022}/lib/is-on-separate-date.mjs +0 -0
  163. /package/{esm2020 → esm2022}/lib/is-safari.mjs +0 -0
  164. /package/{esm2020 → esm2022}/lib/message-input/textarea.interface.mjs +0 -0
  165. /package/{esm2020 → esm2022}/stream-chat-angular.mjs +0 -0
@@ -1,160 +0,0 @@
1
- import { Component, Input, } from '@angular/core';
2
- import { filter } from 'rxjs/operators';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "../chat-client.service";
5
- import * as i2 from "@angular/common";
6
- /**
7
- * The `Avatar` component displays the provided image, with fallback to the first letter of the optional name input.
8
- */
9
- export class AvatarComponent {
10
- constructor(chatClientService, ngZone, cdRef) {
11
- this.chatClientService = chatClientService;
12
- this.ngZone = ngZone;
13
- this.cdRef = cdRef;
14
- /**
15
- * If a channel avatar is displayed, and if the channel has exactly two members a green dot is displayed if the other member is online. Set this flag to `false` to turn off this behavior.
16
- */
17
- this.showOnlineIndicator = true;
18
- /**
19
- * If channel/user image isn't provided the initials of the name of the channel/user is shown instead, you can choose how the initals should be computed
20
- */
21
- this.initialsType = 'first-letter-of-first-word';
22
- this.isError = false;
23
- this.isOnline = false;
24
- this.initials = '';
25
- this.isViewInited = false;
26
- this.subscriptions = [];
27
- }
28
- ngOnInit() {
29
- this.subscriptions.push(this.chatClientService.user$.subscribe((u) => {
30
- if (u?.id !== this.userId) {
31
- this.userId = u?.id;
32
- if (this.type || this.channel || this.name) {
33
- this.setInitials();
34
- this.setFallbackChannelImage();
35
- this.updateIsOnlineSubscription();
36
- }
37
- if (this.isViewInited) {
38
- this.cdRef.detectChanges();
39
- }
40
- }
41
- }));
42
- }
43
- ngOnChanges(changes) {
44
- if (changes['channel']) {
45
- this.updateIsOnlineSubscription();
46
- }
47
- if (changes.type || changes.name || changes.channel) {
48
- this.setInitials();
49
- }
50
- if (changes.type || changes.channel) {
51
- this.setFallbackChannelImage();
52
- }
53
- }
54
- ngOnDestroy() {
55
- this.subscriptions.forEach((s) => s.unsubscribe());
56
- }
57
- setFallbackChannelImage() {
58
- if (this.type !== 'channel') {
59
- this.fallbackChannelImage = undefined;
60
- }
61
- else {
62
- const otherMember = this.getOtherMemberIfOneToOneChannel();
63
- if (otherMember) {
64
- this.fallbackChannelImage = otherMember.image;
65
- }
66
- else {
67
- this.fallbackChannelImage = undefined;
68
- }
69
- }
70
- }
71
- setInitials() {
72
- let result = '';
73
- if (this.type === 'user') {
74
- result = this.name?.toString() || '';
75
- }
76
- else if (this.type === 'channel') {
77
- if (this.channel?.data?.name) {
78
- result = this.channel?.data?.name;
79
- }
80
- else {
81
- const otherMember = this.getOtherMemberIfOneToOneChannel();
82
- if (otherMember) {
83
- result = otherMember.name || otherMember.id || '';
84
- }
85
- else {
86
- result = '#';
87
- }
88
- }
89
- }
90
- const words = result.split(' ');
91
- let initials;
92
- if (this.initialsType === 'first-letter-of-each-word') {
93
- initials = words.map((w) => w.charAt(0) || '').join('');
94
- }
95
- else {
96
- initials = words[0].charAt(0) || '';
97
- }
98
- this.initials = initials;
99
- }
100
- updateIsOnlineSubscription() {
101
- if (this.channel) {
102
- const otherMember = this.getOtherMemberIfOneToOneChannel();
103
- if (otherMember) {
104
- this.isOnline = otherMember.online || false;
105
- this.isOnlineSubscription = this.chatClientService.events$
106
- .pipe(filter((e) => e.eventType === 'user.presence.changed'))
107
- .subscribe((event) => {
108
- if (event.event.user?.id === otherMember.id) {
109
- this.ngZone.run(() => {
110
- this.isOnline = event.event.user?.online || false;
111
- });
112
- }
113
- });
114
- }
115
- else {
116
- this.isOnline = false;
117
- this.isOnlineSubscription?.unsubscribe();
118
- }
119
- }
120
- else {
121
- this.isOnline = false;
122
- this.isOnlineSubscription?.unsubscribe();
123
- }
124
- }
125
- ngAfterViewInit() {
126
- this.isViewInited = true;
127
- }
128
- getOtherMemberIfOneToOneChannel() {
129
- const otherMembers = Object.values(this.channel?.state?.members || {}).filter((m) => m.user_id !== this.userId);
130
- if (otherMembers.length === 1) {
131
- return otherMembers[0].user;
132
- }
133
- else {
134
- return undefined;
135
- }
136
- }
137
- }
138
- AvatarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: AvatarComponent, deps: [{ token: i1.ChatClientService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
139
- AvatarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: AvatarComponent, selector: "stream-avatar", inputs: { name: "name", imageUrl: "imageUrl", location: "location", channel: "channel", user: "user", type: "type", showOnlineIndicator: "showOnlineIndicator", initialsType: "initialsType" }, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"str-chat__avatar str-chat-angular__avatar str-chat__avatar--circle stream-chat__avatar--{{\n location\n }} stream-chat__avatar--{{\n initialsType === 'first-letter-of-first-word'\n ? 'one-letter'\n : 'multiple-letters'\n }}\"\n title=\"{{ name }}\"\n>\n <img\n *ngIf=\"(imageUrl || fallbackChannelImage) && !isError; else fallback\"\n class=\"str-chat__avatar-image\"\n data-testid=\"avatar-img\"\n fetchpriority=\"high\"\n src=\"{{ imageUrl || fallbackChannelImage }}\"\n alt=\"{{ initials }}\"\n (error)=\"isError = true\"\n />\n <ng-template #fallback>\n <div data-testid=\"fallback-img\" class=\"str-chat__avatar-fallback\">\n {{ initials }}\n </div>\n </ng-template>\n <div\n *ngIf=\"isOnline && showOnlineIndicator\"\n data-testid=\"online-indicator\"\n class=\"str-chat__avatar--online-indicator\"\n ></div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
140
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: AvatarComponent, decorators: [{
141
- type: Component,
142
- args: [{ selector: 'stream-avatar', template: "<div\n class=\"str-chat__avatar str-chat-angular__avatar str-chat__avatar--circle stream-chat__avatar--{{\n location\n }} stream-chat__avatar--{{\n initialsType === 'first-letter-of-first-word'\n ? 'one-letter'\n : 'multiple-letters'\n }}\"\n title=\"{{ name }}\"\n>\n <img\n *ngIf=\"(imageUrl || fallbackChannelImage) && !isError; else fallback\"\n class=\"str-chat__avatar-image\"\n data-testid=\"avatar-img\"\n fetchpriority=\"high\"\n src=\"{{ imageUrl || fallbackChannelImage }}\"\n alt=\"{{ initials }}\"\n (error)=\"isError = true\"\n />\n <ng-template #fallback>\n <div data-testid=\"fallback-img\" class=\"str-chat__avatar-fallback\">\n {{ initials }}\n </div>\n </ng-template>\n <div\n *ngIf=\"isOnline && showOnlineIndicator\"\n data-testid=\"online-indicator\"\n class=\"str-chat__avatar--online-indicator\"\n ></div>\n</div>\n" }]
143
- }], ctorParameters: function () { return [{ type: i1.ChatClientService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { name: [{
144
- type: Input
145
- }], imageUrl: [{
146
- type: Input
147
- }], location: [{
148
- type: Input
149
- }], channel: [{
150
- type: Input
151
- }], user: [{
152
- type: Input
153
- }], type: [{
154
- type: Input
155
- }], showOnlineIndicator: [{
156
- type: Input
157
- }], initialsType: [{
158
- type: Input
159
- }] } });
160
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZhdGFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9hdmF0YXIvYXZhdGFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9hdmF0YXIvYXZhdGFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxTQUFTLEVBQ1QsS0FBSyxHQU1OLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQVN4Qzs7R0FFRztBQU1ILE1BQU0sT0FBTyxlQUFlO0lBOEMxQixZQUNVLGlCQUFvQyxFQUNwQyxNQUFjLEVBQ2QsS0FBd0I7UUFGeEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsVUFBSyxHQUFMLEtBQUssQ0FBbUI7UUF0QmxDOztXQUVHO1FBQ00sd0JBQW1CLEdBQUcsSUFBSSxDQUFDO1FBQ3BDOztXQUVHO1FBQ00saUJBQVksR0FFYSw0QkFBNEIsQ0FBQztRQUMvRCxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFakIsYUFBUSxHQUFXLEVBQUUsQ0FBQztRQUdkLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLGtCQUFhLEdBQW1CLEVBQUUsQ0FBQztJQU14QyxDQUFDO0lBRUosUUFBUTtRQUNOLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUNyQixJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQzNDLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUN6QixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ3BCLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7b0JBQzFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDbkIsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7b0JBQy9CLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO2lCQUNuQztnQkFDRCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7b0JBQ3JCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7aUJBQzVCO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUN0QixJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztTQUNuQztRQUNELElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUU7WUFDbkQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3BCO1FBRUQsSUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUU7WUFDbkMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7U0FDaEM7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRU8sdUJBQXVCO1FBQzdCLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUU7WUFDM0IsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFNBQVMsQ0FBQztTQUN2QzthQUFNO1lBQ0wsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLCtCQUErQixFQUFFLENBQUM7WUFDM0QsSUFBSSxXQUFXLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUM7YUFDL0M7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFNBQVMsQ0FBQzthQUN2QztTQUNGO0lBQ0gsQ0FBQztJQUVPLFdBQVc7UUFDakIsSUFBSSxNQUFNLEdBQVcsRUFBRSxDQUFDO1FBQ3hCLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUU7WUFDeEIsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO1NBQ3RDO2FBQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRTtZQUNsQyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtnQkFDNUIsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQzthQUNuQztpQkFBTTtnQkFDTCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsK0JBQStCLEVBQUUsQ0FBQztnQkFDM0QsSUFBSSxXQUFXLEVBQUU7b0JBQ2YsTUFBTSxHQUFHLFdBQVcsQ0FBQyxJQUFJLElBQUksV0FBVyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUM7aUJBQ25EO3FCQUFNO29CQUNMLE1BQU0sR0FBRyxHQUFHLENBQUM7aUJBQ2Q7YUFDRjtTQUNGO1FBRUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoQyxJQUFJLFFBQWdCLENBQUM7UUFDckIsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLDJCQUEyQixFQUFFO1lBQ3JELFFBQVEsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUN6RDthQUFNO1lBQ0wsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ3JDO1FBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDM0IsQ0FBQztJQUVPLDBCQUEwQjtRQUNoQyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDaEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLCtCQUErQixFQUFFLENBQUM7WUFDM0QsSUFBSSxXQUFXLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztnQkFDNUMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPO3FCQUN2RCxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLHVCQUF1QixDQUFDLENBQUM7cUJBQzVELFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUNuQixJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUUsS0FBSyxXQUFXLENBQUMsRUFBRSxFQUFFO3dCQUMzQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7NEJBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQzt3QkFDcEQsQ0FBQyxDQUFDLENBQUM7cUJBQ0o7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFDTjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztnQkFDdEIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLFdBQVcsRUFBRSxDQUFDO2FBQzFDO1NBQ0Y7YUFBTTtZQUNMLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsQ0FBQztTQUMxQztJQUNILENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7SUFDM0IsQ0FBQztJQUVPLCtCQUErQjtRQUNyQyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUNoQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLElBQUksRUFBRSxDQUNuQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0MsSUFBSSxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUM3QixPQUFPLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7U0FDN0I7YUFBTTtZQUNMLE9BQU8sU0FBUyxDQUFDO1NBQ2xCO0lBQ0gsQ0FBQzs7NEdBcEtVLGVBQWU7Z0dBQWYsZUFBZSwwUUM3QjVCLDQ0QkE4QkE7MkZERGEsZUFBZTtrQkFMM0IsU0FBUzsrQkFDRSxlQUFlOzZKQVVoQixJQUFJO3NCQUFaLEtBQUs7Z0JBSUcsUUFBUTtzQkFBaEIsS0FBSztnQkFJRyxRQUFRO3NCQUFoQixLQUFLO2dCQUlHLE9BQU87c0JBQWYsS0FBSztnQkFJRyxJQUFJO3NCQUFaLEtBQUs7Z0JBSUcsSUFBSTtzQkFBWixLQUFLO2dCQUlHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFJRyxZQUFZO3NCQUFwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENoYW5uZWwsIFVzZXIgfSBmcm9tICdzdHJlYW0tY2hhdCc7XG5pbXBvcnQgeyBDaGF0Q2xpZW50U2VydmljZSB9IGZyb20gJy4uL2NoYXQtY2xpZW50LnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQXZhdGFyTG9jYXRpb24sXG4gIEF2YXRhclR5cGUsXG4gIERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3MsXG59IGZyb20gJy4uL3R5cGVzJztcblxuLyoqXG4gKiBUaGUgYEF2YXRhcmAgY29tcG9uZW50IGRpc3BsYXlzIHRoZSBwcm92aWRlZCBpbWFnZSwgd2l0aCBmYWxsYmFjayB0byB0aGUgZmlyc3QgbGV0dGVyIG9mIHRoZSBvcHRpb25hbCBuYW1lIGlucHV0LlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdHJlYW0tYXZhdGFyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2F2YXRhci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2F2YXRhci5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBBdmF0YXJDb21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3lcbntcbiAgLyoqXG4gICAqIEFuIG9wdGlvbmFsIG5hbWUgb2YgdGhlIGltYWdlLCB1c2VkIGZvciBmYWxsYmFjayBpbWFnZSBvciBpbWFnZSB0aXRsZSAoaWYgYGltYWdlVXJsYCBpcyBwcm92aWRlZClcbiAgICovXG4gIEBJbnB1dCgpIG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIFRoZSBVUkwgb2YgdGhlIGltYWdlIHRvIGJlIGRpc3BsYXllZC4gSWYgdGhlIGltYWdlIGNhbid0IGJlIGRpc3BsYXllZCB0aGUgZmlyc3QgbGV0dGVyIG9mIHRoZSBuYW1lIGlucHV0IGlzIGRpc3BsYXllZC5cbiAgICovXG4gIEBJbnB1dCgpIGltYWdlVXJsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBUaGUgbG9jYXRpb24gdGhlIGF2YXRhciB3aWxsIGJlIGRpc3BsYXllZCBpblxuICAgKi9cbiAgQElucHV0KCkgbG9jYXRpb246IEF2YXRhckxvY2F0aW9uIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogVGhlIGNoYW5uZWwgdGhlIGF2YXRhciBiZWxvbmdzIHRvIChpZiBhdmF0YXIgb2YgYSBjaGFubmVsIGlzIGRpc3BsYXllZClcbiAgICovXG4gIEBJbnB1dCgpIGNoYW5uZWw/OiBDaGFubmVsPERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3M+O1xuICAvKipcbiAgICogVGhlIHVzZXIgdGhlIGF2YXRhciBiZWxvbmdzIHRvIChpZiBhdmF0YXIgb2YgYSB1c2VyIGlzIGRpc3BsYXllZClcbiAgICovXG4gIEBJbnB1dCgpIHVzZXI/OiBVc2VyPERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3M+O1xuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIGF2YXRhcjogY2hhbm5lbCBpZiBjaGFubmVsIGF2YXRhciBpcyBkaXNwbGF5ZWQsIHVzZXIgaWYgdXNlciBhdmF0YXIgaXMgZGlzcGxheWVkXG4gICAqL1xuICBASW5wdXQoKSB0eXBlOiBBdmF0YXJUeXBlIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogSWYgYSBjaGFubmVsIGF2YXRhciBpcyBkaXNwbGF5ZWQsIGFuZCBpZiB0aGUgY2hhbm5lbCBoYXMgZXhhY3RseSB0d28gbWVtYmVycyBhIGdyZWVuIGRvdCBpcyBkaXNwbGF5ZWQgaWYgdGhlIG90aGVyIG1lbWJlciBpcyBvbmxpbmUuIFNldCB0aGlzIGZsYWcgdG8gYGZhbHNlYCB0byB0dXJuIG9mZiB0aGlzIGJlaGF2aW9yLlxuICAgKi9cbiAgQElucHV0KCkgc2hvd09ubGluZUluZGljYXRvciA9IHRydWU7XG4gIC8qKlxuICAgKiBJZiBjaGFubmVsL3VzZXIgaW1hZ2UgaXNuJ3QgcHJvdmlkZWQgdGhlIGluaXRpYWxzIG9mIHRoZSBuYW1lIG9mIHRoZSBjaGFubmVsL3VzZXIgaXMgc2hvd24gaW5zdGVhZCwgeW91IGNhbiBjaG9vc2UgaG93IHRoZSBpbml0YWxzIHNob3VsZCBiZSBjb21wdXRlZFxuICAgKi9cbiAgQElucHV0KCkgaW5pdGlhbHNUeXBlOlxuICAgIHwgJ2ZpcnN0LWxldHRlci1vZi1maXJzdC13b3JkJ1xuICAgIHwgJ2ZpcnN0LWxldHRlci1vZi1lYWNoLXdvcmQnID0gJ2ZpcnN0LWxldHRlci1vZi1maXJzdC13b3JkJztcbiAgaXNFcnJvciA9IGZhbHNlO1xuICBpc09ubGluZSA9IGZhbHNlO1xuICBwcml2YXRlIGlzT25saW5lU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBpbml0aWFsczogc3RyaW5nID0gJyc7XG4gIGZhbGxiYWNrQ2hhbm5lbEltYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgdXNlcklkPzogc3RyaW5nO1xuICBwcml2YXRlIGlzVmlld0luaXRlZCA9IGZhbHNlO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjaGF0Q2xpZW50U2VydmljZTogQ2hhdENsaWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmNoYXRDbGllbnRTZXJ2aWNlLnVzZXIkLnN1YnNjcmliZSgodSkgPT4ge1xuICAgICAgICBpZiAodT8uaWQgIT09IHRoaXMudXNlcklkKSB7XG4gICAgICAgICAgdGhpcy51c2VySWQgPSB1Py5pZDtcbiAgICAgICAgICBpZiAodGhpcy50eXBlIHx8IHRoaXMuY2hhbm5lbCB8fCB0aGlzLm5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0SW5pdGlhbHMoKTtcbiAgICAgICAgICAgIHRoaXMuc2V0RmFsbGJhY2tDaGFubmVsSW1hZ2UoKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlSXNPbmxpbmVTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMuaXNWaWV3SW5pdGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlc1snY2hhbm5lbCddKSB7XG4gICAgICB0aGlzLnVwZGF0ZUlzT25saW5lU3Vic2NyaXB0aW9uKCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLnR5cGUgfHwgY2hhbmdlcy5uYW1lIHx8IGNoYW5nZXMuY2hhbm5lbCkge1xuICAgICAgdGhpcy5zZXRJbml0aWFscygpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzLnR5cGUgfHwgY2hhbmdlcy5jaGFubmVsKSB7XG4gICAgICB0aGlzLnNldEZhbGxiYWNrQ2hhbm5lbEltYWdlKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goKHMpID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gIH1cblxuICBwcml2YXRlIHNldEZhbGxiYWNrQ2hhbm5lbEltYWdlKCkge1xuICAgIGlmICh0aGlzLnR5cGUgIT09ICdjaGFubmVsJykge1xuICAgICAgdGhpcy5mYWxsYmFja0NoYW5uZWxJbWFnZSA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgb3RoZXJNZW1iZXIgPSB0aGlzLmdldE90aGVyTWVtYmVySWZPbmVUb09uZUNoYW5uZWwoKTtcbiAgICAgIGlmIChvdGhlck1lbWJlcikge1xuICAgICAgICB0aGlzLmZhbGxiYWNrQ2hhbm5lbEltYWdlID0gb3RoZXJNZW1iZXIuaW1hZ2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZhbGxiYWNrQ2hhbm5lbEltYWdlID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0SW5pdGlhbHMoKSB7XG4gICAgbGV0IHJlc3VsdDogc3RyaW5nID0gJyc7XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gJ3VzZXInKSB7XG4gICAgICByZXN1bHQgPSB0aGlzLm5hbWU/LnRvU3RyaW5nKCkgfHwgJyc7XG4gICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09ICdjaGFubmVsJykge1xuICAgICAgaWYgKHRoaXMuY2hhbm5lbD8uZGF0YT8ubmFtZSkge1xuICAgICAgICByZXN1bHQgPSB0aGlzLmNoYW5uZWw/LmRhdGE/Lm5hbWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBvdGhlck1lbWJlciA9IHRoaXMuZ2V0T3RoZXJNZW1iZXJJZk9uZVRvT25lQ2hhbm5lbCgpO1xuICAgICAgICBpZiAob3RoZXJNZW1iZXIpIHtcbiAgICAgICAgICByZXN1bHQgPSBvdGhlck1lbWJlci5uYW1lIHx8IG90aGVyTWVtYmVyLmlkIHx8ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdCA9ICcjJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHdvcmRzID0gcmVzdWx0LnNwbGl0KCcgJyk7XG4gICAgbGV0IGluaXRpYWxzOiBzdHJpbmc7XG4gICAgaWYgKHRoaXMuaW5pdGlhbHNUeXBlID09PSAnZmlyc3QtbGV0dGVyLW9mLWVhY2gtd29yZCcpIHtcbiAgICAgIGluaXRpYWxzID0gd29yZHMubWFwKCh3KSA9PiB3LmNoYXJBdCgwKSB8fCAnJykuam9pbignJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluaXRpYWxzID0gd29yZHNbMF0uY2hhckF0KDApIHx8ICcnO1xuICAgIH1cbiAgICB0aGlzLmluaXRpYWxzID0gaW5pdGlhbHM7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUlzT25saW5lU3Vic2NyaXB0aW9uKCkge1xuICAgIGlmICh0aGlzLmNoYW5uZWwpIHtcbiAgICAgIGNvbnN0IG90aGVyTWVtYmVyID0gdGhpcy5nZXRPdGhlck1lbWJlcklmT25lVG9PbmVDaGFubmVsKCk7XG4gICAgICBpZiAob3RoZXJNZW1iZXIpIHtcbiAgICAgICAgdGhpcy5pc09ubGluZSA9IG90aGVyTWVtYmVyLm9ubGluZSB8fCBmYWxzZTtcbiAgICAgICAgdGhpcy5pc09ubGluZVN1YnNjcmlwdGlvbiA9IHRoaXMuY2hhdENsaWVudFNlcnZpY2UuZXZlbnRzJFxuICAgICAgICAgIC5waXBlKGZpbHRlcigoZSkgPT4gZS5ldmVudFR5cGUgPT09ICd1c2VyLnByZXNlbmNlLmNoYW5nZWQnKSlcbiAgICAgICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKGV2ZW50LmV2ZW50LnVzZXI/LmlkID09PSBvdGhlck1lbWJlci5pZCkge1xuICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNPbmxpbmUgPSBldmVudC5ldmVudC51c2VyPy5vbmxpbmUgfHwgZmFsc2U7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pc09ubGluZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzT25saW5lU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzT25saW5lID0gZmFsc2U7XG4gICAgICB0aGlzLmlzT25saW5lU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzVmlld0luaXRlZCA9IHRydWU7XG4gIH1cblxuICBwcml2YXRlIGdldE90aGVyTWVtYmVySWZPbmVUb09uZUNoYW5uZWwoKSB7XG4gICAgY29uc3Qgb3RoZXJNZW1iZXJzID0gT2JqZWN0LnZhbHVlcyhcbiAgICAgIHRoaXMuY2hhbm5lbD8uc3RhdGU/Lm1lbWJlcnMgfHwge31cbiAgICApLmZpbHRlcigobSkgPT4gbS51c2VyX2lkICE9PSB0aGlzLnVzZXJJZCk7XG4gICAgaWYgKG90aGVyTWVtYmVycy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiBvdGhlck1lbWJlcnNbMF0udXNlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJzdHItY2hhdF9fYXZhdGFyIHN0ci1jaGF0LWFuZ3VsYXJfX2F2YXRhciBzdHItY2hhdF9fYXZhdGFyLS1jaXJjbGUgc3RyZWFtLWNoYXRfX2F2YXRhci0te3tcbiAgICBsb2NhdGlvblxuICB9fSBzdHJlYW0tY2hhdF9fYXZhdGFyLS17e1xuICAgIGluaXRpYWxzVHlwZSA9PT0gJ2ZpcnN0LWxldHRlci1vZi1maXJzdC13b3JkJ1xuICAgICAgPyAnb25lLWxldHRlcidcbiAgICAgIDogJ211bHRpcGxlLWxldHRlcnMnXG4gIH19XCJcbiAgdGl0bGU9XCJ7eyBuYW1lIH19XCJcbj5cbiAgPGltZ1xuICAgICpuZ0lmPVwiKGltYWdlVXJsIHx8IGZhbGxiYWNrQ2hhbm5lbEltYWdlKSAmJiAhaXNFcnJvcjsgZWxzZSBmYWxsYmFja1wiXG4gICAgY2xhc3M9XCJzdHItY2hhdF9fYXZhdGFyLWltYWdlXCJcbiAgICBkYXRhLXRlc3RpZD1cImF2YXRhci1pbWdcIlxuICAgIGZldGNocHJpb3JpdHk9XCJoaWdoXCJcbiAgICBzcmM9XCJ7eyBpbWFnZVVybCB8fCBmYWxsYmFja0NoYW5uZWxJbWFnZSB9fVwiXG4gICAgYWx0PVwie3sgaW5pdGlhbHMgfX1cIlxuICAgIChlcnJvcik9XCJpc0Vycm9yID0gdHJ1ZVwiXG4gIC8+XG4gIDxuZy10ZW1wbGF0ZSAjZmFsbGJhY2s+XG4gICAgPGRpdiBkYXRhLXRlc3RpZD1cImZhbGxiYWNrLWltZ1wiIGNsYXNzPVwic3RyLWNoYXRfX2F2YXRhci1mYWxsYmFja1wiPlxuICAgICAge3sgaW5pdGlhbHMgfX1cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPGRpdlxuICAgICpuZ0lmPVwiaXNPbmxpbmUgJiYgc2hvd09ubGluZUluZGljYXRvclwiXG4gICAgZGF0YS10ZXN0aWQ9XCJvbmxpbmUtaW5kaWNhdG9yXCJcbiAgICBjbGFzcz1cInN0ci1jaGF0X19hdmF0YXItLW9ubGluZS1pbmRpY2F0b3JcIlxuICA+PC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -1,45 +0,0 @@
1
- import { Component } from '@angular/core';
2
- import { combineLatest } from 'rxjs';
3
- import { map } from 'rxjs/operators';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "../channel.service";
6
- import * as i2 from "../theme.service";
7
- import * as i3 from "../custom-templates.service";
8
- import * as i4 from "@angular/common";
9
- import * as i5 from "../icon/icon.component";
10
- import * as i6 from "../notification-list/notification-list.component";
11
- import * as i7 from "../message-bounce-prompt/message-bounce-prompt.component";
12
- import * as i8 from "@ngx-translate/core";
13
- /**
14
- * The `Channel` component is a container component that displays the [`ChannelHeader`](/chat/docs/sdk/angular/components/ChannelHeaderComponent/), [`MessageList`](/chat/docs/sdk/angular/components/MessageListComponent), [`NotificationList`](/chat/docs/sdk/angular/components/NotificationListComponent/) and [`MessageInput`](/chat/docs/sdk/angular/components/MessageInputComponent/) components. You can also provide the [`Thread`](/chat/docs/sdk/angular/components/ThreadComponent/) component to use message [threads](/chat/docs/javascript/threads/).
15
- */
16
- export class ChannelComponent {
17
- constructor(channelService, themeService, customTemplatesService) {
18
- this.channelService = channelService;
19
- this.themeService = themeService;
20
- this.customTemplatesService = customTemplatesService;
21
- this.subscriptions = [];
22
- this.isError$ = combineLatest([
23
- this.channelService.channelQueryState$,
24
- this.channelService.activeChannel$,
25
- ]).pipe(map(([state, activeChannel]) => {
26
- return !activeChannel && state?.state === 'error';
27
- }));
28
- this.isInitializing$ = combineLatest([
29
- this.channelService.channelQueryState$,
30
- this.channelService.activeChannel$,
31
- ]).pipe(map(([state, activeChannel]) => {
32
- return !activeChannel && state?.state === 'in-progress';
33
- }));
34
- this.isActiveThread$ = this.channelService.activeParentMessageId$.pipe(map((id) => !!id));
35
- this.theme$ = this.themeService.theme$;
36
- this.isActiveChannel$ = this.channelService.activeChannel$.pipe(map((c) => !!c));
37
- }
38
- }
39
- ChannelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ChannelComponent, deps: [{ token: i1.ChannelService }, { token: i2.ThemeService }, { token: i3.CustomTemplatesService }], target: i0.ɵɵFactoryTarget.Component });
40
- ChannelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: ChannelComponent, selector: "stream-channel", ngImport: i0, template: "<div\n class=\"str-chat str-chat-channel messaging str-chat__channel str-chat__theme-{{\n theme$ | async\n }}\"\n>\n <div\n *ngIf=\"\n (isError$ | async) === false &&\n (isInitializing$ | async) === false &&\n (isActiveChannel$ | async) === true;\n else noChannel\n \"\n class=\"str-chat__container\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.messageBouncePromptTemplate$ | async) ||\n defaultMessageBouncePrompt\n \"\n ></ng-container>\n <ng-template #defaultMessageBouncePrompt>\n <stream-message-bounce-prompt></stream-message-bounce-prompt>\n </ng-template>\n <div class=\"str-chat__main-panel\">\n <ng-content></ng-content>\n </div>\n <ng-content\n *ngIf=\"isActiveThread$ | async\"\n select='[name=\"thread\"]'\n ></ng-content>\n </div>\n <ng-template #noChannel>\n <div\n *ngIf=\"\n (isInitializing$ | async) === false &&\n ((isError$ | async) === true || (isActiveChannel$ | async) === false)\n \"\n class=\"str-chat__empty-channel\"\n >\n <stream-icon icon=\"chat-bubble\"></stream-icon>\n <p class=\"str-chat__empty-channel-text\">\n {{ \"streamChat.No chats here yet\u2026\" | translate }}\n </p>\n <div class=\"str-chat__empty-channel-notifications\">\n <stream-notification-list></stream-notification-list>\n </div>\n </div>\n <div\n *ngIf=\"\n (isInitializing$ | async) === true &&\n (isError$ | async) === false &&\n (isActiveChannel$ | async) === false\n \"\n class=\"str-chat__loading-channel\"\n >\n <div class=\"str-chat__loading-channel-header\">\n <div class=\"str-chat__loading-channel-header-avatar\"></div>\n <div class=\"str-chat__loading-channel-header-end\">\n <div class=\"str-chat__loading-channel-header-name\"></div>\n <div class=\"str-chat__loading-channel-header-info\"></div>\n </div>\n </div>\n <div class=\"str-chat__loading-channel-message-list\">\n <div class=\"str-chat__loading-channel-message\">\n <div class=\"str-chat__loading-channel-message-avatar\"></div>\n <div class=\"str-chat__loading-channel-message-end\">\n <div class=\"str-chat__loading-channel-message-sender\"></div>\n <div class=\"str-chat__loading-channel-message-last-row\">\n <div class=\"str-chat__loading-channel-message-text\"></div>\n <div class=\"str-chat__loading-channel-message-date\"></div>\n </div>\n </div>\n </div>\n <div class=\"str-chat__loading-channel-message\">\n <div class=\"str-chat__loading-channel-message-avatar\"></div>\n <div class=\"str-chat__loading-channel-message-end\">\n <div class=\"str-chat__loading-channel-message-sender\"></div>\n <div class=\"str-chat__loading-channel-message-last-row\">\n <div class=\"str-chat__loading-channel-message-text\"></div>\n <div class=\"str-chat__loading-channel-message-date\"></div>\n </div>\n </div>\n </div>\n <div class=\"str-chat__loading-channel-message\">\n <div class=\"str-chat__loading-channel-message-avatar\"></div>\n <div class=\"str-chat__loading-channel-message-end\">\n <div class=\"str-chat__loading-channel-message-sender\"></div>\n <div class=\"str-chat__loading-channel-message-last-row\">\n <div class=\"str-chat__loading-channel-message-text\"></div>\n <div class=\"str-chat__loading-channel-message-date\"></div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"str-chat__loading-channel-message-input-row\">\n <div class=\"str-chat__loading-channel-message-input\"></div>\n <div class=\"str-chat__loading-channel-message-send\"></div>\n </div>\n </div>\n </ng-template>\n</div>\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.NotificationListComponent, selector: "stream-notification-list" }, { kind: "component", type: i7.MessageBouncePromptComponent, selector: "stream-message-bounce-prompt" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }] });
41
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ChannelComponent, decorators: [{
42
- type: Component,
43
- args: [{ selector: 'stream-channel', template: "<div\n class=\"str-chat str-chat-channel messaging str-chat__channel str-chat__theme-{{\n theme$ | async\n }}\"\n>\n <div\n *ngIf=\"\n (isError$ | async) === false &&\n (isInitializing$ | async) === false &&\n (isActiveChannel$ | async) === true;\n else noChannel\n \"\n class=\"str-chat__container\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.messageBouncePromptTemplate$ | async) ||\n defaultMessageBouncePrompt\n \"\n ></ng-container>\n <ng-template #defaultMessageBouncePrompt>\n <stream-message-bounce-prompt></stream-message-bounce-prompt>\n </ng-template>\n <div class=\"str-chat__main-panel\">\n <ng-content></ng-content>\n </div>\n <ng-content\n *ngIf=\"isActiveThread$ | async\"\n select='[name=\"thread\"]'\n ></ng-content>\n </div>\n <ng-template #noChannel>\n <div\n *ngIf=\"\n (isInitializing$ | async) === false &&\n ((isError$ | async) === true || (isActiveChannel$ | async) === false)\n \"\n class=\"str-chat__empty-channel\"\n >\n <stream-icon icon=\"chat-bubble\"></stream-icon>\n <p class=\"str-chat__empty-channel-text\">\n {{ \"streamChat.No chats here yet\u2026\" | translate }}\n </p>\n <div class=\"str-chat__empty-channel-notifications\">\n <stream-notification-list></stream-notification-list>\n </div>\n </div>\n <div\n *ngIf=\"\n (isInitializing$ | async) === true &&\n (isError$ | async) === false &&\n (isActiveChannel$ | async) === false\n \"\n class=\"str-chat__loading-channel\"\n >\n <div class=\"str-chat__loading-channel-header\">\n <div class=\"str-chat__loading-channel-header-avatar\"></div>\n <div class=\"str-chat__loading-channel-header-end\">\n <div class=\"str-chat__loading-channel-header-name\"></div>\n <div class=\"str-chat__loading-channel-header-info\"></div>\n </div>\n </div>\n <div class=\"str-chat__loading-channel-message-list\">\n <div class=\"str-chat__loading-channel-message\">\n <div class=\"str-chat__loading-channel-message-avatar\"></div>\n <div class=\"str-chat__loading-channel-message-end\">\n <div class=\"str-chat__loading-channel-message-sender\"></div>\n <div class=\"str-chat__loading-channel-message-last-row\">\n <div class=\"str-chat__loading-channel-message-text\"></div>\n <div class=\"str-chat__loading-channel-message-date\"></div>\n </div>\n </div>\n </div>\n <div class=\"str-chat__loading-channel-message\">\n <div class=\"str-chat__loading-channel-message-avatar\"></div>\n <div class=\"str-chat__loading-channel-message-end\">\n <div class=\"str-chat__loading-channel-message-sender\"></div>\n <div class=\"str-chat__loading-channel-message-last-row\">\n <div class=\"str-chat__loading-channel-message-text\"></div>\n <div class=\"str-chat__loading-channel-message-date\"></div>\n </div>\n </div>\n </div>\n <div class=\"str-chat__loading-channel-message\">\n <div class=\"str-chat__loading-channel-message-avatar\"></div>\n <div class=\"str-chat__loading-channel-message-end\">\n <div class=\"str-chat__loading-channel-message-sender\"></div>\n <div class=\"str-chat__loading-channel-message-last-row\">\n <div class=\"str-chat__loading-channel-message-text\"></div>\n <div class=\"str-chat__loading-channel-message-date\"></div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"str-chat__loading-channel-message-input-row\">\n <div class=\"str-chat__loading-channel-message-input\"></div>\n <div class=\"str-chat__loading-channel-message-send\"></div>\n </div>\n </div>\n </ng-template>\n</div>\n" }]
44
- }], ctorParameters: function () { return [{ type: i1.ChannelService }, { type: i2.ThemeService }, { type: i3.CustomTemplatesService }]; } });
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbm5lbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvY2hhbm5lbC9jaGFubmVsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9jaGFubmVsL2NoYW5uZWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsYUFBYSxFQUE0QixNQUFNLE1BQU0sQ0FBQztBQUMvRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7QUFLckM7O0dBRUc7QUFNSCxNQUFNLE9BQU8sZ0JBQWdCO0lBUTNCLFlBQ1UsY0FBOEIsRUFDOUIsWUFBMEIsRUFDekIsc0JBQThDO1FBRi9DLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUN6QiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBTnpELGtCQUFhLEdBQW1CLEVBQUUsQ0FBQztRQVFqQyxJQUFJLENBQUMsUUFBUSxHQUFHLGFBQWEsQ0FBQztZQUM1QixJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQjtZQUN0QyxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWM7U0FDbkMsQ0FBQyxDQUFDLElBQUksQ0FDTCxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsRUFBRSxFQUFFO1lBQzdCLE9BQU8sQ0FBQyxhQUFhLElBQUksS0FBSyxFQUFFLEtBQUssS0FBSyxPQUFPLENBQUM7UUFDcEQsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUNGLElBQUksQ0FBQyxlQUFlLEdBQUcsYUFBYSxDQUFDO1lBQ25DLElBQUksQ0FBQyxjQUFjLENBQUMsa0JBQWtCO1lBQ3RDLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYztTQUNuQyxDQUFDLENBQUMsSUFBSSxDQUNMLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxFQUFFLEVBQUU7WUFDN0IsT0FBTyxDQUFDLGFBQWEsSUFBSSxLQUFLLEVBQUUsS0FBSyxLQUFLLGFBQWEsQ0FBQztRQUMxRCxDQUFDLENBQUMsQ0FDSCxDQUFDO1FBQ0YsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FDcEUsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQ2xCLENBQUM7UUFDRixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQzdELEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNoQixDQUFDO0lBQ0osQ0FBQzs7NkdBcENVLGdCQUFnQjtpR0FBaEIsZ0JBQWdCLHNEQ2Y3Qiw0N0hBcUdBOzJGRHRGYSxnQkFBZ0I7a0JBTDVCLFNBQVM7K0JBQ0UsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENoYW5uZWxTZXJ2aWNlIH0gZnJvbSAnLi4vY2hhbm5lbC5zZXJ2aWNlJztcbmltcG9ydCB7IFRoZW1lU2VydmljZSB9IGZyb20gJy4uL3RoZW1lLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3VzdG9tVGVtcGxhdGVzU2VydmljZSB9IGZyb20gJy4uL2N1c3RvbS10ZW1wbGF0ZXMuc2VydmljZSc7XG5cbi8qKlxuICogVGhlIGBDaGFubmVsYCBjb21wb25lbnQgaXMgYSBjb250YWluZXIgY29tcG9uZW50IHRoYXQgZGlzcGxheXMgdGhlIFtgQ2hhbm5lbEhlYWRlcmBdKC9jaGF0L2RvY3Mvc2RrL2FuZ3VsYXIvY29tcG9uZW50cy9DaGFubmVsSGVhZGVyQ29tcG9uZW50LyksIFtgTWVzc2FnZUxpc3RgXSgvY2hhdC9kb2NzL3Nkay9hbmd1bGFyL2NvbXBvbmVudHMvTWVzc2FnZUxpc3RDb21wb25lbnQpLCBbYE5vdGlmaWNhdGlvbkxpc3RgXSgvY2hhdC9kb2NzL3Nkay9hbmd1bGFyL2NvbXBvbmVudHMvTm90aWZpY2F0aW9uTGlzdENvbXBvbmVudC8pIGFuZCBbYE1lc3NhZ2VJbnB1dGBdKC9jaGF0L2RvY3Mvc2RrL2FuZ3VsYXIvY29tcG9uZW50cy9NZXNzYWdlSW5wdXRDb21wb25lbnQvKSBjb21wb25lbnRzLiBZb3UgY2FuIGFsc28gcHJvdmlkZSB0aGUgW2BUaHJlYWRgXSgvY2hhdC9kb2NzL3Nkay9hbmd1bGFyL2NvbXBvbmVudHMvVGhyZWFkQ29tcG9uZW50LykgY29tcG9uZW50IHRvIHVzZSBtZXNzYWdlIFt0aHJlYWRzXSgvY2hhdC9kb2NzL2phdmFzY3JpcHQvdGhyZWFkcy8pLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdHJlYW0tY2hhbm5lbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGFubmVsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVzOiBbXSxcbn0pXG5leHBvcnQgY2xhc3MgQ2hhbm5lbENvbXBvbmVudCB7XG4gIGlzRXJyb3IkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBpc0luaXRpYWxpemluZyQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIGlzQWN0aXZlVGhyZWFkJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgaXNBY3RpdmVDaGFubmVsJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcbiAgdGhlbWUkOiBPYnNlcnZhYmxlPHN0cmluZz47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjaGFubmVsU2VydmljZTogQ2hhbm5lbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0aGVtZVNlcnZpY2U6IFRoZW1lU2VydmljZSxcbiAgICByZWFkb25seSBjdXN0b21UZW1wbGF0ZXNTZXJ2aWNlOiBDdXN0b21UZW1wbGF0ZXNTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuaXNFcnJvciQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuY2hhbm5lbFNlcnZpY2UuY2hhbm5lbFF1ZXJ5U3RhdGUkLFxuICAgICAgdGhpcy5jaGFubmVsU2VydmljZS5hY3RpdmVDaGFubmVsJCxcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbc3RhdGUsIGFjdGl2ZUNoYW5uZWxdKSA9PiB7XG4gICAgICAgIHJldHVybiAhYWN0aXZlQ2hhbm5lbCAmJiBzdGF0ZT8uc3RhdGUgPT09ICdlcnJvcic7XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5pc0luaXRpYWxpemluZyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuY2hhbm5lbFNlcnZpY2UuY2hhbm5lbFF1ZXJ5U3RhdGUkLFxuICAgICAgdGhpcy5jaGFubmVsU2VydmljZS5hY3RpdmVDaGFubmVsJCxcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbc3RhdGUsIGFjdGl2ZUNoYW5uZWxdKSA9PiB7XG4gICAgICAgIHJldHVybiAhYWN0aXZlQ2hhbm5lbCAmJiBzdGF0ZT8uc3RhdGUgPT09ICdpbi1wcm9ncmVzcyc7XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5pc0FjdGl2ZVRocmVhZCQgPSB0aGlzLmNoYW5uZWxTZXJ2aWNlLmFjdGl2ZVBhcmVudE1lc3NhZ2VJZCQucGlwZShcbiAgICAgIG1hcCgoaWQpID0+ICEhaWQpXG4gICAgKTtcbiAgICB0aGlzLnRoZW1lJCA9IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lJDtcbiAgICB0aGlzLmlzQWN0aXZlQ2hhbm5lbCQgPSB0aGlzLmNoYW5uZWxTZXJ2aWNlLmFjdGl2ZUNoYW5uZWwkLnBpcGUoXG4gICAgICBtYXAoKGMpID0+ICEhYylcbiAgICApO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwic3RyLWNoYXQgc3RyLWNoYXQtY2hhbm5lbCBtZXNzYWdpbmcgc3RyLWNoYXRfX2NoYW5uZWwgc3RyLWNoYXRfX3RoZW1lLXt7XG4gICAgdGhlbWUkIHwgYXN5bmNcbiAgfX1cIlxuPlxuICA8ZGl2XG4gICAgKm5nSWY9XCJcbiAgICAgIChpc0Vycm9yJCB8IGFzeW5jKSA9PT0gZmFsc2UgJiZcbiAgICAgICAgKGlzSW5pdGlhbGl6aW5nJCB8IGFzeW5jKSA9PT0gZmFsc2UgJiZcbiAgICAgICAgKGlzQWN0aXZlQ2hhbm5lbCQgfCBhc3luYykgPT09IHRydWU7XG4gICAgICBlbHNlIG5vQ2hhbm5lbFxuICAgIFwiXG4gICAgY2xhc3M9XCJzdHItY2hhdF9fY29udGFpbmVyXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIChjdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLm1lc3NhZ2VCb3VuY2VQcm9tcHRUZW1wbGF0ZSQgfCBhc3luYykgfHxcbiAgICAgICAgZGVmYXVsdE1lc3NhZ2VCb3VuY2VQcm9tcHRcbiAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdE1lc3NhZ2VCb3VuY2VQcm9tcHQ+XG4gICAgICA8c3RyZWFtLW1lc3NhZ2UtYm91bmNlLXByb21wdD48L3N0cmVhbS1tZXNzYWdlLWJvdW5jZS1wcm9tcHQ+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX21haW4tcGFuZWxcIj5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgICA8bmctY29udGVudFxuICAgICAgKm5nSWY9XCJpc0FjdGl2ZVRocmVhZCQgfCBhc3luY1wiXG4gICAgICBzZWxlY3Q9J1tuYW1lPVwidGhyZWFkXCJdJ1xuICAgID48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuICA8bmctdGVtcGxhdGUgI25vQ2hhbm5lbD5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cIlxuICAgICAgICAoaXNJbml0aWFsaXppbmckIHwgYXN5bmMpID09PSBmYWxzZSAmJlxuICAgICAgICAoKGlzRXJyb3IkIHwgYXN5bmMpID09PSB0cnVlIHx8IChpc0FjdGl2ZUNoYW5uZWwkIHwgYXN5bmMpID09PSBmYWxzZSlcbiAgICAgIFwiXG4gICAgICBjbGFzcz1cInN0ci1jaGF0X19lbXB0eS1jaGFubmVsXCJcbiAgICA+XG4gICAgICA8c3RyZWFtLWljb24gaWNvbj1cImNoYXQtYnViYmxlXCI+PC9zdHJlYW0taWNvbj5cbiAgICAgIDxwIGNsYXNzPVwic3RyLWNoYXRfX2VtcHR5LWNoYW5uZWwtdGV4dFwiPlxuICAgICAgICB7eyBcInN0cmVhbUNoYXQuTm8gY2hhdHMgaGVyZSB5ZXTigKZcIiB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9wPlxuICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19lbXB0eS1jaGFubmVsLW5vdGlmaWNhdGlvbnNcIj5cbiAgICAgICAgPHN0cmVhbS1ub3RpZmljYXRpb24tbGlzdD48L3N0cmVhbS1ub3RpZmljYXRpb24tbGlzdD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwiXG4gICAgICAgIChpc0luaXRpYWxpemluZyQgfCBhc3luYykgPT09IHRydWUgJiZcbiAgICAgICAgKGlzRXJyb3IkIHwgYXN5bmMpID09PSBmYWxzZSAmJlxuICAgICAgICAoaXNBY3RpdmVDaGFubmVsJCB8IGFzeW5jKSA9PT0gZmFsc2VcbiAgICAgIFwiXG4gICAgICBjbGFzcz1cInN0ci1jaGF0X19sb2FkaW5nLWNoYW5uZWxcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbG9hZGluZy1jaGFubmVsLWhlYWRlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX2xvYWRpbmctY2hhbm5lbC1oZWFkZXItYXZhdGFyXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbG9hZGluZy1jaGFubmVsLWhlYWRlci1lbmRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX2xvYWRpbmctY2hhbm5lbC1oZWFkZXItbmFtZVwiPjwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbG9hZGluZy1jaGFubmVsLWhlYWRlci1pbmZvXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX2xvYWRpbmctY2hhbm5lbC1tZXNzYWdlLWxpc3RcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19sb2FkaW5nLWNoYW5uZWwtbWVzc2FnZVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbG9hZGluZy1jaGFubmVsLW1lc3NhZ2UtYXZhdGFyXCI+PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19sb2FkaW5nLWNoYW5uZWwtbWVzc2FnZS1lbmRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbG9hZGluZy1jaGFubmVsLW1lc3NhZ2Utc2VuZGVyXCI+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX2xvYWRpbmctY2hhbm5lbC1tZXNzYWdlLWxhc3Qtcm93XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbG9hZGluZy1jaGFubmVsLW1lc3NhZ2UtdGV4dFwiPjwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX2xvYWRpbmctY2hhbm5lbC1tZXNzYWdlLWRhdGVcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19sb2FkaW5nLWNoYW5uZWwtbWVzc2FnZVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbG9hZGluZy1jaGFubmVsLW1lc3NhZ2UtYXZhdGFyXCI+PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19sb2FkaW5nLWNoYW5uZWwtbWVzc2FnZS1lbmRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbG9hZGluZy1jaGFubmVsLW1lc3NhZ2Utc2VuZGVyXCI+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX2xvYWRpbmctY2hhbm5lbC1tZXNzYWdlLWxhc3Qtcm93XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbG9hZGluZy1jaGFubmVsLW1lc3NhZ2UtdGV4dFwiPjwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX2xvYWRpbmctY2hhbm5lbC1tZXNzYWdlLWRhdGVcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19sb2FkaW5nLWNoYW5uZWwtbWVzc2FnZVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbG9hZGluZy1jaGFubmVsLW1lc3NhZ2UtYXZhdGFyXCI+PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19sb2FkaW5nLWNoYW5uZWwtbWVzc2FnZS1lbmRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbG9hZGluZy1jaGFubmVsLW1lc3NhZ2Utc2VuZGVyXCI+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX2xvYWRpbmctY2hhbm5lbC1tZXNzYWdlLWxhc3Qtcm93XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbG9hZGluZy1jaGFubmVsLW1lc3NhZ2UtdGV4dFwiPjwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX2xvYWRpbmctY2hhbm5lbC1tZXNzYWdlLWRhdGVcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19sb2FkaW5nLWNoYW5uZWwtbWVzc2FnZS1pbnB1dC1yb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19sb2FkaW5nLWNoYW5uZWwtbWVzc2FnZS1pbnB1dFwiPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX2xvYWRpbmctY2hhbm5lbC1tZXNzYWdlLXNlbmRcIj48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4iXX0=
@@ -1,72 +0,0 @@
1
- import { Component, } from '@angular/core';
2
- import { getChannelDisplayText } from '../get-channel-display-text';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "../channel.service";
5
- import * as i2 from "../custom-templates.service";
6
- import * as i3 from "../chat-client.service";
7
- import * as i4 from "@angular/common";
8
- import * as i5 from "../avatar-placeholder/avatar-placeholder.component";
9
- import * as i6 from "@ngx-translate/core";
10
- /**
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](/chat/docs/javascript/watch_channel/#watchers-vs-members) in the platform documentation. Please note that number of watchers is only displayed if the user has [`connect-events` capability](/chat/docs/javascript/channel_capabilities/)
12
- */
13
- export class ChannelHeaderComponent {
14
- constructor(channelService, customTemplatesService, cdRef, chatClientService) {
15
- this.channelService = channelService;
16
- this.customTemplatesService = customTemplatesService;
17
- this.cdRef = cdRef;
18
- this.chatClientService = chatClientService;
19
- this.subscriptions = [];
20
- this.channelService.activeChannel$.subscribe((c) => {
21
- this.activeChannel = c;
22
- const capabilities = this.activeChannel?.data
23
- ?.own_capabilities;
24
- if (!capabilities) {
25
- return;
26
- }
27
- this.canReceiveConnectEvents =
28
- capabilities.indexOf('connect-events') !== -1;
29
- });
30
- }
31
- ngOnInit() {
32
- this.subscriptions.push(this.customTemplatesService.channelActionsTemplate$.subscribe((template) => {
33
- this.channelActionsTemplate = template;
34
- this.cdRef.detectChanges();
35
- }));
36
- this.subscriptions.push(this.customTemplatesService.channelHeaderInfoTemplate$.subscribe((template) => {
37
- this.channelHeaderInfoTemplate = template;
38
- this.cdRef.detectChanges();
39
- }));
40
- }
41
- ngOnDestroy() {
42
- this.subscriptions.forEach((s) => s.unsubscribe());
43
- }
44
- getChannelActionsContext() {
45
- return { channel: this.activeChannel };
46
- }
47
- getChannelInfoContext() {
48
- return { channel: this.activeChannel };
49
- }
50
- get memberCountParam() {
51
- return { memberCount: this.activeChannel?.data?.member_count || 0 };
52
- }
53
- get watcherCountParam() {
54
- return { watcherCount: this.activeChannel?.state?.watcher_count || 0 };
55
- }
56
- get displayText() {
57
- if (!this.activeChannel) {
58
- return '';
59
- }
60
- return getChannelDisplayText(this.activeChannel, this.chatClientService.chatClient.user);
61
- }
62
- get avatarName() {
63
- return this.activeChannel?.data?.name;
64
- }
65
- }
66
- ChannelHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ChannelHeaderComponent, deps: [{ token: i1.ChannelService }, { token: i2.CustomTemplatesService }, { token: i0.ChangeDetectorRef }, { token: i3.ChatClientService }], target: i0.ɵɵFactoryTarget.Component });
67
- ChannelHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: ChannelHeaderComponent, selector: "stream-channel-header", ngImport: i0, template: "<div class=\"str-chat__header-livestream str-chat__channel-header\">\n <ng-content></ng-content>\n <stream-avatar-placeholder\n type=\"channel\"\n location=\"channel-header\"\n imageUrl=\"{{ activeChannel?.data?.image }}\"\n name=\"{{ avatarName }}\"\n [channel]=\"activeChannel\"\n ></stream-avatar-placeholder>\n <div class=\"str-chat__header-livestream-left str-chat__channel-header-end\">\n <p\n data-testid=\"name\"\n class=\"str-chat__header-livestream-left--title str-chat__channel-header-title\"\n >\n {{ displayText }}\n </p>\n <ng-container\n *ngTemplateOutlet=\"\n channelHeaderInfoTemplate || defaultChannelInfo;\n context: getChannelInfoContext()\n \"\n ></ng-container>\n <ng-template #defaultChannelInfo>\n <p\n data-testid=\"info\"\n class=\"str-chat__header-livestream-left--members str-chat__channel-header-info\"\n >\n {{'streamChat.{{ memberCount }} members' | translate:memberCountParam}}\n {{canReceiveConnectEvents ? ('streamChat.{{ watcherCount }} online' |\n translate:watcherCountParam) : ''}}\n </p>\n </ng-template>\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", 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.AvatarPlaceholderComponent, selector: "stream-avatar-placeholder", inputs: ["name", "imageUrl", "location", "channel", "user", "type", "initialsType", "showOnlineIndicator"] }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }] });
68
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ChannelHeaderComponent, decorators: [{
69
- type: Component,
70
- args: [{ selector: 'stream-channel-header', template: "<div class=\"str-chat__header-livestream str-chat__channel-header\">\n <ng-content></ng-content>\n <stream-avatar-placeholder\n type=\"channel\"\n location=\"channel-header\"\n imageUrl=\"{{ activeChannel?.data?.image }}\"\n name=\"{{ avatarName }}\"\n [channel]=\"activeChannel\"\n ></stream-avatar-placeholder>\n <div class=\"str-chat__header-livestream-left str-chat__channel-header-end\">\n <p\n data-testid=\"name\"\n class=\"str-chat__header-livestream-left--title str-chat__channel-header-title\"\n >\n {{ displayText }}\n </p>\n <ng-container\n *ngTemplateOutlet=\"\n channelHeaderInfoTemplate || defaultChannelInfo;\n context: getChannelInfoContext()\n \"\n ></ng-container>\n <ng-template #defaultChannelInfo>\n <p\n data-testid=\"info\"\n class=\"str-chat__header-livestream-left--members str-chat__channel-header-info\"\n >\n {{'streamChat.{{ memberCount }} members' | translate:memberCountParam}}\n {{canReceiveConnectEvents ? ('streamChat.{{ watcherCount }} online' |\n translate:watcherCountParam) : ''}}\n </p>\n </ng-template>\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" }]
71
- }], ctorParameters: function () { return [{ type: i1.ChannelService }, { type: i2.CustomTemplatesService }, { type: i0.ChangeDetectorRef }, { type: i3.ChatClientService }]; } });
72
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbm5lbC1oZWFkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL2NoYW5uZWwtaGVhZGVyL2NoYW5uZWwtaGVhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9jaGFubmVsLWhlYWRlci9jaGFubmVsLWhlYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxHQUlWLE1BQU0sZUFBZSxDQUFDO0FBTXZCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7Ozs7OztBQU9wRTs7R0FFRztBQU1ILE1BQU0sT0FBTyxzQkFBc0I7SUFPakMsWUFDVSxjQUE4QixFQUM5QixzQkFBOEMsRUFDOUMsS0FBd0IsRUFDeEIsaUJBQW9DO1FBSHBDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBQ3hCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFOdEMsa0JBQWEsR0FBbUIsRUFBRSxDQUFDO1FBUXpDLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ2pELElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSTtnQkFDM0MsRUFBRSxnQkFBNEIsQ0FBQztZQUNqQyxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUNqQixPQUFPO2FBQ1I7WUFDRCxJQUFJLENBQUMsdUJBQXVCO2dCQUMxQixZQUFZLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDbEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsUUFBUTtRQUNOLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUNyQixJQUFJLENBQUMsc0JBQXNCLENBQUMsdUJBQXVCLENBQUMsU0FBUyxDQUMzRCxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ1gsSUFBSSxDQUFDLHNCQUFzQixHQUFHLFFBQVEsQ0FBQztZQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzdCLENBQUMsQ0FDRixDQUNGLENBQUM7UUFDRixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDckIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLDBCQUEwQixDQUFDLFNBQVMsQ0FDOUQsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNYLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxRQUFRLENBQUM7WUFDMUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM3QixDQUFDLENBQ0YsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELHdCQUF3QjtRQUN0QixPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxhQUFjLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRUQscUJBQXFCO1FBQ25CLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGFBQWMsRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFRCxJQUFJLGdCQUFnQjtRQUNsQixPQUFPLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLFlBQVksSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUN0RSxDQUFDO0lBRUQsSUFBSSxpQkFBaUI7UUFDbkIsT0FBTyxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLEtBQUssRUFBRSxhQUFhLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDekUsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3ZCLE9BQU8sRUFBRSxDQUFDO1NBQ1g7UUFDRCxPQUFPLHFCQUFxQixDQUMxQixJQUFJLENBQUMsYUFBYSxFQUNsQixJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLElBQUssQ0FDeEMsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztJQUN4QyxDQUFDOzttSEEzRVUsc0JBQXNCO3VHQUF0QixzQkFBc0IsNkRDM0JuQyw2NENBMENBOzJGRGZhLHNCQUFzQjtrQkFMbEMsU0FBUzsrQkFDRSx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgVGVtcGxhdGVSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDaGFubmVsIH0gZnJvbSAnc3RyZWFtLWNoYXQnO1xuaW1wb3J0IHsgQ2hhbm5lbFNlcnZpY2UgfSBmcm9tICcuLi9jaGFubmVsLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhdENsaWVudFNlcnZpY2UgfSBmcm9tICcuLi9jaGF0LWNsaWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2UgfSBmcm9tICcuLi9jdXN0b20tdGVtcGxhdGVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgZ2V0Q2hhbm5lbERpc3BsYXlUZXh0IH0gZnJvbSAnLi4vZ2V0LWNoYW5uZWwtZGlzcGxheS10ZXh0JztcbmltcG9ydCB7XG4gIENoYW5uZWxBY3Rpb25zQ29udGV4dCxcbiAgQ2hhbm5lbEhlYWRlckluZm9Db250ZXh0LFxuICBEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzLFxufSBmcm9tICcuLi90eXBlcyc7XG5cbi8qKlxuICogVGhlIGBDaGFubmVsSGVhZGVyYCBjb21wb25lbnQgZGlzcGxheXMgdGhlIGF2YXRhciBhbmQgbmFtZSBvZiB0aGUgY3VycmVudGx5IGFjdGl2ZSBjaGFubmVsIGFsb25nIHdpdGggbWVtYmVyIGFuZCB3YXRjaGVyIGluZm9ybWF0aW9uLiBZb3UgY2FuIHJlYWQgYWJvdXQgW3RoZSBkaWZmZXJlbmNlIGJldHdlZW4gbWVtYmVycyBhbmQgd2F0Y2hlcnNdKC9jaGF0L2RvY3MvamF2YXNjcmlwdC93YXRjaF9jaGFubmVsLyN3YXRjaGVycy12cy1tZW1iZXJzKSBpbiB0aGUgcGxhdGZvcm0gZG9jdW1lbnRhdGlvbi4gUGxlYXNlIG5vdGUgdGhhdCBudW1iZXIgb2Ygd2F0Y2hlcnMgaXMgb25seSBkaXNwbGF5ZWQgaWYgdGhlIHVzZXIgaGFzIFtgY29ubmVjdC1ldmVudHNgIGNhcGFiaWxpdHldKC9jaGF0L2RvY3MvamF2YXNjcmlwdC9jaGFubmVsX2NhcGFiaWxpdGllcy8pXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N0cmVhbS1jaGFubmVsLWhlYWRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGFubmVsLWhlYWRlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlczogW10sXG59KVxuZXhwb3J0IGNsYXNzIENoYW5uZWxIZWFkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIGNoYW5uZWxBY3Rpb25zVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxDaGFubmVsQWN0aW9uc0NvbnRleHQ+O1xuICBjaGFubmVsSGVhZGVySW5mb1RlbXBsYXRlPzogVGVtcGxhdGVSZWY8Q2hhbm5lbEhlYWRlckluZm9Db250ZXh0PjtcbiAgYWN0aXZlQ2hhbm5lbDogQ2hhbm5lbDxEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzPiB8IHVuZGVmaW5lZDtcbiAgY2FuUmVjZWl2ZUNvbm5lY3RFdmVudHM6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNoYW5uZWxTZXJ2aWNlOiBDaGFubmVsU2VydmljZSxcbiAgICBwcml2YXRlIGN1c3RvbVRlbXBsYXRlc1NlcnZpY2U6IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBjaGF0Q2xpZW50U2VydmljZTogQ2hhdENsaWVudFNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5jaGFubmVsU2VydmljZS5hY3RpdmVDaGFubmVsJC5zdWJzY3JpYmUoKGMpID0+IHtcbiAgICAgIHRoaXMuYWN0aXZlQ2hhbm5lbCA9IGM7XG4gICAgICBjb25zdCBjYXBhYmlsaXRpZXMgPSB0aGlzLmFjdGl2ZUNoYW5uZWw/LmRhdGFcbiAgICAgICAgPy5vd25fY2FwYWJpbGl0aWVzIGFzIHN0cmluZ1tdO1xuICAgICAgaWYgKCFjYXBhYmlsaXRpZXMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5jYW5SZWNlaXZlQ29ubmVjdEV2ZW50cyA9XG4gICAgICAgIGNhcGFiaWxpdGllcy5pbmRleE9mKCdjb25uZWN0LWV2ZW50cycpICE9PSAtMTtcbiAgICB9KTtcbiAgfVxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVzU2VydmljZS5jaGFubmVsQWN0aW9uc1RlbXBsYXRlJC5zdWJzY3JpYmUoXG4gICAgICAgICh0ZW1wbGF0ZSkgPT4ge1xuICAgICAgICAgIHRoaXMuY2hhbm5lbEFjdGlvbnNUZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVzU2VydmljZS5jaGFubmVsSGVhZGVySW5mb1RlbXBsYXRlJC5zdWJzY3JpYmUoXG4gICAgICAgICh0ZW1wbGF0ZSkgPT4ge1xuICAgICAgICAgIHRoaXMuY2hhbm5lbEhlYWRlckluZm9UZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzKSA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICB9XG5cbiAgZ2V0Q2hhbm5lbEFjdGlvbnNDb250ZXh0KCk6IENoYW5uZWxBY3Rpb25zQ29udGV4dCB7XG4gICAgcmV0dXJuIHsgY2hhbm5lbDogdGhpcy5hY3RpdmVDaGFubmVsISB9O1xuICB9XG5cbiAgZ2V0Q2hhbm5lbEluZm9Db250ZXh0KCk6IENoYW5uZWxIZWFkZXJJbmZvQ29udGV4dCB7XG4gICAgcmV0dXJuIHsgY2hhbm5lbDogdGhpcy5hY3RpdmVDaGFubmVsISB9O1xuICB9XG5cbiAgZ2V0IG1lbWJlckNvdW50UGFyYW0oKSB7XG4gICAgcmV0dXJuIHsgbWVtYmVyQ291bnQ6IHRoaXMuYWN0aXZlQ2hhbm5lbD8uZGF0YT8ubWVtYmVyX2NvdW50IHx8IDAgfTtcbiAgfVxuXG4gIGdldCB3YXRjaGVyQ291bnRQYXJhbSgpIHtcbiAgICByZXR1cm4geyB3YXRjaGVyQ291bnQ6IHRoaXMuYWN0aXZlQ2hhbm5lbD8uc3RhdGU/LndhdGNoZXJfY291bnQgfHwgMCB9O1xuICB9XG5cbiAgZ2V0IGRpc3BsYXlUZXh0KCkge1xuICAgIGlmICghdGhpcy5hY3RpdmVDaGFubmVsKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHJldHVybiBnZXRDaGFubmVsRGlzcGxheVRleHQoXG4gICAgICB0aGlzLmFjdGl2ZUNoYW5uZWwsXG4gICAgICB0aGlzLmNoYXRDbGllbnRTZXJ2aWNlLmNoYXRDbGllbnQudXNlciFcbiAgICApO1xuICB9XG5cbiAgZ2V0IGF2YXRhck5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlQ2hhbm5lbD8uZGF0YT8ubmFtZTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInN0ci1jaGF0X19oZWFkZXItbGl2ZXN0cmVhbSBzdHItY2hhdF9fY2hhbm5lbC1oZWFkZXJcIj5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICA8c3RyZWFtLWF2YXRhci1wbGFjZWhvbGRlclxuICAgIHR5cGU9XCJjaGFubmVsXCJcbiAgICBsb2NhdGlvbj1cImNoYW5uZWwtaGVhZGVyXCJcbiAgICBpbWFnZVVybD1cInt7IGFjdGl2ZUNoYW5uZWw/LmRhdGE/LmltYWdlIH19XCJcbiAgICBuYW1lPVwie3sgYXZhdGFyTmFtZSB9fVwiXG4gICAgW2NoYW5uZWxdPVwiYWN0aXZlQ2hhbm5lbFwiXG4gID48L3N0cmVhbS1hdmF0YXItcGxhY2Vob2xkZXI+XG4gIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9faGVhZGVyLWxpdmVzdHJlYW0tbGVmdCBzdHItY2hhdF9fY2hhbm5lbC1oZWFkZXItZW5kXCI+XG4gICAgPHBcbiAgICAgIGRhdGEtdGVzdGlkPVwibmFtZVwiXG4gICAgICBjbGFzcz1cInN0ci1jaGF0X19oZWFkZXItbGl2ZXN0cmVhbS1sZWZ0LS10aXRsZSBzdHItY2hhdF9fY2hhbm5lbC1oZWFkZXItdGl0bGVcIlxuICAgID5cbiAgICAgIHt7IGRpc3BsYXlUZXh0IH19XG4gICAgPC9wPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIGNoYW5uZWxIZWFkZXJJbmZvVGVtcGxhdGUgfHwgZGVmYXVsdENoYW5uZWxJbmZvO1xuICAgICAgICBjb250ZXh0OiBnZXRDaGFubmVsSW5mb0NvbnRleHQoKVxuICAgICAgXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Q2hhbm5lbEluZm8+XG4gICAgICA8cFxuICAgICAgICBkYXRhLXRlc3RpZD1cImluZm9cIlxuICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19oZWFkZXItbGl2ZXN0cmVhbS1sZWZ0LS1tZW1iZXJzIHN0ci1jaGF0X19jaGFubmVsLWhlYWRlci1pbmZvXCJcbiAgICAgID5cbiAgICAgICAge3snc3RyZWFtQ2hhdC57eyBtZW1iZXJDb3VudCB9fSBtZW1iZXJzJyB8IHRyYW5zbGF0ZTptZW1iZXJDb3VudFBhcmFtfX1cbiAgICAgICAge3tjYW5SZWNlaXZlQ29ubmVjdEV2ZW50cyA/ICgnc3RyZWFtQ2hhdC57eyB3YXRjaGVyQ291bnQgfX0gb25saW5lJyB8XG4gICAgICAgIHRyYW5zbGF0ZTp3YXRjaGVyQ291bnRQYXJhbSkgOiAnJ319XG4gICAgICA8L3A+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJjaGFubmVsQWN0aW9uc1RlbXBsYXRlXCI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgY2hhbm5lbEFjdGlvbnNUZW1wbGF0ZTtcbiAgICAgICAgY29udGV4dDogZ2V0Q2hhbm5lbEFjdGlvbnNDb250ZXh0KClcbiAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuIl19
@@ -1,47 +0,0 @@
1
- import { Component } from '@angular/core';
2
- import { map } from 'rxjs/operators';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "../channel.service";
5
- import * as i2 from "../custom-templates.service";
6
- import * as i3 from "../theme.service";
7
- import * as i4 from "@angular/common";
8
- import * as i5 from "../icon/icon.component";
9
- import * as i6 from "../channel-preview/channel-preview.component";
10
- import * as i7 from "../paginated-list/paginated-list.component";
11
- import * as i8 from "@ngx-translate/core";
12
- /**
13
- * The `ChannelList` component renders the list of channels.
14
- */
15
- export class ChannelListComponent {
16
- constructor(channelService, customTemplatesService, themeService) {
17
- this.channelService = channelService;
18
- this.customTemplatesService = customTemplatesService;
19
- this.themeService = themeService;
20
- this.isLoadingMoreChannels = false;
21
- this.subscriptions = [];
22
- this.theme$ = this.themeService.theme$;
23
- this.channels$ = this.channelService.channels$;
24
- this.hasMoreChannels$ = this.channelService.hasMoreChannels$;
25
- this.isError$ = this.channelService.channelQueryState$.pipe(map((s) => !this.isLoadingMoreChannels && s?.state === 'error'));
26
- this.isInitializing$ = this.channelService.channelQueryState$.pipe(map((s) => !this.isLoadingMoreChannels && s?.state === 'in-progress'));
27
- this.subscriptions.push(this.customTemplatesService.channelPreviewTemplate$.subscribe((template) => (this.customChannelPreviewTemplate = template)));
28
- }
29
- ngOnDestroy() {
30
- this.subscriptions.forEach((s) => s.unsubscribe());
31
- }
32
- async loadMoreChannels() {
33
- this.isLoadingMoreChannels = true;
34
- await this.channelService.loadMoreChannels();
35
- this.isLoadingMoreChannels = false;
36
- }
37
- trackByChannelId(_, item) {
38
- return item.cid;
39
- }
40
- }
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.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
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: ChannelListComponent, decorators: [{
44
- type: Component,
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" }]
46
- }], ctorParameters: function () { return [{ type: i1.ChannelService }, { type: i2.CustomTemplatesService }, { type: i3.ThemeService }]; } });
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbm5lbC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9jaGFubmVsLWxpc3QvY2hhbm5lbC1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9jaGFubmVsLWxpc3QvY2hhbm5lbC1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQTBCLE1BQU0sZUFBZSxDQUFDO0FBRWxFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7OztBQU9yQzs7R0FFRztBQU1ILE1BQU0sT0FBTyxvQkFBb0I7SUFVL0IsWUFDVSxjQUE4QixFQUM5QixzQkFBOEMsRUFDOUMsWUFBMEI7UUFGMUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFDOUMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFUcEMsMEJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBSTlCLGtCQUFhLEdBQW1CLEVBQUUsQ0FBQztRQU9qQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7UUFDL0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUM7UUFDN0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FDekQsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLEVBQUUsS0FBSyxLQUFLLE9BQU8sQ0FBQyxDQUNoRSxDQUFDO1FBQ0YsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FDaEUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLEVBQUUsS0FBSyxLQUFLLGFBQWEsQ0FBQyxDQUN0RSxDQUFDO1FBQ0YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ3JCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLENBQzNELENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxRQUFRLENBQUMsQ0FDN0QsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELEtBQUssQ0FBQyxnQkFBZ0I7UUFDcEIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztRQUNsQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM3QyxJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxDQUFTLEVBQUUsSUFBd0M7UUFDbEUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ2xCLENBQUM7O2lIQTNDVSxvQkFBb0I7cUdBQXBCLG9CQUFvQiwyRENqQmpDLG81R0FvR0E7MkZEbkZhLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uRGVzdHJveSwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ2hhbm5lbCB9IGZyb20gJ3N0cmVhbS1jaGF0JztcbmltcG9ydCB7IENoYW5uZWxTZXJ2aWNlIH0gZnJvbSAnLi4vY2hhbm5lbC5zZXJ2aWNlJztcbmltcG9ydCB7IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2UgfSBmcm9tICcuLi9jdXN0b20tdGVtcGxhdGVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGhlbWVTZXJ2aWNlIH0gZnJvbSAnLi4vdGhlbWUuc2VydmljZSc7XG5pbXBvcnQgeyBDaGFubmVsUHJldmlld0NvbnRleHQsIERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3MgfSBmcm9tICcuLi90eXBlcyc7XG5cbi8qKlxuICogVGhlIGBDaGFubmVsTGlzdGAgY29tcG9uZW50IHJlbmRlcnMgdGhlIGxpc3Qgb2YgY2hhbm5lbHMuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N0cmVhbS1jaGFubmVsLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2hhbm5lbC1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVzOiBbXSxcbn0pXG5leHBvcnQgY2xhc3MgQ2hhbm5lbExpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBjaGFubmVscyQ6IE9ic2VydmFibGU8Q2hhbm5lbDxEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzPltdIHwgdW5kZWZpbmVkPjtcbiAgaXNFcnJvciQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIGlzSW5pdGlhbGl6aW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgaXNMb2FkaW5nTW9yZUNoYW5uZWxzID0gZmFsc2U7XG4gIGhhc01vcmVDaGFubmVscyQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIGN1c3RvbUNoYW5uZWxQcmV2aWV3VGVtcGxhdGU6IFRlbXBsYXRlUmVmPENoYW5uZWxQcmV2aWV3Q29udGV4dD4gfCB1bmRlZmluZWQ7XG4gIHRoZW1lJDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2hhbm5lbFNlcnZpY2U6IENoYW5uZWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgY3VzdG9tVGVtcGxhdGVzU2VydmljZTogQ3VzdG9tVGVtcGxhdGVzU2VydmljZSxcbiAgICBwcml2YXRlIHRoZW1lU2VydmljZTogVGhlbWVTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMudGhlbWUkID0gdGhpcy50aGVtZVNlcnZpY2UudGhlbWUkO1xuICAgIHRoaXMuY2hhbm5lbHMkID0gdGhpcy5jaGFubmVsU2VydmljZS5jaGFubmVscyQ7XG4gICAgdGhpcy5oYXNNb3JlQ2hhbm5lbHMkID0gdGhpcy5jaGFubmVsU2VydmljZS5oYXNNb3JlQ2hhbm5lbHMkO1xuICAgIHRoaXMuaXNFcnJvciQgPSB0aGlzLmNoYW5uZWxTZXJ2aWNlLmNoYW5uZWxRdWVyeVN0YXRlJC5waXBlKFxuICAgICAgbWFwKChzKSA9PiAhdGhpcy5pc0xvYWRpbmdNb3JlQ2hhbm5lbHMgJiYgcz8uc3RhdGUgPT09ICdlcnJvcicpXG4gICAgKTtcbiAgICB0aGlzLmlzSW5pdGlhbGl6aW5nJCA9IHRoaXMuY2hhbm5lbFNlcnZpY2UuY2hhbm5lbFF1ZXJ5U3RhdGUkLnBpcGUoXG4gICAgICBtYXAoKHMpID0+ICF0aGlzLmlzTG9hZGluZ01vcmVDaGFubmVscyAmJiBzPy5zdGF0ZSA9PT0gJ2luLXByb2dyZXNzJylcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5jdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLmNoYW5uZWxQcmV2aWV3VGVtcGxhdGUkLnN1YnNjcmliZShcbiAgICAgICAgKHRlbXBsYXRlKSA9PiAodGhpcy5jdXN0b21DaGFubmVsUHJldmlld1RlbXBsYXRlID0gdGVtcGxhdGUpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzKSA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICB9XG5cbiAgYXN5bmMgbG9hZE1vcmVDaGFubmVscygpIHtcbiAgICB0aGlzLmlzTG9hZGluZ01vcmVDaGFubmVscyA9IHRydWU7XG4gICAgYXdhaXQgdGhpcy5jaGFubmVsU2VydmljZS5sb2FkTW9yZUNoYW5uZWxzKCk7XG4gICAgdGhpcy5pc0xvYWRpbmdNb3JlQ2hhbm5lbHMgPSBmYWxzZTtcbiAgfVxuXG4gIHRyYWNrQnlDaGFubmVsSWQoXzogbnVtYmVyLCBpdGVtOiBDaGFubmVsPERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3M+KSB7XG4gICAgcmV0dXJuIGl0ZW0uY2lkO1xuICB9XG59XG4iLCI8ZGl2XG4gICNjb250YWluZXJcbiAgZGF0YS10ZXN0aWQ9XCJjaGFubmVsLWxpc3QtY29udGFpbmVyXCJcbiAgY2xhc3M9XCJzdHItY2hhdCBzdHItY2hhdC1hbmd1bGFyX19jaGFubmVsLWxpc3Qgc3RyLWNoYXRfX2NoYW5uZWwtbGlzdCBzdHItY2hhdC1jaGFubmVsLWxpc3QgbWVzc2FnaW5nIHN0ci1jaGF0X190aGVtZS17e1xuICAgIHRoZW1lJCB8IGFzeW5jXG4gIH19XCJcbj5cbiAgPGRpdlxuICAgICpuZ0lmPVwiXG4gICAgICAoaXNFcnJvciQgfCBhc3luYykgPT09IGZhbHNlICYmIChpc0luaXRpYWxpemluZyQgfCBhc3luYykgPT09IGZhbHNlO1xuICAgICAgZWxzZSBzdGF0dXNJbmRpY2F0b3JcbiAgICBcIlxuICAgIGNsYXNzPVwic3RyLWNoYXRfX2NoYW5uZWwtbGlzdC1tZXNzZW5nZXJcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19jaGFubmVsLWxpc3QtbWVzc2VuZ2VyX19tYWluXCI+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbY2hhbm5lbC1saXN0LXRvcF1cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiIShjaGFubmVscyQgfCBhc3luYyk/Lmxlbmd0aFwiXG4gICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2NoYW5uZWwtbGlzdC1lbXB0eVwiXG4gICAgICA+XG4gICAgICAgIDxzdHJlYW0taWNvbiBpY29uPVwiY2hhdC1idWJibGVcIj48L3N0cmVhbS1pY29uPlxuICAgICAgICA8cCBkYXRhLXRlc3RpZD1cImVtcHR5LWNoYW5uZWwtbGlzdC1pbmRpY2F0b3JcIj5cbiAgICAgICAgICB7eyBcInN0cmVhbUNoYXQuWW91IGhhdmUgbm8gY2hhbm5lbHMgY3VycmVudGx5XCIgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9wPlxuICAgICAgPC9kaXY+XG4gICAgICA8cFxuICAgICAgICAqbmdJZj1cIiEoY2hhbm5lbHMkIHwgYXN5bmMpPy5sZW5ndGhcIlxuICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19jaGFubmVsLWxpc3QtZW1wdHktdjFcIlxuICAgICAgICBkYXRhLXRlc3RpZD1cImVtcHR5LWNoYW5uZWwtbGlzdC1pbmRpY2F0b3JcIlxuICAgICAgPlxuICAgICAgICB7eyBcInN0cmVhbUNoYXQuWW91IGhhdmUgbm8gY2hhbm5lbHMgY3VycmVudGx5XCIgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvcD5cbiAgICAgIDxzdHJlYW0tcGFnaW5hdGVkLWxpc3RcbiAgICAgICAgW2l0ZW1zXT1cIihjaGFubmVscyQgfCBhc3luYykgPz8gW11cIlxuICAgICAgICBbaGFzTW9yZV09XCIoaGFzTW9yZUNoYW5uZWxzJCB8IGFzeW5jKSA/PyBmYWxzZVwiXG4gICAgICAgIFtpc0xvYWRpbmddPVwiaXNMb2FkaW5nTW9yZUNoYW5uZWxzXCJcbiAgICAgICAgKGxvYWRNb3JlKT1cImxvYWRNb3JlQ2hhbm5lbHMoKVwiXG4gICAgICAgIFt0cmFja0J5XT1cInRyYWNrQnlDaGFubmVsSWRcIlxuICAgICAgPlxuICAgICAgICA8bmctdGVtcGxhdGUgbGV0LWNoYW5uZWw9XCJpdGVtXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0VGVtcGxhdGUgbGV0LWNoYW5uZWxJbnB1dD1cImNoYW5uZWxcIj5cbiAgICAgICAgICAgIDxzdHJlYW0tY2hhbm5lbC1wcmV2aWV3XG4gICAgICAgICAgICAgIGRhdGEtdGVzdGNsYXNzPVwiY2hhbm5lbC1wcmV2aWV3XCJcbiAgICAgICAgICAgICAgW2NoYW5uZWxdPVwiY2hhbm5lbElucHV0XCJcbiAgICAgICAgICAgID48L3N0cmVhbS1jaGFubmVsLXByZXZpZXc+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgIGN1c3RvbUNoYW5uZWxQcmV2aWV3VGVtcGxhdGUgfHwgZGVmYXVsdFRlbXBsYXRlO1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgY2hhbm5lbDogY2hhbm5lbCB9XG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L3N0cmVhbS1wYWdpbmF0ZWQtbGlzdD5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltjaGFubmVsLWxpc3QtYm90dG9tXVwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNzdGF0dXNJbmRpY2F0b3I+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0Vycm9yJCB8IGFzeW5jXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNoYXREb3duXCI+PC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNJbml0aWFsaXppbmckIHwgYXN5bmNcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9hZGluZ0NoYW5uZWxzXCI+PC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjaGF0RG93bj5cbiAgPGRpdiBkYXRhLXRlc3RpZD1cImNoYXRkb3duLWNvbnRhaW5lclwiIGNsYXNzPVwic3RyLWNoYXRfX2Rvd25cIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9hZGluZ0NoYW5uZWxzXCI+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNsb2FkaW5nQ2hhbm5lbHM+XG4gIDxkaXZcbiAgICBkYXRhLXRlc3RpZD1cImxvYWRpbmctaW5kaWNhdG9yLWZ1bGwtc2l6ZVwiXG4gICAgY2xhc3M9XCJzdHItY2hhdF9fbG9hZGluZy1jaGFubmVsc1wiXG4gID5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9hZGluZ0NoYW5uZWxcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9hZGluZ0NoYW5uZWxcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9hZGluZ0NoYW5uZWxcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2xvYWRpbmdDaGFubmVsPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJzdHItY2hhdF9fbG9hZGluZy1jaGFubmVscy1pdGVtIHN0ci1jaGF0X19jaGFubmVsLXByZXZpZXctbG9hZGluZ1wiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX2xvYWRpbmctY2hhbm5lbHMtYXZhdGFyXCI+PC9kaXY+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJzdHItY2hhdF9fbG9hZGluZy1jaGFubmVscy1tZXRhIHN0ci1jaGF0X19jaGFubmVsLXByZXZpZXctZW5kLWxvYWRpbmdcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbG9hZGluZy1jaGFubmVscy11c2VybmFtZVwiPjwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19sb2FkaW5nLWNoYW5uZWxzLXN0YXR1c1wiPjwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=