stream-chat-angular 6.0.0-beta.5 → 6.0.0-rc.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 (202) hide show
  1. package/README.md +2 -2
  2. package/assets/i18n/en.d.ts +0 -1
  3. package/assets/version.d.ts +1 -1
  4. package/{esm2022 → esm2020}/assets/i18n/en.mjs +1 -2
  5. package/{esm2022 → esm2020}/assets/version.mjs +2 -2
  6. package/esm2020/lib/attachment-configuration.service.mjs +182 -0
  7. package/esm2020/lib/attachment-list/attachment-list.component.mjs +232 -0
  8. package/esm2020/lib/attachment-preview-list/attachment-preview-list.component.mjs +55 -0
  9. package/esm2020/lib/attachment.service.mjs +481 -0
  10. package/esm2020/lib/avatar/avatar.component.mjs +160 -0
  11. package/esm2020/lib/avatar-placeholder/avatar-placeholder.component.mjs +66 -0
  12. package/esm2020/lib/channel/channel.component.mjs +45 -0
  13. package/esm2020/lib/channel-header/channel-header.component.mjs +72 -0
  14. package/esm2020/lib/channel-list/channel-list.component.mjs +47 -0
  15. package/esm2020/lib/channel-preview/channel-preview.component.mjs +155 -0
  16. package/esm2020/lib/channel-query.mjs +77 -0
  17. package/esm2020/lib/channel.service.mjs +1561 -0
  18. package/esm2020/lib/chat-client.service.mjs +233 -0
  19. package/esm2020/lib/custom-templates.service.mjs +244 -0
  20. package/{esm2022 → esm2020}/lib/date-parser.service.mjs +5 -5
  21. package/esm2020/lib/file-utils.mjs +35 -0
  22. package/{esm2022 → esm2020}/lib/get-channel-display-text.mjs +1 -1
  23. package/esm2020/lib/get-message-translation.mjs +12 -0
  24. package/esm2020/lib/icon/icon-placeholder/icon-placeholder.component.mjs +28 -0
  25. package/{esm2022 → esm2020}/lib/icon/icon.component.mjs +5 -5
  26. package/{esm2022 → esm2020}/lib/icon/icon.module.mjs +11 -11
  27. package/{esm2022 → esm2020}/lib/icon/loading-indicator/loading-indicator.component.mjs +5 -5
  28. package/esm2020/lib/icon/loading-indicator-placeholder/loading-indicator-placeholder.component.mjs +20 -0
  29. package/{esm2022 → esm2020}/lib/list-users.mjs +1 -1
  30. package/esm2020/lib/message/message.component.mjs +486 -0
  31. package/esm2020/lib/message-actions-box/message-actions-box.component.mjs +123 -0
  32. package/esm2020/lib/message-actions.service.mjs +187 -0
  33. package/esm2020/lib/message-bounce-prompt/message-bounce-prompt.component.mjs +71 -0
  34. package/esm2020/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.mjs +333 -0
  35. package/{esm2022 → esm2020}/lib/message-input/emoji-input.service.mjs +7 -7
  36. package/esm2020/lib/message-input/message-input-config.service.mjs +50 -0
  37. package/esm2020/lib/message-input/message-input.component.mjs +507 -0
  38. package/{esm2022 → esm2020}/lib/message-input/textarea/textarea.component.mjs +6 -6
  39. package/{esm2022 → esm2020}/lib/message-input/textarea.directive.mjs +5 -5
  40. package/{esm2022 → esm2020}/lib/message-input/voice-recorder.service.mjs +5 -5
  41. package/{esm2022 → esm2020}/lib/message-list/group-styles.mjs +1 -1
  42. package/esm2020/lib/message-list/message-list.component.mjs +717 -0
  43. package/esm2020/lib/message-preview.mjs +21 -0
  44. package/esm2020/lib/message-reactions/message-reactions.component.mjs +168 -0
  45. package/esm2020/lib/message-reactions-selector/message-reactions-selector.component.mjs +61 -0
  46. package/{esm2022 → esm2020}/lib/message-reactions.service.mjs +6 -6
  47. package/esm2020/lib/message-text/message-text.component.mjs +143 -0
  48. package/esm2020/lib/message.service.mjs +43 -0
  49. package/{esm2022 → esm2020}/lib/modal/modal.component.mjs +6 -6
  50. package/esm2020/lib/notification/notification.component.mjs +20 -0
  51. package/esm2020/lib/notification-list/notification-list.component.mjs +36 -0
  52. package/{esm2022 → esm2020}/lib/notification.service.mjs +6 -6
  53. package/esm2020/lib/paginated-list/paginated-list.component.mjs +94 -0
  54. package/{esm2022 → esm2020}/lib/parse-date.mjs +1 -1
  55. package/esm2020/lib/read-by.mjs +12 -0
  56. package/esm2020/lib/stream-autocomplete-textarea.module.mjs +33 -0
  57. package/{esm2022 → esm2020}/lib/stream-avatar.module.mjs +5 -5
  58. package/{esm2022 → esm2020}/lib/stream-chat.module.mjs +59 -59
  59. package/{esm2022 → esm2020}/lib/stream-i18n.service.mjs +6 -6
  60. package/esm2020/lib/stream-textarea.module.mjs +31 -0
  61. package/{esm2022 → esm2020}/lib/theme.service.mjs +6 -6
  62. package/esm2020/lib/thread/thread.component.mjs +51 -0
  63. package/{esm2022 → esm2020}/lib/transliteration.service.mjs +5 -5
  64. package/esm2020/lib/types-custom.mjs +2 -0
  65. package/esm2020/lib/types.mjs +2 -0
  66. package/esm2020/lib/user-list/user-list.component.mjs +47 -0
  67. package/esm2020/lib/virtualized-list.service.mjs +271 -0
  68. package/{esm2022 → esm2020}/lib/virtualized-message-list.service.mjs +1 -1
  69. package/{esm2022 → esm2020}/lib/voice-recorder/amplitude-recorder.service.mjs +5 -5
  70. package/{esm2022 → esm2020}/lib/voice-recorder/audio-recorder.service.mjs +5 -5
  71. package/{esm2022 → esm2020}/lib/voice-recorder/media-recorder.mjs +1 -1
  72. package/esm2020/lib/voice-recorder/mp3-transcoder.mjs +61 -0
  73. package/esm2020/lib/voice-recorder/transcoder.service.mjs +121 -0
  74. package/esm2020/lib/voice-recorder/voice-recorder-wavebar/voice-recorder-wavebar.component.mjs +35 -0
  75. package/esm2020/lib/voice-recorder/voice-recorder.component.mjs +80 -0
  76. package/{esm2022 → esm2020}/lib/voice-recorder/voice-recorder.module.mjs +9 -9
  77. package/esm2020/lib/voice-recording/voice-recording-wavebar/voice-recording-wavebar.component.mjs +112 -0
  78. package/esm2020/lib/voice-recording/voice-recording.component.mjs +91 -0
  79. package/{esm2022 → esm2020}/lib/voice-recording/voice-recording.module.mjs +5 -5
  80. package/{esm2022 → esm2020}/lib/wave-form-sampler.mjs +1 -1
  81. package/esm2020/public-api.mjs +86 -0
  82. package/esm2020/stream-chat.mjs +2 -0
  83. package/fesm2015/stream-chat-angular.mjs +9171 -0
  84. package/fesm2015/stream-chat-angular.mjs.map +1 -0
  85. package/{fesm2022 → fesm2020}/stream-chat-angular.mjs +1251 -961
  86. package/fesm2020/stream-chat-angular.mjs.map +1 -0
  87. package/lib/attachment-configuration.service.d.ts +12 -12
  88. package/lib/attachment-list/attachment-list.component.d.ts +15 -10
  89. package/lib/attachment-preview-list/attachment-preview-list.component.d.ts +1 -1
  90. package/lib/attachment.service.d.ts +12 -10
  91. package/lib/avatar/avatar.component.d.ts +7 -7
  92. package/lib/avatar-placeholder/avatar-placeholder.component.d.ts +5 -5
  93. package/lib/channel/channel.component.d.ts +1 -1
  94. package/lib/channel-header/channel-header.component.d.ts +2 -2
  95. package/lib/channel-list/channel-list.component.d.ts +3 -4
  96. package/lib/channel-preview/channel-preview.component.d.ts +6 -6
  97. package/lib/channel-query.d.ts +26 -0
  98. package/lib/channel.service.d.ts +146 -154
  99. package/lib/chat-client.service.d.ts +17 -15
  100. package/lib/custom-templates.service.d.ts +50 -50
  101. package/lib/get-channel-display-text.d.ts +1 -2
  102. package/lib/get-message-translation.d.ts +3 -3
  103. package/lib/icon/icon-placeholder/icon-placeholder.component.d.ts +2 -2
  104. package/lib/icon/icon.component.d.ts +2 -2
  105. package/lib/icon/loading-indicator-placeholder/loading-indicator-placeholder.component.d.ts +1 -1
  106. package/lib/message/message.component.d.ts +6 -6
  107. package/lib/message-actions-box/message-actions-box.component.d.ts +5 -4
  108. package/lib/message-actions.service.d.ts +10 -10
  109. package/lib/message-bounce-prompt/message-bounce-prompt.component.d.ts +1 -1
  110. package/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.d.ts +5 -5
  111. package/lib/message-input/emoji-input.service.d.ts +2 -2
  112. package/lib/message-input/message-input-config.service.d.ts +3 -3
  113. package/lib/message-input/message-input.component.d.ts +10 -33
  114. package/lib/message-input/textarea/textarea.component.d.ts +3 -3
  115. package/lib/message-input/textarea.directive.d.ts +1 -1
  116. package/lib/message-list/group-styles.d.ts +1 -1
  117. package/lib/message-list/message-list.component.d.ts +3 -2
  118. package/lib/message-preview.d.ts +2 -3
  119. package/lib/message-reactions/message-reactions.component.d.ts +9 -8
  120. package/lib/message-reactions-selector/message-reactions-selector.component.d.ts +6 -5
  121. package/lib/message-reactions.service.d.ts +4 -4
  122. package/lib/message-text/message-text.component.d.ts +5 -5
  123. package/lib/message.service.d.ts +6 -7
  124. package/lib/modal/modal.component.d.ts +1 -1
  125. package/lib/notification/notification.component.d.ts +2 -2
  126. package/lib/notification-list/notification-list.component.d.ts +1 -0
  127. package/lib/notification.service.d.ts +1 -1
  128. package/lib/paginated-list/paginated-list.component.d.ts +2 -5
  129. package/lib/read-by.d.ts +1 -2
  130. package/lib/stream-i18n.service.d.ts +1 -1
  131. package/lib/theme.service.d.ts +1 -1
  132. package/lib/thread/thread.component.d.ts +3 -3
  133. package/lib/types-custom.d.ts +15 -0
  134. package/lib/types.d.ts +116 -155
  135. package/lib/user-list/user-list.component.d.ts +2 -3
  136. package/lib/virtualized-message-list.service.d.ts +1 -1
  137. package/lib/voice-recorder/amplitude-recorder.service.d.ts +2 -2
  138. package/lib/voice-recorder/media-recorder.d.ts +2 -2
  139. package/lib/voice-recorder/transcoder.service.d.ts +4 -4
  140. package/lib/voice-recorder/voice-recorder-wavebar/voice-recorder-wavebar.component.d.ts +1 -0
  141. package/lib/voice-recorder/voice-recorder.component.d.ts +2 -2
  142. package/lib/voice-recording/voice-recording-wavebar/voice-recording-wavebar.component.d.ts +3 -3
  143. package/lib/voice-recording/voice-recording.component.d.ts +2 -3
  144. package/package.json +21 -15
  145. package/public-api.d.ts +3 -0
  146. package/src/assets/i18n/en.ts +0 -1
  147. package/src/assets/version.ts +1 -1
  148. package/esm2022/lib/attachment-configuration.service.mjs +0 -185
  149. package/esm2022/lib/attachment-list/attachment-list.component.mjs +0 -212
  150. package/esm2022/lib/attachment-preview-list/attachment-preview-list.component.mjs +0 -55
  151. package/esm2022/lib/attachment.service.mjs +0 -479
  152. package/esm2022/lib/avatar/avatar.component.mjs +0 -157
  153. package/esm2022/lib/avatar-placeholder/avatar-placeholder.component.mjs +0 -66
  154. package/esm2022/lib/channel/channel.component.mjs +0 -45
  155. package/esm2022/lib/channel-header/channel-header.component.mjs +0 -72
  156. package/esm2022/lib/channel-list/channel-list.component.mjs +0 -50
  157. package/esm2022/lib/channel-preview/channel-preview.component.mjs +0 -150
  158. package/esm2022/lib/channel.service.mjs +0 -1393
  159. package/esm2022/lib/chat-client.service.mjs +0 -227
  160. package/esm2022/lib/custom-templates.service.mjs +0 -244
  161. package/esm2022/lib/file-utils.mjs +0 -35
  162. package/esm2022/lib/get-message-translation.mjs +0 -12
  163. package/esm2022/lib/icon/icon-placeholder/icon-placeholder.component.mjs +0 -28
  164. package/esm2022/lib/icon/loading-indicator-placeholder/loading-indicator-placeholder.component.mjs +0 -20
  165. package/esm2022/lib/message/message.component.mjs +0 -486
  166. package/esm2022/lib/message-actions-box/message-actions-box.component.mjs +0 -120
  167. package/esm2022/lib/message-actions.service.mjs +0 -187
  168. package/esm2022/lib/message-bounce-prompt/message-bounce-prompt.component.mjs +0 -71
  169. package/esm2022/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.mjs +0 -333
  170. package/esm2022/lib/message-input/message-input-config.service.mjs +0 -50
  171. package/esm2022/lib/message-input/message-input.component.mjs +0 -507
  172. package/esm2022/lib/message-list/message-list.component.mjs +0 -715
  173. package/esm2022/lib/message-preview.mjs +0 -21
  174. package/esm2022/lib/message-reactions/message-reactions.component.mjs +0 -165
  175. package/esm2022/lib/message-reactions-selector/message-reactions-selector.component.mjs +0 -57
  176. package/esm2022/lib/message-text/message-text.component.mjs +0 -143
  177. package/esm2022/lib/message.service.mjs +0 -43
  178. package/esm2022/lib/notification/notification.component.mjs +0 -20
  179. package/esm2022/lib/notification-list/notification-list.component.mjs +0 -33
  180. package/esm2022/lib/paginated-list/paginated-list.component.mjs +0 -94
  181. package/esm2022/lib/read-by.mjs +0 -12
  182. package/esm2022/lib/stream-autocomplete-textarea.module.mjs +0 -33
  183. package/esm2022/lib/stream-textarea.module.mjs +0 -31
  184. package/esm2022/lib/thread/thread.component.mjs +0 -51
  185. package/esm2022/lib/types.mjs +0 -2
  186. package/esm2022/lib/user-list/user-list.component.mjs +0 -47
  187. package/esm2022/lib/virtualized-list.service.mjs +0 -273
  188. package/esm2022/lib/voice-recorder/mp3-transcoder.mjs +0 -61
  189. package/esm2022/lib/voice-recorder/transcoder.service.mjs +0 -121
  190. package/esm2022/lib/voice-recorder/voice-recorder-wavebar/voice-recorder-wavebar.component.mjs +0 -32
  191. package/esm2022/lib/voice-recorder/voice-recorder.component.mjs +0 -80
  192. package/esm2022/lib/voice-recording/voice-recording-wavebar/voice-recording-wavebar.component.mjs +0 -112
  193. package/esm2022/lib/voice-recording/voice-recording.component.mjs +0 -91
  194. package/esm2022/public-api.mjs +0 -82
  195. package/fesm2022/stream-chat-angular.mjs.map +0 -1
  196. /package/{esm2022 → esm2020}/lib/format-duration.mjs +0 -0
  197. /package/{esm2022 → esm2020}/lib/injection-tokens.mjs +0 -0
  198. /package/{esm2022 → esm2020}/lib/is-image-attachment.mjs +0 -0
  199. /package/{esm2022 → esm2020}/lib/is-on-separate-date.mjs +0 -0
  200. /package/{esm2022 → esm2020}/lib/is-safari.mjs +0 -0
  201. /package/{esm2022 → esm2020}/lib/message-input/textarea.interface.mjs +0 -0
  202. /package/{esm2022 → esm2020}/stream-chat-angular.mjs +0 -0
