stream-chat-angular 5.9.1 → 5.10.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 (60) hide show
  1. package/assets/version.d.ts +1 -1
  2. package/esm2020/assets/version.mjs +2 -2
  3. package/esm2020/lib/attachment.service.mjs +3 -3
  4. package/esm2020/lib/avatar-placeholder/avatar-placeholder.component.mjs +2 -2
  5. package/esm2020/lib/channel/channel.component.mjs +2 -2
  6. package/esm2020/lib/channel.service.mjs +4 -4
  7. package/esm2020/lib/chat-client.service.mjs +2 -2
  8. package/esm2020/lib/custom-templates.service.mjs +44 -44
  9. package/esm2020/lib/icon/icon-placeholder/icon-placeholder.component.mjs +2 -2
  10. package/esm2020/lib/icon/loading-indicator-placeholder/loading-indicator-placeholder.component.mjs +2 -2
  11. package/esm2020/lib/message/message.component.mjs +3 -3
  12. package/esm2020/lib/message-actions-box/message-actions-box.component.mjs +3 -3
  13. package/esm2020/lib/message-actions.service.mjs +2 -2
  14. package/esm2020/lib/message-bounce-prompt/message-bounce-prompt.component.mjs +2 -2
  15. package/esm2020/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.mjs +86 -33
  16. package/esm2020/lib/message-input/emoji-input.service.mjs +3 -3
  17. package/esm2020/lib/message-input/message-input-config.service.mjs +10 -3
  18. package/esm2020/lib/message-input/message-input.component.mjs +2 -2
  19. package/esm2020/lib/message-input/textarea/textarea.component.mjs +2 -2
  20. package/esm2020/lib/message-reactions/message-reactions.component.mjs +3 -3
  21. package/esm2020/lib/message-reactions-selector/message-reactions-selector.component.mjs +3 -3
  22. package/esm2020/lib/message-reactions.service.mjs +2 -2
  23. package/esm2020/lib/notification/notification.component.mjs +2 -2
  24. package/esm2020/lib/notification.service.mjs +2 -2
  25. package/esm2020/lib/stream-i18n.service.mjs +2 -2
  26. package/esm2020/lib/theme.service.mjs +2 -2
  27. package/esm2020/lib/thread/thread.component.mjs +2 -2
  28. package/esm2020/lib/types.mjs +1 -1
  29. package/fesm2015/stream-chat-angular.mjs +164 -107
  30. package/fesm2015/stream-chat-angular.mjs.map +1 -1
  31. package/fesm2020/stream-chat-angular.mjs +162 -104
  32. package/fesm2020/stream-chat-angular.mjs.map +1 -1
  33. package/lib/attachment.service.d.ts +3 -3
  34. package/lib/avatar-placeholder/avatar-placeholder.component.d.ts +1 -1
  35. package/lib/channel/channel.component.d.ts +1 -1
  36. package/lib/channel.service.d.ts +15 -15
  37. package/lib/chat-client.service.d.ts +3 -3
  38. package/lib/custom-templates.service.d.ts +43 -43
  39. package/lib/icon/icon-placeholder/icon-placeholder.component.d.ts +1 -1
  40. package/lib/icon/loading-indicator-placeholder/loading-indicator-placeholder.component.d.ts +1 -1
  41. package/lib/message/message.component.d.ts +2 -2
  42. package/lib/message-actions-box/message-actions-box.component.d.ts +2 -2
  43. package/lib/message-actions.service.d.ts +2 -2
  44. package/lib/message-bounce-prompt/message-bounce-prompt.component.d.ts +1 -1
  45. package/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.d.ts +8 -5
  46. package/lib/message-input/emoji-input.service.d.ts +2 -2
  47. package/lib/message-input/message-input-config.service.d.ts +11 -3
  48. package/lib/message-input/message-input.component.d.ts +6 -6
  49. package/lib/message-input/textarea/textarea.component.d.ts +2 -2
  50. package/lib/message-reactions/message-reactions.component.d.ts +2 -2
  51. package/lib/message-reactions-selector/message-reactions-selector.component.d.ts +2 -2
  52. package/lib/message-reactions.service.d.ts +2 -2
  53. package/lib/notification/notification.component.d.ts +1 -1
  54. package/lib/notification.service.d.ts +1 -1
  55. package/lib/stream-i18n.service.d.ts +1 -1
  56. package/lib/theme.service.d.ts +1 -1
  57. package/lib/thread/thread.component.d.ts +1 -1
  58. package/lib/types.d.ts +39 -0
  59. package/package.json +1 -1
  60. package/src/assets/version.ts +1 -1
@@ -17,13 +17,13 @@ import { NgxFloatUiModule } from 'ngx-float-ui';
17
17
  import prettybytes from 'pretty-bytes';
18
18
  import fixWebmDuration from 'fix-webm-duration';
19
19
  import transliterate from '@stream-io/transliterate';
20
- import * as i7$1 from 'angular-mentions';
20
+ import * as i8 from 'angular-mentions';
21
21
  import { MentionModule } from 'angular-mentions';
22
22
 
23
- const version = '5.9.1';
23
+ const version = '5.10.0';
24
24
 
25
25
  /**
26
- * The `NotificationService` can be used to add or remove notifications. By default the [`NotificationList`](../components/NotificationListComponent.mdx) component displays the currently active notifications.
26
+ * The `NotificationService` can be used to add or remove notifications. By default the [`NotificationList`](/chat/docs/sdk/angular/components/NotificationListComponent/) component displays the currently active notifications.
27
27
  */
