stream-chat-angular 4.59.3 → 4.60.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 (43) hide show
  1. package/assets/i18n/en.d.ts +2 -0
  2. package/assets/version.d.ts +1 -1
  3. package/bundles/stream-chat-angular.umd.js +346 -172
  4. package/bundles/stream-chat-angular.umd.js.map +1 -1
  5. package/esm2015/assets/i18n/en.js +3 -1
  6. package/esm2015/assets/version.js +2 -2
  7. package/esm2015/lib/channel/channel.component.js +13 -9
  8. package/esm2015/lib/channel.service.js +24 -2
  9. package/esm2015/lib/custom-templates.service.js +9 -1
  10. package/esm2015/lib/edit-message-form/edit-message-form.component.js +87 -0
  11. package/esm2015/lib/message/message.component.js +16 -25
  12. package/esm2015/lib/message-actions-box/message-actions-box.component.js +6 -46
  13. package/esm2015/lib/message-bounce-prompt/message-bounce-prompt.component.js +80 -0
  14. package/esm2015/lib/message-list/message-list.component.js +14 -8
  15. package/esm2015/lib/stream-chat.module.js +13 -3
  16. package/esm2015/lib/types.js +1 -1
  17. package/esm2015/public-api.js +3 -1
  18. package/fesm2015/stream-chat-angular.js +318 -168
  19. package/fesm2015/stream-chat-angular.js.map +1 -1
  20. package/lib/channel/channel.component.d.ts +3 -1
  21. package/lib/channel.service.d.ts +10 -9
  22. package/lib/custom-templates.service.d.ts +8 -0
  23. package/lib/edit-message-form/edit-message-form.component.d.ts +31 -0
  24. package/lib/message/message.component.d.ts +2 -1
  25. package/lib/message-actions-box/message-actions-box.component.d.ts +2 -11
  26. package/lib/message-bounce-prompt/message-bounce-prompt.component.d.ts +28 -0
  27. package/lib/stream-chat.module.d.ts +7 -5
  28. package/lib/types.d.ts +0 -6
  29. package/package.json +1 -1
  30. package/public-api.d.ts +2 -0
  31. package/src/assets/i18n/en.ts +3 -0
  32. package/src/assets/styles/css/index.css +1 -1
  33. package/src/assets/styles/scss/Message.scss +21 -17
  34. package/src/assets/styles/scss/MessageActions.scss +0 -9
  35. package/src/assets/styles/scss/_base.scss +8 -1
  36. package/src/assets/styles/v2/css/index.css +1 -1
  37. package/src/assets/styles/v2/css/index.layout.css +1 -1
  38. package/src/assets/styles/v2/scss/AttachmentList/AttachmentList-layout.scss +6 -0
  39. package/src/assets/styles/v2/scss/EditMessageForm/EditMessageForm-layout.scss +13 -15
  40. package/src/assets/styles/v2/scss/Message/Message-layout.scss +14 -3
  41. package/src/assets/styles/v2/scss/MessageActionsBox/MessageActionsBox-layout.scss +0 -8
  42. package/src/assets/styles/v2/scss/_utils.scss +0 -1
  43. package/src/assets/version.ts +1 -1
@@ -1,6 +1,7 @@
1
1
  import { Observable, Subscription } from 'rxjs';
2
2
  import { ChannelService } from '../channel.service';
3
3
  import { ThemeService } from '../theme.service';
4
+ import { CustomTemplatesService } from '../custom-templates.service';
4
5
  import * as i0 from "@angular/core";
