stream-chat-angular 6.4.1 → 7.0.0

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 (173) hide show
  1. package/README.md +12 -18
  2. package/assets/version.d.ts +1 -1
  3. package/{esm2020 → esm2022}/assets/version.mjs +2 -2
  4. package/{esm2020 → esm2022}/lib/attachment-configuration.service.mjs +4 -4
  5. package/esm2022/lib/attachment-list/attachment-list.component.mjs +232 -0
  6. package/esm2022/lib/attachment-preview-list/attachment-preview-list.component.mjs +55 -0
  7. package/{esm2020 → esm2022}/lib/attachment.service.mjs +5 -5
  8. package/{esm2020 → esm2022}/lib/avatar/avatar.component.mjs +5 -5
  9. package/{esm2020 → esm2022}/lib/avatar-placeholder/avatar-placeholder.component.mjs +6 -6
  10. package/esm2022/lib/channel/channel.component.mjs +45 -0
  11. package/{esm2020 → esm2022}/lib/channel-header/channel-header.component.mjs +6 -6
  12. package/esm2022/lib/channel-list/channel-list.component.mjs +47 -0
  13. package/{esm2020 → esm2022}/lib/channel-preview/channel-preview.component.mjs +6 -6
  14. package/esm2022/lib/channel.service.mjs +1575 -0
  15. package/{esm2020 → esm2022}/lib/chat-client.service.mjs +5 -5
  16. package/{esm2020 → esm2022}/lib/custom-templates.service.mjs +5 -5
  17. package/{esm2020 → esm2022}/lib/date-parser.service.mjs +5 -5
  18. package/{esm2020 → esm2022}/lib/icon/icon-placeholder/icon-placeholder.component.mjs +6 -6
  19. package/{esm2020 → esm2022}/lib/icon/icon.component.mjs +5 -5
  20. package/{esm2020 → esm2022}/lib/icon/icon.module.mjs +11 -11
  21. package/{esm2020 → esm2022}/lib/icon/loading-indicator/loading-indicator.component.mjs +5 -5
  22. package/{esm2020 → esm2022}/lib/icon/loading-indicator-placeholder/loading-indicator-placeholder.component.mjs +6 -6
  23. package/esm2022/lib/message/message.component.mjs +501 -0
  24. package/{esm2020 → esm2022}/lib/message-actions-box/message-actions-box.component.mjs +6 -6
  25. package/{esm2020 → esm2022}/lib/message-actions.service.mjs +5 -5
  26. package/{esm2020 → esm2022}/lib/message-blocked/message-blocked.component.mjs +4 -4
  27. package/{esm2020 → esm2022}/lib/message-bounce-prompt/message-bounce-prompt.component.mjs +6 -6
  28. package/{esm2020 → esm2022}/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.mjs +6 -6
  29. package/{esm2020 → esm2022}/lib/message-input/emoji-input.service.mjs +5 -5
  30. package/{esm2020 → esm2022}/lib/message-input/message-input-config.service.mjs +5 -5
  31. package/{esm2020 → esm2022}/lib/message-input/message-input.component.mjs +7 -7
  32. package/{esm2020 → esm2022}/lib/message-input/textarea/textarea.component.mjs +5 -5
  33. package/{esm2020 → esm2022}/lib/message-input/textarea.directive.mjs +5 -5
  34. package/{esm2020 → esm2022}/lib/message-input/voice-recorder.service.mjs +5 -5
  35. package/esm2022/lib/message-list/message-list.component.mjs +717 -0
  36. package/{esm2020 → esm2022}/lib/message-reactions/message-reactions.component.mjs +6 -6
  37. package/{esm2020 → esm2022}/lib/message-reactions-selector/message-reactions-selector.component.mjs +5 -5
  38. package/{esm2020 → esm2022}/lib/message-reactions.service.mjs +5 -5
  39. package/{esm2020 → esm2022}/lib/message-text/message-text.component.mjs +6 -6
  40. package/{esm2020 → esm2022}/lib/message.service.mjs +5 -5
  41. package/{esm2020 → esm2022}/lib/modal/modal.component.mjs +6 -6
  42. package/{esm2020 → esm2022}/lib/modal/stream-modal.module.mjs +5 -5
  43. package/{esm2020 → esm2022}/lib/notification/notification.component.mjs +6 -6
  44. package/{esm2020 → esm2022}/lib/notification-list/notification-list.component.mjs +6 -6
  45. package/{esm2020 → esm2022}/lib/notification-list/stream-notification.module.mjs +5 -5
  46. package/{esm2020 → esm2022}/lib/notification.service.mjs +5 -5
  47. package/{esm2020 → esm2022}/lib/paginated-list/paginated-list.component.mjs +6 -6
  48. package/{esm2020 → esm2022}/lib/paginated-list/stream-paginated-list.module.mjs +5 -5
  49. package/{esm2020 → esm2022}/lib/polls/base-poll.component.mjs +5 -5
  50. package/esm2022/lib/polls/poll/poll.component.mjs +34 -0
  51. package/{esm2020 → esm2022}/lib/polls/poll-actions/add-option/add-option.component.mjs +4 -4
  52. package/{esm2020 → esm2022}/lib/polls/poll-actions/poll-actions.component.mjs +6 -6
  53. package/esm2022/lib/polls/poll-actions/poll-answers-list/poll-answers-list.component.mjs +82 -0
  54. package/esm2022/lib/polls/poll-actions/poll-results/poll-results-list/poll-results-list.component.mjs +63 -0
  55. package/{esm2020 → esm2022}/lib/polls/poll-actions/poll-results/poll-vote/poll-vote.component.mjs +6 -6
  56. package/{esm2020 → esm2022}/lib/polls/poll-actions/poll-results/poll-vote-results-list/poll-vote-results-list.component.mjs +5 -5
  57. package/{esm2020 → esm2022}/lib/polls/poll-actions/upsert-answer/upsert-answer.component.mjs +4 -4
  58. package/esm2022/lib/polls/poll-composer/poll-composer.component.mjs +134 -0
  59. package/{esm2020 → esm2022}/lib/polls/poll-header/poll-header.component.mjs +4 -4
  60. package/{esm2020 → esm2022}/lib/polls/poll-option-selector/poll-option-selector.component.mjs +5 -5
  61. package/{esm2020 → esm2022}/lib/polls/poll-options-list/poll-options-list.component.mjs +5 -5
  62. package/{esm2020 → esm2022}/lib/polls/poll-preview/poll-preview.component.mjs +4 -4
  63. package/{esm2020 → esm2022}/lib/polls/stream-polls.module.mjs +41 -41
  64. package/esm2022/lib/stream-autocomplete-textarea.module.mjs +33 -0
  65. package/{esm2020 → esm2022}/lib/stream-avatar.module.mjs +5 -5
  66. package/{esm2020 → esm2022}/lib/stream-chat.module.mjs +67 -67
  67. package/esm2022/lib/stream-i18n.service.mjs +34 -0
  68. package/esm2022/lib/stream-textarea.module.mjs +31 -0
  69. package/{esm2020 → esm2022}/lib/theme.service.mjs +5 -5
  70. package/{esm2020 → esm2022}/lib/thread/thread.component.mjs +6 -6
  71. package/{esm2020 → esm2022}/lib/transliteration.service.mjs +5 -5
  72. package/{esm2020 → esm2022}/lib/types.mjs +1 -1
  73. package/{esm2020 → esm2022}/lib/user-list/user-list.component.mjs +5 -5
  74. package/{esm2020 → esm2022}/lib/voice-recorder/amplitude-recorder.service.mjs +5 -5
  75. package/{esm2020 → esm2022}/lib/voice-recorder/audio-recorder.service.mjs +5 -5
  76. package/{esm2020 → esm2022}/lib/voice-recorder/transcoder.service.mjs +5 -5
  77. package/{esm2020 → esm2022}/lib/voice-recorder/voice-recorder-wavebar/voice-recorder-wavebar.component.mjs +5 -5
  78. package/{esm2020 → esm2022}/lib/voice-recorder/voice-recorder.component.mjs +6 -6
  79. package/{esm2020 → esm2022}/lib/voice-recorder/voice-recorder.module.mjs +9 -9
  80. package/{esm2020 → esm2022}/lib/voice-recording/voice-recording-wavebar/voice-recording-wavebar.component.mjs +5 -5
  81. package/{esm2020 → esm2022}/lib/voice-recording/voice-recording.component.mjs +6 -6
  82. package/{esm2020 → esm2022}/lib/voice-recording/voice-recording.module.mjs +5 -5
  83. package/{fesm2020 → fesm2022}/stream-chat-angular.mjs +463 -470
  84. package/fesm2022/stream-chat-angular.mjs.map +1 -0
  85. package/lib/attachment-list/attachment-list.component.d.ts +1 -1
  86. package/lib/attachment-preview-list/attachment-preview-list.component.d.ts +1 -1
  87. package/lib/avatar/avatar.component.d.ts +1 -1
  88. package/lib/avatar-placeholder/avatar-placeholder.component.d.ts +1 -1
  89. package/lib/channel-preview/channel-preview.component.d.ts +1 -1
  90. package/lib/chat-client.service.d.ts +1 -1
  91. package/lib/custom-templates.service.d.ts +1 -0
  92. package/lib/icon/icon-placeholder/icon-placeholder.component.d.ts +1 -1
  93. package/lib/icon/icon.component.d.ts +2 -2
  94. package/lib/message/message.component.d.ts +1 -1
  95. package/lib/message-actions-box/message-actions-box.component.d.ts +1 -1
  96. package/lib/message-blocked/message-blocked.component.d.ts +1 -1
  97. package/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.d.ts +1 -1
  98. package/lib/message-input/message-input.component.d.ts +1 -1
  99. package/lib/message-input/textarea/textarea.component.d.ts +1 -1
  100. package/lib/message-input/textarea.directive.d.ts +1 -1
  101. package/lib/message-list/group-styles.d.ts +1 -1
  102. package/lib/message-list/message-list.component.d.ts +1 -1
  103. package/lib/message-reactions/message-reactions.component.d.ts +1 -1
  104. package/lib/message-reactions-selector/message-reactions-selector.component.d.ts +1 -1
  105. package/lib/message-text/message-text.component.d.ts +2 -2
  106. package/lib/modal/modal.component.d.ts +1 -1
  107. package/lib/notification/notification.component.d.ts +1 -1
  108. package/lib/paginated-list/paginated-list.component.d.ts +5 -2
  109. package/lib/polls/base-poll.component.d.ts +1 -1
  110. package/lib/polls/poll-actions/add-option/add-option.component.d.ts +1 -1
  111. package/lib/polls/poll-actions/poll-actions.component.d.ts +2 -2
  112. package/lib/polls/poll-actions/poll-answers-list/poll-answers-list.component.d.ts +1 -1
  113. package/lib/polls/poll-actions/poll-results/poll-vote/poll-vote.component.d.ts +1 -1
  114. package/lib/polls/poll-actions/poll-results/poll-vote-results-list/poll-vote-results-list.component.d.ts +1 -1
  115. package/lib/polls/poll-actions/upsert-answer/upsert-answer.component.d.ts +1 -1
  116. package/lib/polls/poll-composer/poll-composer.component.d.ts +2 -2
  117. package/lib/polls/poll-header/poll-header.component.d.ts +1 -1
  118. package/lib/polls/poll-option-selector/poll-option-selector.component.d.ts +1 -1
  119. package/lib/polls/poll-options-list/poll-options-list.component.d.ts +1 -1
  120. package/lib/types.d.ts +79 -79
  121. package/lib/user-list/user-list.component.d.ts +1 -1
  122. package/lib/voice-recorder/amplitude-recorder.service.d.ts +2 -2
  123. package/lib/voice-recorder/media-recorder.d.ts +2 -2
  124. package/lib/voice-recorder/transcoder.service.d.ts +4 -4
  125. package/lib/voice-recorder/voice-recorder.component.d.ts +1 -1
  126. package/lib/voice-recording/voice-recording-wavebar/voice-recording-wavebar.component.d.ts +1 -1
  127. package/lib/voice-recording/voice-recording.component.d.ts +1 -1
  128. package/package.json +11 -17
  129. package/src/assets/version.ts +1 -1
  130. package/esm2020/lib/attachment-list/attachment-list.component.mjs +0 -232
  131. package/esm2020/lib/attachment-preview-list/attachment-preview-list.component.mjs +0 -55
  132. package/esm2020/lib/channel/channel.component.mjs +0 -45
  133. package/esm2020/lib/channel-list/channel-list.component.mjs +0 -47
  134. package/esm2020/lib/channel.service.mjs +0 -1575
  135. package/esm2020/lib/message/message.component.mjs +0 -501
  136. package/esm2020/lib/message-list/message-list.component.mjs +0 -717
  137. package/esm2020/lib/polls/poll/poll.component.mjs +0 -34
  138. package/esm2020/lib/polls/poll-actions/poll-answers-list/poll-answers-list.component.mjs +0 -82
  139. package/esm2020/lib/polls/poll-actions/poll-results/poll-results-list/poll-results-list.component.mjs +0 -63
  140. package/esm2020/lib/polls/poll-composer/poll-composer.component.mjs +0 -134
  141. package/esm2020/lib/stream-autocomplete-textarea.module.mjs +0 -33
  142. package/esm2020/lib/stream-i18n.service.mjs +0 -41
  143. package/esm2020/lib/stream-textarea.module.mjs +0 -31
  144. package/fesm2015/stream-chat-angular.mjs +0 -10596
  145. package/fesm2015/stream-chat-angular.mjs.map +0 -1
  146. package/fesm2020/stream-chat-angular.mjs.map +0 -1
  147. /package/{esm2020 → esm2022}/assets/i18n/en.mjs +0 -0
  148. /package/{esm2020 → esm2022}/lib/channel-query.mjs +0 -0
  149. /package/{esm2020 → esm2022}/lib/file-utils.mjs +0 -0
  150. /package/{esm2020 → esm2022}/lib/format-duration.mjs +0 -0
  151. /package/{esm2020 → esm2022}/lib/get-channel-display-text.mjs +0 -0
  152. /package/{esm2020 → esm2022}/lib/get-message-translation.mjs +0 -0
  153. /package/{esm2020 → esm2022}/lib/injection-tokens.mjs +0 -0
  154. /package/{esm2020 → esm2022}/lib/is-image-attachment.mjs +0 -0
  155. /package/{esm2020 → esm2022}/lib/is-on-separate-date.mjs +0 -0
  156. /package/{esm2020 → esm2022}/lib/is-safari.mjs +0 -0
  157. /package/{esm2020 → esm2022}/lib/list-users.mjs +0 -0
  158. /package/{esm2020 → esm2022}/lib/message-input/textarea.interface.mjs +0 -0
  159. /package/{esm2020 → esm2022}/lib/message-list/group-styles.mjs +0 -0
  160. /package/{esm2020 → esm2022}/lib/message-preview.mjs +0 -0
  161. /package/{esm2020 → esm2022}/lib/parse-date.mjs +0 -0
  162. /package/{esm2020 → esm2022}/lib/polls/poll-composer/validators.mjs +0 -0
  163. /package/{esm2020 → esm2022}/lib/polls/unique.validator.mjs +0 -0
  164. /package/{esm2020 → esm2022}/lib/read-by.mjs +0 -0
  165. /package/{esm2020 → esm2022}/lib/types-custom.mjs +0 -0
  166. /package/{esm2020 → esm2022}/lib/virtualized-list.service.mjs +0 -0
  167. /package/{esm2020 → esm2022}/lib/virtualized-message-list.service.mjs +0 -0
  168. /package/{esm2020 → esm2022}/lib/voice-recorder/media-recorder.mjs +0 -0
  169. /package/{esm2020 → esm2022}/lib/voice-recorder/mp3-transcoder.mjs +0 -0
  170. /package/{esm2020 → esm2022}/lib/wave-form-sampler.mjs +0 -0
  171. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
  172. /package/{esm2020 → esm2022}/stream-chat-angular.mjs +0 -0
  173. /package/{esm2020 → esm2022}/stream-chat.mjs +0 -0