28
28
  class NotificationService {
29
29
  constructor() {
@@ -196,7 +196,7 @@ class ChatClientService {
196
196
  return result;
197
197
  }
198
198
  /**
199
- * Disconnects the current user, and closes the WebSocket connection. Useful when disconnecting a chat user, use in combination with [`reset`](./ChannelService.mdx/#reset).
199
+ * Disconnects the current user, and closes the WebSocket connection. Useful when disconnecting a chat user, use in combination with [`reset`](/chat/docs/sdk/angular/services/ChannelService/#reset/).
200
200
  */
201
201
  async disconnectUser() {
202
202
  this.pendingInvitesSubject.next([]);
@@ -780,7 +780,7 @@ class ChannelService {
780
780
  return this._init(options);
781
781
  }
782
782
  /**
783
- * Resets the `activeChannel$`, `channels$` and `activeChannelMessages$` Observables. Useful when disconnecting a chat user, use in combination with [`disconnectUser`](./ChatClientService.mdx/#disconnectuser).
783
+ * Resets the `activeChannel$`, `channels$` and `activeChannelMessages$` Observables. Useful when disconnecting a chat user, use in combination with [`disconnectUser`](/chat/docs/sdk/angular/services/ChatClientService/#disconnectuser/).
784
784
  */
785
785
  reset() {
786
786
  this.deselectActiveChannel();
@@ -922,7 +922,7 @@ class ChannelService {
922
922
  }
923
923
  /**
924
924
  * Uploads files to the channel. If you want to know more about [file uploads](https://getstream.io/chat/docs/javascript/file_uploads/?language=javascript) check out the platform documentation.
925
- * @param uploads the attachments to upload (output of the [`AttachmentService`](./AttachmentService.mdx))
925
+ * @param uploads the attachments to upload (output of the [`AttachmentService`](/chat/docs/sdk/angular/services/AttachmentService/))
926
926
  * @returns the result of file upload requests
927
927
  */
928
928
  async uploadAttachments(uploads) {
@@ -990,7 +990,7 @@ class ChannelService {
990
990
  }
991
991
  /**
992
992
  * Deletes an uploaded file by URL. If you want to know more about [file uploads](https://getstream.io/chat/docs/javascript/file_uploads/?language=javascript) check out the platform documentation
993
- * @param attachmentUpload Attachment to be deleted (output of the [`AttachmentService`](./AttachmentService.mdx))
993
+ * @param attachmentUpload Attachment to be deleted (output of the [`AttachmentService`](/chat/docs/sdk/angular/services/AttachmentService/))
994
994
  */
995
995
  async deleteAttachment(attachmentUpload) {
996
996
  const channel = this.activeChannelSubject.getValue();
@@ -1966,7 +1966,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
1966
1966
  }], ctorParameters: function () { return [{ type: ChatClientService }, { type: i0.NgZone }, { type: NotificationService }]; } });
1967
1967
 
1968
1968
  /**
1969
- * The `ThemeService` can be used to change the theme of the chat UI and to customize the theme. Our [theming guide](../theming/introduction.mdx) gives a complete overview about the topic.
1969
+ * The `ThemeService` can be used to change the theme of the chat UI and to customize the theme. Our [theming guide](/chat/docs/sdk/angular/theming/themingv2/) gives a complete overview about the topic.
1970
1970
  */
1971
1971
  class ThemeService {
1972
1972
  constructor() {
@@ -2089,7 +2089,7 @@ class AttachmentService {
2089
2089
  /**
2090
2090
  * You can get and set the list if uploaded custom attachments
2091
2091
  *
2092
- * By default the SDK components won't display these, but you can provide your own `customAttachmentPreviewListTemplate$` and `customAttachmentListTemplate$` for the [`CustomTemplatesService`](../../services/CustomTemplatesService).
2092
+ * By default the SDK components won't display these, but you can provide your own `customAttachmentPreviewListTemplate$` and `customAttachmentListTemplate$` for the [`CustomTemplatesService`](/chat/docs/sdk/angular/services/CustomTemplatesService/).
2093
2093
  */
2094
2094
  this.customAttachments$ = new BehaviorSubject([]);
2095
2095
  /**
@@ -2219,7 +2219,7 @@ class AttachmentService {
2219
2219
  /**
2220
2220
  * You can add custom `image`, `video` and `file` attachments using this method.
2221
2221
  *
2222
- * Note: If you just want to use your own CDN for file uploads, you don't necessary need this method, you can just specify you own upload function in the [`ChannelService`](./ChannelService.mdx)
2222
+ * Note: If you just want to use your own CDN for file uploads, you don't necessary need this method, you can just specify you own upload function in the [`ChannelService`](/chat/docs/sdk/angular/services/ChannelService/)
2223
2223
  * @param attachment
2224
2224
  */
2225
2225
  addAttachment(attachment) {
@@ -2835,7 +2835,7 @@ const en = {
2835
2835
  };
2836
2836
 
2837
2837
  /**
2838
- * The `StreamI18nService` can be used to customize the labels of the chat UI. Our [translation guide](../concepts/translation.mdx) covers this topic in detail.
2838
+ * The `StreamI18nService` can be used to customize the labels of the chat UI. Our [translation guide](/chat/docs/sdk/angular/concepts/translation/) covers this topic in detail.
2839
2839
  */
2840
2840
  class StreamI18nService {
2841
2841
  constructor(translteService) {
@@ -3027,183 +3027,183 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
3027
3027
  class CustomTemplatesService {
3028
3028
  constructor() {
3029
3029
  /**
3030
- * The autocomplete list item template for mentioning users (used in the [`AutocompleteTextareaComponent`](../components/AutocompleteTextareaComponent.mdx))
3030
+ * The autocomplete list item template for mentioning users (used in the [`AutocompleteTextareaComponent`](/chat/docs/sdk/angular/components/AutocompleteTextareaComponent/))
3031
3031
  */
3032
3032
  this.mentionAutocompleteItemTemplate$ = new BehaviorSubject(undefined);
3033
3033
  /**
3034
- * The autocomplete list item template for commands (used in the [`AutocompleteTextareaComponent`](../components/AutocompleteTextareaComponent.mdx))
3034
+ * The autocomplete list item template for commands (used in the [`AutocompleteTextareaComponent`](/chat/docs/sdk/angular/components/AutocompleteTextareaComponent/))
3035
3035
  */
3036
3036
  this.commandAutocompleteItemTemplate$ = new BehaviorSubject(undefined);
3037
3037
  /**
3038
- * Template used to display an item in the [channel list](../components/ChannelListComponent.mdx) (instead of the default [channal list item](../components/ChannelPreviewComponent.mdx))
3038
+ * Template used to display an item in the [channel list](/chat/docs/sdk/angular/components/ChannelListComponent/) (instead of the default [channal list item](/chat/docs/sdk/angular/components/ChannelPreviewComponent/))
3039
3039
  *
3040
3040
  */
3041
3041
  this.channelPreviewTemplate$ = new BehaviorSubject(undefined);
3042
3042
  /**
3043
- * The template used for displaying a [mention inside a message](../code-examples/mention-actions.mdx)
3043
+ * The template used for displaying a [mention inside a message](/chat/docs/sdk/angular/code-examples/mention-actions/)
3044
3044
  *
3045
3045
  */
3046
3046
  this.mentionTemplate$ = new BehaviorSubject(undefined);
3047
3047
  /**
3048
- * The template for [emoji picker](../code-examples/emoji-picker.mdx)
3048
+ * The template for [emoji picker](/chat/docs/sdk/angular/code-examples/emoji-picker)
3049
3049
  *
3050
3050
  */
3051
3051
  this.emojiPickerTemplate$ = new BehaviorSubject(undefined);
3052
3052
  /**
3053
- * The typing indicator template used in the [message list](../components/MessageListComponent.mdx)
3053
+ * The typing indicator template used in the [message list](/chat/docs/sdk/angular/components/MessageListComponent/)
3054
3054
  *
3055
3055
  */
3056
3056
  this.typingIndicatorTemplate$ = new BehaviorSubject(undefined);
3057
3057
  /**
3058
- * The template used to display a message in the [message list](../components/MessageListComponent.mdx) (instead of the [default message component](../components/MessageComponent.mdx))
3058
+ * The template used to display a message in the [message list](/chat/docs/sdk/angular/components/MessageListComponent/) (instead of the [default message component](/chat/docs/sdk/angular/components/MessageComponent/))
3059
3059
  *
3060
3060
  */
3061
3061
  this.messageTemplate$ = new BehaviorSubject(undefined);
3062
3062
  /**
3063
- * The template for channel actions displayed in the [channel header](../components/ChannelHeaderComponent.mdx) (by default no channel action is displayed)
3063
+ * The template for channel actions displayed in the [channel header](/chat/docs/sdk/angular/components/ChannelHeaderComponent/) (by default no channel action is displayed)
3064
3064
  *
3065
3065
  */
3066
3066
  this.channelActionsTemplate$ = new BehaviorSubject(undefined);
3067
3067
  /**
3068
- * The template used to display attachments of a [message](../components/MessageComponent.mdx) (instead of the [default attachment list](../components/AttachmentListComponent.mdx))
3068
+ * The template used to display attachments of a [message](/chat/docs/sdk/angular/components/MessageComponent/) (instead of the [default attachment list](/chat/docs/sdk/angular/components/AttachmentListComponent/))
3069
3069
  *
3070
3070
  */
3071
3071
  this.attachmentListTemplate$ = new BehaviorSubject(undefined);
3072
3072
  /**
3073
- * The template used to display attachments in the [message input](../components/MessageInputComponent.mdx) component (instead of the [default attachment preview](../components/AttachmentPreviewListComponent.mdx))
3073
+ * The template used to display attachments in the [message input](/chat/docs/sdk/angular/components/MessageInputComponent) component (instead of the [default attachment preview](/chat/docs/sdk/angular/components/AttachmentPreviewListComponent))
3074
3074
  *
3075
3075
  */
3076
3076
  this.attachmentPreviewListTemplate$ = new BehaviorSubject(undefined);
3077
3077
  /**
3078
- * The template used to display avatars for channels and users (instead of the [default avatar](../components/AvatarComponent.mdx))
3078
+ * The template used to display avatars for channels and users (instead of the [default avatar](/chat/docs/sdk/angular/components/AvatarComponent/))
3079
3079
  *
3080
3080
  */
3081
3081
  this.avatarTemplate$ = new BehaviorSubject(undefined);
3082
3082
  /**
3083
- * Template for displaying icons (instead of the [default icon component](../components/IconComponent.mdx))
3083
+ * Template for displaying icons (instead of the [default icon component](/chat/docs/sdk/angular/components/IconComponent/))
3084
3084
  *
3085
3085
  */
3086
3086
  this.iconTemplate$ = new BehaviorSubject(undefined);
3087
3087
  /**
3088
- * Template for displaying the loading indicator (instead of the [default loading indicator](../components/LoadingIndicatorComponent.mdx))
3088
+ * Template for displaying the loading indicator (instead of the [default loading indicator](/chat/docs/sdk/angular/components/LoadingIndicatorComponent/))
3089
3089
  *
3090
3090
  */
3091
3091
  this.loadingIndicatorTemplate$ = new BehaviorSubject(undefined);
3092
3092
  /**
3093
- * Template for displaying the message actions box (instead of the [default message actions box](../components/MessageActionsBoxComponent.mdx))
3093
+ * Template for displaying the message actions box (instead of the [default message actions box](/chat/docs/sdk/angular/components/MessageActionsBoxComponent/))
3094
3094
  *
3095
3095
  */
3096
3096
  this.messageActionsBoxTemplate$ = new BehaviorSubject(undefined);
3097
3097
  /**
3098
- * The template used for displaying an item in the [message actions box](../components/MessageActionsBoxComponent.mdx)
3098
+ * The template used for displaying an item in the [message actions box](/chat/docs/sdk/angular/components/MessageActionsBoxComponent/)
3099
3099
  *
3100
3100
  */
3101
3101
  this.messageActionsBoxItemTemplate$ = new BehaviorSubject(undefined);
3102
3102
  /**
3103
- * The template used to display the reactions of a [message](../components/MessageComponent.mdx), and the selector to add a reaction to a message (instead of the [default message reactions component](../components/MessageReactionsComponent.mdx))
3103
+ * The template used to display the reactions of a [message](/chat/docs/sdk/angular/components/MessageComponent/), and the selector to add a reaction to a message (instead of the [default message reactions component](/chat/docs/sdk/angular/components/MessageReactionsComponent/))
3104
3104
  *
3105
3105
  */
3106
3106
  this.messageReactionsTemplate$ = new BehaviorSubject(undefined);
3107
3107
  /**
3108
- * The template used to display the reactions of a [message](../components/MessageComponent.mdx), and the selector to add a reaction to a message (instead of the [default message reactions component](../components/MessageReactionsComponent.mdx))
3108
+ * The template used to display the reactions of a [message](/chat/docs/sdk/angular/components/MessageComponent/), and the selector to add a reaction to a message (instead of the [default message reactions component](/chat/docs/sdk/angular/components/MessageReactionsComponent/))
3109
3109
  *
3110
3110
  */
3111
3111
  this.messageReactionsSelectorTemplate$ = new BehaviorSubject(undefined);
3112
3112
  /**
3113
- * The template used to display a modal window (instead of the [default modal](../components/ModalComponent.mdx))
3113
+ * The template used to display a modal window (instead of the [default modal](/chat/docs/sdk/angular/components/ModalComponent/))
3114
3114
  *
3115
3115
  */
3116
3116
  this.modalTemplate$ = new BehaviorSubject(undefined);
3117
3117
  /**
3118
- * The template used to override the [default notification component](../components/NotificationComponent.mdx)
3118
+ * The template used to override the [default notification component](/chat/docs/sdk/angular/components/NotificationComponent/)
3119
3119
  *
3120
3120
  */
3121
3121
  this.notificationTemplate$ = new BehaviorSubject(undefined);
3122
3122
  /**
3123
- * The template used for header of a [thread](../components/ThreadComponent.mdx)
3123
+ * The template used for header of a [thread](/chat/docs/sdk/angular/components/ThreadComponent/)
3124
3124
  *
3125
3125
  */
3126
3126
  this.threadHeaderTemplate$ = new BehaviorSubject(undefined);
3127
3127
  /**
3128
- * The template used for displaying the delivered state of the message inside the [message component](../components/MessageComponent.mdx)
3128
+ * The template used for displaying the delivered state of the message inside the [message component](/chat/docs/sdk/angular/components/MessageComponent/)
3129
3129
  *
3130
3130
  * Displayed for the last message sent by the current user, if the message isn't yet read by anyone
3131
3131
  *
3132
3132
  */
3133
3133
  this.deliveredStatusTemplate$ = new BehaviorSubject(undefined);
3134
3134
  /**
3135
- * The template used for displaying the sending state of the message inside the [message component](../components/MessageComponent.mdx)
3135
+ * The template used for displaying the sending state of the message inside the [message component](/chat/docs/sdk/angular/components/MessageComponent/)
3136
3136
  *
3137
3137
  * Displayed for the last message sent by the current user, if the message is currently being sent
3138
3138
  *
3139
3139
  */
3140
3140
  this.sendingStatusTemplate$ = new BehaviorSubject(undefined);
3141
3141
  /**
3142
- * The template used for displaying the sent state of the message inside the [message component](../components/MessageComponent.mdx)
3142
+ * The template used for displaying the sent state of the message inside the [message component](/chat/docs/sdk/angular/components/MessageComponent/)
3143
3143
  *
3144
3144
  * Displayed for the last message sent by the current user, if the message is read at least by one user
3145
3145
  *
3146
3146
  */
3147
3147
  this.readStatusTemplate$ = new BehaviorSubject(undefined);
3148
3148
  /**
3149
- * Template to display custom metadata inside [message component](../components/MessageComponent.mdx)
3149
+ * Template to display custom metadata inside [message component](/chat/docs/sdk/angular/components/MessageComponent/)
3150
3150
  *
3151
3151
  */
3152
3152
  this.customMessageMetadataTemplate$ = new BehaviorSubject(undefined);
3153
3153
  /**
3154
- * The template used to display additional information about a channel under the channel name inside the [channel header component](../components/ChannelHeaderComponent.mdx)
3154
+ * The template used to display additional information about a channel under the channel name inside the [channel header component](/chat/docs/sdk/angular/components/ChannelHeaderComponent/)
3155
3155
  *
3156
3156
  */
3157
3157
  this.channelHeaderInfoTemplate$ = new BehaviorSubject(undefined);
3158
3158
  /**
3159
- * The template used for displaying file upload/attachment selector inside the [message input](../components/MessageInputComponent.mdx)
3159
+ * The template used for displaying file upload/attachment selector inside the [message input](/chat/docs/sdk/angular/components/MessageInputComponent/)
3160
3160
  *
3161
3161
  */
3162
3162
  this.customAttachmentUploadTemplate$ = new BehaviorSubject(undefined);
3163
3163
  /**
3164
- * The template that can be used to override how a single image attachment is displayed inside the [attachment list](../components/AttachmentListComponent.mdx)
3164
+ * The template that can be used to override how a single image attachment is displayed inside the [attachment list](/chat/docs/sdk/angular/components/AttachmentListComponent/)
3165
3165
  */
3166
3166
  this.imageAttachmentTemplate$ = new BehaviorSubject(undefined);
3167
3167
  /**
3168
- * The template that can be used to override how a voice recording attachment is displayed inside the [attachment list](../components/AttachmentListComponent.mdx), by default the [voice recording component](../components/VoiceRecordingComponent.mdx) is used
3168
+ * The template that can be used to override how a voice recording attachment is displayed inside the [attachment list](/chat/docs/sdk/angular/components/AttachmentListComponent/), by default the [voice recording component](/chat/docs/sdk/angular/components/VoiceRecordingComponent/) is used
3169
3169
  */
3170
3170
  this.voiceRecordingAttachmentTemplate$ = new BehaviorSubject(undefined);
3171
3171
  /**
3172
- * The template that can be used to override how a video attachment is displayed inside the [attachment list](../components/AttachmentListComponent.mdx)
3172
+ * The template that can be used to override how a video attachment is displayed inside the [attachment list](/chat/docs/sdk/angular/components/AttachmentListComponent/)
3173
3173
  */
3174
3174
  this.videoAttachmentTemplate$ = new BehaviorSubject(undefined);
3175
3175
  /**
3176
- * The template that can be used to override how image gallery is displayed inside the [attachment list](../components/AttachmentListComponent.mdx)
3176
+ * The template that can be used to override how image gallery is displayed inside the [attachment list](/chat/docs/sdk/angular/components/AttachmentListComponent/)
3177
3177
  */
3178
3178
  this.galleryAttachmentTemplate$ = new BehaviorSubject(undefined);
3179
3179
  /**
3180
- * The template that can be used to override how a file attachment is displayed inside the [attachment list](../components/AttachmentListComponent.mdx)
3180
+ * The template that can be used to override how a file attachment is displayed inside the [attachment list](/chat/docs/sdk/angular/components/AttachmentListComponent/)
3181
3181
  */
3182
3182
  this.fileAttachmentTemplate$ = new BehaviorSubject(undefined);
3183
3183
  /**
3184
- * The template that can be used to override how a card attachment is displayed inside the [attachment list](../components/AttachmentListComponent.mdx)
3184
+ * The template that can be used to override how a card attachment is displayed inside the [attachment list](/chat/docs/sdk/angular/components/AttachmentListComponent/)
3185
3185
  */
3186
3186
  this.cardAttachmentTemplate$ = new BehaviorSubject(undefined);
3187
3187
  /**
3188
- * The template that can be used to override how attachment actions are displayed inside the [attachment list](../components/AttachmentListComponent.mdx)
3188
+ * The template that can be used to override how attachment actions are displayed inside the [attachment list](/chat/docs/sdk/angular/components/AttachmentListComponent/)
3189
3189
  */
3190
3190
  this.attachmentActionsTemplate$ = new BehaviorSubject(undefined);
3191
3191
  /**
3192
- * The template used to display [system messages](https://getstream.io/chat/docs/javascript/silent_messages/?language=javascript&q=system) indise the [message component](../components/MessageComponent.mdx)
3192
+ * The template used to display [system messages](https://getstream.io/chat/docs/javascript/silent_messages/?language=javascript&q=system) indise the [message component](/chat/docs/sdk/angular/components/MessageComponent/)
3193
3193
  */
3194
3194
  this.systemMessageTemplate$ = new BehaviorSubject(undefined);
3195
3195
  /**
3196
- * The template used to display the date separator inside the [message list](../components/MessageListComponent.mdx)
3196
+ * The template used to display the date separator inside the [message list](/chat/docs/sdk/angular/components/MessageListComponent/)
3197
3197
  */
3198
3198
  this.dateSeparatorTemplate$ = new BehaviorSubject(undefined);
3199
3199
  /**
3200
- * The template used to display unread messages indicator inside the [message list](../components/MessageListComponent.mdx) when the channel is opened
3200
+ * The template used to display unread messages indicator inside the [message list](/chat/docs/sdk/angular/components/MessageListComponent/) when the channel is opened
3201
3201
  *
3202
3202
  * This UI element is used to separate unread messages from read messages
3203
3203
  */
3204
3204
  this.newMessagesIndicatorTemplate$ = new BehaviorSubject(undefined);
3205
3205
  /**
3206
- * The template used to display unread messages notification inside the [message list](../components/MessageListComponent.mdx) when the channel is opened
3206
+ * The template used to display unread messages notification inside the [message list](/chat/docs/sdk/angular/components/MessageListComponent/) when the channel is opened
3207
3207
  *
3208
3208
  * Users can use this notification to jump to the first unread message when it's clicked
3209
3209
  */
@@ -3217,28 +3217,28 @@ class CustomTemplatesService {
3217
3217
  */
3218
3218
  this.emptyThreadMessageListPlaceholder$ = new BehaviorSubject(undefined);
3219
3219
  /**
3220
- * The template used to display the [message bounce prompt](../components/MessageBouncePromptComponent.mdx)
3220
+ * The template used to display the [message bounce prompt](/chat/docs/sdk/angular/components/MessageBouncePromptComponent/)
3221
3221
  */
3222
3222
  this.messageBouncePromptTemplate$ = new BehaviorSubject(undefined);
3223
3223
  /**
3224
- * Template used to display the channel information inside the [channel list item](../components/ChannelPreviewComponent.mdx)
3224
+ * Template used to display the channel information inside the [channel list item](/chat/docs/sdk/angular/components/ChannelPreviewComponent/)
3225
3225
  *
3226
3226
  */
3227
3227
  this.channelPreviewInfoTemplate$ = new BehaviorSubject(undefined);
3228
3228
  /**
3229
- * The template used to display custom attachment previews in the [message input component](../../components/MessageInputComponent.mdx)
3229
+ * The template used to display custom attachment previews in the [message input component](/chat/docs/sdk/angular/components/MessageInputComponent/)
3230
3230
  */
3231
3231
  this.customAttachmentPreviewListTemplate$ = new BehaviorSubject(undefined);
3232
3232
  /**
3233
- * The template used to display custom attachments in the [message component](../../components/MessageComponent.mdx)
3233
+ * The template used to display custom attachments in the [message component](/chat/docs/sdk/angular/components/MessageComponent/)
3234
3234
  */
3235
3235
  this.customAttachmentListTemplate$ = new BehaviorSubject(undefined);
3236
3236
  /**
3237
- * The template used to display the number of thread replies inside the [message component](../../components/MessageComponent.mdx)
3237
+ * The template used to display the number of thread replies inside the [message component](/chat/docs/sdk/angular/components/MessageComponent/)
3238
3238
  */
3239
3239
  this.threadLinkButton$ = new BehaviorSubject(undefined);
3240
3240
  /**
3241
- * Template to display custom metadata inside the message bubble of the [message component](../components/MessageComponent.mdx)
3241
+ * Template to display custom metadata inside the message bubble of the [message component](/chat/docs/sdk/angular/components/MessageComponent/)
3242
3242
  *
3243
3243
  * To properly position your template you should override the `grid-template-areas` of the `.str-chat__message-inner` selector
3244
3244
  */
@@ -3255,7 +3255,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
3255
3255
  }], ctorParameters: function () { return []; } });
3256
3256
 
3257
3257
  /**
3258
- * The `AvatarPlaceholder` component displays the [default avatar](./AvatarComponent.mdx) unless a [custom template](../services/CustomTemplatesService.mdx) is provided. This component is used by the SDK internally, you likely won't need to use it.
3258
+ * The `AvatarPlaceholder` component displays the [default avatar](/chat/docs/sdk/angular/components/AvatarComponent/) unless a [custom template](/chat/docs/sdk/angular/services/CustomTemplatesService/) is provided. This component is used by the SDK internally, you likely won't need to use it.
3259
3259
  */
3260
3260
  class AvatarPlaceholderComponent {
3261
3261
  constructor(customTemplatesService) {
@@ -3331,7 +3331,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
3331
3331
  }] } });
3332
3332
 
3333
3333
  /**
3334
- * The `IconPlaceholder` component displays the [default icons](./IconComponent.mdx) unless a [custom template](../services/CustomTemplatesService.mdx) is provided. This component is used by the SDK internally, you likely won't need to use it.
3334
+ * The `IconPlaceholder` component displays the [default icons](/chat/docs/sdk/angular/components/IconComponent/) unless a [custom template](/chat/docs/sdk/angular/services/CustomTemplatesService/) is provided. This component is used by the SDK internally, you likely won't need to use it.
3335
3335
  */
3336
3336
  class IconPlaceholderComponent {
3337
3337
  constructor(customTemplatesService) {
@@ -3367,7 +3367,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
3367
3367
  }], ctorParameters: function () { return []; } });
3368
3368
 
3369
3369
  /**
3370
- * The `LoadingInficatorPlaceholder` component displays the [default loading indicator](./LoadingIndicatorComponent.mdx) unless a [custom template](../services/CustomTemplatesService.mdx) is provided. This component is used by the SDK internally, you likely won't need to use it.
3370
+ * The `LoadingInficatorPlaceholder` component displays the [default loading indicator](/chat/docs/sdk/angular/components/LoadingIndicatorComponent/) unless a [custom template](/chat/docs/sdk/angular/services/CustomTemplatesService/) is provided. This component is used by the SDK internally, you likely won't need to use it.
3371
3371
  */
3372
3372
  class LoadingIndicatorPlaceholderComponent {
3373
3373
  constructor(customTemplatesService) {
@@ -3382,7 +3382,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
3382
3382
  }], ctorParameters: function () { return [{ type: CustomTemplatesService }]; } });