5
6
  /**
6
7
  * 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).
@@ -8,13 +9,14 @@ import * as i0 from "@angular/core";
8
9
  export declare class ChannelComponent {
9
10
  private channelService;
10
11
  private themeService;
12
+ readonly customTemplatesService: CustomTemplatesService;
11
13
  isError$: Observable<boolean>;
12
14
  isInitializing$: Observable<boolean>;
13
15
  isActiveThread$: Observable<boolean>;
14
16
  isActiveChannel$: Observable<boolean>;
15
17
  subscriptions: Subscription[];
16
18
  theme$: Observable<string>;
17
- constructor(channelService: ChannelService, themeService: ThemeService);
19
+ constructor(channelService: ChannelService, themeService: ThemeService, customTemplatesService: CustomTemplatesService);
18
20
  static ɵfac: i0.ɵɵFactoryDeclaration<ChannelComponent, never>;
19
21
  static ɵcmp: i0.ɵɵComponentDeclaration<ChannelComponent, "stream-channel", never, {}, {}, never, ["*", "[name=\"thread\"]"]>;
20
22
  }
@@ -1,5 +1,5 @@
1
1
  import { NgZone } from '@angular/core';
2
- import { Observable } from 'rxjs';
2
+ import { BehaviorSubject, Observable } from 'rxjs';
3
3
  import { Attachment, Channel, ChannelFilters, ChannelOptions, ChannelResponse, ChannelSort, Event, FormatMessageResponse, MessageResponse, ReactionResponse, UserResponse } from 'stream-chat';
4
4
  import { ChatClientService, ClientEvent } from './chat-client.service';
5
5
  import { NotificationService } from './notification.service';
@@ -103,6 +103,12 @@ export declare class ChannelService<T extends DefaultStreamChatGenerics = Defaul
103
103
  latestMessageDateByUserByChannels$: Observable<{
104
104
  [key: string]: Date;
105
105
  }>;
106
+ /**
107
+ * If you're using [semantic filters for moderation](https://getstream.io/automated-moderation/docs/automod_configuration/?q=semantic%20filters) you can set up rules for bouncing messages.
108
+ *
109
+ * If a message is bounced, it will be emitted via this `Observable`. The built-in [`MessageBouncePrompt` component](../../components/MessageBouncePromptComponent) will display the bounce option to the user if a bounced message is clicked.
110
+ */
111
+ bouncedMessage$: BehaviorSubject<StreamMessage<T> | undefined>;
106
112
  /**
107
113
  * The last read message id of the active channel, it's used by the message list component to display unread UI, and jump to latest read message
108
114
  *
@@ -364,13 +370,7 @@ export declare class ChannelService<T extends DefaultStreamChatGenerics = Defaul
364
370
  quoted_message?: import("stream-chat").MessageResponseBase<T> | undefined;
365
371
  } & Omit<MessageResponse<{
366
372
  attachmentType: import("stream-chat").UR;
367
- channelType: import("stream-chat").UR; /**
368
- * By default the SDK uses an offset based pagination, you can change/extend this by providing your own custom paginator method.
369
- *
370
- * The method will be called with the result of the latest channel query.
371
- *
372
- * You can return either an offset, or a filter using the [`$lte`/`$gte` operator](https://getstream.io/chat/docs/javascript/query_syntax_operators/). If you return a filter, it will be merged with the filter provided for the `init` method.
373
- */
373
+ channelType: import("stream-chat").UR;
374
374
  commandType: import("stream-chat").LiteralStringForUnion;
375
375
  eventType: import("stream-chat").UR;
376
376
  messageType: {};
@@ -385,8 +385,9 @@ export declare class ChannelService<T extends DefaultStreamChatGenerics = Defaul
385
385
  /**
386
386
  * Deletes the message from the active channel
387
387
  * @param message Message to be deleted
388
+ * @param isLocalDelete set this `true` if you want to delete a message that's only part of the local state, not yet saved on the backend
388
389
  */
389
- deleteMessage(message: StreamMessage): Promise<void>;
390
+ deleteMessage(message: StreamMessage, isLocalDelete?: boolean): Promise<void>;
390
391
  /**
391
392
  * 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.
392
393
  * @param uploads the attachments to upload (output of the [`AttachmentService`](./AttachmentService.mdx))
@@ -220,6 +220,14 @@ export declare class CustomTemplatesService<T extends DefaultStreamChatGenerics
220
220
  * The template to show if the thread message list is empty
221
221
  */
