@bcc-code/vue-bcc-chat-ui 3.6.3 → 3.7.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.
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@bcc-code/vue-bcc-chat-ui",
3
3
  "author": "bcc-code",
4
4
  "license": "Apache-2.0",
5
- "version": "3.6.3",
5
+ "version": "3.7.0",
6
6
  "type": "module",
7
7
  "private": false,
8
8
  "files": [
@@ -33,22 +33,22 @@
33
33
  },
34
34
  "devDependencies": {
35
35
  "@types/dompurify": "^3.0.5",
36
- "@types/markdown-it": "^13.0.7",
37
- "@types/node": "^20.12.7",
36
+ "@types/markdown-it": "^13.0.8",
37
+ "@types/node": "^20.12.10",
38
38
  "@vitejs/plugin-vue": "^4.6.2",
39
39
  "path": "^0.12.7",
40
- "sass": "^1.75.0",
40
+ "sass": "^1.77.0",
41
41
  "typescript": "^5.4.5",
42
- "vite": "^5.2.8",
43
- "vite-plugin-dts": "^3.8.1",
44
- "vue": "^3.4.21"
42
+ "vite": "^5.2.11",
43
+ "vite-plugin-dts": "^3.9.1",
44
+ "vue": "^3.4.27"
45
45
  },
46
46
  "dependencies": {
47
- "@cometchat/chat-sdk-javascript": "^4.0.4",
48
- "@cometchat/chat-uikit-vue": "^4.3.3",
49
- "@cometchat/uikit-resources": "^4.3.3",
50
- "@cometchat/uikit-shared": "^4.3.4",
51
- "dompurify": "^3.1.0",
47
+ "@cometchat/chat-sdk-javascript": "4.0.5",
48
+ "@cometchat/chat-uikit-vue": "4.3.6",
49
+ "@cometchat/uikit-resources": "4.3.7",
50
+ "@cometchat/uikit-shared": "4.3.7",
51
+ "dompurify": "^3.1.2",
52
52
  "jwt-decode": "^4.0.0",
53
53
  "markdown-it": "^14.1.0"
54
54
  },
@@ -1,7 +1,10 @@
1
1
  <script setup lang="ts">
2
2
  import MarkdownIt from 'markdown-it'
3
- import { User } from '@cometchat/chat-sdk-javascript'
3
+ import { BaseMessage, CometChat, User } from '@cometchat/chat-sdk-javascript'
4
4
  import DOMPurify from 'dompurify';
5
+ import { inject, ref } from 'vue';
6
+ import { CometChatTheme, fontHelper } from '@cometchat/uikit-resources';
7
+ import BccReplyPreview from "./BccReplyPreview.vue";
5
8
 
6
9
  const props = defineProps<{
7
10
  text: string,
@@ -54,10 +57,31 @@ function formatMentionsInText(text: string) {
54
57
  });
55
58
  }
56
59
 
60
+ let parentMsgRef = ref<BaseMessage>();
61
+ if (props.metadata?.replyToMessageId) {
62
+ CometChat.getMessageDetails(props.metadata.replyToMessageId).then((msg: BaseMessage) => parentMsgRef.value = msg).catch(() => parentMsgRef.value = new CometChat.TextMessage("","Unknown message",""));
63
+ };
64
+
65
+ const { theme } = inject("theme", { theme: ref(new CometChatTheme({})) });
66
+ const replyPreviewStyle = {
67
+ previewWrapperPadding: "6px 12px 6px 9px",
68
+ barLeftPosition: "0px",
69
+ titleColor: theme.value.palette.getAccent800(),
70
+ subtitleColor: theme.value.palette.getAccent800(),
71
+ titleFont: fontHelper(theme.value.typography.title2),
72
+ };
57
73
  </script>
58
74
 
59
75
  <template>
60
76
  <div>
77
+ <div v-if="metadata?.replyToMessageId" class="bcc-chat-msg-bubble">
78
+ <div class="bcc-chat-msg-bubble--reply">
79
+ <BccReplyPreview
80
+ :replyToMessage="parentMsgRef"
81
+ :previewStyle="replyPreviewStyle"
82
+ />
83
+ </div>
84
+ </div>
61
85
  <div v-if="metadata && metadata.translated_message" v-html="toMarkdownHtml(metadata.translated_message)"