@@ -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,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 "../paginated-list/paginated-list.component";
10
- import * as i7 from "../channel-preview/channel-preview.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.PaginatedListComponent, selector: "stream-paginated-list", inputs: ["items", "isLoading", "hasMore", "trackBy"], outputs: ["loadMore"] }, { kind: "component", type: i7.ChannelPreviewComponent, selector: "stream-channel-preview", inputs: ["channel"] }, { 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbm5lbC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9jaGFubmVsLWxpc3QvY2hhbm5lbC1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9jaGFubmVsLWxpc3QvY2hhbm5lbC1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQTBCLE1BQU0sZUFBZSxDQUFDO0FBRWxFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7OztBQU9yQzs7R0FFRztBQU1ILE1BQU0sT0FBTyxvQkFBb0I7SUFVL0IsWUFDVSxjQUE4QixFQUM5QixzQkFBOEMsRUFDOUMsWUFBMEI7UUFGMUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFDOUMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFUcEMsMEJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBSTlCLGtCQUFhLEdBQW1CLEVBQUUsQ0FBQztRQU9qQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7UUFDL0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUM7UUFDN0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FDekQsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLEVBQUUsS0FBSyxLQUFLLE9BQU8sQ0FBQyxDQUNoRSxDQUFDO1FBQ0YsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FDaEUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLEVBQUUsS0FBSyxLQUFLLGFBQWEsQ0FBQyxDQUN0RSxDQUFDO1FBQ0YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ3JCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLENBQzNELENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxRQUFRLENBQUMsQ0FDN0QsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELEtBQUssQ0FBQyxnQkFBZ0I7UUFDcEIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztRQUNsQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM3QyxJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxDQUFTLEVBQUUsSUFBYTtRQUN2QyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDbEIsQ0FBQzs7aUhBM0NVLG9CQUFvQjtxR0FBcEIsb0JBQW9CLDJEQ2pCakMsbzVHQW9HQTsyRkRuRmEsb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDaGFubmVsIH0gZnJvbSAnc3RyZWFtLWNoYXQnO1xuaW1wb3J0IHsgQ2hhbm5lbFNlcnZpY2UgfSBmcm9tICcuLi9jaGFubmVsLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3VzdG9tVGVtcGxhdGVzU2VydmljZSB9IGZyb20gJy4uL2N1c3RvbS10ZW1wbGF0ZXMuc2VydmljZSc7XG5pbXBvcnQgeyBUaGVtZVNlcnZpY2UgfSBmcm9tICcuLi90aGVtZS5zZXJ2aWNlJztcbmltcG9ydCB7IENoYW5uZWxQcmV2aWV3Q29udGV4dCB9IGZyb20gJy4uL3R5cGVzJztcblxuLyoqXG4gKiBUaGUgYENoYW5uZWxMaXN0YCBjb21wb25lbnQgcmVuZGVycyB0aGUgbGlzdCBvZiBjaGFubmVscy5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3RyZWFtLWNoYW5uZWwtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGFubmVsLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBDaGFubmVsTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIGNoYW5uZWxzJDogT2JzZXJ2YWJsZTxDaGFubmVsW10gfCB1bmRlZmluZWQ+O1xuICBpc0Vycm9yJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgaXNJbml0aWFsaXppbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBpc0xvYWRpbmdNb3JlQ2hhbm5lbHMgPSBmYWxzZTtcbiAgaGFzTW9yZUNoYW5uZWxzJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgY3VzdG9tQ2hhbm5lbFByZXZpZXdUZW1wbGF0ZTogVGVtcGxhdGVSZWY8Q2hhbm5lbFByZXZpZXdDb250ZXh0PiB8IHVuZGVmaW5lZDtcbiAgdGhlbWUkOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjaGFubmVsU2VydmljZTogQ2hhbm5lbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjdXN0b21UZW1wbGF0ZXNTZXJ2aWNlOiBDdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGhlbWVTZXJ2aWNlOiBUaGVtZVNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy50aGVtZSQgPSB0aGlzLnRoZW1lU2VydmljZS50aGVtZSQ7XG4gICAgdGhpcy5jaGFubmVscyQgPSB0aGlzLmNoYW5uZWxTZXJ2aWNlLmNoYW5uZWxzJDtcbiAgICB0aGlzLmhhc01vcmVDaGFubmVscyQgPSB0aGlzLmNoYW5uZWxTZXJ2aWNlLmhhc01vcmVDaGFubmVscyQ7XG4gICAgdGhpcy5pc0Vycm9yJCA9IHRoaXMuY2hhbm5lbFNlcnZpY2UuY2hhbm5lbFF1ZXJ5U3RhdGUkLnBpcGUoXG4gICAgICBtYXAoKHMpID0+ICF0aGlzLmlzTG9hZGluZ01vcmVDaGFubmVscyAmJiBzPy5zdGF0ZSA9PT0gJ2Vycm9yJylcbiAgICApO1xuICAgIHRoaXMuaXNJbml0aWFsaXppbmckID0gdGhpcy5jaGFubmVsU2VydmljZS5jaGFubmVsUXVlcnlTdGF0ZSQucGlwZShcbiAgICAgIG1hcCgocykgPT4gIXRoaXMuaXNMb2FkaW5nTW9yZUNoYW5uZWxzICYmIHM/LnN0YXRlID09PSAnaW4tcHJvZ3Jlc3MnKVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmN1c3RvbVRlbXBsYXRlc1NlcnZpY2UuY2hhbm5lbFByZXZpZXdUZW1wbGF0ZSQuc3Vic2NyaWJlKFxuICAgICAgICAodGVtcGxhdGUpID0+ICh0aGlzLmN1c3RvbUNoYW5uZWxQcmV2aWV3VGVtcGxhdGUgPSB0ZW1wbGF0ZSlcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goKHMpID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gIH1cblxuICBhc3luYyBsb2FkTW9yZUNoYW5uZWxzKCkge1xuICAgIHRoaXMuaXNMb2FkaW5nTW9yZUNoYW5uZWxzID0gdHJ1ZTtcbiAgICBhd2FpdCB0aGlzLmNoYW5uZWxTZXJ2aWNlLmxvYWRNb3JlQ2hhbm5lbHMoKTtcbiAgICB0aGlzLmlzTG9hZGluZ01vcmVDaGFubmVscyA9IGZhbHNlO1xuICB9XG5cbiAgdHJhY2tCeUNoYW5uZWxJZChfOiBudW1iZXIsIGl0ZW06IENoYW5uZWwpIHtcbiAgICByZXR1cm4gaXRlbS5jaWQ7XG4gIH1cbn1cbiIsIjxkaXZcbiAgI2NvbnRhaW5lclxuICBkYXRhLXRlc3RpZD1cImNoYW5uZWwtbGlzdC1jb250YWluZXJcIlxuICBjbGFzcz1cInN0ci1jaGF0IHN0ci1jaGF0LWFuZ3VsYXJfX2NoYW5uZWwtbGlzdCBzdHItY2hhdF9fY2hhbm5lbC1saXN0IHN0ci1jaGF0LWNoYW5uZWwtbGlzdCBtZXNzYWdpbmcgc3RyLWNoYXRfX3RoZW1lLXt7XG4gICAgdGhlbWUkIHwgYXN5bmNcbiAgfX1cIlxuPlxuICA8ZGl2XG4gICAgKm5nSWY9XCJcbiAgICAgIChpc0Vycm9yJCB8IGFzeW5jKSA9PT0gZmFsc2UgJiYgKGlzSW5pdGlhbGl6aW5nJCB8IGFzeW5jKSA9PT0gZmFsc2U7XG4gICAgICBlbHNlIHN0YXR1c0luZGljYXRvclxuICAgIFwiXG4gICAgY2xhc3M9XCJzdHItY2hhdF9fY2hhbm5lbC1saXN0LW1lc3NlbmdlclwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX2NoYW5uZWwtbGlzdC1tZXNzZW5nZXJfX21haW5cIj5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltjaGFubmVsLWxpc3QtdG9wXVwiPjwvbmctY29udGVudD5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCIhKGNoYW5uZWxzJCB8IGFzeW5jKT8ubGVuZ3RoXCJcbiAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fY2hhbm5lbC1saXN0LWVtcHR5XCJcbiAgICAgID5cbiAgICAgICAgPHN0cmVhbS1pY29uIGljb249XCJjaGF0LWJ1YmJsZVwiPjwvc3RyZWFtLWljb24+XG4gICAgICAgIDxwIGRhdGEtdGVzdGlkPVwiZW1wdHktY2hhbm5lbC1saXN0LWluZGljYXRvclwiPlxuICAgICAgICAgIHt7IFwic3RyZWFtQ2hhdC5Zb3UgaGF2ZSBubyBjaGFubmVscyBjdXJyZW50bHlcIiB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L3A+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxwXG4gICAgICAgICpuZ0lmPVwiIShjaGFubmVscyQgfCBhc3luYyk/Lmxlbmd0aFwiXG4gICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2NoYW5uZWwtbGlzdC1lbXB0eS12MVwiXG4gICAgICAgIGRhdGEtdGVzdGlkPVwiZW1wdHktY2hhbm5lbC1saXN0LWluZGljYXRvclwiXG4gICAgICA+XG4gICAgICAgIHt7IFwic3RyZWFtQ2hhdC5Zb3UgaGF2ZSBubyBjaGFubmVscyBjdXJyZW50bHlcIiB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9wPlxuICAgICAgPHN0cmVhbS1wYWdpbmF0ZWQtbGlzdFxuICAgICAgICBbaXRlbXNdPVwiKGNoYW5uZWxzJCB8IGFzeW5jKSA/PyBbXVwiXG4gICAgICAgIFtoYXNNb3JlXT1cIihoYXNNb3JlQ2hhbm5lbHMkIHwgYXN5bmMpID8/IGZhbHNlXCJcbiAgICAgICAgW2lzTG9hZGluZ109XCJpc0xvYWRpbmdNb3JlQ2hhbm5lbHNcIlxuICAgICAgICAobG9hZE1vcmUpPVwibG9hZE1vcmVDaGFubmVscygpXCJcbiAgICAgICAgW3RyYWNrQnldPVwidHJhY2tCeUNoYW5uZWxJZFwiXG4gICAgICA+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtY2hhbm5lbD1cIml0ZW1cIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRUZW1wbGF0ZSBsZXQtY2hhbm5lbElucHV0PVwiY2hhbm5lbFwiPlxuICAgICAgICAgICAgPHN0cmVhbS1jaGFubmVsLXByZXZpZXdcbiAgICAgICAgICAgICAgZGF0YS10ZXN0Y2xhc3M9XCJjaGFubmVsLXByZXZpZXdcIlxuICAgICAgICAgICAgICBbY2hhbm5lbF09XCJjaGFubmVsSW5wdXRcIlxuICAgICAgICAgICAgPjwvc3RyZWFtLWNoYW5uZWwtcHJldmlldz5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgY3VzdG9tQ2hhbm5lbFByZXZpZXdUZW1wbGF0ZSB8fCBkZWZhdWx0VGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgY29udGV4dDogeyBjaGFubmVsOiBjaGFubmVsIH1cbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvc3RyZWFtLXBhZ2luYXRlZC1saXN0PlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2NoYW5uZWwtbGlzdC1ib3R0b21dXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI3N0YXR1c0luZGljYXRvcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRXJyb3IkIHwgYXN5bmNcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2hhdERvd25cIj48L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0luaXRpYWxpemluZyQgfCBhc3luY1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkaW5nQ2hhbm5lbHNcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2NoYXREb3duPlxuICA8ZGl2IGRhdGEtdGVzdGlkPVwiY2hhdGRvd24tY29udGFpbmVyXCIgY2xhc3M9XCJzdHItY2hhdF9fZG93blwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkaW5nQ2hhbm5lbHNcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2xvYWRpbmdDaGFubmVscz5cbiAgPGRpdlxuICAgIGRhdGEtdGVzdGlkPVwibG9hZGluZy1pbmRpY2F0b3ItZnVsbC1zaXplXCJcbiAgICBjbGFzcz1cInN0ci1jaGF0X19sb2FkaW5nLWNoYW5uZWxzXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkaW5nQ2hhbm5lbFwiPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkaW5nQ2hhbm5lbFwiPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkaW5nQ2hhbm5lbFwiPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbG9hZGluZ0NoYW5uZWw+XG4gIDxkaXZcbiAgICBjbGFzcz1cInN0ci1jaGF0X19sb2FkaW5nLWNoYW5uZWxzLWl0ZW0gc3RyLWNoYXRfX2NoYW5uZWwtcHJldmlldy1sb2FkaW5nXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbG9hZGluZy1jaGFubmVscy1hdmF0YXJcIj48L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInN0ci1jaGF0X19sb2FkaW5nLWNoYW5uZWxzLW1ldGEgc3RyLWNoYXRfX2NoYW5uZWwtcHJldmlldy1lbmQtbG9hZGluZ1wiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19sb2FkaW5nLWNoYW5uZWxzLXVzZXJuYW1lXCI+PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX2xvYWRpbmctY2hhbm5lbHMtc3RhdHVzXCI+PC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==