222
222
  emptyThreadMessageListPlaceholder$: BehaviorSubject<TemplateRef<void> | undefined>;
223
+ /**
224
+ * The template used to display the [edit message form](../components/EditMessageFormComponent.mdx)
225
+ */
226
+ editMessageFormTemplate$: BehaviorSubject<TemplateRef<void> | undefined>;
227
+ /**
228
+ * The template used to display the [message bounce prompt](../components/MessageBouncePromptComponent.mdx)
229
+ */
230
+ messageBouncePromptTemplate$: BehaviorSubject<TemplateRef<void> | undefined>;
223
231
  constructor();
224
232
  static ɵfac: i0.ɵɵFactoryDeclaration<CustomTemplatesService<any>, never>;
225
233
  static ɵprov: i0.ɵɵInjectableDeclaration<CustomTemplatesService<any>>;
@@ -0,0 +1,31 @@
1
+ import { OnDestroy, OnInit } from '@angular/core';
2
+ import { CustomTemplatesService } from '../custom-templates.service';
3
+ import { MessageInputContext, ModalContext, StreamMessage } from '../types';
4
+ import { Observable } from 'rxjs';
5
+ import { MessageActionsService } from '../message-actions.service';
6
+ import * as i0 from "@angular/core";
7
+ /**
8
+ * The edit message form displays a modal that's opened when a user edits a message. The component uses the [`MessageActionsService`](../../services/MessageActionsService) to know which message is being edited.
9
+ *
10
+ * By default this is displayed within the [`stream-channel` component](../../components/ChannelComponent).
11
+ */
12
+ export declare class EditMessageFormComponent implements OnInit, OnDestroy {
13
+ readonly customTemplatesService: CustomTemplatesService;
14
+ private messageActionsService;
15
+ class: string;
16
+ sendMessage$: Observable<void>;
17
+ isModalOpen: boolean;
18
+ message?: StreamMessage;
19
+ private modalContent;
20
+ private sendMessageSubject;
21
+ private subscriptions;
22
+ constructor(customTemplatesService: CustomTemplatesService, messageActionsService: MessageActionsService);
23
+ ngOnInit(): void;
24
+ ngOnDestroy(): void;
25
+ getEditModalContext(): ModalContext;
26
+ getMessageInputContext(): MessageInputContext;
27
+ sendClicked(): void;
28
+ dismissed(): void;
29
+ static ɵfac: i0.ɵɵFactoryDeclaration<EditMessageFormComponent, never>;
30
+ static ɵcmp: i0.ɵɵComponentDeclaration<EditMessageFormComponent, "stream-edit-message-form", never, {}, {}, never, never>;
31
+ }
@@ -56,7 +56,6 @@ export declare class MessageComponent implements OnInit, OnChanges, OnDestroy, A
56
56
  readonly themeVersion: '1' | '2';
57
57
  canReceiveReadEvents: boolean | undefined;
58
58
  canReactToMessage: boolean | undefined;
59
- isEditing: boolean | undefined;
60
59
  isActionBoxOpen: boolean;
61
60
  isReactionSelectorOpen: boolean;
62
61
  visibleMessageActionsCount: number;
@@ -102,6 +101,7 @@ export declare class MessageComponent implements OnInit, OnChanges, OnDestroy, A
102
101
  getMessageContext(): SystemMessageContext;
103
102
  getQuotedMessageAttachmentListContext(): AttachmentListContext;
104
103
  getMessageReactionsContext(): MessageReactionsContext;
104
+ unsentMessageClicked(): void;
105
105
  resendMessage(): void;
106
106
  setAsActiveParentMessage(): void;
107
107
  getMentionContext(messagePart: MessagePart): MentionTemplateContext;
@@ -113,6 +113,7 @@ export declare class MessageComponent implements OnInit, OnChanges, OnDestroy, A
113
113
  jumpToMessage(messageId: string, parentMessageId?: string): void;
114
114
  displayTranslatedMessage(): void;
115
115
  displayOriginalMessage(): void;