62
86
  class="bcc-chat-msg-bubble bcc-chat-msg-bubble--translation" />
63
87
  <div v-html="toMarkdownHtml(text)" class="bcc-chat-msg-bubble"
@@ -141,5 +165,26 @@ function formatMentionsInText(text: string) {
141
165
  display: block;
142
166
  }
143
167
  }
168
+
169
+ &--reply {
170
+ position: relative;
171
+ z-index: 0;
172
+ margin-top: 3px;
173
+ margin-bottom: -8px;
174
+ border-radius: 6px;
175
+ overflow: hidden;
176
+ }
177
+
178
+ &--reply::before {
179
+ content: "";
180
+ position: absolute;
181
+ top: 0;
182
+ left: 0;
183
+ width: 100%;
184
+ height: 100%;
185
+ opacity: .5;
186
+ z-index: -1;
187
+ background-color: var(--cc__background);
188
+ }
144
189
  }
145
190
  </style>
@@ -1,24 +1,28 @@
1
1
  <script setup lang="ts">
2
2
  import {
3
+ Ref,
3
4
  onBeforeMount,
5
+ onBeforeUnmount,
4
6
  onMounted,
5
7
  onUnmounted,
8
+ provide,
6
9
  ref,
7
10
  watch,
11
+ watchEffect,
8
12
  } from "vue";
9
13
  import chat from "../chat";
10
14
  import { connect, disconnect } from "../chat/connection";
11
15
  import { loggedIn } from "../chat/login";
12
- import { CometChatMessages } from "@cometchat/chat-uikit-vue";
16
+ import { CometChatMessages } from "../chat/cometChatPatches";
13
17
  import { Group } from "@cometchat/chat-sdk-javascript";
14
18
  import { watchAndApplyStyle } from "../chat/styleFix";
15
19
  import {
16
- messageComposerConfiguration,
17
- messageListConfiguration,
18
- threadedMessagesConfiguration
20
+ getMessageComposerConfiguration,
21
+ getMessageListConfiguration,
22
+ getThreadedMessagesConfiguration
19
23
  } from "../chat/uiKit";
20
- import CometChatMessageListOverride from "./CometChatMessageListOverride.vue";
21
- CometChatMessages.components!.CometChatMessageList = CometChatMessageListOverride;
24
+ import { ChatInstance } from "../chat/types";
25
+ import { CometChatMessageEvents, MessageStatus } from "@cometchat/uikit-resources";
22
26
 