@@ -1,120 +0,0 @@
1
- import { Component, Input, } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "../custom-templates.service";
4
- import * as i2 from "../message-actions.service";
5
- import * as i3 from "@angular/common";
6
- import * as i4 from "../message-reactions-selector/message-reactions-selector.component";
7
- import * as i5 from "@ngx-translate/core";
8
- /**
9
- * The `MessageActionsBox` component displays a list of message actions (i.e edit), that can be opened or closed. You can find the [list of the supported actions](/chat/docs/sdk/angular/concepts/message-interactions/) in the message interaction guide.
10
- */
11
- export class MessageActionsBoxComponent {
12
- constructor(customTemplatesService, messageActionsService, cdRef) {
13
- this.customTemplatesService = customTemplatesService;
14
- this.messageActionsService = messageActionsService;
15
- this.cdRef = cdRef;
16
- /**
17
- * Indicates if the message actions are belonging to a message that was sent by the current user or not.
18
- */
19
- this.isMine = false;
20
- /**
21
- * The list of [channel capabilities](/chat/docs/javascript/channel_capabilities/) that are enabled for the current user, the list of [supported interactions](/chat/docs/sdk/angular/concepts/message-interactions) can be found in our message interaction guide. Unathorized actions won't be displayed on the UI.
22
- */
23
- this.enabledActions = [];
24
- this.visibleMessageActionItems = [];
25
- this.isEditModalOpen = false;
26
- this.customActions = [];
27
- this.subscriptions = [];
28
- this.isViewInited = false;
29
- this.messageActionItems = this.messageActionsService.defaultActions;
30
- }
31
- ngOnChanges(changes) {
32
- if (changes.isMine || changes.enabledActions || changes.message) {
33
- this.setVisibleActions();
34
- }
35
- }
36
- ngOnInit() {
37
- this.subscriptions.push(this.messageActionsService.customActions$.subscribe((actions) => {
38
- this.customActions = actions;
39
- this.setVisibleActions();
40
- if (this.isViewInited) {
41
- this.cdRef.detectChanges();
42
- }
43
- }));
44
- this.subscriptions.push(this.messageActionsService.messageToEdit$.subscribe((m) => {
45
- let isEditModalOpen = false;
46
- if (m && m.id === this.message?.id) {
47
- isEditModalOpen = true;
48
- }
49
- if (isEditModalOpen !== this.isEditModalOpen) {
50
- this.isEditModalOpen = isEditModalOpen;
51
- if (this.isViewInited) {
52
- this.cdRef.detectChanges();
53
- }
54
- }
55
- }));
56
- }
57
- ngAfterViewInit() {
58
- this.isViewInited = true;
59
- }
60
- ngOnDestroy() {
61
- this.subscriptions.forEach((s) => s.unsubscribe());
62
- }
63
- getActionLabel(actionLabelOrTranslationKey) {
64
- return typeof actionLabelOrTranslationKey === 'string'
65
- ? actionLabelOrTranslationKey
66
- : actionLabelOrTranslationKey(this.message);
67
- }
68
- getReactionSelectorTemplateContext() {
69
- return {
70
- messageId: this.message?.id,
71
- ownReactions: this.message?.own_reactions || [],
72
- };
73
- }
74
- getMessageActionTemplateContext(item) {
75
- if (this.isReactAction(item)) {
76
- return {};
77
- }
78
- else {
79
- return {
80
- actionHandler: item.actionHandler,
81
- actionHandlerExtraParams: {
82
- isMine: this.isMine,
83
- messageTextHtmlElement: this.messageTextHtmlElement,
84
- },
85
- actionName: item.actionName,
86
- message: this.message,
87
- actionLabelOrTranslationKey: item.actionLabelOrTranslationKey,
88
- };
89
- }
90
- }
91
- isReactAction(item) {
92
- return item.actionName === 'react';
93
- }
94
- setVisibleActions() {
95
- if (!this.message) {
96
- this.visibleMessageActionItems = [];
97
- }
98
- else {
99
- this.visibleMessageActionItems = [
100
- ...this.messageActionItems,
101
- ...this.customActions,
102
- ].filter((item) => item.isVisible(this.enabledActions, this.isMine, this.message));
103
- }
104
- }
105
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0", ngImport: i0, type: MessageActionsBoxComponent, deps: [{ token: i1.CustomTemplatesService }, { token: i2.MessageActionsService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
106
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.0", type: MessageActionsBoxComponent, selector: "stream-message-actions-box", inputs: { isMine: "isMine", message: "message", messageTextHtmlElement: "messageTextHtmlElement", enabledActions: "enabledActions" }, usesOnChanges: true, ngImport: i0, template: "<div\n #actionBox\n data-testid=\"action-box\"\n class=\"str-chat__message-actions-box str-chat__message-actions-box-angular str-chat__message-actions-box--open\"\n>\n <ul class=\"str-chat__message-actions-list\">\n @for (item of visibleMessageActionItems; track item.actionName) {\n @switch (item.actionName) {\n @case (\"react\") {\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.messageReactionsSelectorTemplate$\n | async) || defaultReactionSelector;\n context: getReactionSelectorTemplateContext()\n \"\n />\n }\n @default {\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.messageActionsBoxItemTemplate$ | async) ||\n defaultMessageActionItem;\n context: getMessageActionTemplateContext(item)\n \"\n />\n }\n }\n }\n </ul>\n</div>\n\n<ng-template\n #defaultMessageActionItem\n let-actionName=\"actionName\"\n let-actionHandler=\"actionHandler\"\n let-actionLabelOrTranslationKey=\"actionLabelOrTranslationKey\"\n let-actionHandlerExtraParams=\"actionHandlerExtraParams\"\n>\n <button\n class=\"str-chat__message-actions-list-item-button\"\n [attr.data-testid]=\"actionName + '-action'\"\n (click)=\"actionHandler(message, actionHandlerExtraParams)\"\n >\n <li class=\"str-chat__message-actions-list-item\">\n {{ getActionLabel(actionLabelOrTranslationKey) | translate }}\n </li>\n </button>\n</ng-template>\n\n<ng-template\n #defaultReactionSelector\n let-messageId=\"messageId\"\n let-ownReactions=\"ownReactions\"\n>\n <stream-message-reactions-selector\n [messageId]=\"message?.id\"\n [ownReactions]=\"message?.own_reactions || []\"\n />\n</ng-template>\n", dependencies: [{ kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.MessageReactionsSelectorComponent, selector: "stream-message-reactions-selector", inputs: ["ownReactions", "messageId"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }] }); }
107
- }
108
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0", ngImport: i0, type: MessageActionsBoxComponent, decorators: [{
109
- type: Component,
110
- args: [{ selector: 'stream-message-actions-box', template: "<div\n #actionBox\n data-testid=\"action-box\"\n class=\"str-chat__message-actions-box str-chat__message-actions-box-angular str-chat__message-actions-box--open\"\n>\n <ul class=\"str-chat__message-actions-list\">\n @for (item of visibleMessageActionItems; track item.actionName) {\n @switch (item.actionName) {\n @case (\"react\") {\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.messageReactionsSelectorTemplate$\n | async) || defaultReactionSelector;\n context: getReactionSelectorTemplateContext()\n \"\n />\n }\n @default {\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.messageActionsBoxItemTemplate$ | async) ||\n defaultMessageActionItem;\n context: getMessageActionTemplateContext(item)\n \"\n />\n }\n }\n }\n </ul>\n</div>\n\n<ng-template\n #defaultMessageActionItem\n let-actionName=\"actionName\"\n let-actionHandler=\"actionHandler\"\n let-actionLabelOrTranslationKey=\"actionLabelOrTranslationKey\"\n let-actionHandlerExtraParams=\"actionHandlerExtraParams\"\n>\n <button\n class=\"str-chat__message-actions-list-item-button\"\n [attr.data-testid]=\"actionName + '-action'\"\n (click)=\"actionHandler(message, actionHandlerExtraParams)\"\n >\n <li class=\"str-chat__message-actions-list-item\">\n {{ getActionLabel(actionLabelOrTranslationKey) | translate }}\n </li>\n </button>\n</ng-template>\n\n<ng-template\n #defaultReactionSelector\n let-messageId=\"messageId\"\n let-ownReactions=\"ownReactions\"\n>\n <stream-message-reactions-selector\n [messageId]=\"message?.id\"\n [ownReactions]=\"message?.own_reactions || []\"\n />\n</ng-template>\n" }]
111
- }], ctorParameters: () => [{ type: i1.CustomTemplatesService }, { type: i2.MessageActionsService }, { type: i0.ChangeDetectorRef }], propDecorators: { isMine: [{
112
- type: Input
113
- }], message: [{
114
- type: Input
115
- }], messageTextHtmlElement: [{
116
- type: Input
117
- }], enabledActions: [{
118
- type: Input
119
- }] } });
120
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1hY3Rpb25zLWJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvbWVzc2FnZS1hY3Rpb25zLWJveC9tZXNzYWdlLWFjdGlvbnMtYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLWFjdGlvbnMtYm94L21lc3NhZ2UtYWN0aW9ucy1ib3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLFNBQVMsRUFDVCxLQUFLLEdBTU4sTUFBTSxlQUFlLENBQUM7Ozs7Ozs7QUFZdkI7O0dBRUc7QUFNSCxNQUFNLE9BQU8sMEJBQTBCO0lBbUNyQyxZQUNrQixzQkFBOEMsRUFDdEQscUJBQTRDLEVBQzVDLEtBQXdCO1FBRmhCLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFDdEQsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUM1QyxVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQW5DbEM7O1dBRUc7UUFDTSxXQUFNLEdBQUcsS0FBSyxDQUFDO1FBU3hCOztXQUVHO1FBQ00sbUJBQWMsR0FBYSxFQUFFLENBQUM7UUFJdkMsOEJBQXlCLEdBSW5CLEVBQUUsQ0FBQztRQUNULG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLGtCQUFhLEdBQThCLEVBQUUsQ0FBQztRQUt0QyxrQkFBYSxHQUFtQixFQUFFLENBQUM7UUFDbkMsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFNM0IsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxjQUFjLENBQUM7SUFDdEUsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLGNBQWMs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QUcsSUFBSSxDQUFDLGtCQUFrQjtnQkFDMUIsR0FBRyxJQUFJLENBQUMsYUFBYTthQUN0QixDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQ2hCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsQ0FDaEUsQ0FBQztTQUNIO0lBQ0gsQ0FBQzs4R0E1SVUsMEJBQTBCO2tHQUExQiwwQkFBMEIsNk5DOUJ2Qyx5ekRBMkRBOzsyRkQ3QmEsMEJBQTBCO2tCQUx0QyxTQUFTOytCQUNFLDRCQUE0QjsrSkFVN0IsTUFBTTtzQkFBZCxLQUFLO2dCQUlHLE9BQU87c0JBQWYsS0FBSztnQkFJRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBSUcsY0FBYztzQkFBdEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2UgfSBmcm9tICcuLi9jdXN0b20tdGVtcGxhdGVzLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQ3VzdG9tTWVzc2FnZUFjdGlvbkl0ZW0sXG4gIE1lc3NhZ2VBY3Rpb25Cb3hJdGVtQ29udGV4dCxcbiAgTWVzc2FnZUFjdGlvbkl0ZW0sXG4gIE1lc3NhZ2VSZWFjdGlvbkFjdGlvbkl0ZW0sXG4gIE1lc3NhZ2VSZWFjdGlvbnNTZWxlY3RvckNvbnRleHQsXG4gIFN0cmVhbU1lc3NhZ2UsXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IE1lc3NhZ2VBY3Rpb25zU2VydmljZSB9IGZyb20gJy4uL21lc3NhZ2UtYWN0aW9ucy5zZXJ2aWNlJztcbi8qKlxuICogVGhlIGBNZXNzYWdlQWN0aW9uc0JveGAgY29tcG9uZW50IGRpc3BsYXlzIGEgbGlzdCBvZiBtZXNzYWdlIGFjdGlvbnMgKGkuZSBlZGl0KSwgdGhhdCBjYW4gYmUgb3BlbmVkIG9yIGNsb3NlZC4gWW91IGNhbiBmaW5kIHRoZSBbbGlzdCBvZiB0aGUgc3VwcG9ydGVkIGFjdGlvbnNdKC9jaGF0L2RvY3Mvc2RrL2FuZ3VsYXIvY29uY2VwdHMvbWVzc2FnZS1pbnRlcmFjdGlvbnMvKSBpbiB0aGUgbWVzc2FnZSBpbnRlcmFjdGlvbiBndWlkZS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3RyZWFtLW1lc3NhZ2UtYWN0aW9ucy1ib3gnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWVzc2FnZS1hY3Rpb25zLWJveC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlczogW10sXG59KVxuZXhwb3J0IGNsYXNzIE1lc3NhZ2VBY3Rpb25zQm94Q29tcG9uZW50XG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdFxue1xuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBtZXNzYWdlIGFjdGlvbnMgYXJlIGJlbG9uZ2luZyB0byBhIG1lc3NhZ2UgdGhhdCB3YXMgc2VudCBieSB0aGUgY3VycmVudCB1c2VyIG9yIG5vdC5cbiAgICovXG4gIEBJbnB1dCgpIGlzTWluZSA9IGZhbHNlO1xuICAvKipcbiAgICogVGhlIG1lc3NhZ2UgdGhlIGFjdGlvbnMgd2lsbCBiZSBleGVjdXRlZCBvblxuICAgKi9cbiAgQElucHV0KCkgbWVzc2FnZTogU3RyZWFtTWVzc2FnZSB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIFRoZSBIVE1MIGVsZW1lbnQgd2hpY2ggY29udGFpbnMgdGhlIG1lc3NhZ2UgdGV4dCwgaXQncyB1c2VkIGZvciB0aGUgXCJjb3B5IG1lc3NhZ2UgdGV4dFwiIGFjdGlvblxuICAgKi9cbiAgQElucHV0KCkgbWVzc2FnZVRleHRIdG1sRWxlbWVudDogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBbY2hhbm5lbCBjYXBhYmlsaXRpZXNdKC9jaGF0L2RvY3MvamF2YXNjcmlwdC9jaGFubmVsX2NhcGFiaWxpdGllcy8pIHRoYXQgYXJlIGVuYWJsZWQgZm9yIHRoZSBjdXJyZW50IHVzZXIsIHRoZSBsaXN0IG9mIFtzdXBwb3J0ZWQgaW50ZXJhY3Rpb25zXSgvY2hhdC9kb2NzL3Nkay9hbmd1bGFyL2NvbmNlcHRzL21lc3NhZ2UtaW50ZXJhY3Rpb25zKSBjYW4gYmUgZm91bmQgaW4gb3VyIG1lc3NhZ2UgaW50ZXJhY3Rpb24gZ3VpZGUuIFVuYXRob3JpemVkIGFjdGlvbnMgd29uJ3QgYmUgZGlzcGxheWVkIG9uIHRoZSBVSS5cbiAgICovXG4gIEBJbnB1dCgpIGVuYWJsZWRBY3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuICBtZXNzYWdlQWN0aW9uSXRlbVRlbXBsYXRlOlxuICAgIHwgVGVtcGxhdGVSZWY8TWVzc2FnZUFjdGlvbkJveEl0ZW1Db250ZXh0PlxuICAgIHwgdW5kZWZpbmVkO1xuICB2aXNpYmxlTWVzc2FnZUFjdGlvbkl0ZW1zOiAoXG4gICAgfCBNZXNzYWdlQWN0aW9uSXRlbVxuICAgIHwgQ3VzdG9tTWVzc2FnZUFjdGlvbkl0ZW1cbiAgICB8IE1lc3NhZ2VSZWFjdGlvbkFjdGlvbkl0ZW1cbiAgKVtdID0gW107XG4gIGlzRWRpdE1vZGFsT3BlbiA9IGZhbHNlO1xuICBjdXN0b21BY3Rpb25zOiBDdXN0b21NZXNzYWdlQWN0aW9uSXRlbVtdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZUFjdGlvbkl0ZW1zOiAoXG4gICAgfCBNZXNzYWdlQWN0aW9uSXRlbVxuICAgIHwgTWVzc2FnZVJlYWN0aW9uQWN0aW9uSXRlbVxuICApW107XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcbiAgcHJpdmF0ZSBpc1ZpZXdJbml0ZWQgPSBmYWxzZTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IGN1c3RvbVRlbXBsYXRlc1NlcnZpY2U6IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBtZXNzYWdlQWN0aW9uc1NlcnZpY2U6IE1lc3NhZ2VBY3Rpb25zU2VydmljZSxcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgKSB7XG4gICAgdGhpcy5tZXNzYWdlQWN0aW9uSXRlbXMgPSB0aGlzLm1lc3NhZ2VBY3Rpb25zU2VydmljZS5kZWZhdWx0QWN0aW9ucztcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5pc01pbmUgfHwgY2hhbmdlcy5lbmFibGVkQWN0aW9ucyB8fCBjaGFuZ2VzLm1lc3NhZ2UpIHtcbiAgICAgIHRoaXMuc2V0VmlzaWJsZUFjdGlvbnMoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMubWVzc2FnZUFjdGlvbnNTZXJ2aWNlLmN1c3RvbUFjdGlvbnMkLnN1YnNjcmliZSgoYWN0aW9ucykgPT4ge1xuICAgICAgICB0aGlzLmN1c3RvbUFjdGlvbnMgPSBhY3Rpb25zO1xuICAgICAgICB0aGlzLnNldFZpc2libGVBY3Rpb25zKCk7XG4gICAgICAgIGlmICh0aGlzLmlzVmlld0luaXRlZCkge1xuICAgICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5tZXNzYWdlQWN0aW9uc1NlcnZpY2UubWVzc2FnZVRvRWRpdCQuc3Vic2NyaWJlKChtKSA9PiB7XG4gICAgICAgIGxldCBpc0VkaXRNb2RhbE9wZW4gPSBmYWxzZTtcbiAgICAgICAgaWYgKG0gJiYgbS5pZCA9PT0gdGhpcy5tZXNzYWdlPy5pZCkge1xuICAgICAgICAgIGlzRWRpdE1vZGFsT3BlbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRWRpdE1vZGFsT3BlbiAhPT0gdGhpcy5pc0VkaXRNb2RhbE9wZW4pIHtcbiAgICAgICAgICB0aGlzLmlzRWRpdE1vZGFsT3BlbiA9IGlzRWRpdE1vZGFsT3BlbjtcbiAgICAgICAgICBpZiAodGhpcy5pc1ZpZXdJbml0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzVmlld0luaXRlZCA9IHRydWU7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaCgocykgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgfVxuXG4gIGdldEFjdGlvbkxhYmVsKFxuICAgIGFjdGlvbkxhYmVsT3JUcmFuc2xhdGlvbktleTogKChtZXNzYWdlOiBTdHJlYW1NZXNzYWdlKSA9PiBzdHJpbmcpIHwgc3RyaW5nLFxuICApIHtcbiAgICByZXR1cm4gdHlwZW9mIGFjdGlvbkxhYmVsT3JUcmFuc2xhdGlvbktleSA9PT0gJ3N0cmluZydcbiAgICAgID8gYWN0aW9uTGFiZWxPclRyYW5zbGF0aW9uS2V5XG4gICAgICA6IGFjdGlvbkxhYmVsT3JUcmFuc2xhdGlvbktleSh0aGlzLm1lc3NhZ2UhKTtcbiAgfVxuXG4gIGdldFJlYWN0aW9uU2VsZWN0b3JUZW1wbGF0ZUNvbnRleHQoKTogTWVzc2FnZVJlYWN0aW9uc1NlbGVjdG9yQ29udGV4dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1lc3NhZ2VJZDogdGhpcy5tZXNzYWdlPy5pZCxcbiAgICAgIG93blJlYWN0aW9uczogdGhpcy5tZXNzYWdlPy5vd25fcmVhY3Rpb25zIHx8IFtdLFxuICAgIH07XG4gIH1cblxuICBnZXRNZXNzYWdlQWN0aW9uVGVtcGxhdGVDb250ZXh0KFxuICAgIGl0ZW06XG4gICAgICB8IE1lc3NhZ2VBY3Rpb25JdGVtXG4gICAgICB8IEN1c3RvbU1lc3NhZ2VBY3Rpb25JdGVtXG4gICAgICB8IE1lc3NhZ2VSZWFjdGlvbkFjdGlvbkl0ZW0sXG4gICk6IE1lc3NhZ2VBY3Rpb25Cb3hJdGVtQ29udGV4dCB7XG4gICAgaWYgKHRoaXMuaXNSZWFjdEFjdGlvbihpdGVtKSkge1xuICAgICAgcmV0dXJuIHt9IGFzIE1lc3NhZ2VBY3Rpb25Cb3hJdGVtQ29udGV4dDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYWN0aW9uSGFuZGxlcjogaXRlbS5hY3Rpb25IYW5kbGVyLFxuICAgICAgICBhY3Rpb25IYW5kbGVyRXh0cmFQYXJhbXM6IHtcbiAgICAgICAgICBpc01pbmU6IHRoaXMuaXNNaW5lLFxuICAgICAgICAgIG1lc3NhZ2VUZXh0SHRtbEVsZW1lbnQ6IHRoaXMubWVzc2FnZVRleHRIdG1sRWxlbWVudCxcbiAgICAgICAgfSxcbiAgICAgICAgYWN0aW9uTmFtZTogaXRlbS5hY3Rpb25OYW1lLFxuICAgICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UhLFxuICAgICAgICBhY3Rpb25MYWJlbE9yVHJhbnNsYXRpb25LZXk6IGl0ZW0uYWN0aW9uTGFiZWxPclRyYW5zbGF0aW9uS2V5LFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzUmVhY3RBY3Rpb24oXG4gICAgaXRlbTpcbiAgICAgIHwgTWVzc2FnZUFjdGlvbkl0ZW1cbiAgICAgIHwgQ3VzdG9tTWVzc2FnZUFjdGlvbkl0ZW1cbiAgICAgIHwgTWVzc2FnZVJlYWN0aW9uQWN0aW9uSXRlbSxcbiAgKTogaXRlbSBpcyBNZXNzYWdlUmVhY3Rpb25BY3Rpb25JdGVtIHtcbiAgICByZXR1cm4gaXRlbS5hY3Rpb25OYW1lID09PSAncmVhY3QnO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRWaXNpYmxlQWN0aW9ucygpIHtcbiAgICBpZiAoIXRoaXMubWVzc2FnZSkge1xuICAgICAgdGhpcy52aXNpYmxlTWVzc2FnZUFjdGlvbkl0ZW1zID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmlzaWJsZU1lc3NhZ2VBY3Rpb25JdGVtcyA9IFtcbiAgICAgICAgLi4udGhpcy5tZXNzYWdlQWN0aW9uSXRlbXMsXG4gICAgICAgIC4uLnRoaXMuY3VzdG9tQWN0aW9ucyxcbiAgICAgIF0uZmlsdGVyKChpdGVtKSA9PlxuICAgICAgICBpdGVtLmlzVmlzaWJsZSh0aGlzLmVuYWJsZWRBY3Rpb25zLCB0aGlzLmlzTWluZSwgdGhpcy5tZXNzYWdlISksXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdlxuICAjYWN0aW9uQm94XG4gIGRhdGEtdGVzdGlkPVwiYWN0aW9uLWJveFwiXG4gIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYWN0aW9ucy1ib3ggc3RyLWNoYXRfX21lc3NhZ2UtYWN0aW9ucy1ib3gtYW5ndWxhciBzdHItY2hhdF9fbWVzc2FnZS1hY3Rpb25zLWJveC0tb3BlblwiXG4+XG4gIDx1bCBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLWFjdGlvbnMtbGlzdFwiPlxuICAgIEBmb3IgKGl0ZW0gb2YgdmlzaWJsZU1lc3NhZ2VBY3Rpb25JdGVtczsgdHJhY2sgaXRlbS5hY3Rpb25OYW1lKSB7XG4gICAgICBAc3dpdGNoIChpdGVtLmFjdGlvbk5hbWUpIHtcbiAgICAgICAgQGNhc2UgKFwicmVhY3RcIikge1xuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgIChjdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLm1lc3NhZ2VSZWFjdGlvbnNTZWxlY3RvclRlbXBsYXRlJFxuICAgICAgICAgICAgICAgIHwgYXN5bmMpIHx8IGRlZmF1bHRSZWFjdGlvblNlbGVjdG9yO1xuICAgICAgICAgICAgICBjb250ZXh0OiBnZXRSZWFjdGlvblNlbGVjdG9yVGVtcGxhdGVDb250ZXh0KClcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgfVxuICAgICAgICBAZGVmYXVsdCB7XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgKGN1c3RvbVRlbXBsYXRlc1NlcnZpY2UubWVzc2FnZUFjdGlvbnNCb3hJdGVtVGVtcGxhdGUkIHwgYXN5bmMpIHx8XG4gICAgICAgICAgICAgICAgZGVmYXVsdE1lc3NhZ2VBY3Rpb25JdGVtO1xuICAgICAgICAgICAgICBjb250ZXh0OiBnZXRNZXNzYWdlQWN0aW9uVGVtcGxhdGVDb250ZXh0KGl0ZW0pXG4gICAgICAgICAgICBcIlxuICAgICAgICAgIC8+XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIDwvdWw+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlXG4gICNkZWZhdWx0TWVzc2FnZUFjdGlvbkl0ZW1cbiAgbGV0LWFjdGlvbk5hbWU9XCJhY3Rpb25OYW1lXCJcbiAgbGV0LWFjdGlvbkhhbmRsZXI9XCJhY3Rpb25IYW5kbGVyXCJcbiAgbGV0LWFjdGlvbkxhYmVsT3JUcmFuc2xhdGlvbktleT1cImFjdGlvbkxhYmVsT3JUcmFuc2xhdGlvbktleVwiXG4gIGxldC1hY3Rpb25IYW5kbGVyRXh0cmFQYXJhbXM9XCJhY3Rpb25IYW5kbGVyRXh0cmFQYXJhbXNcIlxuPlxuICA8YnV0dG9uXG4gICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hY3Rpb25zLWxpc3QtaXRlbS1idXR0b25cIlxuICAgIFthdHRyLmRhdGEtdGVzdGlkXT1cImFjdGlvbk5hbWUgKyAnLWFjdGlvbidcIlxuICAgIChjbGljayk9XCJhY3Rpb25IYW5kbGVyKG1lc3NhZ2UsIGFjdGlvbkhhbmRsZXJFeHRyYVBhcmFtcylcIlxuICA+XG4gICAgPGxpIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYWN0aW9ucy1saXN0LWl0ZW1cIj5cbiAgICAgIHt7IGdldEFjdGlvbkxhYmVsKGFjdGlvbkxhYmVsT3JUcmFuc2xhdGlvbktleSkgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2xpPlxuICA8L2J1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZVxuICAjZGVmYXVsdFJlYWN0aW9uU2VsZWN0b3JcbiAgbGV0LW1lc3NhZ2VJZD1cIm1lc3NhZ2VJZFwiXG4gIGxldC1vd25SZWFjdGlvbnM9XCJvd25SZWFjdGlvbnNcIlxuPlxuICA8c3RyZWFtLW1lc3NhZ2UtcmVhY3Rpb25zLXNlbGVjdG9yXG4gICAgW21lc3NhZ2VJZF09XCJtZXNzYWdlPy5pZFwiXG4gICAgW293blJlYWN0aW9uc109XCJtZXNzYWdlPy5vd25fcmVhY3Rpb25zIHx8IFtdXCJcbiAgLz5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -1,187 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { BehaviorSubject, combineLatest } from 'rxjs';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "./chat-client.service";
5
- import * as i2 from "./notification.service";
6
- import * as i3 from "./channel.service";
7
- /**
8
- * The message actions service provides customization options for the [message actions](/chat/docs/sdk/angular/components/MessageActionsBoxComponent)
9
- */
10
- export class MessageActionsService {
11
- constructor(chatClientService, notificationService, channelService) {
12
- this.chatClientService = chatClientService;
13
- this.notificationService = notificationService;
14
- this.channelService = channelService;
15
- /**
16
- * Default actions - these are the actions that are handled by the built-in component
17
- */
18
- this.defaultActions = [
19
- {
20
- actionName: 'react',
21
- isVisible: (enabledActions) => {
22
- return enabledActions.indexOf('send-reaction') !== -1;
23
- },
24
- },
25
- {
26
- actionName: 'mark-unread',
27
- actionLabelOrTranslationKey: 'streamChat.Mark as unread',
28
- actionHandler: (message) => {
29
- void this.channelService.markMessageUnread(message.id);
30
- },
31
- isVisible: (enabledActions, _, message) => enabledActions.indexOf('read-events') !== -1 && !message.parent_id,
32
- },
33
- {
34
- actionName: 'quote',
35
- actionLabelOrTranslationKey: 'streamChat.Reply',
36
- actionHandler: (message) => {
37
- this.channelService.selectMessageToQuote(message);
38
- },
39
- isVisible: (enabledActions) => enabledActions.indexOf('quote-message') !== -1,
40
- },
41
- {
42
- actionName: 'thread-reply',
43
- actionLabelOrTranslationKey: 'streamChat.Thread',
44
- actionHandler: (message) => {
45
- void this.channelService.setAsActiveParentMessage(message);
46
- },
47
- isVisible: (enabledActions, _, message) => enabledActions.indexOf('send-reply') !== -1 && !message.parent_id,
48
- },
49
- {
50
- actionName: 'pin',
51
- actionLabelOrTranslationKey: (message) => message.pinned ? 'streamChat.Unpin' : 'streamChat.Pin',
52
- actionHandler: (message) => {
53
- message.pinned
54
- ? void this.channelService.unpinMessage(message)
55
- : void this.channelService.pinMessage(message);
56
- },
57
- isVisible: (enabledActions) => enabledActions.indexOf('pin-message') !== -1,
58
- },
59
- {
60
- actionName: 'flag',
61
- actionLabelOrTranslationKey: 'streamChat.Flag',
62
- // eslint-disable-next-line @typescript-eslint/no-misused-promises
63
- actionHandler: async (message) => {
64
- try {
65
- await this.chatClientService.flagMessage(message.id);
66
- this.notificationService.addTemporaryNotification('streamChat.Message has been successfully flagged', 'success');
67
- }
68
- catch (error) {
69
- this.notificationService.addTemporaryNotification('streamChat.Error adding flag');
70
- }
71
- },
72
- isVisible: (enabledActions, isMine) => enabledActions.indexOf('flag-message') !== -1 && !isMine,
73
- },
74
- {
75
- actionName: 'edit',
76
- actionLabelOrTranslationKey: 'streamChat.Edit Message',
77
- actionHandler: (message) => {
78
- this.messageToEdit$.next(message);
79
- },
80
- isVisible: (enabledActions, isMine) => (enabledActions.indexOf('update-own-message') !== -1 && isMine) ||
81
- enabledActions.indexOf('update-any-message') !== -1,
82
- },
83
- {
84
- actionName: 'delete',
85
- actionLabelOrTranslationKey: 'streamChat.Delete',
86
- // eslint-disable-next-line @typescript-eslint/no-misused-promises
87
- actionHandler: async (message) => {
88
- try {
89
- await this.channelService.deleteMessage(message);
90
- }
91
- catch (error) {
92
- this.notificationService.addTemporaryNotification('streamChat.Error deleting message');
93
- }
94
- },
95
- isVisible: (enabledActions, isMine) => ((enabledActions.indexOf('delete') !== -1 ||
96
- enabledActions.indexOf('delete-own-message') !== -1) &&
97
- isMine) ||
98
- enabledActions.indexOf('delete-any') !== -1 ||
99
- enabledActions.indexOf('delete-any-message') !== -1,
100
- },
101
- {
102
- actionName: 'copy-message-text',
103
- actionLabelOrTranslationKey: 'streamChat.Copy text',
104
- isVisible: (_, __, message) => {
105
- const isClipboardSupported = navigator?.clipboard?.write !== undefined;
106
- if (!isClipboardSupported && !this.hasDisplayedClipboardWarning) {
107
- console.warn(`[Stream Chat] Copy action is disabled because clipboard API isn't available, please check security and browser requirements: https://developer.mozilla.org/en-US/docs/Web/API/Clipboard/write#security_considerations`);
108
- this.hasDisplayedClipboardWarning = true;
109
- }
110
- return (!!message.text &&
111
- (message.type === 'regular' || message.type === 'reply') &&
112
- isClipboardSupported);
113
- },
114
- actionHandler: (message, extraParams) => {
115
- const fallbackContent = message.text || '';
116
- // Android Chrome can only copy plain text: https://issues.chromium.org/issues/40851502
117
- void navigator.clipboard.write([
118
- new ClipboardItem({
119
- 'text/plain': new Blob([
120
- extraParams.messageTextHtmlElement?.innerText ||
121
- fallbackContent,
122
- ], { type: 'text/plain' }),
123
- 'text/html': new Blob([
124
- extraParams.messageTextHtmlElement?.innerHTML ||
125
- fallbackContent,
126
- ], { type: 'text/html' }),
127
- }),
128
- ]);
129
- },
130
- },
131
- ];
132
- /**
133
- * The built-in components will handle changes to this observable.
134
- */
135
- this.messageToEdit$ = new BehaviorSubject(undefined);
136
- /**
137
- * You can pass your own custom actions that will be displayed inside the built-in message actions component
138
- */
139
- this.customActions$ = new BehaviorSubject([]);
140
- /**
141
- * @internal
142
- */
143
- this.messageMenuOpenedFor$ = new BehaviorSubject(undefined);
144
- this.hasDisplayedClipboardWarning = false;
145
- combineLatest([
146
- this.messageToEdit$,
147
- this.channelService.activeChannel$,
148
- ]).subscribe(([messageToEdit, activeChannel]) => {
149
- if (messageToEdit &&
150
- (!activeChannel || activeChannel?.cid !== messageToEdit.cid)) {
151
- this.messageToEdit$.next(undefined);
152
- }
153
- });
154
- combineLatest([
155
- this.messageToEdit$,
156
- this.channelService.activeParentMessageId$,
157
- ]).subscribe(([messageToEdit, parentMessageId]) => {
158
- if (messageToEdit &&
159
- messageToEdit.parent_id &&
160
- messageToEdit.parent_id !== parentMessageId) {
161
- this.messageToEdit$.next(undefined);
162
- }
163
- });
164
- }
165
- /**
166
- * This method returns how many authorized actions are available to the given message
167
- * @param message
168
- * @param enabledActions
169
- * @returns the count
170
- */
171
- getAuthorizedMessageActionsCount(message, enabledActions) {
172
- const customActions = this.customActions$.getValue() || [];
173
- const allActions = [...this.defaultActions, ...customActions];
174
- const currentUserId = this.chatClientService.chatClient.user?.id;
175
- const isMine = message.user_id === currentUserId;
176
- return allActions.filter((item) => item.isVisible(enabledActions, isMine, message)).length;
177
- }
178
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0", ngImport: i0, type: MessageActionsService, deps: [{ token: i1.ChatClientService }, { token: i2.NotificationService }, { token: i3.ChannelService }], target: i0.ɵɵFactoryTarget.Injectable }); }
179
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.0", ngImport: i0, type: MessageActionsService, providedIn: 'root' }); }
180
- }
181
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0", ngImport: i0, type: MessageActionsService, decorators: [{
182
- type: Injectable,
183
- args: [{
184
- providedIn: 'root',
185
- }]
186
- }], ctorParameters: () => [{ type: i1.ChatClientService }, { type: i2.NotificationService }, { type: i3.ChannelService }] });
187
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1hY3Rpb25zLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvbWVzc2FnZS1hY3Rpb25zLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7QUFjdEQ7O0dBRUc7QUFJSCxNQUFNLE9BQU8scUJBQXFCO0lBNktoQyxZQUNVLGlCQUFvQyxFQUNwQyxtQkFBd0MsRUFDeEMsY0FBOEI7UUFGOUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQTdLeEM7O1dBRUc7UUFDTSxtQkFBYyxHQUdqQjtZQUNKO2dCQUNFLFVBQVUsRUFBRSxPQUFPO2dCQUNuQixTQUFTLEVBQUUsQ0FBQyxjQUF3QixFQUFFLEVBQUU7b0JBQ3RDLE9BQU8sY0FBYyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDeEQsQ0FBQzthQUNGO1lBQ0Q7Z0JBQ0UsVUFBVSxFQUFFLGFBQWE7Z0JBQ3pCLDJCQUEyQixFQUFFLDJCQUEyQjtnQkFDeEQsYUFBYSxFQUFFLENBQUMsT0FBeUIsRUFBRSxFQUFFO29CQUMzQyxLQUFLLElBQUksQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUN6RCxDQUFDO2dCQUNELFNBQVMsRUFBRSxDQUNULGNBQXdCLEVBQ3hCLENBQVUsRUFDVixPQUF5QixFQUN6QixFQUFFLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsSUFB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Q0FDaEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUNoRCxDQUFDLE1BQU0sQ0FBQztJQUNYLENBQUM7OEdBN05VLHFCQUFxQjtrSEFBckIscUJBQXFCLGNBRnBCLE1BQU07OzJGQUVQLHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIEN1c3RvbU1lc3NhZ2VBY3Rpb25JdGVtLFxuICBEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzLFxuICBNZXNzYWdlQWN0aW9uSGFuZGxlckV4dHJhUGFyYW1zLFxuICBNZXNzYWdlQWN0aW9uSXRlbSxcbiAgTWVzc2FnZUFjdGlvbnNDbGlja0RldGFpbHMsXG4gIE1lc3NhZ2VSZWFjdGlvbkFjdGlvbkl0ZW0sXG4gIFN0cmVhbU1lc3NhZ2UsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgQ2hhdENsaWVudFNlcnZpY2UgfSBmcm9tICcuL2NoYXQtY2xpZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4vbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhbm5lbFNlcnZpY2UgfSBmcm9tICcuL2NoYW5uZWwuc2VydmljZSc7XG5cbi8qKlxuICogVGhlIG1lc3NhZ2UgYWN0aW9ucyBzZXJ2aWNlIHByb3ZpZGVzIGN1c3RvbWl6YXRpb24gb3B0aW9ucyBmb3IgdGhlIFttZXNzYWdlIGFjdGlvbnNdKC9jaGF0L2RvY3Mvc2RrL2FuZ3VsYXIvY29tcG9uZW50cy9NZXNzYWdlQWN0aW9uc0JveENvbXBvbmVudClcbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIE1lc3NhZ2VBY3Rpb25zU2VydmljZTxcbiAgVCBleHRlbmRzIERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3MgPSBEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzLFxuPiB7XG4gIC8qKlxuICAgKiBEZWZhdWx0IGFjdGlvbnMgLSB0aGVzZSBhcmUgdGhlIGFjdGlvbnMgdGhhdCBhcmUgaGFuZGxlZCBieSB0aGUgYnVpbHQtaW4gY29tcG9uZW50XG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0QWN0aW9uczogKFxuICAgIHwgTWVzc2FnZUFjdGlvbkl0ZW08VD5cbiAgICB8IE1lc3NhZ2VSZWFjdGlvbkFjdGlvbkl0ZW08VD5cbiAgKVtdID0gW1xuICAgIHtcbiAgICAgIGFjdGlvbk5hbWU6ICdyZWFjdCcsXG4gICAgICBpc1Zpc2libGU6IChlbmFibGVkQWN0aW9uczogc3RyaW5nW10pID0+IHtcbiAgICAgICAgcmV0dXJuIGVuYWJsZWRBY3Rpb25zLmluZGV4T2YoJ3NlbmQtcmVhY3Rpb24nKSAhPT0gLTE7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgYWN0aW9uTmFtZTogJ21hcmstdW5yZWFkJyxcbiAgICAgIGFjdGlvbkxhYmVsT3JUcmFuc2xhdGlvbktleTogJ3N0cmVhbUNoYXQuTWFyayBhcyB1bnJlYWQnLFxuICAgICAgYWN0aW9uSGFuZGxlcjogKG1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2U8VD4pID0+IHtcbiAgICAgICAgdm9pZCB0aGlzLmNoYW5uZWxTZXJ2aWNlLm1hcmtNZXNzYWdlVW5yZWFkKG1lc3NhZ2UuaWQpO1xuICAgICAgfSxcbiAgICAgIGlzVmlzaWJsZTogKFxuICAgICAgICBlbmFibGVkQWN0aW9uczogc3RyaW5nW10sXG4gICAgICAgIF86IGJvb2xlYW4sXG4gICAgICAgIG1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2U8VD4sXG4gICAgICApID0+IGVuYWJsZWRBY3Rpb25zLmluZGV4T2YoJ3JlYWQtZXZlbnRzJykgIT09IC0xICYmICFtZXNzYWdlLnBhcmVudF9pZCxcbiAgICB9LFxuICAgIHtcbiAgICAgIGFjdGlvbk5hbWU6ICdxdW90ZScsXG4gICAgICBhY3Rpb25MYWJlbE9yVHJhbnNsYXRpb25LZXk6ICdzdHJlYW1DaGF0LlJlcGx5JyxcbiAgICAgIGFjdGlvbkhhbmRsZXI6IChtZXNzYWdlOiBTdHJlYW1NZXNzYWdlPFQ+KSA9PiB7XG4gICAgICAgIHRoaXMuY2hhbm5lbFNlcnZpY2Uuc2VsZWN0TWVzc2FnZVRvUXVvdGUobWVzc2FnZSk7XG4gICAgICB9LFxuICAgICAgaXNWaXNpYmxlOiAoZW5hYmxlZEFjdGlvbnM6IHN0cmluZ1tdKSA9PlxuICAgICAgICBlbmFibGVkQWN0aW9ucy5pbmRleE9mKCdxdW90ZS1tZXNzYWdlJykgIT09IC0xLFxuICAgIH0sXG4gICAge1xuICAgICAgYWN0aW9uTmFtZTogJ3RocmVhZC1yZXBseScsXG4gICAgICBhY3Rpb25MYWJlbE9yVHJhbnNsYXRpb25LZXk6ICdzdHJlYW1DaGF0LlRocmVhZCcsXG4gICAgICBhY3Rpb25IYW5kbGVyOiAobWVzc2FnZTogU3RyZWFtTWVzc2FnZTxUPikgPT4ge1xuICAgICAgICB2b2lkIHRoaXMuY2hhbm5lbFNlcnZpY2Uuc2V0QXNBY3RpdmVQYXJlbnRNZXNzYWdlKG1lc3NhZ2UpO1xuICAgICAgfSxcbiAgICAgIGlzVmlzaWJsZTogKFxuICAgICAgICBlbmFibGVkQWN0aW9uczogc3RyaW5nW10sXG4gICAgICAgIF86IGJvb2xlYW4sXG4gICAgICAgIG1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2U8VD4sXG4gICAgICApID0+IGVuYWJsZWRBY3Rpb25zLmluZGV4T2YoJ3NlbmQtcmVwbHknKSAhPT0gLTEgJiYgIW1lc3NhZ2UucGFyZW50X2lkLFxuICAgIH0sXG4gICAge1xuICAgICAgYWN0aW9uTmFtZTogJ3BpbicsXG4gICAgICBhY3Rpb25MYWJlbE9yVHJhbnNsYXRpb25LZXk6IChtZXNzYWdlOiBTdHJlYW1NZXNzYWdlPFQ+KSA9PlxuICAgICAgICBtZXNzYWdlLnBpbm5lZCA/ICdzdHJlYW1DaGF0LlVucGluJyA6ICdzdHJlYW1DaGF0LlBpbicsXG4gICAgICBhY3Rpb25IYW5kbGVyOiAobWVzc2FnZTogU3RyZWFtTWVzc2FnZTxUPikgPT4ge1xuICAgICAgICBtZXNzYWdlLnBpbm5lZFxuICAgICAgICAgID8gdm9pZCB0aGlzLmNoYW5uZWxTZXJ2aWNlLnVucGluTWVzc2FnZShtZXNzYWdlKVxuICAgICAgICAgIDogdm9pZCB0aGlzLmNoYW5uZWxTZXJ2aWNlLnBpbk1lc3NhZ2UobWVzc2FnZSk7XG4gICAgICB9LFxuICAgICAgaXNWaXNpYmxlOiAoZW5hYmxlZEFjdGlvbnM6IHN0cmluZ1tdKSA9PlxuICAgICAgICBlbmFibGVkQWN0aW9ucy5pbmRleE9mKCdwaW4tbWVzc2FnZScpICE9PSAtMSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGFjdGlvbk5hbWU6ICdmbGFnJyxcbiAgICAgIGFjdGlvbkxhYmVsT3JUcmFuc2xhdGlvbktleTogJ3N0cmVhbUNoYXQuRmxhZycsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW1pc3VzZWQtcHJvbWlzZXNcbiAgICAgIGFjdGlvbkhhbmRsZXI6IGFzeW5jIChtZXNzYWdlOiBTdHJlYW1NZXNzYWdlPFQ+KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5jaGF0Q2xpZW50U2VydmljZS5mbGFnTWVzc2FnZShtZXNzYWdlLmlkKTtcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuYWRkVGVtcG9yYXJ5Tm90aWZpY2F0aW9uKFxuICAgICAgICAgICAgJ3N0cmVhbUNoYXQuTWVzc2FnZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZmxhZ2dlZCcsXG4gICAgICAgICAgICAnc3VjY2VzcycsXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuYWRkVGVtcG9yYXJ5Tm90aWZpY2F0aW9uKFxuICAgICAgICAgICAgJ3N0cmVhbUNoYXQuRXJyb3IgYWRkaW5nIGZsYWcnLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBpc1Zpc2libGU6IChlbmFibGVkQWN0aW9uczogc3RyaW5nW10sIGlzTWluZTogYm9vbGVhbikgPT5cbiAgICAgICAgZW5hYmxlZEFjdGlvbnMuaW5kZXhPZignZmxhZy1tZXNzYWdlJykgIT09IC0xICYmICFpc01pbmUsXG4gICAgfSxcbiAgICB7XG4gICAgICBhY3Rpb25OYW1lOiAnZWRpdCcsXG4gICAgICBhY3Rpb25MYWJlbE9yVHJhbnNsYXRpb25LZXk6ICdzdHJlYW1DaGF0LkVkaXQgTWVzc2FnZScsXG4gICAgICBhY3Rpb25IYW5kbGVyOiAobWVzc2FnZTogU3RyZWFtTWVzc2FnZTxUPikgPT4ge1xuICAgICAgICB0aGlzLm1lc3NhZ2VUb0VkaXQkLm5leHQobWVzc2FnZSk7XG4gICAgICB9LFxuICAgICAgaXNWaXNpYmxlOiAoZW5hYmxlZEFjdGlvbnM6IHN0cmluZ1tdLCBpc01pbmU6IGJvb2xlYW4pID0+XG4gICAgICAgIChlbmFibGVkQWN0aW9ucy5pbmRleE9mKCd1cGRhdGUtb3duLW1lc3NhZ2UnKSAhPT0gLTEgJiYgaXNNaW5lKSB8fFxuICAgICAgICBlbmFibGVkQWN0aW9ucy5pbmRleE9mKCd1cGRhdGUtYW55LW1lc3NhZ2UnKSAhPT0gLTEsXG4gICAgfSxcbiAgICB7XG4gICAgICBhY3Rpb25OYW1lOiAnZGVsZXRlJyxcbiAgICAgIGFjdGlvbkxhYmVsT3JUcmFuc2xhdGlvbktleTogJ3N0cmVhbUNoYXQuRGVsZXRlJyxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbWlzdXNlZC1wcm9taXNlc1xuICAgICAgYWN0aW9uSGFuZGxlcjogYXN5bmMgKG1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2U8VD4pID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmNoYW5uZWxTZXJ2aWNlLmRlbGV0ZU1lc3NhZ2UobWVzc2FnZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmFkZFRlbXBvcmFyeU5vdGlmaWNhdGlvbihcbiAgICAgICAgICAgICdzdHJlYW1DaGF0LkVycm9yIGRlbGV0aW5nIG1lc3NhZ2UnLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBpc1Zpc2libGU6IChlbmFibGVkQWN0aW9uczogc3RyaW5nW10sIGlzTWluZTogYm9vbGVhbikgPT5cbiAgICAgICAgKChlbmFibGVkQWN0aW9ucy5pbmRleE9mKCdkZWxldGUnKSAhPT0gLTEgfHxcbiAgICAgICAgICBlbmFibGVkQWN0aW9ucy5pbmRleE9mKCdkZWxldGUtb3duLW1lc3NhZ2UnKSAhPT0gLTEpICYmXG4gICAgICAgICAgaXNNaW5lKSB8fFxuICAgICAgICBlbmFibGVkQWN0aW9ucy5pbmRleE9mKCdkZWxldGUtYW55JykgIT09IC0xIHx8XG4gICAgICAgIGVuYWJsZWRBY3Rpb25zLmluZGV4T2YoJ2RlbGV0ZS1hbnktbWVzc2FnZScpICE9PSAtMSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGFjdGlvbk5hbWU6ICdjb3B5LW1lc3NhZ2UtdGV4dCcsXG4gICAgICBhY3Rpb25MYWJlbE9yVHJhbnNsYXRpb25LZXk6ICdzdHJlYW1DaGF0LkNvcHkgdGV4dCcsXG4gICAgICBpc1Zpc2libGU6IChfOiBzdHJpbmdbXSwgX186IGJvb2xlYW4sIG1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2U8VD4pID0+IHtcbiAgICAgICAgY29uc3QgaXNDbGlwYm9hcmRTdXBwb3J0ZWQgPSBuYXZpZ2F0b3I/LmNsaXBib2FyZD8ud3JpdGUgIT09IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKCFpc0NsaXBib2FyZFN1cHBvcnRlZCAmJiAhdGhpcy5oYXNEaXNwbGF5ZWRDbGlwYm9hcmRXYXJuaW5nKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgYFtTdHJlYW0gQ2hhdF0gQ29weSBhY3Rpb24gaXMgZGlzYWJsZWQgYmVjYXVzZSBjbGlwYm9hcmQgQVBJIGlzbid0IGF2YWlsYWJsZSwgcGxlYXNlIGNoZWNrIHNlY3VyaXR5IGFuZCBicm93c2VyIHJlcXVpcmVtZW50czogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0NsaXBib2FyZC93cml0ZSNzZWN1cml0eV9jb25zaWRlcmF0aW9uc2AsXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmhhc0Rpc3BsYXllZENsaXBib2FyZFdhcm5pbmcgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgISFtZXNzYWdlLnRleHQgJiZcbiAgICAgICAgICAobWVzc2FnZS50eXBlID09PSAncmVndWxhcicgfHwgbWVzc2FnZS50eXBlID09PSAncmVwbHknKSAmJlxuICAgICAgICAgIGlzQ2xpcGJvYXJkU3VwcG9ydGVkXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgYWN0aW9uSGFuZGxlcjogKFxuICAgICAgICBtZXNzYWdlOiBTdHJlYW1NZXNzYWdlPFQ+LFxuICAgICAgICBleHRyYVBhcmFtczogTWVzc2FnZUFjdGlvbkhhbmRsZXJFeHRyYVBhcmFtcyxcbiAgICAgICkgPT4ge1xuICAgICAgICBjb25zdCBmYWxsYmFja0NvbnRlbnQgPSBtZXNzYWdlLnRleHQgfHwgJyc7XG4gICAgICAgIC8vIEFuZHJvaWQgQ2hyb21lIGNhbiBvbmx5IGNvcHkgcGxhaW4gdGV4dDogaHR0cHM6Ly9pc3N1ZXMuY2hyb21pdW0ub3JnL2lzc3Vlcy80MDg1MTUwMlxuICAgICAgICB2b2lkIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGUoW1xuICAgICAgICAgIG5ldyBDbGlwYm9hcmRJdGVtKHtcbiAgICAgICAgICAgICd0ZXh0L3BsYWluJzogbmV3IEJsb2IoXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBleHRyYVBhcmFtcy5tZXNzYWdlVGV4dEh0bWxFbGVtZW50Py5pbm5lclRleHQgfHxcbiAgICAgICAgICAgICAgICAgIGZhbGxiYWNrQ29udGVudCxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgeyB0eXBlOiAndGV4dC9wbGFpbicgfSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICAndGV4dC9odG1sJzogbmV3IEJsb2IoXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBleHRyYVBhcmFtcy5tZXNzYWdlVGV4dEh0bWxFbGVtZW50Py5pbm5lckhUTUwgfHxcbiAgICAgICAgICAgICAgICAgIGZhbGxiYWNrQ29udGVudCxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgeyB0eXBlOiAndGV4dC9odG1sJyB9LFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXSk7XG4gICAgICB9LFxuICAgIH0sXG4gIF07XG4gIC8qKlxuICAgKiBUaGUgYnVpbHQtaW4gY29tcG9uZW50cyB3aWxsIGhhbmRsZSBjaGFuZ2VzIHRvIHRoaXMgb2JzZXJ2YWJsZS5cbiAgICovXG4gIG1lc3NhZ2VUb0VkaXQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTdHJlYW1NZXNzYWdlPFQ+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogWW91IGNhbiBwYXNzIHlvdXIgb3duIGN1c3RvbSBhY3Rpb25zIHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQgaW5zaWRlIHRoZSBidWlsdC1pbiBtZXNzYWdlIGFjdGlvbnMgY29tcG9uZW50XG4gICAqL1xuICBjdXN0b21BY3Rpb25zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q3VzdG9tTWVzc2FnZUFjdGlvbkl0ZW1bXT4oW10pO1xuICAvKipcbiAgICogQnkgZGVmYXVsdCB0aGUgW2BNZXNzYWdlQ29tcG9uZW50YF0oL2NoYXQvZG9jcy9zZGsvYW5ndWxhci9jb21wb25lbnRzL01lc3NhZ2VDb21wb25lbnQvKSB3aWxsIGRpc3BsYXkgdGhlIFtgTWVzc2FnZUFjdGlvbnNCb3hDb21wb25lbnRgXSgvY2hhdC9kb2NzL3Nkay9hbmd1bGFyL2NvbXBvbmVudHMvTWVzc2FnZUFjdGlvbnNCb3hDb21wb25lbnQvKS4gWW91IGNhbiBvdmVycmlkZSB0aGF0IGJlaGF2aW9yIGJ5IHByb3ZpZGluZyB5b3VyIG93biBldmVudCBoYW5kbGVyLlxuICAgKi9cbiAgY3VzdG9tQWN0aW9uQ2xpY2tIYW5kbGVyPzogKGRldGFpbHM6IE1lc3NhZ2VBY3Rpb25zQ2xpY2tEZXRhaWxzPFQ+KSA9PiB2b2lkO1xuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBtZXNzYWdlTWVudU9wZW5lZEZvciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBoYXNEaXNwbGF5ZWRDbGlwYm9hcmRXYXJuaW5nID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjaGF0Q2xpZW50U2VydmljZTogQ2hhdENsaWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhbm5lbFNlcnZpY2U6IENoYW5uZWxTZXJ2aWNlLFxuICApIHtcbiAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMubWVzc2FnZVRvRWRpdCQsXG4gICAgICB0aGlzLmNoYW5uZWxTZXJ2aWNlLmFjdGl2ZUNoYW5uZWwkLFxuICAgIF0pLnN1YnNjcmliZSgoW21lc3NhZ2VUb0VkaXQsIGFjdGl2ZUNoYW5uZWxdKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIG1lc3NhZ2VUb0VkaXQgJiZcbiAgICAgICAgKCFhY3RpdmVDaGFubmVsIHx8IGFjdGl2ZUNoYW5uZWw/LmNpZCAhPT0gbWVzc2FnZVRvRWRpdC5jaWQpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlVG9FZGl0JC5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLm1lc3NhZ2VUb0VkaXQkLFxuICAgICAgdGhpcy5jaGFubmVsU2VydmljZS5hY3RpdmVQYXJlbnRNZXNzYWdlSWQkLFxuICAgIF0pLnN1YnNjcmliZSgoW21lc3NhZ2VUb0VkaXQsIHBhcmVudE1lc3NhZ2VJZF0pID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgbWVzc2FnZVRvRWRpdCAmJlxuICAgICAgICBtZXNzYWdlVG9FZGl0LnBhcmVudF9pZCAmJlxuICAgICAgICBtZXNzYWdlVG9FZGl0LnBhcmVudF9pZCAhPT0gcGFyZW50TWVzc2FnZUlkXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlVG9FZGl0JC5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgcmV0dXJucyBob3cgbWFueSBhdXRob3JpemVkIGFjdGlvbnMgYXJlIGF2YWlsYWJsZSB0byB0aGUgZ2l2ZW4gbWVzc2FnZVxuICAgKiBAcGFyYW0gbWVzc2FnZVxuICAgKiBAcGFyYW0gZW5hYmxlZEFjdGlvbnNcbiAgICogQHJldHVybnMgdGhlIGNvdW50XG4gICAqL1xuICBnZXRBdXRob3JpemVkTWVzc2FnZUFjdGlvbnNDb3VudChcbiAgICBtZXNzYWdlOiBTdHJlYW1NZXNzYWdlPFQ+LFxuICAgIGVuYWJsZWRBY3Rpb25zOiBzdHJpbmdbXSxcbiAgKSB7XG4gICAgY29uc3QgY3VzdG9tQWN0aW9ucyA9IHRoaXMuY3VzdG9tQWN0aW9ucyQuZ2V0VmFsdWUoKSB8fCBbXTtcbiAgICBjb25zdCBhbGxBY3Rpb25zID0gWy4uLnRoaXMuZGVmYXVsdEFjdGlvbnMsIC4uLmN1c3RvbUFjdGlvbnNdO1xuICAgIGNvbnN0IGN1cnJlbnRVc2VySWQgPSB0aGlzLmNoYXRDbGllbnRTZXJ2aWNlLmNoYXRDbGllbnQudXNlcj8uaWQ7XG4gICAgY29uc3QgaXNNaW5lID0gbWVzc2FnZS51c2VyX2lkID09PSBjdXJyZW50VXNlcklkO1xuXG4gICAgcmV0dXJuIGFsbEFjdGlvbnMuZmlsdGVyKChpdGVtKSA9PlxuICAgICAgaXRlbS5pc1Zpc2libGUoZW5hYmxlZEFjdGlvbnMsIGlzTWluZSwgbWVzc2FnZSksXG4gICAgKS5sZW5ndGg7XG4gIH1cbn1cbiJdfQ==
@@ -1,71 +0,0 @@
1
- import { Component, HostBinding } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "../channel.service";
4
- import * as i2 from "../custom-templates.service";
5
- import * as i3 from "../message-actions.service";
6
- import * as i4 from "@angular/common";
7
- import * as i5 from "../modal/modal.component";
8
- import * as i6 from "@ngx-translate/core";
9
- /**
10
- * The component watches for the [`channelService.bouncedMessage$` stream](/chat/docs/sdk/angular/services/ChannelService/#bouncedmessage) and opens the bounce modal if a message is emitted.
11
- *
12
- * To bounce messages, you need to set up [semantic filters for moderation](https://getstream.io/automated-moderation/docs/automod_configuration/?q=semantic%20filters).
13
- */
14
- export class MessageBouncePromptComponent {
15
- constructor(channelService, customTemplatesService, messageActionsService) {
16
- this.channelService = channelService;
17
- this.customTemplatesService = customTemplatesService;
18
- this.messageActionsService = messageActionsService;
19
- this.class = 'str-chat__message-bounce-prompt';
20
- this.isModalOpen = false;
21
- this.subscriptions = [];
22
- this.messageBounceModalOpenChanged = (isOpen) => {
23
- this.isModalOpen = isOpen;
24
- if (!isOpen) {
25
- this.message = undefined;
26
- this.channelService.bouncedMessage$.next(undefined);
27
- }
28
- };
29
- this.subscriptions.push(this.channelService.bouncedMessage$.subscribe((m) => {
30
- if (m !== this.message) {
31
- this.message = m;
32
- if (this.message) {
33
- this.isModalOpen = true;
34
- }
35
- }
36
- }));
37
- }
38
- ngOnDestroy() {
39
- this.subscriptions.forEach((s) => s.unsubscribe());
40
- }
41
- async resendMessage() {
42
- this.isModalOpen = false;
43
- await this.channelService.resendMessage(this.message);
44
- this.message = undefined;
45
- this.channelService.bouncedMessage$.next(undefined);
46
- }
47
- async deleteMessage() {
48
- if (!this.message) {
49
- return;
50
- }
51
- this.isModalOpen = false;
52
- await this.channelService.deleteMessage(this.message, true);
53
- this.message = undefined;
54
- this.channelService.bouncedMessage$.next(undefined);
55
- }
56
- editMessage() {
57
- this.isModalOpen = false;
58
- this.messageActionsService.messageToEdit$.next(this.message);
59
- this.message = undefined;
60
- this.channelService.bouncedMessage$.next(undefined);
61
- }
62
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0", ngImport: i0, type: MessageBouncePromptComponent, deps: [{ token: i1.ChannelService }, { token: i2.CustomTemplatesService }, { token: i3.MessageActionsService }], target: i0.ɵɵFactoryTarget.Component }); }
63
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.0", type: MessageBouncePromptComponent, selector: "stream-message-bounce-prompt", host: { properties: { "class": "this.class" } }, ngImport: i0, template: "<ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.modalTemplate$ | async) || defaultModal;\n context: {\n message: message,\n isOpen: isModalOpen,\n isOpenChangeHandler: messageBounceModalOpenChanged,\n content: modalContent,\n }\n \"\n/>\n\n<ng-template\n #defaultModal\n let-isOpen=\"isOpen\"\n let-isOpenChangeHandler=\"isOpenChangeHandler\"\n let-content=\"content\"\n>\n @if (isOpen) {\n <stream-modal\n [isOpen]=\"isOpen\"\n [content]=\"content\"\n (isOpenChange)=\"isOpenChangeHandler($event)\"\n />\n }\n</ng-template>\n\n<ng-template #modalContent>\n <div\n class=\"str-chat__message-bounce-prompt\"\n data-testid=\"message-bounce-prompt\"\n >\n <div class=\"str-chat__message-bounce-prompt-header\">\n {{\n \"streamChat.This message did not meet our content guidelines\"\n | translate\n }}\n </div>\n <div class=\"str-chat__message-bounce-actions\">\n <button\n class=\"str-chat__message-bounce-edit\"\n data-testid=\"message-bounce-edit\"\n type=\"button\"\n (click)=\"editMessage()\"\n (keyup.enter)=\"editMessage()\"\n >\n {{ \"streamChat.Edit Message\" | translate }}\n </button>\n <button\n class=\"str-chat__message-bounce-send\"\n data-testid=\"message-bounce-send\"\n (click)=\"resendMessage()\"\n (keyup.enter)=\"resendMessage()\"\n >\n {{ \"streamChat.Send Anyway\" | translate }}\n </button>\n <button\n class=\"str-chat__message-bounce-delete\"\n data-testid=\"message-bounce-delete\"\n (click)=\"deleteMessage()\"\n (keyup.enter)=\"deleteMessage()\"\n >\n {{ \"streamChat.Delete\" | translate }}\n </button>\n </div>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.ModalComponent, selector: "stream-modal", inputs: ["isOpen", "content"], outputs: ["isOpenChange"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }] }); }
64
- }
65
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0", ngImport: i0, type: MessageBouncePromptComponent, decorators: [{
66
- type: Component,
67
- args: [{ selector: 'stream-message-bounce-prompt', template: "<ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.modalTemplate$ | async) || defaultModal;\n context: {\n message: message,\n isOpen: isModalOpen,\n isOpenChangeHandler: messageBounceModalOpenChanged,\n content: modalContent,\n }\n \"\n/>\n\n<ng-template\n #defaultModal\n let-isOpen=\"isOpen\"\n let-isOpenChangeHandler=\"isOpenChangeHandler\"\n let-content=\"content\"\n>\n @if (isOpen) {\n <stream-modal\n [isOpen]=\"isOpen\"\n [content]=\"content\"\n (isOpenChange)=\"isOpenChangeHandler($event)\"\n />\n }\n</ng-template>\n\n<ng-template #modalContent>\n <div\n class=\"str-chat__message-bounce-prompt\"\n data-testid=\"message-bounce-prompt\"\n >\n <div class=\"str-chat__message-bounce-prompt-header\">\n {{\n \"streamChat.This message did not meet our content guidelines\"\n | translate\n }}\n </div>\n <div class=\"str-chat__message-bounce-actions\">\n <button\n class=\"str-chat__message-bounce-edit\"\n data-testid=\"message-bounce-edit\"\n type=\"button\"\n (click)=\"editMessage()\"\n (keyup.enter)=\"editMessage()\"\n >\n {{ \"streamChat.Edit Message\" | translate }}\n </button>\n <button\n class=\"str-chat__message-bounce-send\"\n data-testid=\"message-bounce-send\"\n (click)=\"resendMessage()\"\n (keyup.enter)=\"resendMessage()\"\n >\n {{ \"streamChat.Send Anyway\" | translate }}\n </button>\n <button\n class=\"str-chat__message-bounce-delete\"\n data-testid=\"message-bounce-delete\"\n (click)=\"deleteMessage()\"\n (keyup.enter)=\"deleteMessage()\"\n >\n {{ \"streamChat.Delete\" | translate }}\n </button>\n </div>\n </div>\n</ng-template>\n" }]
68
- }], ctorParameters: () => [{ type: i1.ChannelService }, { type: i2.CustomTemplatesService }, { type: i3.MessageActionsService }], propDecorators: { class: [{
69
- type: HostBinding
70
- }] } });
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1ib3VuY2UtcHJvbXB0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLWJvdW5jZS1wcm9tcHQvbWVzc2FnZS1ib3VuY2UtcHJvbXB0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLWJvdW5jZS1wcm9tcHQvbWVzc2FnZS1ib3VuY2UtcHJvbXB0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFhLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQU9sRTs7OztHQUlHO0FBTUgsTUFBTSxPQUFPLDRCQUE0QjtJQU12QyxZQUNVLGNBQThCLEVBQzdCLHNCQUE4QyxFQUMvQyxxQkFBNEM7UUFGNUMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzdCLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFDL0MsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQVJ2QyxVQUFLLEdBQUcsaUNBQWlDLENBQUM7UUFDekQsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFFWixrQkFBYSxHQUFtQixFQUFFLENBQUM7UUFtQjNDLGtDQUE2QixHQUFHLENBQUMsTUFBZSxFQUFFLEVBQUU7WUFDbEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7WUFDMUIsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDWCxJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQztnQkFDekIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQ3JEO1FBQ0gsQ0FBQyxDQUFDO1FBbEJBLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUNyQixJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNsRCxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUN0QixJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztnQkFDakIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO29CQUNoQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztpQkFDekI7YUFDRjtRQUNILENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBVUQsV0FBVztRQUNULElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWE7UUFDakIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBUSxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUM7UUFDekIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYTtRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNqQixPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUM7UUFDekIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN0RCxDQUFDOzhHQXpEVSw0QkFBNEI7a0dBQTVCLDRCQUE0QixxSENqQnpDLG16REFtRUE7OzJGRGxEYSw0QkFBNEI7a0JBTHhDLFNBQVM7K0JBQ0UsOEJBQThCOzRKQUt6QixLQUFLO3NCQUFuQixXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBIb3N0QmluZGluZywgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDaGFubmVsU2VydmljZSB9IGZyb20gJy4uL2NoYW5uZWwuc2VydmljZSc7XG5pbXBvcnQgeyBDdXN0b21UZW1wbGF0ZXNTZXJ2aWNlIH0gZnJvbSAnLi4vY3VzdG9tLXRlbXBsYXRlcy5zZXJ2aWNlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTWVzc2FnZUFjdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vbWVzc2FnZS1hY3Rpb25zLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3RyZWFtTWVzc2FnZSB9IGZyb20gJy4uL3R5cGVzJztcblxuLyoqXG4gKiBUaGUgY29tcG9uZW50IHdhdGNoZXMgZm9yIHRoZSBbYGNoYW5uZWxTZXJ2aWNlLmJvdW5jZWRNZXNzYWdlJGAgc3RyZWFtXSgvY2hhdC9kb2NzL3Nkay9hbmd1bGFyL3NlcnZpY2VzL0NoYW5uZWxTZXJ2aWNlLyNib3VuY2VkbWVzc2FnZSkgYW5kIG9wZW5zIHRoZSBib3VuY2UgbW9kYWwgaWYgYSBtZXNzYWdlIGlzIGVtaXR0ZWQuXG4gKlxuICogVG8gYm91bmNlIG1lc3NhZ2VzLCB5b3UgbmVlZCB0byBzZXQgdXAgW3NlbWFudGljIGZpbHRlcnMgZm9yIG1vZGVyYXRpb25dKGh0dHBzOi8vZ2V0c3RyZWFtLmlvL2F1dG9tYXRlZC1tb2RlcmF0aW9uL2RvY3MvYXV0b21vZF9jb25maWd1cmF0aW9uLz9xPXNlbWFudGljJTIwZmlsdGVycykuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N0cmVhbS1tZXNzYWdlLWJvdW5jZS1wcm9tcHQnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWVzc2FnZS1ib3VuY2UtcHJvbXB0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVzOiBbXSxcbn0pXG5leHBvcnQgY2xhc3MgTWVzc2FnZUJvdW5jZVByb21wdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIEBIb3N0QmluZGluZygpIGNsYXNzID0gJ3N0ci1jaGF0X19tZXNzYWdlLWJvdW5jZS1wcm9tcHQnO1xuICBpc01vZGFsT3BlbiA9IGZhbHNlO1xuICBtZXNzYWdlPzogU3RyZWFtTWVzc2FnZTtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2hhbm5lbFNlcnZpY2U6IENoYW5uZWxTZXJ2aWNlLFxuICAgIHJlYWRvbmx5IGN1c3RvbVRlbXBsYXRlc1NlcnZpY2U6IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBtZXNzYWdlQWN0aW9uc1NlcnZpY2U6IE1lc3NhZ2VBY3Rpb25zU2VydmljZSxcbiAgKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmNoYW5uZWxTZXJ2aWNlLmJvdW5jZWRNZXNzYWdlJC5zdWJzY3JpYmUoKG0pID0+IHtcbiAgICAgICAgaWYgKG0gIT09IHRoaXMubWVzc2FnZSkge1xuICAgICAgICAgIHRoaXMubWVzc2FnZSA9IG07XG4gICAgICAgICAgaWYgKHRoaXMubWVzc2FnZSkge1xuICAgICAgICAgICAgdGhpcy5pc01vZGFsT3BlbiA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgbWVzc2FnZUJvdW5jZU1vZGFsT3BlbkNoYW5nZWQgPSAoaXNPcGVuOiBib29sZWFuKSA9PiB7XG4gICAgdGhpcy5pc01vZGFsT3BlbiA9IGlzT3BlbjtcbiAgICBpZiAoIWlzT3Blbikge1xuICAgICAgdGhpcy5tZXNzYWdlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5jaGFubmVsU2VydmljZS5ib3VuY2VkTWVzc2FnZSQubmV4dCh1bmRlZmluZWQpO1xuICAgIH1cbiAgfTtcblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaCgocykgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgfVxuXG4gIGFzeW5jIHJlc2VuZE1lc3NhZ2UoKSB7XG4gICAgdGhpcy5pc01vZGFsT3BlbiA9IGZhbHNlO1xuICAgIGF3YWl0IHRoaXMuY2hhbm5lbFNlcnZpY2UucmVzZW5kTWVzc2FnZSh0aGlzLm1lc3NhZ2UhKTtcbiAgICB0aGlzLm1lc3NhZ2UgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5jaGFubmVsU2VydmljZS5ib3VuY2VkTWVzc2FnZSQubmV4dCh1bmRlZmluZWQpO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlTWVzc2FnZSgpIHtcbiAgICBpZiAoIXRoaXMubWVzc2FnZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmlzTW9kYWxPcGVuID0gZmFsc2U7XG4gICAgYXdhaXQgdGhpcy5jaGFubmVsU2VydmljZS5kZWxldGVNZXNzYWdlKHRoaXMubWVzc2FnZSwgdHJ1ZSk7XG4gICAgdGhpcy5tZXNzYWdlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY2hhbm5lbFNlcnZpY2UuYm91bmNlZE1lc3NhZ2UkLm5leHQodW5kZWZpbmVkKTtcbiAgfVxuXG4gIGVkaXRNZXNzYWdlKCkge1xuICAgIHRoaXMuaXNNb2RhbE9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLm1lc3NhZ2VBY3Rpb25zU2VydmljZS5tZXNzYWdlVG9FZGl0JC5uZXh0KHRoaXMubWVzc2FnZSk7XG4gICAgdGhpcy5tZXNzYWdlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY2hhbm5lbFNlcnZpY2UuYm91bmNlZE1lc3NhZ2UkLm5leHQodW5kZWZpbmVkKTtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lclxuICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgIChjdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLm1vZGFsVGVtcGxhdGUkIHwgYXN5bmMpIHx8IGRlZmF1bHRNb2RhbDtcbiAgICBjb250ZXh0OiB7XG4gICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgaXNPcGVuOiBpc01vZGFsT3BlbixcbiAgICAgIGlzT3BlbkNoYW5nZUhhbmRsZXI6IG1lc3NhZ2VCb3VuY2VNb2RhbE9wZW5DaGFuZ2VkLFxuICAgICAgY29udGVudDogbW9kYWxDb250ZW50LFxuICAgIH1cbiAgXCJcbi8+XG5cbjxuZy10ZW1wbGF0ZVxuICAjZGVmYXVsdE1vZGFsXG4gIGxldC1pc09wZW49XCJpc09wZW5cIlxuICBsZXQtaXNPcGVuQ2hhbmdlSGFuZGxlcj1cImlzT3BlbkNoYW5nZUhhbmRsZXJcIlxuICBsZXQtY29udGVudD1cImNvbnRlbnRcIlxuPlxuICBAaWYgKGlzT3Blbikge1xuICAgIDxzdHJlYW0tbW9kYWxcbiAgICAgIFtpc09wZW5dPVwiaXNPcGVuXCJcbiAgICAgIFtjb250ZW50XT1cImNvbnRlbnRcIlxuICAgICAgKGlzT3BlbkNoYW5nZSk9XCJpc09wZW5DaGFuZ2VIYW5kbGVyKCRldmVudClcIlxuICAgIC8+XG4gIH1cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbW9kYWxDb250ZW50PlxuICA8ZGl2XG4gICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1ib3VuY2UtcHJvbXB0XCJcbiAgICBkYXRhLXRlc3RpZD1cIm1lc3NhZ2UtYm91bmNlLXByb21wdFwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYm91bmNlLXByb21wdC1oZWFkZXJcIj5cbiAgICAgIHt7XG4gICAgICAgIFwic3RyZWFtQ2hhdC5UaGlzIG1lc3NhZ2UgZGlkIG5vdCBtZWV0IG91ciBjb250ZW50IGd1aWRlbGluZXNcIlxuICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICB9fVxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1ib3VuY2UtYWN0aW9uc1wiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLWJvdW5jZS1lZGl0XCJcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJtZXNzYWdlLWJvdW5jZS1lZGl0XCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJlZGl0TWVzc2FnZSgpXCJcbiAgICAgICAgKGtleXVwLmVudGVyKT1cImVkaXRNZXNzYWdlKClcIlxuICAgICAgPlxuICAgICAgICB7eyBcInN0cmVhbUNoYXQuRWRpdCBNZXNzYWdlXCIgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLWJvdW5jZS1zZW5kXCJcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJtZXNzYWdlLWJvdW5jZS1zZW5kXCJcbiAgICAgICAgKGNsaWNrKT1cInJlc2VuZE1lc3NhZ2UoKVwiXG4gICAgICAgIChrZXl1cC5lbnRlcik9XCJyZXNlbmRNZXNzYWdlKClcIlxuICAgICAgPlxuICAgICAgICB7eyBcInN0cmVhbUNoYXQuU2VuZCBBbnl3YXlcIiB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYm91bmNlLWRlbGV0ZVwiXG4gICAgICAgIGRhdGEtdGVzdGlkPVwibWVzc2FnZS1ib3VuY2UtZGVsZXRlXCJcbiAgICAgICAgKGNsaWNrKT1cImRlbGV0ZU1lc3NhZ2UoKVwiXG4gICAgICAgIChrZXl1cC5lbnRlcik9XCJkZWxldGVNZXNzYWdlKClcIlxuICAgICAgPlxuICAgICAgICB7eyBcInN0cmVhbUNoYXQuRGVsZXRlXCIgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=