3383
3383
 
3384
3384
  /**
3385
- * The message actions service provides customization options for the [message actions](../../components/MessageActionsBoxComponent)
3385
+ * The message actions service provides customization options for the [message actions](/chat/docs/sdk/angular/components/MessageActionsBoxComponent)
3386
3386
  */
3387
3387
  class MessageActionsService {
3388
3388
  constructor(chatClientService, notificationService, channelService) {
@@ -3569,7 +3569,7 @@ class MessageReactionsService {
3569
3569
  /**
3570
3570
  * The enabled [reactions](https://getstream.io/chat/docs/javascript/send_reaction/?language=javascript) and the associated emoji
3571
3571
  *
3572
- * You can provide any string as a reaction. The emoji can be provided as a string, if you want to use custom images for reactions you have to provide a [custom reactions UI](../../services/CustomTemplatesService/#messagereactionstemplate)
3572
+ * You can provide any string as a reaction. The emoji can be provided as a string, if you want to use custom images for reactions you have to provide a [custom reactions UI](/chat/docs/sdk/angular/services/CustomTemplatesService/#messagereactionstemplate/)
3573
3573
  */
3574
3574
  this.reactions$ = new BehaviorSubject({
3575
3575
  haha: '😂',
@@ -3624,7 +3624,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
3624
3624
  }], ctorParameters: function () { return [{ type: ChatClientService }, { type: NotificationService }]; } });
3625
3625
 
3626
3626
  /**
3627
- * The `MessageReactionsSelectorComponent` makes it possible for users to react to a message, the reaction options can be set using the [`MessageReactionsService`](../../services/MessageReactionsService). You can read more about [message reactions](https://getstream.io/chat/docs/javascript/send_reaction/?language=javascript) in the platform documentation.
3627
+ * The `MessageReactionsSelectorComponent` makes it possible for users to react to a message, the reaction options can be set using the [`MessageReactionsService`](/chat/docs/sdk/angular/services/MessageReactionsService/). You can read more about [message reactions](https://getstream.io/chat/docs/javascript/send_reaction/?language=javascript) in the platform documentation.
3628
3628
  */
3629
3629
  class MessageReactionsSelectorComponent {
3630
3630
  constructor(channelService, messageReactionsService, cdRef) {
@@ -3632,7 +3632,7 @@ class MessageReactionsSelectorComponent {
3632
3632
  this.messageReactionsService = messageReactionsService;
3633
3633
  this.cdRef = cdRef;
3634
3634
  /**
3635
- * List of the user's own reactions of a [message](../types/stream-message.mdx), used to display the users of a reaction type.
3635
+ * List of the user's own reactions of a [message](/chat/docs/sdk/angular/types/stream-message/), used to display the users of a reaction type.
3636
3636
  */
3637
3637
  this.ownReactions = [];
3638
3638
  this.reactionOptions = [];
@@ -3680,7 +3680,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
3680
3680
  }] } });