116
+ openMessageBouncePrompt(): void;
116
117
  private createMessageParts;
117
118
  private getMessageContent;
118
119
  private fixEmojiDisplay;
@@ -1,7 +1,6 @@
1
1
  import { AfterViewInit, ChangeDetectorRef, EventEmitter, OnChanges, OnDestroy, OnInit, SimpleChanges, TemplateRef } from '@angular/core';
2
- import { Observable } from 'rxjs';
3
2
  import { CustomTemplatesService } from '../custom-templates.service';
4
- import { CustomMessageActionItem, MessageActionBoxItemContext, MessageActionItem, MessageInputContext, ModalContext, StreamMessage } from '../types';
3
+ import { CustomMessageActionItem, MessageActionBoxItemContext, MessageActionItem, MessageInputContext, StreamMessage } from '../types';
5
4
  import { MessageActionsService } from '../message-actions.service';
6
5
  import * as i0 from "@angular/core";
7
6
  /**
@@ -52,15 +51,11 @@ export declare class MessageActionsBoxComponent implements OnInit, OnChanges, On
52
51
  * More information: https://getstream.io/chat/docs/sdk/angular/services/MessageActionsService
53
52
  */
54
53
  readonly isEditing: EventEmitter<boolean>;
55
- isEditModalOpen: boolean;
56
54
  messageInputTemplate: TemplateRef<MessageInputContext> | undefined;
57
55
  messageActionItemTemplate: TemplateRef<MessageActionBoxItemContext> | undefined;
58
- modalTemplate: TemplateRef<ModalContext> | undefined;
59
56
  visibleMessageActionItems: (MessageActionItem | CustomMessageActionItem)[];
60
- sendMessage$: Observable<void>;
57
+ isEditModalOpen: boolean;
61
58
  private readonly messageActionItems;
62
- private modalContent;
63
- private sendMessageSubject;
64
59
  private subscriptions;
65
60
  private isViewInited;
66
61
  constructor(customTemplatesService: CustomTemplatesService, messageActionsService: MessageActionsService, cdRef: ChangeDetectorRef);
@@ -70,10 +65,6 @@ export declare class MessageActionsBoxComponent implements OnInit, OnChanges, On
70
65
  ngOnDestroy(): void;
71
66
  getActionLabel(actionLabelOrTranslationKey: ((message: StreamMessage) => string) | string): string;
72
67
  getMessageActionTemplateContext(item: MessageActionItem | CustomMessageActionItem): MessageActionBoxItemContext<any>;
73
- sendClicked(): void;
74
- modalClosed: () => void;
75
- getMessageInputContext(): MessageInputContext;
76
- getEditModalContext(): ModalContext;
77
68
  trackByActionName(_: number, item: MessageActionItem | CustomMessageActionItem): string;
78
69
  private setVisibleActions;
79
70
  static ɵfac: i0.ɵɵFactoryDeclaration<MessageActionsBoxComponent, never>;
@@ -0,0 +1,28 @@
1
+ import { OnDestroy } from '@angular/core';
2
+ import { ChannelService } from '../channel.service';
3
+ import { CustomTemplatesService } from '../custom-templates.service';
4
+ import { MessageActionsService } from '../message-actions.service';
5
+ import { StreamMessage } from '../types';
6
+ import * as i0 from "@angular/core";
7
+ /**
8
+ * The component watches for the [`channelService.bouncedMessage$` stream](../../services/ChannelService/#bouncedmessage) and opens the bounce modal if a message is emitted.
9
+ *
10
+ * To bounce messages, you need to set up [semantic filters for moderation](https://getstream.io/automated-moderation/docs/automod_configuration/?q=semantic%20filters).
11
+ */
12
+ export declare class MessageBouncePromptComponent implements OnDestroy {
13
+ private channelService;
14
+ readonly customTemplatesService: CustomTemplatesService;
15
+ private messageActionsService;
16
+ class: string;
17
+ isModalOpen: boolean;
18
+ message?: StreamMessage;
19
+ private subscriptions;
20
+ constructor(channelService: ChannelService, customTemplatesService: CustomTemplatesService, messageActionsService: MessageActionsService);
21
+ messageBounceModalOpenChanged: (isOpen: boolean) => void;
22
+ ngOnDestroy(): void;
23
+ resendMessage(): Promise<void>;
24
+ deleteMessage(): Promise<void>;
25
+ editMessage(): void;
26
+ static ɵfac: i0.ɵɵFactoryDeclaration<MessageBouncePromptComponent, never>;
27
+ static ɵcmp: i0.ɵɵComponentDeclaration<MessageBouncePromptComponent, "stream-message-bounce-prompt", never, {}, {}, never, never>;
28
+ }
@@ -19,12 +19,14 @@ import * as i17 from "./message-input/textarea.directive";
19
19
  import * as i18 from "./thread/thread.component";
