@banta/sdk 4.8.2 → 4.9.1

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 (29) hide show
  1. package/esm2020/lib/banta/banta.component.mjs +3 -3
  2. package/esm2020/lib/chat/banta-chat/banta-chat.component.mjs +1 -1
  3. package/esm2020/lib/chat-backend-base.mjs +1 -1
  4. package/esm2020/lib/chat-backend.mjs +80 -12
  5. package/esm2020/lib/chat-source-base.mjs +1 -1
  6. package/esm2020/lib/chat-source.mjs +7 -2
  7. package/esm2020/lib/comments/attachment-button/attachment-button.component.mjs +17 -10
  8. package/esm2020/lib/comments/banta-comments/banta-comments.component.mjs +5 -5
  9. package/esm2020/lib/comments/comment/comment.component.mjs +88 -130
  10. package/esm2020/lib/comments/comment-field/comment-field.component.mjs +122 -144
  11. package/esm2020/lib/comments/comment-view/comment-view.component.mjs +72 -70
  12. package/esm2020/lib/comments/live-comment.component.mjs +1 -1
  13. package/esm2020/lib/emoji/emoji-selector-button.component.mjs +7 -4
  14. package/esm2020/lib/static-chat-source.mjs +71 -0
  15. package/fesm2015/banta-sdk.mjs +490 -379
  16. package/fesm2015/banta-sdk.mjs.map +1 -1
  17. package/fesm2020/banta-sdk.mjs +462 -374
  18. package/fesm2020/banta-sdk.mjs.map +1 -1
  19. package/lib/chat-backend-base.d.ts +4 -0
  20. package/lib/chat-backend.d.ts +29 -4
  21. package/lib/chat-source-base.d.ts +8 -0
  22. package/lib/chat-source.d.ts +2 -0
  23. package/lib/comments/attachment-button/attachment-button.component.d.ts +3 -2
  24. package/lib/comments/comment/comment.component.d.ts +41 -39
  25. package/lib/comments/comment-field/comment-field.component.d.ts +37 -40
  26. package/lib/comments/comment-view/comment-view.component.d.ts +43 -41
  27. package/lib/emoji/emoji-selector-button.component.d.ts +2 -1
  28. package/lib/static-chat-source.d.ts +42 -0
  29. package/package.json +2 -2
@@ -5,6 +5,10 @@ import { AttachmentResolver, AttachmentScraper } from './attachment-scraper';
5
5
  export interface ChatSourceOptions {
6
6
  sortOrder?: CommentsOrder;
7
7
  filterMode?: FilterMode;
8
+ /**
9
+ * How many messages should be loaded initially?
10
+ */
11
+ initialMessageCount?: number;
8
12
  }