3681
3681
 
3682
3682
  /**
3683
- * 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](../concepts/message-interactions.mdx) in the message interaction guide.
3683
+ * 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.
3684
3684
  */
3685
3685
  class MessageActionsBoxComponent {
3686
3686
  constructor(customTemplatesService, messageActionsService, cdRef) {
@@ -3692,7 +3692,7 @@ class MessageActionsBoxComponent {
3692
3692
  */
3693
3693
  this.isMine = false;
3694
3694
  /**
3695
- * The list of [channel capabilities](https://getstream.io/chat/docs/javascript/channel_capabilities/?language=javascript) that are enabled for the current user, the list of [supported interactions](../concepts/message-interactions.mdx) can be found in our message interaction guide. Unathorized actions won't be displayed on the UI.
3695
+ * The list of [channel capabilities](https://getstream.io/chat/docs/javascript/channel_capabilities/?language=javascript) 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.
3696
3696
  */
3697
3697
  this.enabledActions = [];
3698
3698
  this.visibleMessageActionItems = [];
@@ -3796,7 +3796,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
3796
3796
  }] } });
3797
3797
 
3798
3798
  /**
3799
- * The `Notification` component displays a notification within the [`NotificationList`](./NotificationListComponent.mdx)
3799
+ * The `Notification` component displays a notification within the [`NotificationList`](/chat/docs/sdk/angular/components/NotificationListComponent/)
3800
3800
  */