23
27
  const props = defineProps({
24
28
  chatUid: { type: String, required: true },
@@ -29,6 +33,37 @@ const componentId = ref(
29
33
  );
30
34
  const chatGroup = ref<Group>();
31
35
 
36
+ const chatInstance: Ref<ChatInstance> = ref({
37
+ componentId: componentId,
38
+ replyToMessage: null
39
+ });
40
+
41
+ const messageComposerConfiguration = getMessageComposerConfiguration();
42
+ const messageListConfiguration = getMessageListConfiguration(chatInstance);
43
+ const threadedMessagesConfiguration = getThreadedMessagesConfiguration();
44
+
45
+ provide("chatInstance", chatInstance);
46
+ const onMessageSend = CometChatMessageEvents.ccMessageSent.subscribe(({ message, status }) => {
47
+ if (status === MessageStatus.inprogress && chatInstance.value.replyToMessage) {
48
+ (message as any).setMetadata({
49
+ replyToMessageId: chatInstance.value.replyToMessage?.getId()
50
+ });
51
+ }
52
+ });
53
+
54
+ watchEffect(() => {
55
+ if (!chatInstance.value.replyToMessage) {
56
+ messageComposerConfiguration.value.headerView = undefined;
57
+ } else {
58
+ messageComposerConfiguration.value.headerView = {
59
+ componentName: "bcc-reply-box",
60
+ props: {
61
+ replyToMessage: chatInstance.value.replyToMessage,
62
+ }
63
+ }
64
+ }
65
+ });
66
+
32
67
  watch([loggedIn, ()=> props.chatUid, chat.initialized], async ([_loggedIn, _chatUid, _initialized]) => {
33
68
  if (_loggedIn && _chatUid && _initialized) {
34
69
  chatGroup.value = (await chat.getGroup(props.chatUid)) ?? undefined;
@@ -69,26 +104,24 @@ onMounted(() => {
69
104
  style: { 'flex-shrink': '0' },
70
105
  shadowDomSelector: "link-preview",
71
106
  },
72
- // {
73
- // selector: ".messageinput",
74
- // style: {
75
- // "border-radius": "8px 8px 0 0",
76
- // "box-shadow":
77
- // "0px -1px 2px 0px rgba(17, 24, 39, 0.05), 1px -1px 3px 0px rgba(17, 24, 39, 0.1)",
78
- // },
79
- // },
80
- // {
81
- // selector: ".messageinput-input",
82
- // style: {
83
- // "font-size": "16px",
84
- // padding: "8px",
85
- // "max-height": "none",
86
- // height: "64px",
87
- // },
88
- // },
107
+ {
108
+ selector: ".cc__preview__subtitle",
109
+ style: {
110
+ "overflow": "hidden",
111
+ "display": "-webkit-box",
112
+ "-webkit-box-orient": "vertical",
113
+ "-webkit-line-clamp": "1",
114
+ "word-break": "break-all"
115
+ },
116
+ shadowDomSelector: "cometchat-preview",
117
+ }
89
118
  ]);
90
119
  });
91
120
 
121
+ onBeforeUnmount(() => {
122
+ onMessageSend.unsubscribe();
123
+ })
124
+
92
125
  onUnmounted(async () => {
93
126
  await disconnect(componentId.value);
94
127
  });
@@ -96,7 +129,7 @@ onUnmounted(async () => {
96
129
  </script>
97
130
 
98
131
  <template>
99
- <div class="bcc-chat-message-list-wrapper">
132
+ <div class="bcc-chat-message-list-wrapper" :class="componentId">
100
133
  <!-- <div>
101
134
  <div>Connecting... <button @click="tryConnect(true)">[retry]</button></div>
102
135
  <div>Online status: {{chat.onlineStatus}}</div>
@@ -106,7 +139,7 @@ onUnmounted(async () => {
106
139
  <div>CometChat: {{cometChatStatus}} <button @click="getCometChatStatus()">[refresh]</button></div>
107
140
  </div> -->
108
141
  <div v-if="chatGroup" class="bcc-chat-message-list">
109
- <CometChatMessages
142
+ <CometChatMessages
110
143
  :hideMessageHeader="true"
111
144
  :disableSoundForMessages="true"
112
145
  :messageComposerConfiguration="messageComposerConfiguration"
@@ -212,6 +245,11 @@ accent900: text in avatar
212
245
  .cc-messagecomposer-wrapper {
213
246
  //padding: 0; //Use to remove side padding on composer
214
247
  }
248
+
249
+ /* 1.1.3 Wrapper for Messages Composer Header View */
250
+ .cc-messagecomposer-wrapper__headerview {
251
+ margin-bottom: 5px;
252
+ }
215
253
  }
216
254
  }
217
255
 
@@ -0,0 +1,128 @@
1
+ <script setup lang="ts">
2
+ import {
3
+ CometChatMessageEvents,
4
+ CometChatTheme,
5
+ MessageStatus,
6
+ } from "@cometchat/uikit-resources";
7
+ import { CloseIcon } from "@cometchat/chat-uikit-vue";
8
+ import {
9
+ getCurrentInstance,
10
+ ref,
11
+ inject,
12
+ Ref,
13
+ onBeforeUnmount,
14
+ onBeforeMount,
15
+ } from "vue";
16
+ import { ChatInstance } from "../chat/types";
17
+ import { ReplyPreviewStyle } from "../chat/replyStyle";
18
+ import { BaseMessage } from "@cometchat/chat-sdk-javascript";
19
+ import BccReplyPreview from "./BccReplyPreview.vue";
20
+
21
+ const props = defineProps({
22
+ replyToMessage: { type: BaseMessage },
23
+ titlePrefix: { type: String },
24
+ closeButtonIconURL: { type: String, default: CloseIcon },
25
+ previewStyle: { type: Object, default: {} },
26
+ });
27
+
28
+ const chatInstance = inject<Ref<ChatInstance>>("chatInstance");
29
+ const vueInstance: any = getCurrentInstance();
30
+
31
+ const { theme } = inject("theme", { theme: ref(new CometChatTheme({})) });
32
+ const previewStyle = new ReplyPreviewStyle(props.previewStyle, theme.value);
33
+
34
+ function closePreview(_event?: MouseEvent) {
35
+ if (chatInstance) {
36
+ chatInstance.value.replyToMessage = null;
37
+ }
38
+ }
39
+
40
+ const onMessageEditStart = CometChatMessageEvents.ccMessageEdited.subscribe(
41
+ ({ status }) => {
42
+ if (status === MessageStatus.inprogress) {
43
+ closePreview();
44
+ }
45
+ }
46
+ );
47
+
48
+ const onMessageSend = CometChatMessageEvents.ccMessageSent.subscribe(
49
+ ({ status }) => {
50
+ if (status === MessageStatus.inprogress) {
51
+ closePreview();
52
+ }
53
+ }
54
+ );
55
+
56
+ onBeforeMount(() => {
57
+ vueInstance?.parent?.setupState?.closePreview();
58
+ });
59
+
60
+ onBeforeUnmount(() => {
61
+ onMessageEditStart.unsubscribe();
62
+ onMessageSend.unsubscribe();
63
+ });
64
+
65
+ const closeBtnIconStyle = () => {
66
+ return {
67
+ buttonIconTint: previewStyle?.closeButtonIconTint,
68
+ height: "14px",
69
+ width: "14px",
70
+ border: "none",
71
+ borderRadius: "0",
72
+ background: "transparent",
73
+ display: "flex",
74
+ justifyContent: "center",
75
+ alignItems: "center",
76
+ };
77
+ };
78
+
79
+ const wrapperStyle = () => {
80
+ return {
81
+ background: previewStyle?.background,
82
+ border: previewStyle?.border,
83
+ height: previewStyle?.height,
84
+ width: previewStyle?.width,
85
+ borderRadius: previewStyle?.borderRadius,
86
+ };
87
+ };
88
+ </script>
89
+
90
+ <template>
91
+ <div class="bcc__reply_box" :style="wrapperStyle()">
92
+ <BccReplyPreview
93
+ titlePrefix="Reply to "
94
+ :replyToMessage="props.replyToMessage"
95
+ :previewStyle="previewStyle"
96
+ />
97
+ <div class="bcc__reply_preview__close" @click="closePreview">
98
+ <cometchat-button
99
+ :buttonStyle="closeBtnIconStyle()"
100
+ :iconURL="props.closeButtonIconURL"
101
+ ></cometchat-button>
102
+ </div>
103
+ </div>
104
+ </template>
105
+
106
+ <style>
107
+ .cc-messagecomposer-wrapper__headerview {
108
+ position: static !important;
109
+ }
110
+ </style>
111
+ <style scoped>
112
+ * {
113
+ box-sizing: border-box;
114
+ }
115
+ .bcc__reply_box {
116
+ padding: 8px;
117
+ display: flex;
118
+ flex-direction: row;
119
+ justify-content: space-between;
120
+ margin: 0;
121
+ min-height: 30px;
122
+ }
123
+ .bcc__reply_preview__close {
124
+ width: 14px;
125
+ height: 14px;
126
+ display: inline-block;
127
+ }
128
+ </style>
@@ -0,0 +1,113 @@
1
+ <script setup lang="ts">
2
+ import { CometChatTheme, CometChatUIKitConstants } from "@cometchat/uikit-resources";
3
+ import { inject, ref } from "vue";
4
+ import { ReplyPreviewStyle } from "../chat/replyStyle";
5
+ import { BaseMessage, MediaMessage } from "@cometchat/chat-sdk-javascript";
6
+ import { getMessageTextPreview, proxyImage } from "../chat/data";
7
+
8
+ const props = defineProps({
9
+ replyToMessage: { type: BaseMessage },
10
+ titlePrefix: { type: String, default: "" },
11
+ previewStyle: { type: Object, default: {} },
12
+ });
13
+
14
+ const { theme } = inject("theme", { theme: ref(new CometChatTheme({})) });
15
+ const previewStyle = new ReplyPreviewStyle(props.previewStyle, theme.value);
16
+
17
+ const subtitleStyle = () => {
18
+ return {
19
+ font: previewStyle?.subtitleFont,
20
+ color: previewStyle?.subtitleColor,
21
+ };
22
+ };
23
+
24
+ const titleStyle = () => {
25
+ return {
26
+ font: previewStyle?.titleFont,
27
+ color: previewStyle?.titleColor,
28
+ };
29
+ }
30
+
31
+ const barStyle = () => {
32
+ return {
33
+ insetInlineStart: previewStyle?.barLeftPosition,
34
+ width: previewStyle?.barWidth,
35
+ background: previewStyle?.barBackground,
36
+ opacity: previewStyle?.barOpacity,
37
+ };
38
+ };
39
+
40
+ const previewWrapperStyle = () => {
41
+ return {
42
+ padding: previewStyle?.previewWrapperPadding,
43
+ opacity: previewStyle?.previewWrapperOpacity,
44
+ };
45
+ };
46
+
47
+ function getThumbnailURL() {
48
+ const msg = props.replyToMessage as MediaMessage;
49
+ const url =
50
+ (msg?.getMetadata() as any)?.['@injected']?.extensions?.['thumbnail-generation']?.url_small ||
51
+ (msg?.getData() as any)?.url;
52
+ return proxyImage(url);
53
+ }
54
+
55
+ </script>
56
+
57
+ <template>
58
+ <div class="bcc__reply_preview__content_wrapper" :style="previewWrapperStyle()">
59
+ <div class="bcc__reply_preview__content_bar" :style="barStyle()"></div>
60
+ <div v-if="props.replyToMessage?.getType() === CometChatUIKitConstants.MessageTypes.image" class="bcc__reply_preview__thumbnail">
61
+ <img :src="getThumbnailURL()" />
62
+ </div>
63
+ <div class="bcc__reply_preview__content">
64
+ <p class="bcc__reply_preview__title" :style="titleStyle()">
65
+ {{ props.titlePrefix + ( props?.replyToMessage?.getSender()?.getName() || "" ) || "Reply to ..." }}
66
+ </p>
67
+ <p class="cc__preview__subtitle" :style="subtitleStyle()">
68
+ {{ getMessageTextPreview(props?.replyToMessage) || "‎" }}
69
+ </p>
70
+ </div>
71
+ </div>
72
+ </template>
73
+
74
+ <style scoped>
75
+ .bcc__reply_preview__content_wrapper {
76
+ padding: 0 12px;
77
+ position: relative;
78
+ display: grid;
79
+ }
80
+ .bcc__reply_preview__content_bar {
81
+ position: absolute;
82
+ top: 0;
83
+ bottom: 0;
84
+ border-radius: 25px;
85
+ }
86
+ .bcc__reply_preview__content {
87
+ grid-column: 2;
88
+ }
89
+ .bcc__reply_preview__content > p {
90
+ margin: 0;
91
+ overflow: hidden;
92
+ display: -webkit-box;
93
+ -webkit-box-orient: vertical;
94
+ -webkit-line-clamp: 1;
95
+ word-break: break-all;
96
+ }
97
+ .bcc__reply_preview__content > .bcc__reply_preview__title {
98
+ margin-bottom: 2px;
99
+ }
100
+ .bcc__reply_preview__thumbnail {
101
+ grid-column: 1;
102
+ width: 2rem;
103
+ height: 2rem;
104
+ align-self: center;
105
+ border-radius: 3px;
106
+ overflow: hidden;
107
+ margin-right: 5px;
108
+ }
109
+ .bcc__reply_preview__thumbnail > img {
110
+ width: 100%;
111
+ height: 100%;
112
+ }
113
+ </style>
@@ -3,127 +3,9 @@ import {
3
3
  CometChatMessageList,
4
4
  } from "@cometchat/chat-uikit-vue";
5
5
  import chat from "../chat";
6
-
7
- defineProps({
8
- hideError: {},
9
- scrollToBottomOnNewMessages: {},
10
- errorStateView: {},
11
- loadingStateView: {},
12
- emptyStateView: {},
13
- state: {},
14
- thresholdValue: {},
15
- errorStateText: {},
16
- emptyStateText: {},
17
- loadingIconURL: {},
18
- user: {},
19
- group: {},
20
- disableReceipt: {},
21
- onError: {},
22
- disableSoundForMessages: {},
23
- customSoundForMessages: {},
24
- readIcon: {},
25
- deliveredIcon: {},
26
- sentIcon: {},
27
- waitIcon: {},
28
- errorIcon: {},
29
- alignment: {},
30
- showAvatar: {},
31
- timestampAlignment: {},
32
- DateSeparatorPattern: {},
33
- templates: {},
34
- messagesRequestBuilder: {},
35
- newMessageIndicatorText: {},
36
- onThreadRepliesClick: {},
37
- headerView: {},
38
- footerView: {},
39
- datePattern: {},
40
- parentMessageId: {},
41
- avatarStyle: {},
42
- dateSeparatorStyle: {},
43
- messageListStyle: {},
44
- messageInformationConfiguration: {},
45
- reactionsConfiguration: {},
46
- disableReactions: {},
47
- emojiKeyboardStyle: {},
48
- threadIndicatorIcon: {},
49
- disableMentions: {},
50
- textFormatters: {}
51
- });
52
6
  </script>
53
7
 
54
8
  <template>
55
- <CometChatMessageList v-if="chat.connected.value"
56
- :hideError="hideError"
57
- :disableSoundForMessages="disableSoundForMessages"
58
- :customSoundForMessages="customSoundForMessages"
59
- :emptyStateView="emptyStateView"
60
- :loadingStateView="loadingStateView"
61
- :user="user"
62
- :group="group"
63
- :errorStateView="errorStateView"
64
- :disableReceipt="disableReceipt"
65
- :readIcon="readIcon"
66
- :deliveredIcon="deliveredIcon"
67
- :sentIcon="sentIcon"
68
- :waitIcon="waitIcon"
69
- :errorIcon="errorIcon"
70
- :alignment="alignment"
71
- :showAvatar="showAvatar"
72
- :datePattern="datePattern"
73
- :timestampAlignment="timestampAlignment"
74
- :DateSeparatorPattern="DateSeparatorPattern"
75
- :templates="templates"
76
- :messagesRequestBuilder="messagesRequestBuilder"
77
- :thresholdValue="thresholdValue"
78
- :onThreadRepliesClick="onThreadRepliesClick"
79
- :headerView="headerView"
80
- :footerView="footerView"
81
- :avatarStyle="avatarStyle"
82
- :dateSeparatorStyle="dateSeparatorStyle"
83
- :messageListStyle="messageListStyle"
84
- :onError="onError"
85
- :reactionsConfiguration="reactionsConfiguration"
86
- :disableReactions="disableReactions"
87
- :emojiKeyboardStyle="emojiKeyboardStyle"
88
- :threadIndicatorIcon="threadIndicatorIcon"
89
- :disableMentions="disableMentions"
90
- :textFormatters="textFormatters"
91
- />
92
- <CometChatMessageList v-else
93
- :hideError="hideError"
94
- :disableSoundForMessages="disableSoundForMessages"
95
- :customSoundForMessages="customSoundForMessages"
96
- :emptyStateView="emptyStateView"
97
- :loadingStateView="loadingStateView"
98
- :user="user"
99
- :group="group"
100
- :errorStateView="errorStateView"
101
- :disableReceipt="disableReceipt"
102
- :readIcon="readIcon"
103
- :deliveredIcon="deliveredIcon"
104
- :sentIcon="sentIcon"
105
- :waitIcon="waitIcon"
106
- :errorIcon="errorIcon"
107
- :alignment="alignment"
108
- :showAvatar="showAvatar"
109
- :datePattern="datePattern"
110
- :timestampAlignment="timestampAlignment"
111
- :DateSeparatorPattern="DateSeparatorPattern"
112
- :templates="templates"
113
- :messagesRequestBuilder="messagesRequestBuilder"
114
- :thresholdValue="thresholdValue"
115
- :onThreadRepliesClick="onThreadRepliesClick"
116
- :headerView="headerView"
117
- :footerView="footerView"
118
- :avatarStyle="avatarStyle"
119
- :dateSeparatorStyle="dateSeparatorStyle"
120
- :messageListStyle="messageListStyle"
121
- :onError="onError"
122
- :reactionsConfiguration="reactionsConfiguration"
123
- :disableReactions="disableReactions"
124
- :emojiKeyboardStyle="emojiKeyboardStyle"
125
- :threadIndicatorIcon="threadIndicatorIcon"
126
- :disableMentions="disableMentions"
127
- :textFormatters="textFormatters"
128
- />
9
+ <CometChatMessageList v-if="chat.connected.value" v-bind="$attrs"/>
10
+ <CometChatMessageList v-else v-bind="$attrs"/>
129
11
  </template>