9
13
  export declare abstract class ChatBackendBase {
10
14
  constructor();
@@ -1,23 +1,48 @@
1
- import { ChatMessage, Notification, UrlCard } from "@banta/common";
1
+ import { ChatMessage, CommentsOrder, FilterMode, Notification, Topic, UrlCard } from "@banta/common";
2
2
  import { Observable } from "rxjs";
3
3
  import { ChatBackendBase, ChatSourceOptions } from "./chat-backend-base";
4
- import { ChatSource } from "./chat-source";
5
4
  import { ChatSourceBase } from "./chat-source-base";
6
5
  import { SdkOptions } from "./sdk-options";
7
6
  import * as i0 from "@angular/core";
8
7
  export declare class ChatBackend extends ChatBackendBase {
9
8
  private options;
10
- constructor(options: SdkOptions);
9
+ private platformId;
10
+ constructor(options: SdkOptions, platformId: any);
11
11
  get serviceUrl(): string;
12
12
  private connectToService;
13
+ private isServer;
14
+ /**
15
+ * Check if we are currently running inside a Googlebot user agent or via the Google inspection tool in Search Console.
16
+ * We'll use this to avoid WebSockets so that comments can be indexable.
17
+ * @returns
18
+ */
19
+ private isGooglebot;
13
20
  getSourceForTopic(topicId: string, options?: ChatSourceOptions): Promise<ChatSourceBase>;
14
- getSourceForThread(topicId: string, messageId: string, options?: ChatSourceOptions): Promise<ChatSource>;
21
+ getSourceForThread(topicId: string, messageId: string, options?: ChatSourceOptions): Promise<ChatSourceBase>;
15
22
  /**
16
23
  * Get the count of the given topic
17
24
  * @param topicId
18
25
  * @returns
19
26
  */
20
27
  getSourceCountForTopic(topicId: string): Promise<number>;
28
+ /**
29
+ * Get the count of the given topic
30
+ * @param topicId
31
+ * @returns
32
+ */
33
+ getTopic(topicId: string): Promise<Topic>;
34
+ /**
35
+ * Get a set of messages from the given topic.
36
+ * @param topicId
37
+ * @returns
38
+ */
39
+ getMessages(topicId: string, sort?: CommentsOrder, filter?: FilterMode, offset?: number, limit?: number): Promise<ChatMessage[]>;
40
+ /**
41
+ * Get a set of messages from the given topic.
42
+ * @param topicId
43
+ * @returns
44
+ */
45
+ getReplies(parentMessageId: string, sort?: CommentsOrder, filter?: FilterMode, offset?: number, limit?: number): Promise<ChatMessage[]>;
21
46
  refreshMessage(message: ChatMessage): Promise<ChatMessage>;
22
47
  getMessage(topicId: string, messageId: string): Promise<ChatMessage>;
23
48
  getSubMessage(topicId: string, parentMessageId: string, messageId: string): Promise<ChatMessage>;
@@ -32,5 +32,13 @@ export interface ChatSourceBase {
32
32
  deleteMessage(messageId: string): Promise<void>;
33
33
  connectionStateChanged?: Observable<'connected' | 'connecting' | 'lost' | 'restored'>;
34
34
  state?: 'connecting' | 'connected' | 'lost' | 'restored';
35
+ /**
36
+ * When true, this source is readonly, so messages cannot be sent/edited/deleted, nor liked/unliked.
37
+ */
38
+ readonly?: boolean;
39
+ /**
40
+ * When true/undefined, the source supports loading more messages. When false, it does not.
41
+ */
42
+ canLoadMore?: boolean;
35
43
  get errorState(): any;
36
44
  }
@@ -12,6 +12,8 @@ export declare class ChatSource extends SocketRPC implements ChatSourceBase {
12
12
  private options;
13
13
  private subscription;
14
14
  private markReady;
15
+ readonly: boolean;
16
+ canLoadMore: boolean;
15
17
  ready: Promise<void>;
16
18
  permissions: ChatPermissions;
17
19
  private _state;
@@ -6,11 +6,12 @@ export declare class AttachmentButtonComponent {
6
6
  constructor(cdnProvider: CDNProvider);
7
7
  private _addedAttachment;
8
8
  private _attachmentError;
9
- fileInput: ElementRef;
9
+ disabled: boolean;
10
10
  get addedAttachment(): import("rxjs").Observable<ChatMessageAttachment>;
11
11
  get attachmentError(): import("rxjs").Observable<ChatMessageAttachment>;
12
+ fileInput: ElementRef<HTMLInputElement>;
12
13
  show(): void;
13
14
  fileChange(event: Event): Promise<void>;
14
15
  static ɵfac: i0.ɵɵFactoryDeclaration<AttachmentButtonComponent, never>;
15
- static ɵcmp: i0.ɵɵComponentDeclaration<AttachmentButtonComponent, "banta-attachment-button", never, {}, { "addedAttachment": "addedAttachment"; "attachmentError": "attachmentError"; }, never, never, false>;
16
+ static ɵcmp: i0.ɵɵComponentDeclaration<AttachmentButtonComponent, "banta-attachment-button", never, { "disabled": "disabled"; }, { "addedAttachment": "addedAttachment"; "attachmentError": "attachmentError"; }, never, never, false>;
16
17
  }
@@ -1,12 +1,24 @@
1
1
  import { ElementRef } from "@angular/core";
2
- import { Subject } from 'rxjs';
3
2
  import { ChatMessage, ChatPermissions, User } from '@banta/common';
4
3
  import { MessageMenuItem } from "../../message-menu-item";
5
4
  import * as i0 from "@angular/core";
6
5
  export declare class CommentComponent {
7
6
  private elementRef;
8
7
  constructor(elementRef: ElementRef<HTMLElement>);
9
- get element(): HTMLElement;
8
+ ngOnInit(): void;
9
+ get message(): ChatMessage;
10
+ set message(value: ChatMessage);
11
+ private _message;
12
+ private isLoaded;
13
+ editedMessage: string;
14
+ customMenuItems: MessageMenuItem[];
15
+ showReplyAction: boolean;
16
+ maxLength: number;
17
+ permissions: ChatPermissions;
18
+ mine: boolean;
19
+ editing: boolean;
20
+ genericAvatarUrl: string;
21
+ readonly: boolean;
10
22
  private _reported;
11
23
  private _selected;
12
24
  private _liked;
@@ -15,56 +27,46 @@ export declare class CommentComponent {
15
27
  private _userSelected;
16
28
  private _avatarSelected;
17
29
  private _usernameSelected;
18
- maxLength: number;
19
- ngOnInit(): void;
20
- markAttachmentsLoaded(): void;
30
+ private _editStarted;
31
+ private _deleted;
32
+ private _editEnded;
33
+ private _edited;
34
+ private _loaded;
35
+ readonly liked: import("rxjs").Observable<void>;
36
+ readonly unliked: import("rxjs").Observable<void>;
37
+ readonly selected: import("rxjs").Observable<void>;
38
+ readonly edited: import("rxjs").Observable<string>;
39
+ readonly deleted: import("rxjs").Observable<void>;
40
+ readonly editStarted: import("rxjs").Observable<void>;
41
+ readonly editEnded: import("rxjs").Observable<void>;
42
+ readonly shared: import("rxjs").Observable<ChatMessage>;
43
+ readonly userSelected: import("rxjs").Observable<void>;
44
+ readonly usernameSelected: import("rxjs").Observable<User>;
45
+ readonly avatarSelected: import("rxjs").Observable<User>;
46
+ readonly reported: import("rxjs").Observable<void>;
47
+ readonly loaded: import("rxjs").Observable<void>;
48
+ get commentId(): string;
21
49
  isNew: boolean;
22
50
  get isHighlighted(): any;
23
51
  visible: boolean;
24
- private _message;
25
- get message(): ChatMessage;
26
- set message(value: ChatMessage);
27
- customMenuItems: MessageMenuItem[];
28
- showReplyAction: boolean;
29
- loaded: Subject<void>;
30
- private isLoaded;
31
- waitForLoad(): Promise<boolean>;
32
- get userSelected(): import("rxjs").Observable<void>;
33
- get usernameSelected(): import("rxjs").Observable<User>;
34
- get avatarSelected(): import("rxjs").Observable<User>;
35
- get reported(): import("rxjs").Observable<void>;
36
- permissions: ChatPermissions;
37
- mine: boolean;
38
- editing: boolean;
39
- editedMessage: string;
52
+ get replyCount(): number;
53
+ get element(): HTMLElement;
54
+ avatarForUser(user: User): string;
55
+ waitForLoad(): Promise<void>;
56
+ private setMessage;
57
+ markAttachmentsLoaded(): void;
40
58
  saveEdit(): void;
41
59
  endEditing(): void;
42
- startEdit(): void;
43
60
  delete(): void;
44
- get liked(): import("rxjs").Observable<void>;
45
- get unliked(): import("rxjs").Observable<void>;
46
- get selected(): import("rxjs").Observable<void>;
47
- private _editStarted;
48
- private _deleted;
49
- private _editEnded;
50
- private _edited;
51
- get edited(): import("rxjs").Observable<string>;
52
- get deleted(): import("rxjs").Observable<void>;
53
- get editStarted(): import("rxjs").Observable<void>;
54
- get editEnded(): import("rxjs").Observable<void>;
55
- get shared(): import("rxjs").Observable<ChatMessage>;
56
- genericAvatarUrl: string;
57
- get commentId(): string;
58
61
  report(): void;
59
62
  like(): void;
60
63
  unlike(): void;
61
64
  share(): void;
62
65
  select(): void;
63
66
  selectUser(): void;
67
+ startEdit(): void;
64
68
  selectUsername(user: User): void;
65
69
  selectAvatar(user: User): void;
66
- avatarForUser(user: User): string;
67
- get replyCount(): number;
68
70
  static ɵfac: i0.ɵɵFactoryDeclaration<CommentComponent, never>;
69
- static ɵcmp: i0.ɵɵComponentDeclaration<CommentComponent, "banta-comment", never, { "maxLength": "maxLength"; "message": "message"; "customMenuItems": "customMenuItems"; "showReplyAction": "showReplyAction"; "permissions": "permissions"; "mine": "mine"; "editing": "editing"; "genericAvatarUrl": "genericAvatarUrl"; }, { "loaded": "loaded"; "userSelected": "userSelected"; "usernameSelected": "usernameSelected"; "avatarSelected": "avatarSelected"; "reported": "reported"; "liked": "liked"; "unliked": "unliked"; "selected": "selected"; "edited": "edited"; "deleted": "deleted"; "editStarted": "editStarted"; "editEnded": "editEnded"; "shared": "shared"; }, never, never, false>;
71
+ static ɵcmp: i0.ɵɵComponentDeclaration<CommentComponent, "banta-comment", never, { "message": "message"; "customMenuItems": "customMenuItems"; "showReplyAction": "showReplyAction"; "maxLength": "maxLength"; "permissions": "permissions"; "mine": "mine"; "editing": "editing"; "genericAvatarUrl": "genericAvatarUrl"; "readonly": "readonly"; }, { "liked": "liked"; "unliked": "unliked"; "selected": "selected"; "edited": "edited"; "deleted": "deleted"; "editStarted": "editStarted"; "editEnded": "editEnded"; "shared": "shared"; "userSelected": "userSelected"; "usernameSelected": "usernameSelected"; "avatarSelected": "avatarSelected"; "reported": "reported"; "loaded": "loaded"; }, never, never, false>;
70
72
  }
@@ -1,7 +1,6 @@
1
1
  import { ElementRef } from "@angular/core";
2
2
  import { ChatMessage, ChatMessageAttachment, User } from "@banta/common";
3
- import { Observable, Subject } from "rxjs";
4
- import { ChatBackendBase } from "../../chat-backend-base";
3
+ import { Subject } from "rxjs";
5
4
  import { ChatSourceBase } from "../../chat-source-base";
6
5
  import { SignInState } from "../../chat-source";
7
6
  import * as i0 from "@angular/core";
@@ -14,28 +13,28 @@ export interface HashTag {
14
13
  description: string;
15
14
  }
16
15
  export declare class CommentFieldComponent {
17
- private chatBackend;
18
- constructor(chatBackend: ChatBackendBase);
16
+ ngAfterViewInit(): void;
19
17
  private _source;
20
18
  get source(): ChatSourceBase;
21
19
  set source(value: ChatSourceBase);
20
+ private _permissionDeniedError;
21
+ private errorTimeout;
22
22
  private _subs;
23
+ sending: boolean;
24
+ sendError: Error;
25
+ expandError: boolean;
26
+ autocompleteVisible: boolean;
27
+ autocompleteOptions: AutoCompleteOption[];
28
+ completionFunc: (str: string) => AutoCompleteOption[];
29
+ completionPrefix: string;
30
+ autoCompleteSelected: number;
31
+ text: string;
32
+ chatMessageAttachments: ChatMessageAttachment[];
23
33
  user: User;
24
34
  canComment: boolean;
25
35
  signInState: SignInState;
26
36
  allowAttachments: boolean;
27
- signInSelected: Subject<void>;
28
- editAvatarSelected: Subject<void>;
29
- focusChange: Subject<boolean>;
30
- sending: boolean;
31
- sendError: Error;
32
- expandError: boolean;
33
37
  transientMessage: string;
34
- private _text;
35
- get text(): string;
36
- set text(value: string);
37
- get indicatorState(): "none" | "error" | "transient" | "sending";
38
- get buttonState(): "signing-in" | "sending" | "permission-denied" | "send";
39
38
  sendLabel: string;
40
39
  signingInLabel: string;
41
40
  sendingLabel: string;
@@ -44,49 +43,47 @@ export declare class CommentFieldComponent {
44
43
  signInLabel: string;
45
44
  maxLength: number;
46
45
  placeholder: string;
47
- textChanged: Subject<void>;
48
46
  shouldInterceptMessageSend?: (message: ChatMessage, source: ChatSourceBase) => boolean | Promise<boolean>;
49
- autocompleteEl: ElementRef<HTMLElement>;
50
- autocompleteContainerEl: ElementRef<HTMLElement>;
51
- textareaEl: ElementRef<HTMLTextAreaElement>;
52
47
  hashtags: HashTag[];
53
48
  participants: User[];
54
49
  genericAvatarUrl: string;
55
50
  url: string;
51
+ submit: (message: ChatMessage) => boolean;
52
+ readonly: boolean;
53
+ signInSelected: Subject<void>;
54
+ editAvatarSelected: Subject<void>;
55
+ focusChange: Subject<boolean>;
56
+ textChanged: Subject<void>;
57
+ get permissionDeniedError(): Subject<string>;
58
+ autocompleteEl: ElementRef<HTMLElement>;
59
+ autocompleteContainerEl: ElementRef<HTMLElement>;
60
+ textareaEl: ElementRef<HTMLTextAreaElement>;
61
+ get indicatorState(): "none" | "error" | "transient" | "sending";
62
+ get buttonState(): "signing-in" | "sending" | "permission-denied" | "send";
63
+ get sendButtonEnabled(): boolean;
56
64
  get userAvatarUrl(): string;
57
- private _permissionDeniedError;
58
- get permissionDeniedError(): Observable<string>;
59
- ngAfterViewInit(): void;
65
+ get isValidMessage(): string | boolean;
66
+ get hasPendingAttachments(): boolean;
67
+ private setSource;
60
68
  sendPermissionDenied(message: string): void;
61
- showAutoComplete(options: AutoCompleteOption[]): void;
62
- autocompleteVisible: boolean;
63
- autocompleteOptions: AutoCompleteOption[];
64
69
  activateAutoComplete(option: AutoCompleteOption): void;
70
+ onFocus(): void;
71
+ onBlur(): void;
72
+ showSignIn(): void;
73
+ showEditAvatar(): void;
74
+ insertEmoji(text: string): void;
75
+ showAutoComplete(options: AutoCompleteOption[]): void;
65
76
  dismissAutoComplete(): void;
66
- private errorTimeout;
67
77
  indicateError(message: string): void;
68
- completionFunc: (str: string) => AutoCompleteOption[];
69
- completionPrefix: string;
70
- autoCompleteSelected: number;
71
- get isValidMessage(): string | boolean;
72
- get hasPendingAttachments(): boolean;
73
- get sendButtonEnabled(): boolean;
74
78
  autocomplete(replacement: string): Promise<void>;
75
79
  insert(str: string): Promise<void>;
76
80
  onKeyDown(event: KeyboardEvent): Promise<void>;
77
81
  startAutoComplete(event: KeyboardEvent, completionFunc: (str: string) => AutoCompleteOption[]): void;
78
- onFocus(): void;
79
- onBlur(): void;
80
- insertEmoji(text: string): void;
81
- showSignIn(): void;
82
- showEditAvatar(): void;
83
- submit: (message: ChatMessage) => boolean;
84
82
  sendMessage(): Promise<void>;
85
- chatMessageAttachments: ChatMessageAttachment[];
86
83
  addedAttachment(attachment: ChatMessageAttachment): void;
87
84
  attachmentError(attachment: ChatMessageAttachment): void;
88
85
  removeAttachment(attachment: ChatMessageAttachment): void;
89
86
  alertError(): void;
90
87
  static ɵfac: i0.ɵɵFactoryDeclaration<CommentFieldComponent, never>;
91
- static ɵcmp: i0.ɵɵComponentDeclaration<CommentFieldComponent, "banta-comment-field", never, { "source": "source"; "user": "user"; "canComment": "canComment"; "signInState": "signInState"; "allowAttachments": "allowAttachments"; "transientMessage": "transientMessage"; "sendLabel": "sendLabel"; "signingInLabel": "signingInLabel"; "sendingLabel": "sendingLabel"; "label": "label"; "permissionDeniedLabel": "permissionDeniedLabel"; "signInLabel": "signInLabel"; "maxLength": "maxLength"; "placeholder": "placeholder"; "shouldInterceptMessageSend": "shouldInterceptMessageSend"; "hashtags": "hashtags"; "participants": "participants"; "genericAvatarUrl": "genericAvatarUrl"; "url": "url"; "submit": "submit"; }, { "signInSelected": "signInSelected"; "editAvatarSelected": "editAvatarSelected"; "focusChange": "focusChange"; "textChanged": "textChanged"; "permissionDeniedError": "permissionDeniedError"; }, never, ["*"], false>;
88
+ static ɵcmp: i0.ɵɵComponentDeclaration<CommentFieldComponent, "banta-comment-field", never, { "source": "source"; "user": "user"; "canComment": "canComment"; "signInState": "signInState"; "allowAttachments": "allowAttachments"; "transientMessage": "transientMessage"; "sendLabel": "sendLabel"; "signingInLabel": "signingInLabel"; "sendingLabel": "sendingLabel"; "label": "label"; "permissionDeniedLabel": "permissionDeniedLabel"; "signInLabel": "signInLabel"; "maxLength": "maxLength"; "placeholder": "placeholder"; "shouldInterceptMessageSend": "shouldInterceptMessageSend"; "hashtags": "hashtags"; "participants": "participants"; "genericAvatarUrl": "genericAvatarUrl"; "url": "url"; "submit": "submit"; "readonly": "readonly"; }, { "signInSelected": "signInSelected"; "editAvatarSelected": "editAvatarSelected"; "focusChange": "focusChange"; "textChanged": "textChanged"; "permissionDeniedError": "permissionDeniedError"; }, never, ["*"], false>;
92
89
  }
@@ -1,6 +1,5 @@
1
1
  import { ElementRef, QueryList } from "@angular/core";
2
2
  import { User, ChatMessage, CommentsOrder, FilterMode } from '@banta/common';
3
- import { Subject } from 'rxjs';
4
3
  import { ChatBackendBase } from "../../chat-backend-base";
5
4
  import { ChatSourceBase } from "../../chat-source-base";
6
5
  import { MessageMenuItem } from "../../message-menu-item";
@@ -14,8 +13,33 @@ export declare class CommentViewComponent {
14
13
  private backend;
15
14
  private elementRef;
16
15
  constructor(backend: ChatBackendBase, elementRef: ElementRef<HTMLElement>);
17
- private _sourceSubs;
18
16
  private _source;
17
+ get source(): ChatSourceBase;
18
+ set source(value: ChatSourceBase);
19
+ private _sourceSubs;
20
+ menuMessage: ChatMessage;
21
+ messages: ChatMessage[];
22
+ currentUser: User;
23
+ customSortEnabled: boolean;
24
+ markSourceLoaded: () => void;
25
+ sourceLoaded: Promise<void>;
26
+ isViewingMore: boolean;
27
+ isLoadingMore: boolean;
28
+ hasMore: boolean;
29
+ newMessages: ChatMessage[];
30
+ olderMessages: ChatMessage[];
31
+ maxMessages: number;
32
+ maxVisibleMessages: number;
33
+ newestLast: boolean;
34
+ holdNewMessages: boolean;
35
+ showEmptyState: boolean;
36
+ allowReplies: boolean;
37
+ enableHoldOnClick: boolean;
38
+ enableHoldOnScroll: boolean;
39
+ customMenuItems: MessageMenuItem[];
40
+ fixedHeight: boolean;
41
+ selectedMessage: ChatMessage;
42
+ genericAvatarUrl: string;
19
43
  private _selected;
20
44
  private _liked;
21
45
  private _unliked;
@@ -26,12 +50,22 @@ export declare class CommentViewComponent {
26
50
  private _shared;
27
51
  private _deleted;
28
52
  private _messageEdited;
29
- showEmptyState: boolean;
30
- allowReplies: boolean;
31
- enableHoldOnClick: boolean;
32
- enableHoldOnScroll: boolean;
33
- customMenuItems: MessageMenuItem[];
53
+ private _sortOrderChanged;
54
+ private _filterModeChanged;
55
+ readonly userSelected: import("rxjs").Observable<ChatMessage>;
56
+ readonly reported: import("rxjs").Observable<ChatMessage>;
57
+ readonly liked: import("rxjs").Observable<ChatMessage>;
58
+ readonly unliked: import("rxjs").Observable<ChatMessage>;
59
+ readonly usernameSelected: import("rxjs").Observable<User>;
60
+ readonly avatarSelected: import("rxjs").Observable<User>;
61
+ readonly shared: import("rxjs").Observable<ChatMessage>;
62
+ readonly deleted: import("rxjs").Observable<ChatMessage>;
63
+ readonly selected: import("rxjs").Observable<ChatMessage>;
64
+ readonly messageEdited: import("rxjs").Observable<EditEvent>;
65
+ readonly sortOrderChanged: import("rxjs").Observable<CommentsOrder>;
66
+ readonly filterModeChanged: import("rxjs").Observable<FilterMode>;
34
67
  commentsQuery: QueryList<CommentComponent>;
68
+ messageContainer: ElementRef<HTMLElement>;
35
69
  get comments(): CommentComponent[];
36
70
  /**
37
71
  * Returns true if this message can be found within one of the message buffers (older, current, newer)
@@ -50,23 +84,7 @@ export declare class CommentViewComponent {
50
84
  * @returns
51
85
  */
52
86
  getCommentComponentForMessage(message: ChatMessage): CommentComponent;
53
- fixedHeight: boolean;
54
- selectedMessage: ChatMessage;
55
- get selected(): Subject<ChatMessage>;
56
- get messageEdited(): import("rxjs").Observable<EditEvent>;
57
87
  saveEdit(message: ChatMessage, newMessage: string): void;
58
- get userSelected(): Subject<ChatMessage>;
59
- get reported(): Subject<ChatMessage>;
60
- get liked(): Subject<ChatMessage>;
61
- get unliked(): Subject<ChatMessage>;
62
- get usernameSelected(): Subject<User>;
63
- get avatarSelected(): Subject<User>;
64
- get shared(): Subject<ChatMessage>;
65
- get deleted(): Subject<ChatMessage>;
66
- menuMessage: ChatMessage;
67
- messages: ChatMessage[];
68
- currentUser: User;
69
- get source(): ChatSourceBase;
70
88
  likeMessage(message: ChatMessage): void;
71
89
  unlikeMessage(message: ChatMessage): void;
72
90
  reportMessage(message: ChatMessage): void;
@@ -77,25 +95,9 @@ export declare class CommentViewComponent {
77
95
  sharedMessage(message: ChatMessage): void;
78
96
  startEditing(message: ChatMessage): void;
79
97
  deleteMessage(message: ChatMessage): void;
80
- customSortEnabled: boolean;
81
- markSourceLoaded: () => void;
82
- sourceLoaded: Promise<void>;
83
- set source(value: ChatSourceBase);
98
+ private setSource;
84
99
  private getInitialMessages;
85
- genericAvatarUrl: string;
86
- messageContainer: ElementRef<HTMLElement>;
87
- maxMessages: number;
88
- maxVisibleMessages: number;
89
- newestLast: boolean;
90
- holdNewMessages: boolean;
91
- isViewingMore: boolean;
92
- isLoadingMore: boolean;
93
- hasMore: boolean;
94
- newMessages: ChatMessage[];
95
- olderMessages: ChatMessage[];
96
100
  messageIdentity(index: number, chatMessage: ChatMessage): string;
97
- sortOrderChanged: Subject<CommentsOrder>;
98
- filterModeChanged: Subject<FilterMode>;
99
101
  showNew(event: MouseEvent): Promise<void>;
100
102
  showMore(): Promise<void>;
101
103
  private addMessage;
@@ -115,5 +117,5 @@ export declare class CommentViewComponent {
115
117
  getElementForComment(commentId: string): Element;
116
118
  mentionsMe(message: ChatMessage): boolean;
117
119
  static ɵfac: i0.ɵɵFactoryDeclaration<CommentViewComponent, never>;
118
- static ɵcmp: i0.ɵɵComponentDeclaration<CommentViewComponent, "banta-comment-view", never, { "showEmptyState": "showEmptyState"; "allowReplies": "allowReplies"; "enableHoldOnClick": "enableHoldOnClick"; "enableHoldOnScroll": "enableHoldOnScroll"; "customMenuItems": "customMenuItems"; "fixedHeight": "fixedHeight"; "selectedMessage": "selectedMessage"; "source": "source"; "genericAvatarUrl": "genericAvatarUrl"; "maxMessages": "maxMessages"; "maxVisibleMessages": "maxVisibleMessages"; "newestLast": "newestLast"; "holdNewMessages": "holdNewMessages"; }, { "selected": "selected"; "messageEdited": "messageEdited"; "userSelected": "userSelected"; "reported": "reported"; "liked": "liked"; "unliked": "unliked"; "usernameSelected": "usernameSelected"; "avatarSelected": "avatarSelected"; "shared": "shared"; "deleted": "deleted"; "sortOrderChanged": "sortOrderChanged"; "filterModeChanged": "filterModeChanged"; }, never, ["[data-before]", ".inline-replies", ":not([data-before]):not(.inline-replies)"], false>;
120
+ static ɵcmp: i0.ɵɵComponentDeclaration<CommentViewComponent, "banta-comment-view", never, { "source": "source"; "maxMessages": "maxMessages"; "maxVisibleMessages": "maxVisibleMessages"; "newestLast": "newestLast"; "holdNewMessages": "holdNewMessages"; "showEmptyState": "showEmptyState"; "allowReplies": "allowReplies"; "enableHoldOnClick": "enableHoldOnClick"; "enableHoldOnScroll": "enableHoldOnScroll"; "customMenuItems": "customMenuItems"; "fixedHeight": "fixedHeight"; "selectedMessage": "selectedMessage"; "genericAvatarUrl": "genericAvatarUrl"; }, { "userSelected": "userSelected"; "reported": "reported"; "liked": "liked"; "unliked": "unliked"; "usernameSelected": "usernameSelected"; "avatarSelected": "avatarSelected"; "shared": "shared"; "deleted": "deleted"; "selected": "selected"; "messageEdited": "messageEdited"; "sortOrderChanged": "sortOrderChanged"; "filterModeChanged": "filterModeChanged"; }, never, ["[data-before]", ".inline-replies", ":not([data-before]):not(.inline-replies)"], false>;
119
121
  }
@@ -19,11 +19,12 @@ export declare class EmojiSelectorButtonComponent {
19
19
  */
20
20
  insert(str: any): void;
21
21
  close(): void;
22
+ disabled: boolean;
22
23
  overlayX: 'start' | 'center' | 'end';
23
24
  overlayY: 'top' | 'center' | 'bottom';
24
25
  originX: 'start' | 'center' | 'end';
25
26
  originY: 'top' | 'center' | 'bottom';
26
27
  show(): void;
27
28
  static ɵfac: i0.ɵɵFactoryDeclaration<EmojiSelectorButtonComponent, never>;
28
- static ɵcmp: i0.ɵɵComponentDeclaration<EmojiSelectorButtonComponent, "emoji-selector-button", never, { "overlayX": "overlayX"; "overlayY": "overlayY"; "originX": "originX"; "originY": "originY"; }, { "selected": "selected"; }, never, never, false>;
29
+ static ɵcmp: i0.ɵɵComponentDeclaration<EmojiSelectorButtonComponent, "emoji-selector-button", never, { "disabled": "disabled"; "overlayX": "overlayX"; "overlayY": "overlayY"; "originX": "originX"; "originY": "originY"; }, { "selected": "selected"; }, never, never, false>;
29
30
  }
@@ -0,0 +1,42 @@
1
+ import { ChatMessage, ChatPermissions, CommentsOrder, FilterMode } from "@banta/common";
2
+ import { ChatSourceBase } from "./chat-source-base";
3
+ import { Subject } from "rxjs";
4
+ import { ChatBackend } from "./chat-backend";
5
+ import { ChatSourceOptions } from "./chat-backend-base";
6
+ /**
7
+ * A special ChatSource which uses the REST API to load a limited number of chat messages, and does not support
8
+ * sending/editing/deleting messages, liking/unliking, or loading more messages.
9
+ *
10
+ * This is used within Banta's SSR support.
11
+ */
12
+ export declare class StaticChatSource implements ChatSourceBase {
13
+ private backend;
14
+ readonly identifier: string;
15
+ readonly parentIdentifier?: string;
16
+ constructor(backend: ChatBackend, identifier: string, parentIdentifier?: string, options?: ChatSourceOptions);
17
+ initialMessageCount: number;
18
+ sortOrder: CommentsOrder;
19
+ filterMode: FilterMode;
20
+ permissions: ChatPermissions;
21
+ ready: Promise<void>;
22
+ readonly: boolean;
23
+ canLoadMore: boolean;
24
+ messageReceived: Subject<ChatMessage>;
25
+ messageObserved: Subject<ChatMessage>;
26
+ messageUpdated: Subject<ChatMessage>;
27
+ messageSent: Subject<ChatMessage>;
28
+ messages: ChatMessage[];
29
+ send(message: ChatMessage): Promise<ChatMessage>;
30
+ close(): void;
31
+ getCount(): Promise<number>;
32
+ getExistingMessages(): Promise<ChatMessage[]>;
33
+ loadAfter(message: ChatMessage, count: number): Promise<ChatMessage[]>;
34
+ get(id: string): Promise<ChatMessage>;
35
+ likeMessage(messageId: string): Promise<void>;
36
+ unlikeMessage(messageId: string): Promise<void>;
37
+ editMessage(messageId: string, text: string): Promise<void>;
38
+ deleteMessage(messageId: string): Promise<void>;
39
+ connectionStateChanged: Subject<"connected" | "connecting" | "lost" | "restored">;
40
+ state: 'connecting' | 'connected' | 'lost' | 'restored';
41
+ get errorState(): any;
42
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@banta/sdk",
3
- "version": "4.8.2",
3
+ "version": "4.9.1",
4
4
  "private": false,
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -17,7 +17,7 @@
17
17
  "@angular/router": "^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0 || ^14.0.0",
18
18
  "@astronautlabs/datastore": "^3.1.2",
19
19
  "@astronautlabs/datastore-firestore": "^3.1.2",
20
- "@banta/common": "^2.2.21",
20
+ "@banta/common": "^2.3.1",
21
21
  "@types/marked": "^4.0.3",
22
22
  "@types/dompurify": "^2.3.3",
23
23
  "dompurify": "^2.3.10",