3801
3801
  class NotificationComponent {
3802
3802
  constructor() { }
@@ -3906,7 +3906,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
3906
3906
  }] } });
3907
3907
 
3908
3908
  /**
3909
- * The component watches for the [`channelService.bouncedMessage$` stream](../../services/ChannelService/#bouncedmessage) and opens the bounce modal if a message is emitted.
3909
+ * 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.
3910
3910
  *
3911
3911
  * To bounce messages, you need to set up [semantic filters for moderation](https://getstream.io/automated-moderation/docs/automod_configuration/?q=semantic%20filters).
3912
3912
  */
@@ -3969,7 +3969,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
3969
3969
  }] } });
3970
3970
 
3971
3971
  /**
3972
- * The `Channel` component is a container component that displays the [`ChannelHeader`](./ChannelHeaderComponent.mdx), [`MessageList`](./MessageListComponent.mdx), [`NotificationList`](./NotificationListComponent.mdx) and [`MessageInput`](./MessageInputComponent.mdx) components. You can also provide the [`Thread`](./ThreadComponent.mdx) component to use message [threads](https://getstream.io/chat/docs/javascript/threads/?language=javascript).
3972
+ * 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](https://getstream.io/chat/docs/javascript/threads/?language=javascript).
3973
3973
  */
3974
3974
  class ChannelComponent {
3975
3975
  constructor(channelService, themeService, customTemplatesService) {
@@ -4987,12 +4987,12 @@ class MessageReactionsComponent {
4987
4987
  */
4988
4988
  this.messageReactionCounts = {};
4989
4989
  /**
4990
- * List of reactions of a [message](../types/stream-message.mdx), used to display the users of a reaction type.
4990
+ * List of reactions of a [message](/chat/docs/sdk/angular/types/stream-message/), used to display the users of a reaction type.
4991
4991
  * @deprecated you can fetch the reactions using [`messageReactionsService.queryReactions()`](https://getstream.io/chat/docs/sdk/angular/services/MessageReactionsService/#queryreactions)
4992
4992
  */
4993
4993
  this.latestReactions = [];
4994
4994
  /**
4995
- * List of the user's own reactions of a [message](../types/stream-message.mdx), used to display the users of a reaction type.
4995
+ * List of the user's own reactions of a [message](/chat/docs/sdk/angular/types/stream-message/), used to display the users of a reaction type.
4996
4996
  */
4997
4997
  this.ownReactions = [];
4998
4998
  this.isLoading = true;
@@ -5131,7 +5131,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
5131
5131
  }] } });
5132
5132
 
5133
5133
  /**
5134
- * The `Message` component displays a message with additional information such as sender and date, and enables [interaction with the message (i.e. edit or react)](../concepts/message-interactions.mdx).
5134
+ * The `Message` component displays a message with additional information such as sender and date, and enables [interaction with the message (i.e. edit or react)](/chat/docs/sdk/angular/concepts/message-interactions/).
5135
5135
  */
5136
5136
  class MessageComponent {
5137
5137
  constructor(chatClientService, channelService, customTemplatesService, cdRef, dateParser, messageService, messageActionsService, ngZone, translateService) {
@@ -5145,7 +5145,7 @@ class MessageComponent {
5145
5145
  this.ngZone = ngZone;
5146
5146
  this.translateService = translateService;
5147
5147
  /**
5148
- * The list of [channel capabilities](https://getstream.io/chat/docs/javascript/channel_capabilities/?language=javascript) that are enabled for the current user, the list of [supported interactions](../concepts/message-interactions.mdx) can be found in our message interaction guide. Unathorized actions won't be displayed on the UI. The [`MessageList`](./MessageListComponent.mdx) component automatically sets this based on [channel capabilities](https://getstream.io/chat/docs/javascript/channel_capabilities/?language=javascript).
5148
+ * The list of [channel capabilities](https://getstream.io/chat/docs/javascript/channel_capabilities/?language=javascript) 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. The [`MessageList`](/chat/docs/sdk/angular/components/MessageListComponent/) component automatically sets this based on [channel capabilities](https://getstream.io/chat/docs/javascript/channel_capabilities/?language=javascript).
5149
5149
  */
5150
5150
  this.enabledMessageActions = [];
5151
5151
  /**
@@ -5746,12 +5746,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
5746
5746
  }] } });
5747
5747
 
5748
5748
  /**
5749
- * If you have an emoji picker in your application, you can propagate the selected emoji to the textarea using this service, more info can be found in [custom emoji picker guide](../code-examples/emoji-picker.mdx)
5749
+ * If you have an emoji picker in your application, you can propagate the selected emoji to the textarea using this service, more info can be found in [custom emoji picker guide](/chat/docs/sdk/angular/code-examples/emoji-picker/)
5750
5750
  */
5751
5751
  class EmojiInputService {
5752
5752
  constructor() {
5753
5753
  /**
5754
- * If you have an emoji picker in your application, you can propagate the selected emoji to the textarea using this Subject, more info can be found in [custom emoji picker guide](../code-examples/emoji-picker.mdx)
5754
+ * If you have an emoji picker in your application, you can propagate the selected emoji to the textarea using this Subject, more info can be found in [custom emoji picker guide](/chat/docs/sdk/angular/code-examples/emoji-picker/)
5755
5755
  */
5756
5756
  this.emojiInput$ = new Subject();
5757
5757
  }
@@ -5790,7 +5790,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
5790
5790
  }], ctorParameters: function () { return []; } });
5791
5791
 
5792
5792
  /**
5793
- * The `MessageInputConfigService` is used to keep a consistent configuration among the different [`MessageInput`](../components/MessageInputComponent.mdx) components if your UI has more than one input component.
5793
+ * The `MessageInputConfigService` is used to keep a consistent configuration among the different [`MessageInput`](/chat/docs/sdk/angular/components/MessageInputComponent/) components if your UI has more than one input component.
5794
5794
  */
5795
5795
  class MessageInputConfigService {
5796
5796
  constructor() {
@@ -5799,7 +5799,7 @@ class MessageInputConfigService {
5799
5799
  */
5800
5800
  this.isFileUploadEnabled = true;
5801
5801
  /**
5802
- * If true, users can mention other users in messages. You also [need to use the `AutocompleteTextarea`](../concepts/opt-in-architecture.mdx) for this feature to work.
5802
+ * If true, users can mention other users in messages. You also [need to use the `AutocompleteTextarea`](/chat/docs/sdk/angular/concepts/opt-in-architecture/) for this feature to work.
5803
5803
  */
5804
5804
  this.areMentionsEnabled = true;
5805
5805
  /**
@@ -5819,6 +5819,12 @@ class MessageInputConfigService {
5819
5819
  * If `false`, the recording will added to the attachment preview, and users can continue composing the message.
5820
5820
  */
5821
5821
  this.sendVoiceRecordingImmediately = true;
5822
+ /**
5823
+ * Add custom autocomplete configurations to the message input
5824
+ *
5825
+ * Only works when using StreamAutocompleteTextareaModule
5826
+ */
5827
+ this.customAutocompletes$ = new BehaviorSubject([]);
5822
5828
  }
5823
5829
  }
5824
5830
  MessageInputConfigService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: MessageInputConfigService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
@@ -6395,7 +6401,7 @@ class MessageInputComponent {
6395
6401
  */
6396
6402
  this.autoFocus = true;
6397
6403
  /**
6398
- * By default the input will react to changes in `messageToEdit$` from [`MessageActionsService`](../services/MessageActionsService.mdx) and display the message to be edited (taking into account the current `mode`).
6404
+ * By default the input will react to changes in `messageToEdit$` from [`MessageActionsService`](/chat/docs/sdk/angular/services/MessageActionsService/) and display the message to be edited (taking into account the current `mode`).
6399
6405
  *
6400
6406
  * If you don't need that behavior, you can turn this of with this flag. In that case you should create your own edit message UI.
6401
6407
  */
@@ -6843,7 +6849,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
6843
6849
  }] } });