20
20
  import * as i19 from "./icon-placeholder/icon-placeholder.component";
21
21
  import * as i20 from "./loading-indicator-placeholder/loading-indicator-placeholder.component";
22
- import * as i21 from "@angular/common";
23
- import * as i22 from "@ngx-translate/core";
24
- import * as i23 from "./stream-avatar.module";
25
- import * as i24 from "ngx-popperjs";
22
+ import * as i21 from "./edit-message-form/edit-message-form.component";
23
+ import * as i22 from "./message-bounce-prompt/message-bounce-prompt.component";
24
+ import * as i23 from "@angular/common";
25
+ import * as i24 from "@ngx-translate/core";
26
+ import * as i25 from "./stream-avatar.module";
27
+ import * as i26 from "ngx-popperjs";
26
28
  export declare class StreamChatModule {
27
29
  static ɵfac: i0.ɵɵFactoryDeclaration<StreamChatModule, never>;
28
- static ɵmod: i0.ɵɵNgModuleDeclaration<StreamChatModule, [typeof i1.ChannelComponent, typeof i2.ChannelHeaderComponent, typeof i3.ChannelListComponent, typeof i4.ChannelPreviewComponent, typeof i5.MessageComponent, typeof i6.MessageInputComponent, typeof i7.MessageListComponent, typeof i8.LoadingIndicatorComponent, typeof i9.IconComponent, typeof i10.MessageActionsBoxComponent, typeof i11.AttachmentListComponent, typeof i12.MessageReactionsComponent, typeof i13.NotificationComponent, typeof i14.NotificationListComponent, typeof i15.AttachmentPreviewListComponent, typeof i16.ModalComponent, typeof i17.TextareaDirective, typeof i18.ThreadComponent, typeof i19.IconPlaceholderComponent, typeof i20.LoadingIndicatorPlaceholderComponent], [typeof i21.CommonModule, typeof i22.TranslateModule, typeof i23.StreamAvatarModule, typeof i24.NgxPopperjsModule], [typeof i1.ChannelComponent, typeof i2.ChannelHeaderComponent, typeof i3.ChannelListComponent, typeof i4.ChannelPreviewComponent, typeof i5.MessageComponent, typeof i6.MessageInputComponent, typeof i7.MessageListComponent, typeof i8.LoadingIndicatorComponent, typeof i9.IconComponent, typeof i10.MessageActionsBoxComponent, typeof i11.AttachmentListComponent, typeof i12.MessageReactionsComponent, typeof i13.NotificationComponent, typeof i14.NotificationListComponent, typeof i15.AttachmentPreviewListComponent, typeof i16.ModalComponent, typeof i23.StreamAvatarModule, typeof i18.ThreadComponent, typeof i19.IconPlaceholderComponent, typeof i20.LoadingIndicatorPlaceholderComponent]>;
30
+ static ɵmod: i0.ɵɵNgModuleDeclaration<StreamChatModule, [typeof i1.ChannelComponent, typeof i2.ChannelHeaderComponent, typeof i3.ChannelListComponent, typeof i4.ChannelPreviewComponent, typeof i5.MessageComponent, typeof i6.MessageInputComponent, typeof i7.MessageListComponent, typeof i8.LoadingIndicatorComponent, typeof i9.IconComponent, typeof i10.MessageActionsBoxComponent, typeof i11.AttachmentListComponent, typeof i12.MessageReactionsComponent, typeof i13.NotificationComponent, typeof i14.NotificationListComponent, typeof i15.AttachmentPreviewListComponent, typeof i16.ModalComponent, typeof i17.TextareaDirective, typeof i18.ThreadComponent, typeof i19.IconPlaceholderComponent, typeof i20.LoadingIndicatorPlaceholderComponent, typeof i21.EditMessageFormComponent, typeof i22.MessageBouncePromptComponent], [typeof i23.CommonModule, typeof i24.TranslateModule, typeof i25.StreamAvatarModule, typeof i26.NgxPopperjsModule], [typeof i1.ChannelComponent, typeof i2.ChannelHeaderComponent, typeof i3.ChannelListComponent, typeof i4.ChannelPreviewComponent, typeof i5.MessageComponent, typeof i6.MessageInputComponent, typeof i7.MessageListComponent, typeof i8.LoadingIndicatorComponent, typeof i9.IconComponent, typeof i10.MessageActionsBoxComponent, typeof i11.AttachmentListComponent, typeof i12.MessageReactionsComponent, typeof i13.NotificationComponent, typeof i14.NotificationListComponent, typeof i15.AttachmentPreviewListComponent, typeof i16.ModalComponent, typeof i25.StreamAvatarModule, typeof i18.ThreadComponent, typeof i19.IconPlaceholderComponent, typeof i20.LoadingIndicatorPlaceholderComponent, typeof i21.EditMessageFormComponent, typeof i22.MessageBouncePromptComponent]>;
29
31
  static ɵinj: i0.ɵɵInjectorDeclaration<StreamChatModule>;
30
32
  }