6844
6850
 
6845
6851
  /**
6846
- * The `Textarea` component is used by the [`MessageInput`](./MessageInputComponent.mdx) component to display the input HTML element where users can type their message.
6852
+ * The `Textarea` component is used by the [`MessageInput`](/chat/docs/sdk/angular/components/MessageInputComponent/) component to display the input HTML element where users can type their message.
6847
6853
  */
6848
6854
  class TextareaComponent {
6849
6855
  constructor(emojiInputService) {
@@ -6973,16 +6979,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
6973
6979
  }], ctorParameters: function () { return []; } });
6974
6980
 
6975
6981
  /**
6976
- * The `AutocompleteTextarea` component is used by the [`MessageInput`](./MessageInputComponent.mdx) component to display the input HTML element where users can type their message.
6982
+ * The `AutocompleteTextarea` component is used by the [`MessageInput`](/chat/docs/sdk/angular/components/MessageInputComponent/) component to display the input HTML element where users can type their message.
6977
6983
  */
6978
6984
  class AutocompleteTextareaComponent {
6979
- constructor(channelService, chatClientService, transliterationService, emojiInputService, customTemplatesService, cdRef) {
6985
+ constructor(channelService, chatClientService, transliterationService, emojiInputService, customTemplatesService, cdRef, messageInputConfigService) {
6980
6986
  this.channelService = channelService;
6981
6987
  this.chatClientService = chatClientService;
6982
6988
  this.transliterationService = transliterationService;
6983
6989
  this.emojiInputService = emojiInputService;
6984
6990
  this.customTemplatesService = customTemplatesService;
6985
6991
  this.cdRef = cdRef;
6992
+ this.messageInputConfigService = messageInputConfigService;
6986
6993
  this.class = 'str-chat__textarea str-chat__message-textarea-angular-host';
6987
6994
  /**
6988
6995
  * The value of the input HTML element.
@@ -6993,11 +7000,11 @@ class AutocompleteTextareaComponent {
6993
7000
  */
6994
7001
  this.placeholder = '';
6995
7002
  /**
6996
- * If true, users can mention other users in messages. You can also set this input on the [`MessageInput`](./MessageInputComponent.mdx/#inputs-and-outputs) component.
7003
+ * If true, users can mention other users in messages. You can also set this input on the [`MessageInput`](/chat/docs/sdk/angular/components/MessageInputComponent/#inputs-and-outputs/) component.
6997
7004
  */
6998
7005
  this.areMentionsEnabled = true;
6999
7006
  /**
7000
- * The scope for user mentions, either members of the current channel of members of the application. You can also set this input on the [`MessageInput`](./MessageInputComponent.mdx/#inputs-and-outputs) component.
7007
+ * The scope for user mentions, either members of the current channel of members of the application. You can also set this input on the [`MessageInput`](/chat/docs/sdk/angular/components/MessageInputComponent/#inputs-and-outputs) component.
7001
7008
  */
7002
7009
  this.mentionScope = 'channel';
7003
7010
  /**
@@ -7047,10 +7054,15 @@ class AutocompleteTextareaComponent {
7047
7054
  };
7048
7055
  this.searchTerm$ = new BehaviorSubject('');
7049
7056
  this.isViewInited = false;
7050
- this.searchTerm$.pipe(debounceTime(300)).subscribe((searchTerm) => {
7057
+ this.searchTerm$
7058
+ .pipe(filter((searchTerm) => searchTerm.length !== 1), debounceTime(300))
7059
+ .subscribe((searchTerm) => {
7051
7060
  if (searchTerm.startsWith(this.mentionTriggerChar)) {
7052
7061
  void this.updateMentionOptions(searchTerm);
7053
7062
  }
7063
+ else {
7064
+ void this.updateCustomAutocompleteOptions(searchTerm);
7065
+ }
7054
7066
  });
7055
7067
  this.subscriptions.push(this.channelService.activeChannel$.subscribe((channel) => {
7056
7068
  const commands = channel?.getConfig()?.commands || [];
@@ -7062,6 +7074,7 @@ class AutocompleteTextareaComponent {
7062
7074
  this.mentionedUsers = [];
7063
7075
  this.userMentions.next([...this.mentionedUsers]);
7064
7076
  void this.updateMentionOptions(this.searchTerm$.getValue());
7077
+ void this.updateCustomAutocompleteOptions(this.searchTerm$.getValue());
7065
7078
  }));
7066
7079
  this.subscriptions.push(this.emojiInputService.emojiInput$.subscribe((emoji) => {
7067
7080
  this.messageInput.nativeElement.focus();
@@ -7079,20 +7092,43 @@ class AutocompleteTextareaComponent {
7079
7092
  this.userMentionConfig,
7080
7093
  this.slashCommandConfig,
7081
7094
  ];
7095
+ this.subscriptions.push(this.messageInputConfigService.customAutocompletes$.subscribe((customConfigs) => {
7096
+ const builtInItems = this.autocompleteConfig.mentions?.filter((m) => m === this.userMentionConfig || m === this.slashCommandConfig) ?? [];
7097
+ const transformedCustomConfigs = customConfigs.map((c) => {
7098
+ const copy = {
7099
+ items: c.options.map((o) => ({
7100
+ ...o,
7101
+ templateRef: c.templateRef,
7102
+ })),
7103
+ triggerChar: c.triggerCharacter,
7104
+ dropUp: true,
7105
+ labelKey: this.autocompleteKey,
7106
+ returnTrigger: true,
7107
+ allowSpace: c.allowSpace,
7108
+ mentionFilter: (searchString, items) => this.filter(searchString, items),
7109
+ mentionSelect: (item, triggerChar) => this.itemSelectedFromAutocompleteList(item, triggerChar),
7110
+ };
7111
+ return copy;
7112
+ });
7113
+ this.autocompleteConfig.mentions = [
7114
+ ...builtInItems,
7115
+ ...transformedCustomConfigs,
7116
+ ];
7117
+ this.autocompleteConfig = { ...this.autocompleteConfig };
7118
+ }));
7082
7119
  }
7083
7120
  ngOnChanges(changes) {
7084
7121
  if (changes.areMentionsEnabled) {
7085
- if (this.areMentionsEnabled) {
7086
- this.autocompleteConfig.mentions = [
7087
- this.userMentionConfig,
7088
- this.slashCommandConfig,
7089
- ];
7090
- this.autocompleteConfig = { ...this.autocompleteConfig };
7091
- }
7092
- else {
7093
- this.autocompleteConfig.mentions = [this.slashCommandConfig];
7094
- this.autocompleteConfig = { ...this.autocompleteConfig };
7095
- }
7122
+ this.autocompleteConfig.mentions =
7123
+ this.autocompleteConfig?.mentions?.filter((c) => {
7124
+ if (c !== this.userMentionConfig) {
7125
+ return true;
7126
+ }
7127
+ else {
7128
+ return this.areMentionsEnabled;
7129
+ }
7130
+ }) ?? [];
7131
+ this.autocompleteConfig = { ...this.autocompleteConfig };
7096
7132
  }
7097
7133
  if (changes.mentionScope) {
7098
7134
  void this.updateMentionOptions(this.searchTerm$.getValue());
@@ -7133,12 +7169,15 @@ class AutocompleteTextareaComponent {
7133
7169
  return triggerChar + item.autocompleteLabel + ' ';
7134
7170
  }
7135
7171
  autcompleteSearchTermChanged(searchTerm) {
7136
- if (searchTerm === this.mentionTriggerChar) {
7137
- void this.updateMentionOptions();
7138
- }
7139
- else {
7140
- this.searchTerm$.next(searchTerm);
7172
+ if (searchTerm.length === 1) {
7173
+ if (searchTerm === this.mentionTriggerChar) {
7174
+ void this.updateMentionOptions();
7175
+ }
7176
+ else {
7177
+ void this.updateCustomAutocompleteOptions(searchTerm);
7178
+ }
7141
7179
  }
7180
+ this.searchTerm$.next(searchTerm);
7142
7181
  }
7143
7182
  inputChanged() {
7144
7183
  this.chatClientService?.chatClient?.logger?.('info', '[Autocomplete textarea] Input changed');
@@ -7187,8 +7226,7 @@ class AutocompleteTextareaComponent {
7187
7226
  }));
7188
7227
  this.userMentionConfig.items = items;
7189
7228
  this.autocompleteConfig.mentions = [
7190
- this.userMentionConfig,
7191
- this.slashCommandConfig,
7229
+ ...(this.autocompleteConfig?.mentions ?? []),
7192
7230
  ];
7193
7231
  this.autocompleteConfig = { ...this.autocompleteConfig };
7194
7232
  this.cdRef.detectChanges();
@@ -7206,13 +7244,33 @@ class AutocompleteTextareaComponent {
7206
7244
  this.mentionedUsers = updatedMentionedUsers;
7207
7245
  }
7208
7246
  }
7247
+ async updateCustomAutocompleteOptions(searchTerm) {
7248
+ if (this.messageInputConfigService.customAutocompletes$.getValue().length ===
7249
+ 0) {
7250
+ return;
7251
+ }
7252
+ const customMentionConfig = this.autocompleteConfig.mentions?.find((c) => c.triggerChar && searchTerm.startsWith(c.triggerChar));
7253
+ const customAutocompleteConfig = customMentionConfig
7254
+ ? this.messageInputConfigService.customAutocompletes$
7255
+ .getValue()
7256
+ .find((c) => c.triggerCharacter === customMentionConfig?.triggerChar)
7257
+ : undefined;
7258
+ if (customMentionConfig && customAutocompleteConfig?.updateOptions) {
7259
+ const newOptions = await customAutocompleteConfig.updateOptions(searchTerm.replace(customMentionConfig.triggerChar || '', ''));
7260
+ customMentionConfig.items = newOptions.map((o) => ({
7261
+ ...o,
7262
+ templateRef: customAutocompleteConfig.templateRef,
7263
+ }));
7264
+ this.autocompleteConfig = { ...this.autocompleteConfig };
7265
+ }
7266
+ }
7209
7267
  }
7210
- AutocompleteTextareaComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: AutocompleteTextareaComponent, deps: [{ token: ChannelService }, { token: ChatClientService }, { token: TransliterationService }, { token: EmojiInputService }, { token: CustomTemplatesService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
7211
- AutocompleteTextareaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: AutocompleteTextareaComponent, selector: "stream-autocomplete-textarea", inputs: { value: "value", placeholder: "placeholder", areMentionsEnabled: "areMentionsEnabled", inputMode: "inputMode", mentionScope: "mentionScope", autoFocus: "autoFocus" }, outputs: { valueChange: "valueChange", send: "send", userMentions: "userMentions", pasteFromClipboard: "pasteFromClipboard" }, host: { properties: { "class": "this.class" } }, viewQueries: [{ propertyName: "messageInput", first: true, predicate: ["input"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<textarea\n #input\n data-testid=\"textarea\"\n class=\"rta__textarea str-chat__textarea__textarea str-chat__angular-textarea str-chat__message-textarea\"\n rows=\"1\"\n [value]=\"value || ''\"\n [autofocus]=\"autoFocus\"\n placeholder=\"{{ placeholder | translate }}\"\n [mentionConfig]=\"autocompleteConfig\"\n [mentionListTemplate]=\"autocompleteItem\"\n (input)=\"inputChanged()\"\n (keydown.enter)=\"enterHit($event)\"\n (searchTerm)=\"autcompleteSearchTermChanged($event)\"\n (blur)=\"inputLeft()\"\n (paste)=\"pasteFromClipboard.emit($event)\"\n></textarea>\n<ng-template #autocompleteItem let-item=\"item\">\n <div class=\"rta rta__item str-chat__emojisearch__item\" [ngSwitch]=\"item.type\">\n <div *ngSwitchCase=\"'mention'\" class=\"rta__entity\">\n <ng-container\n *ngTemplateOutlet=\"\n mentionAutocompleteItemTemplate || defaultMentionTemplate;\n context: { item: item }\n \"\n ></ng-container>\n </div>\n <div *ngSwitchCase=\"'command'\" class=\"rta__entity\">\n <ng-container\n *ngTemplateOutlet=\"\n commandAutocompleteItemTemplate || defaultCommandTemplate;\n context: { item: item }\n \"\n ></ng-container>\n </div>\n </div>\n</ng-template>\n\n<ng-template #defaultCommandTemplate let-item=\"item\">\n <div class=\"str-chat__slash-command\">\n <span class=\"str-chat__slash-command-header\">\n <strong\n class=\"str-chat__slash-command-name\"\n data-testclass=\"command-name\"\n >{{ item.name }}</strong\n >\n <span class=\"str-chat__slash-command-args\"\n >/{{ item.name }} {{ item.args }}</span\n >\n </span>\n <br />\n </div>\n</ng-template>\n\n<ng-template #defaultMentionTemplate let-item=\"item\">\n <div class=\"str-chat__user-item\">\n <stream-avatar-placeholder\n data-testclass=\"avatar\"\n class=\"str-chat__avatar str-chat__avatar--circle\"\n type=\"user\"\n location=\"autocomplete-item\"\n [imageUrl]=\"item.image || item.user?.image\"\n [name]=\"item.autocompleteLabel\"\n [user]=\"item.user || item\"\n ></stream-avatar-placeholder>\n <span data-testclass=\"username\" class=\"str-chat__user-item--name\">{{\n item.autocompleteLabel\n }}</span>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i7$1.MentionDirective, selector: "[mention], [mentionConfig]", inputs: ["mentionConfig", "mention", "mentionListTemplate"], outputs: ["searchTerm", "itemSelected", "opened", "closed"] }, { kind: "component", type: AvatarPlaceholderComponent, selector: "stream-avatar-placeholder", inputs: ["name", "imageUrl", "location", "channel", "user", "type", "initialsType", "showOnlineIndicator"] }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }] });
7268
+ AutocompleteTextareaComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: AutocompleteTextareaComponent, deps: [{ token: ChannelService }, { token: ChatClientService }, { token: TransliterationService }, { token: EmojiInputService }, { token: CustomTemplatesService }, { token: i0.ChangeDetectorRef }, { token: MessageInputConfigService }], target: i0.ɵɵFactoryTarget.Component });
7269
+ AutocompleteTextareaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: AutocompleteTextareaComponent, selector: "stream-autocomplete-textarea", inputs: { value: "value", placeholder: "placeholder", areMentionsEnabled: "areMentionsEnabled", inputMode: "inputMode", mentionScope: "mentionScope", autoFocus: "autoFocus" }, outputs: { valueChange: "valueChange", send: "send", userMentions: "userMentions", pasteFromClipboard: "pasteFromClipboard" }, host: { properties: { "class": "this.class" } }, viewQueries: [{ propertyName: "messageInput", first: true, predicate: ["input"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<textarea\n #input\n data-testid=\"textarea\"\n class=\"rta__textarea str-chat__textarea__textarea str-chat__angular-textarea str-chat__message-textarea\"\n rows=\"1\"\n [value]=\"value || ''\"\n [autofocus]=\"autoFocus\"\n placeholder=\"{{ placeholder | translate }}\"\n [mentionConfig]=\"autocompleteConfig\"\n [mentionListTemplate]=\"autocompleteItem\"\n (input)=\"inputChanged()\"\n (keydown.enter)=\"enterHit($event)\"\n (searchTerm)=\"autcompleteSearchTermChanged($event)\"\n (blur)=\"inputLeft()\"\n (paste)=\"pasteFromClipboard.emit($event)\"\n></textarea>\n<ng-template #autocompleteItem let-item=\"item\">\n <ng-container *ngIf=\"item.templateRef; else builtinItem\">\n <ng-container\n *ngTemplateOutlet=\"item.templateRef; context: { item: item }\"\n ></ng-container>\n </ng-container>\n <ng-template #builtinItem>\n <div\n class=\"rta rta__item str-chat__emojisearch__item\"\n [ngSwitch]=\"item.type\"\n >\n <div *ngSwitchCase=\"'mention'\" class=\"rta__entity\">\n <ng-container\n *ngTemplateOutlet=\"\n mentionAutocompleteItemTemplate || defaultMentionTemplate;\n context: { item: item }\n \"\n ></ng-container>\n </div>\n <div *ngSwitchCase=\"'command'\" class=\"rta__entity\">\n <ng-container\n *ngTemplateOutlet=\"\n commandAutocompleteItemTemplate || defaultCommandTemplate;\n context: { item: item }\n \"\n ></ng-container>\n </div>\n </div>\n </ng-template>\n</ng-template>\n\n<ng-template #defaultCommandTemplate let-item=\"item\">\n <div class=\"str-chat__slash-command\">\n <span class=\"str-chat__slash-command-header\">\n <strong\n class=\"str-chat__slash-command-name\"\n data-testclass=\"command-name\"\n >{{ item.name }}</strong\n >\n <span class=\"str-chat__slash-command-args\"\n >/{{ item.name }} {{ item.args }}</span\n >\n </span>\n <br />\n </div>\n</ng-template>\n\n<ng-template #defaultMentionTemplate let-item=\"item\">\n <div class=\"str-chat__user-item\">\n <stream-avatar-placeholder\n data-testclass=\"avatar\"\n class=\"str-chat__avatar str-chat__avatar--circle\"\n type=\"user\"\n location=\"autocomplete-item\"\n [imageUrl]=\"item.image || item.user?.image\"\n [name]=\"item.autocompleteLabel\"\n [user]=\"item.user || item\"\n ></stream-avatar-placeholder>\n <span data-testclass=\"username\" class=\"str-chat__user-item--name\">{{\n item.autocompleteLabel\n }}</span>\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: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i8.MentionDirective, selector: "[mention], [mentionConfig]", inputs: ["mentionConfig", "mention", "mentionListTemplate"], outputs: ["searchTerm", "itemSelected", "opened", "closed"] }, { kind: "component", type: AvatarPlaceholderComponent, selector: "stream-avatar-placeholder", inputs: ["name", "imageUrl", "location", "channel", "user", "type", "initialsType", "showOnlineIndicator"] }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }] });
7212
7270
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: AutocompleteTextareaComponent, decorators: [{
7213
7271
  type: Component,
7214
- args: [{ selector: 'stream-autocomplete-textarea', template: "<textarea\n #input\n data-testid=\"textarea\"\n class=\"rta__textarea str-chat__textarea__textarea str-chat__angular-textarea str-chat__message-textarea\"\n rows=\"1\"\n [value]=\"value || ''\"\n [autofocus]=\"autoFocus\"\n placeholder=\"{{ placeholder | translate }}\"\n [mentionConfig]=\"autocompleteConfig\"\n [mentionListTemplate]=\"autocompleteItem\"\n (input)=\"inputChanged()\"\n (keydown.enter)=\"enterHit($event)\"\n (searchTerm)=\"autcompleteSearchTermChanged($event)\"\n (blur)=\"inputLeft()\"\n (paste)=\"pasteFromClipboard.emit($event)\"\n></textarea>\n<ng-template #autocompleteItem let-item=\"item\">\n <div class=\"rta rta__item str-chat__emojisearch__item\" [ngSwitch]=\"item.type\">\n <div *ngSwitchCase=\"'mention'\" class=\"rta__entity\">\n <ng-container\n *ngTemplateOutlet=\"\n mentionAutocompleteItemTemplate || defaultMentionTemplate;\n context: { item: item }\n \"\n ></ng-container>\n </div>\n <div *ngSwitchCase=\"'command'\" class=\"rta__entity\">\n <ng-container\n *ngTemplateOutlet=\"\n commandAutocompleteItemTemplate || defaultCommandTemplate;\n context: { item: item }\n \"\n ></ng-container>\n </div>\n </div>\n</ng-template>\n\n<ng-template #defaultCommandTemplate let-item=\"item\">\n <div class=\"str-chat__slash-command\">\n <span class=\"str-chat__slash-command-header\">\n <strong\n class=\"str-chat__slash-command-name\"\n data-testclass=\"command-name\"\n >{{ item.name }}</strong\n >\n <span class=\"str-chat__slash-command-args\"\n >/{{ item.name }} {{ item.args }}</span\n >\n </span>\n <br />\n </div>\n</ng-template>\n\n<ng-template #defaultMentionTemplate let-item=\"item\">\n <div class=\"str-chat__user-item\">\n <stream-avatar-placeholder\n data-testclass=\"avatar\"\n class=\"str-chat__avatar str-chat__avatar--circle\"\n type=\"user\"\n location=\"autocomplete-item\"\n [imageUrl]=\"item.image || item.user?.image\"\n [name]=\"item.autocompleteLabel\"\n [user]=\"item.user || item\"\n ></stream-avatar-placeholder>\n <span data-testclass=\"username\" class=\"str-chat__user-item--name\">{{\n item.autocompleteLabel\n }}</span>\n </div>\n</ng-template>\n" }]
7215
- }], ctorParameters: function () { return [{ type: ChannelService }, { type: ChatClientService }, { type: TransliterationService }, { type: EmojiInputService }, { type: CustomTemplatesService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { class: [{
7272
+ args: [{ selector: 'stream-autocomplete-textarea', template: "<textarea\n #input\n data-testid=\"textarea\"\n class=\"rta__textarea str-chat__textarea__textarea str-chat__angular-textarea str-chat__message-textarea\"\n rows=\"1\"\n [value]=\"value || ''\"\n [autofocus]=\"autoFocus\"\n placeholder=\"{{ placeholder | translate }}\"\n [mentionConfig]=\"autocompleteConfig\"\n [mentionListTemplate]=\"autocompleteItem\"\n (input)=\"inputChanged()\"\n (keydown.enter)=\"enterHit($event)\"\n (searchTerm)=\"autcompleteSearchTermChanged($event)\"\n (blur)=\"inputLeft()\"\n (paste)=\"pasteFromClipboard.emit($event)\"\n></textarea>\n<ng-template #autocompleteItem let-item=\"item\">\n <ng-container *ngIf=\"item.templateRef; else builtinItem\">\n <ng-container\n *ngTemplateOutlet=\"item.templateRef; context: { item: item }\"\n ></ng-container>\n </ng-container>\n <ng-template #builtinItem>\n <div\n class=\"rta rta__item str-chat__emojisearch__item\"\n [ngSwitch]=\"item.type\"\n >\n <div *ngSwitchCase=\"'mention'\" class=\"rta__entity\">\n <ng-container\n *ngTemplateOutlet=\"\n mentionAutocompleteItemTemplate || defaultMentionTemplate;\n context: { item: item }\n \"\n ></ng-container>\n </div>\n <div *ngSwitchCase=\"'command'\" class=\"rta__entity\">\n <ng-container\n *ngTemplateOutlet=\"\n commandAutocompleteItemTemplate || defaultCommandTemplate;\n context: { item: item }\n \"\n ></ng-container>\n </div>\n </div>\n </ng-template>\n</ng-template>\n\n<ng-template #defaultCommandTemplate let-item=\"item\">\n <div class=\"str-chat__slash-command\">\n <span class=\"str-chat__slash-command-header\">\n <strong\n class=\"str-chat__slash-command-name\"\n data-testclass=\"command-name\"\n >{{ item.name }}</strong\n >\n <span class=\"str-chat__slash-command-args\"\n >/{{ item.name }} {{ item.args }}</span\n >\n </span>\n <br />\n </div>\n</ng-template>\n\n<ng-template #defaultMentionTemplate let-item=\"item\">\n <div class=\"str-chat__user-item\">\n <stream-avatar-placeholder\n data-testclass=\"avatar\"\n class=\"str-chat__avatar str-chat__avatar--circle\"\n type=\"user\"\n location=\"autocomplete-item\"\n [imageUrl]=\"item.image || item.user?.image\"\n [name]=\"item.autocompleteLabel\"\n [user]=\"item.user || item\"\n ></stream-avatar-placeholder>\n <span data-testclass=\"username\" class=\"str-chat__user-item--name\">{{\n item.autocompleteLabel\n }}</span>\n </div>\n</ng-template>\n" }]
7273
+ }], ctorParameters: function () { return [{ type: ChannelService }, { type: ChatClientService }, { type: TransliterationService }, { type: EmojiInputService }, { type: CustomTemplatesService }, { type: i0.ChangeDetectorRef }, { type: MessageInputConfigService }]; }, propDecorators: { class: [{
7216
7274
  type: HostBinding
7217
7275
  }], value: [{
7218
7276
  type: Input
@@ -8317,7 +8375,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
8317
8375
  }] } });
8318
8376
 
8319
8377
  /**
8320
- * The `Thread` component represents a [message thread](https://getstream.io/chat/docs/javascript/threads/?language=javascript), it is a container component that displays a thread with a header, [`MessageList`](./MessageListComponent.mdx) and [`MessageInput`](./MessageInputComponent.mdx) components.
8378
+ * The `Thread` component represents a [message thread](https://getstream.io/chat/docs/javascript/threads/?language=javascript), it is a container component that displays a thread with a header, [`MessageList`](/chat/docs/sdk/angular/components/MessageListComponent) and [`MessageInput`](/chat/docs/sdk/angular/components/MessageInputComponent/) components.
8321
8379
  */
8322
8380
  class ThreadComponent {
8323
8381
  constructor(customTemplatesService, channelService, chatClientService) {