package/lib/types.d.ts CHANGED
@@ -173,12 +173,6 @@ export declare type MessageActionsBoxContext = {
173
173
  * More information: https://getstream.io/chat/docs/sdk/angular/services/MessageActionsService
174
174
  */
175
175
  displayedActionsCountChangeHandler: (count: number) => any;
176
- /**
177
- * @deprecated components should use `messageReactionsService.getAuthorizedMessageActionsCount` method
178
- *
179
- * More information: https://getstream.io/chat/docs/sdk/angular/services/MessageActionsService
180
- */
181
- isEditingChangeHandler: (isEditing: boolean) => any;
182
176
  };
183
177
  export declare type MessageActionBoxItemContext<T extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> = {
184
178
  actionName: 'quote' | 'pin' | 'flag' | 'edit' | 'delete' | string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "stream-chat-angular",
3
- "version": "4.59.3",
3
+ "version": "4.60.0",
4
4
  "description": "Angular components to create chat conversations or livestream style chat",
5
5
  "author": "GetStream",
6
6
  "homepage": "https://getstream.io/chat/",
package/public-api.d.ts CHANGED
@@ -20,6 +20,8 @@ export * from './lib/message/message.component';
20
20
  export * from './lib/parse-date';
21
21
  export * from './lib/list-users';
22
22
  export * from './lib/message-input/message-input.component';
23
+ export * from './lib/edit-message-form/edit-message-form.component';
24
+ export * from './lib/message-bounce-prompt/message-bounce-prompt.component';
23
25
  export * from './lib/message-input/textarea/textarea.component';
24
26
  export * from './lib/message-input/autocomplete-textarea/autocomplete-textarea.component';
25
27
  export * from './lib/message-input/message-input-config.service';
@@ -114,5 +114,8 @@ export const en = {
114
114
  'Unread messages': 'Unread messages',
115
115
  '{{count}} unread messages': '{{count}} unread messages',
116
116
  '{{count}} unread message': '{{count}} unread message',
117
+ 'This message did not meet our content guidelines':
118
+ 'This message did not meet our content guidelines',
119
+ 'Send Anyway': 'Send Anyway',
117
120
  },
118
121
  };