@tencentcloud/chat-uikit-react 2.2.3 → 2.2.5
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/.babelrc +2 -2
- package/.editorconfig +16 -0
- package/.eslintrc.js +225 -48
- package/.husky/pre-commit +4 -0
- package/.lintstagedrc.json +6 -0
- package/.stylelintrc.js +40 -0
- package/CHANGELOG.md +14 -0
- package/README.md +8 -8
- package/dist/cjs/assets/fonts/iconfont.ttf +0 -0
- package/dist/cjs/assets/fonts/iconfont.woff +0 -0
- package/dist/cjs/assets/fonts/iconfont.woff2 +0 -0
- package/dist/cjs/components/ConversationPreview/ConversationPreviewContent.js +1 -1
- package/dist/cjs/components/ConversationPreview/utils.js +1 -1
- package/dist/cjs/components/DivWithEdit/WithText.js +1 -1
- package/dist/cjs/components/Input/Input.js +1 -1
- package/dist/cjs/components/Plugins/index.js +1 -1
- package/dist/cjs/components/TUIKit/TUIKit.js +1 -1
- package/dist/cjs/components/TUIMessage/utils/emojiMap.js +1 -1
- package/dist/cjs/components/TUIMessageInput/TUIMessageInputDefault.js +1 -1
- package/dist/cjs/components/TUIMessageInput/hooks/useEmojiPicker.js +1 -1
- package/dist/cjs/components/TUIMessageInput/hooks/useMessageInputText.js +1 -1
- package/dist/cjs/components/TUIMessageList/TUIMessageList.js +1 -1
- package/dist/cjs/components/untils.js +1 -1
- package/dist/cjs/context/TUIKitContext.js +1 -1
- package/dist/cjs/index.css +2 -1
- package/dist/cjs/index.d.css +646 -172
- package/dist/cjs/index.d.ts +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/locales/en-US/index.js +1 -0
- package/dist/cjs/locales/index.js +1 -1
- package/dist/cjs/locales/ja-JP/TUIChat.js +1 -0
- package/dist/cjs/locales/ja-JP/TUIContact.js +1 -0
- package/dist/cjs/locales/ja-JP/TUIConversation.js +1 -0
- package/dist/cjs/locales/ja-JP/TUIProfile.js +1 -0
- package/dist/cjs/locales/ja-JP/index.js +1 -0
- package/dist/cjs/locales/ko-KR/TUIChat.js +1 -0
- package/dist/cjs/locales/ko-KR/TUIContact.js +1 -0
- package/dist/cjs/locales/ko-KR/TUIConversation.js +1 -0
- package/dist/cjs/locales/ko-KR/TUIProfile.js +1 -0
- package/dist/cjs/locales/ko-KR/index.js +1 -0
- package/dist/cjs/utils/env.d.ts +4 -3
- package/dist/cjs/utils/env.js +1 -1
- package/dist/esm/assets/fonts/iconfont.ttf +0 -0
- package/dist/esm/assets/fonts/iconfont.woff +0 -0
- package/dist/esm/assets/fonts/iconfont.woff2 +0 -0
- package/dist/esm/components/ConversationPreview/ConversationPreviewContent.js +1 -1
- package/dist/esm/components/ConversationPreview/utils.js +1 -1
- package/dist/esm/components/DivWithEdit/WithText.js +1 -1
- package/dist/esm/components/Input/Input.js +1 -1
- package/dist/esm/components/Plugins/index.js +1 -1
- package/dist/esm/components/TUIKit/TUIKit.js +1 -1
- package/dist/esm/components/TUIMessage/utils/emojiMap.js +1 -1
- package/dist/esm/components/TUIMessageInput/TUIMessageInputDefault.js +1 -1
- package/dist/esm/components/TUIMessageInput/hooks/useEmojiPicker.js +1 -1
- package/dist/esm/components/TUIMessageInput/hooks/useMessageInputText.js +1 -1
- package/dist/esm/components/TUIMessageList/TUIMessageList.js +1 -1
- package/dist/esm/components/untils.js +1 -1
- package/dist/esm/context/TUIKitContext.js +1 -1
- package/dist/esm/index.css +2 -1
- package/dist/esm/index.d.css +646 -172
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/locales/en-US/index.js +1 -0
- package/dist/esm/locales/index.js +1 -1
- package/dist/esm/locales/ja-JP/TUIChat.js +1 -0
- package/dist/esm/locales/ja-JP/TUIContact.js +1 -0
- package/dist/esm/locales/ja-JP/TUIConversation.js +1 -0
- package/dist/esm/locales/ja-JP/TUIProfile.js +1 -0
- package/dist/esm/locales/ja-JP/index.js +1 -0
- package/dist/esm/locales/ko-KR/TUIChat.js +1 -0
- package/dist/esm/locales/ko-KR/TUIContact.js +1 -0
- package/dist/esm/locales/ko-KR/TUIConversation.js +1 -0
- package/dist/esm/locales/ko-KR/TUIProfile.js +1 -0
- package/dist/esm/locales/ko-KR/index.js +1 -0
- package/dist/esm/utils/env.d.ts +4 -3
- package/dist/esm/utils/env.js +1 -1
- package/package.json +22 -16
- package/rollup.config.js +40 -25
- package/src/assets/fonts/iconfont.ttf +0 -0
- package/src/assets/fonts/iconfont.woff +0 -0
- package/src/assets/fonts/iconfont.woff2 +0 -0
- package/src/components/ConversationCreate/styles/ConversationCreatGroupDetail.scss +16 -7
- package/src/components/ConversationCreate/styles/index.scss +23 -13
- package/src/components/ConversationPreview/ConversationPreviewContent.tsx +1 -2
- package/src/components/ConversationPreview/styles/index.scss +47 -19
- package/src/components/ConversationPreview/utils.tsx +37 -29
- package/src/components/DivWithEdit/WithText.tsx +4 -2
- package/src/components/Input/Input.tsx +3 -1
- package/src/components/Input/styles/index.scss +7 -5
- package/src/components/Model/styles/layout.scss +3 -3
- package/src/components/Plugins/styles/color.scss +17 -3
- package/src/components/Popup/styles/layout.scss +2 -1
- package/src/components/TUIChatHeader/styles/layout.scss +13 -2
- package/src/components/TUIConversationList/index.scss +26 -9
- package/src/components/TUIKit/TUIKit.tsx +4 -3
- package/src/components/TUIKit/styles/index.scss +27 -7
- package/src/components/TUIManage/styles/index.scss +20 -10
- package/src/components/TUIMessage/styles/color.scss +20 -9
- package/src/components/TUIMessage/styles/layout.scss +44 -11
- package/src/components/TUIMessage/utils/emojiMap.ts +1 -1
- package/src/components/TUIMessageInput/TUIMessageInputDefault.tsx +3 -1
- package/src/components/TUIMessageInput/hooks/useEmojiPicker.tsx +1 -1
- package/src/components/TUIMessageInput/hooks/useMessageInputText.tsx +3 -1
- package/src/components/TUIMessageInput/styles/color.scss +25 -6
- package/src/components/TUIMessageInput/styles/layout.scss +58 -16
- package/src/components/TUIMessageList/TUIMessageList.tsx +17 -10
- package/src/components/TUIMessageList/styles/layout.scss +16 -2
- package/src/components/TUIProfile/styles/layout.scss +33 -16
- package/src/components/untils.ts +13 -17
- package/src/context/TUIKitContext.tsx +6 -1
- package/src/locales/en-US/TUIGlobal.ts +6 -0
- package/src/locales/en-US/index.ts +14 -0
- package/src/locales/index.ts +15 -7
- package/src/locales/ja-JP/TUIChat.ts +27 -0
- package/src/locales/ja-JP/TUIContact.ts +30 -0
- package/src/locales/ja-JP/TUIConversation.ts +33 -0
- package/src/locales/ja-JP/TUIGlobal.ts +6 -0
- package/src/locales/ja-JP/TUIProfile.ts +15 -0
- package/src/locales/{en → ja-JP}/index.ts +0 -2
- package/src/locales/ko-KR/TUIChat.ts +27 -0
- package/src/locales/ko-KR/TUIContact.ts +30 -0
- package/src/locales/ko-KR/TUIConversation.ts +33 -0
- package/src/locales/ko-KR/TUIGlobal.ts +6 -0
- package/src/locales/ko-KR/TUIProfile.ts +15 -0
- package/src/locales/ko-KR/index.ts +11 -0
- package/src/locales/zh-CN/TUIGlobal.ts +6 -0
- package/src/styles/colors/_color-dark.scss +35 -0
- package/src/styles/colors/_color-light.scss +35 -0
- package/src/styles/colors/_color-theme.scss +54 -0
- package/src/styles/fonts/icon-font.scss +18 -0
- package/src/styles/index.scss +4 -0
- package/src/styles/normalize.scss +355 -0
- package/src/utils/env.ts +7 -2
- package/tsconfig.json +1 -0
- package/dist/cjs/locales/en/index.js +0 -1
- package/dist/esm/locales/en/index.js +0 -1
- package/src/components/TUIKit/styles/reset.scss +0 -67
- /package/dist/cjs/locales/{en → en-US}/TUIChat.js +0 -0
- /package/dist/cjs/locales/{en → en-US}/TUIContact.js +0 -0
- /package/dist/cjs/locales/{en → en-US}/TUIConversation.js +0 -0
- /package/dist/cjs/locales/{en → en-US}/TUIProfile.js +0 -0
- /package/dist/cjs/locales/{zh_cn → zh-CN}/TUIChat.js +0 -0
- /package/dist/cjs/locales/{zh_cn → zh-CN}/TUIContact.js +0 -0
- /package/dist/cjs/locales/{zh_cn → zh-CN}/TUIConversation.js +0 -0
- /package/dist/cjs/locales/{zh_cn → zh-CN}/TUIProfile.js +0 -0
- /package/dist/cjs/locales/{zh_cn → zh-CN}/index.js +0 -0
- /package/dist/esm/locales/{en → en-US}/TUIChat.js +0 -0
- /package/dist/esm/locales/{en → en-US}/TUIContact.js +0 -0
- /package/dist/esm/locales/{en → en-US}/TUIConversation.js +0 -0
- /package/dist/esm/locales/{en → en-US}/TUIProfile.js +0 -0
- /package/dist/esm/locales/{zh_cn → zh-CN}/TUIChat.js +0 -0
- /package/dist/esm/locales/{zh_cn → zh-CN}/TUIContact.js +0 -0
- /package/dist/esm/locales/{zh_cn → zh-CN}/TUIConversation.js +0 -0
- /package/dist/esm/locales/{zh_cn → zh-CN}/TUIProfile.js +0 -0
- /package/dist/esm/locales/{zh_cn → zh-CN}/index.js +0 -0
- /package/src/locales/{en → en-US}/TUIChat.ts +0 -0
- /package/src/locales/{en → en-US}/TUIContact.ts +0 -0
- /package/src/locales/{en → en-US}/TUIConversation.ts +0 -0
- /package/src/locales/{en → en-US}/TUIProfile.ts +0 -0
- /package/src/locales/{zh_cn → zh-CN}/TUIChat.ts +0 -0
- /package/src/locales/{zh_cn → zh-CN}/TUIContact.ts +0 -0
- /package/src/locales/{zh_cn → zh-CN}/TUIConversation.ts +0 -0
- /package/src/locales/{zh_cn → zh-CN}/TUIProfile.ts +0 -0
- /package/src/locales/{zh_cn → zh-CN}/index.ts +0 -0
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
@use "../../../styles/colors/color-theme" as *;
|
|
2
|
+
|
|
1
3
|
.message-default {
|
|
2
4
|
width: 100%;
|
|
3
5
|
flex: 1;
|
|
@@ -24,6 +26,10 @@
|
|
|
24
26
|
display: inline-block;
|
|
25
27
|
padding-bottom: 3px;
|
|
26
28
|
max-width: 60%;
|
|
29
|
+
|
|
30
|
+
@include theme() {
|
|
31
|
+
color: get(text-primary);
|
|
32
|
+
}
|
|
27
33
|
}
|
|
28
34
|
}
|
|
29
35
|
}
|
|
@@ -80,7 +86,10 @@
|
|
|
80
86
|
font-family: PingFangSC-Medium;
|
|
81
87
|
line-height: 14px;
|
|
82
88
|
text-align: right;
|
|
83
|
-
|
|
89
|
+
|
|
90
|
+
@include theme() {
|
|
91
|
+
color: get(text-secondary);
|
|
92
|
+
}
|
|
84
93
|
}
|
|
85
94
|
}
|
|
86
95
|
|
|
@@ -91,7 +100,9 @@
|
|
|
91
100
|
bottom: 10px;
|
|
92
101
|
right: 10px;
|
|
93
102
|
.time {
|
|
94
|
-
|
|
103
|
+
@include theme() {
|
|
104
|
+
color: get(text-primary);
|
|
105
|
+
}
|
|
95
106
|
}
|
|
96
107
|
}
|
|
97
108
|
}
|
|
@@ -110,6 +121,10 @@
|
|
|
110
121
|
white-space: pre-wrap;
|
|
111
122
|
display: inline;
|
|
112
123
|
vertical-align: middle;
|
|
124
|
+
|
|
125
|
+
@include theme() {
|
|
126
|
+
color: get(text-primary);
|
|
127
|
+
}
|
|
113
128
|
}
|
|
114
129
|
.message-status {
|
|
115
130
|
display: inline-flex;
|
|
@@ -232,46 +247,64 @@
|
|
|
232
247
|
}
|
|
233
248
|
|
|
234
249
|
.meesage-bubble-reply {
|
|
235
|
-
background: #ECEBEB;
|
|
236
250
|
padding: 8px 16px;
|
|
251
|
+
|
|
252
|
+
@include theme() {
|
|
253
|
+
background-color: get(bg-secondary);
|
|
254
|
+
}
|
|
255
|
+
|
|
237
256
|
&-in {
|
|
238
257
|
border-radius: 16px 16px 16px 0;
|
|
239
258
|
}
|
|
259
|
+
|
|
240
260
|
&-out {
|
|
241
261
|
border-radius: 16px 16px 0px 16px;
|
|
242
262
|
}
|
|
263
|
+
|
|
243
264
|
.message-text {
|
|
244
|
-
border
|
|
245
|
-
border: none;
|
|
265
|
+
border: none !important;
|
|
246
266
|
}
|
|
267
|
+
|
|
247
268
|
.bubble {
|
|
248
269
|
padding: 0;
|
|
270
|
+
|
|
249
271
|
&-in {
|
|
250
272
|
border-radius: 0;
|
|
251
273
|
}
|
|
252
274
|
}
|
|
275
|
+
|
|
253
276
|
&-main {
|
|
254
277
|
position: relative;
|
|
255
278
|
padding: 10px 14px;
|
|
256
279
|
margin-bottom: 10px;
|
|
257
|
-
|
|
280
|
+
|
|
281
|
+
@include theme() {
|
|
282
|
+
background-color: get(bg-primary);
|
|
283
|
+
}
|
|
284
|
+
|
|
258
285
|
&::before {
|
|
259
286
|
content: "";
|
|
260
287
|
position: absolute;
|
|
261
288
|
width: 6px;
|
|
262
289
|
height: 100%;
|
|
263
|
-
background: #D9D9D9;
|
|
264
290
|
top: 0;
|
|
265
291
|
left: 0;
|
|
292
|
+
|
|
293
|
+
@include theme() {
|
|
294
|
+
background-color: get(bg-5);
|
|
295
|
+
}
|
|
266
296
|
}
|
|
297
|
+
|
|
267
298
|
.title {
|
|
268
|
-
font-family: PingFangSC-Medium;
|
|
269
|
-
font-style: normal;
|
|
270
299
|
font-weight: 500;
|
|
271
300
|
font-size: 14px;
|
|
272
|
-
line-height: 17px;
|
|
273
301
|
padding-bottom: 10px;
|
|
302
|
+
|
|
303
|
+
@include theme() {
|
|
304
|
+
color: get(text-primary);
|
|
305
|
+
}
|
|
274
306
|
}
|
|
307
|
+
|
|
275
308
|
.message-context {
|
|
276
309
|
opacity: 0.6;
|
|
277
310
|
}
|
|
@@ -504,4 +537,4 @@
|
|
|
504
537
|
|
|
505
538
|
.website {
|
|
506
539
|
color: #147aff !important;
|
|
507
|
-
}
|
|
540
|
+
}
|
|
@@ -468,7 +468,7 @@ export function formatEmojiString(data: string, type = 0, language?: string) {
|
|
|
468
468
|
};
|
|
469
469
|
Object.entries(emojiEnKey).map((item) => {
|
|
470
470
|
if (text.includes(item[replace.key])) {
|
|
471
|
-
if (language && language === 'zh') {
|
|
471
|
+
if (language && language === 'zh-CN') {
|
|
472
472
|
text = item[replace.key];
|
|
473
473
|
} else {
|
|
474
474
|
text = transText(text, item[replace.key], item[replace.value]);
|
|
@@ -34,7 +34,9 @@ export function TUIMessageInputDefault():React.ReactElement {
|
|
|
34
34
|
useEffect(() => {
|
|
35
35
|
if (focus && textareaRef && textareaRef.current) {
|
|
36
36
|
textareaRef.current.autofocus = true;
|
|
37
|
-
isPC && textareaRef?.current?.focus(
|
|
37
|
+
isPC && textareaRef?.current?.focus({
|
|
38
|
+
preventScroll: true,
|
|
39
|
+
});
|
|
38
40
|
// eslint-disable-next-line
|
|
39
41
|
// @ts-ignore
|
|
40
42
|
textareaRef?.current?.addEventListener('paste', handlePasete);
|
|
@@ -27,7 +27,7 @@ export function useEmojiPicker<T extends useEmojiPickerProps>(props:PropsWithChi
|
|
|
27
27
|
const { i18n } = useTranslation();
|
|
28
28
|
|
|
29
29
|
const onSelectEmoji = (emoji:EmojiData) => {
|
|
30
|
-
if (i18n.language === 'zh') {
|
|
30
|
+
if (i18n.language === 'zh-CN') {
|
|
31
31
|
insertText && insertText(emoji.data);
|
|
32
32
|
} else {
|
|
33
33
|
insertText && insertText(emojiEnKey[emoji.data]);
|
|
@@ -147,7 +147,9 @@ export const useMessageInputText = (props:useMessageInputTextProps) => {
|
|
|
147
147
|
end: state?.cursorPos?.end && state.cursorPos.end + textToInsert.length,
|
|
148
148
|
},
|
|
149
149
|
});
|
|
150
|
-
textareaRef?.current?.focus(
|
|
150
|
+
textareaRef?.current?.focus({
|
|
151
|
+
preventScroll: true,
|
|
152
|
+
});
|
|
151
153
|
},
|
|
152
154
|
[textareaRef, state],
|
|
153
155
|
);
|
|
@@ -1,17 +1,36 @@
|
|
|
1
|
+
@use "../../../styles/colors/color-theme" as *;
|
|
2
|
+
|
|
1
3
|
.tui-message-input {
|
|
4
|
+
@include theme() {
|
|
5
|
+
background-color: get(bg-primary);
|
|
6
|
+
}
|
|
7
|
+
|
|
2
8
|
.tui-kit-input-box--focus {
|
|
3
|
-
|
|
9
|
+
@include theme() {
|
|
10
|
+
outline: 1px solid get(status-info);
|
|
11
|
+
}
|
|
4
12
|
}
|
|
13
|
+
|
|
5
14
|
.input-box {
|
|
6
|
-
|
|
7
|
-
|
|
15
|
+
@include theme() {
|
|
16
|
+
background-color: get(bg-primary);
|
|
17
|
+
border: 1px solid get(border-5);
|
|
18
|
+
}
|
|
8
19
|
}
|
|
9
20
|
}
|
|
10
21
|
|
|
11
22
|
.input-plugin-popup {
|
|
12
23
|
&-box {
|
|
13
|
-
background: #FFFFFF;
|
|
14
|
-
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.25);
|
|
15
24
|
border-radius: 16px;
|
|
25
|
+
|
|
26
|
+
[data-chat-theme="light"] & {
|
|
27
|
+
background-color: var(--chat-theme-light-bg-primary);
|
|
28
|
+
box-shadow: var(--chat-theme-light-box-shadow-1);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
[data-chat-theme="dark"] & {
|
|
32
|
+
background-color: var(--chat-theme-dark-bg-3);
|
|
33
|
+
box-shadow: var(--chat-theme-dark-box-shadow-1);
|
|
34
|
+
}
|
|
16
35
|
}
|
|
17
|
-
}
|
|
36
|
+
}
|
|
@@ -1,24 +1,29 @@
|
|
|
1
|
+
@use "../../../styles/colors/color-theme" as *;
|
|
2
|
+
|
|
1
3
|
// message input styles
|
|
2
4
|
.tui-message-input {
|
|
3
5
|
display: flex;
|
|
4
6
|
flex-direction: column;
|
|
7
|
+
|
|
5
8
|
&-main {
|
|
6
9
|
flex: 1;
|
|
7
10
|
display: flex;
|
|
8
11
|
align-items: center;
|
|
9
12
|
padding: 14px 12px;
|
|
10
13
|
gap: 12px;
|
|
14
|
+
|
|
11
15
|
.input-box {
|
|
12
16
|
flex: 1;
|
|
13
17
|
display: flex;
|
|
14
|
-
padding: 0 8px;
|
|
15
18
|
position: relative;
|
|
16
19
|
min-height: 20px;
|
|
17
20
|
max-height: 200px;
|
|
18
21
|
border-radius: 15px;
|
|
19
22
|
overflow: hidden;
|
|
20
23
|
padding: 10px;
|
|
24
|
+
|
|
21
25
|
.input-visibility-content {
|
|
26
|
+
min-height: 20px;
|
|
22
27
|
word-break: break-all;
|
|
23
28
|
visibility: hidden;
|
|
24
29
|
max-width: -webkit-fill-available;
|
|
@@ -29,6 +34,7 @@
|
|
|
29
34
|
line-height: 17px;
|
|
30
35
|
padding: 1px 2px;
|
|
31
36
|
}
|
|
37
|
+
|
|
32
38
|
textarea {
|
|
33
39
|
position: absolute;
|
|
34
40
|
top: 0;
|
|
@@ -45,17 +51,24 @@
|
|
|
45
51
|
resize: none;
|
|
46
52
|
border: none;
|
|
47
53
|
background: none;
|
|
48
|
-
|
|
54
|
+
|
|
55
|
+
@include theme() {
|
|
56
|
+
color: get(text-primary);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
&:focus,
|
|
60
|
+
&:active {
|
|
49
61
|
border: none;
|
|
50
62
|
outline: none;
|
|
51
63
|
}
|
|
52
64
|
}
|
|
53
65
|
}
|
|
54
|
-
|
|
66
|
+
|
|
55
67
|
.disabled {
|
|
56
68
|
display: none;
|
|
57
69
|
}
|
|
58
70
|
}
|
|
71
|
+
|
|
59
72
|
&-box {
|
|
60
73
|
flex: 1;
|
|
61
74
|
display: flex;
|
|
@@ -69,12 +82,14 @@ ul li {
|
|
|
69
82
|
|
|
70
83
|
.input-plugin-popup {
|
|
71
84
|
position: relative;
|
|
85
|
+
|
|
72
86
|
&-box {
|
|
73
87
|
position: absolute;
|
|
74
88
|
z-index: 2;
|
|
75
89
|
bottom: 30px;
|
|
76
90
|
}
|
|
77
91
|
}
|
|
92
|
+
|
|
78
93
|
.input-plugin-item {
|
|
79
94
|
font-style: normal;
|
|
80
95
|
font-weight: 500;
|
|
@@ -82,12 +97,12 @@ ul li {
|
|
|
82
97
|
font-family: PingFangSC-Medium;
|
|
83
98
|
line-height: 19px;
|
|
84
99
|
display: flex;
|
|
100
|
+
|
|
85
101
|
span {
|
|
86
102
|
padding: 0 17px;
|
|
87
103
|
}
|
|
88
104
|
}
|
|
89
105
|
|
|
90
|
-
|
|
91
106
|
// emoji picker styles
|
|
92
107
|
.emoji-picker {
|
|
93
108
|
.face-list {
|
|
@@ -97,44 +112,53 @@ ul li {
|
|
|
97
112
|
display: flex;
|
|
98
113
|
flex-wrap: wrap;
|
|
99
114
|
overflow-y: auto;
|
|
115
|
+
|
|
100
116
|
&-item {
|
|
101
117
|
padding: 5px;
|
|
102
118
|
cursor: pointer;
|
|
119
|
+
user-select: none;
|
|
120
|
+
|
|
103
121
|
img {
|
|
104
122
|
width: 20px;
|
|
105
123
|
}
|
|
124
|
+
|
|
106
125
|
.face-img {
|
|
107
126
|
width: 38px;
|
|
108
127
|
}
|
|
109
128
|
}
|
|
110
129
|
}
|
|
130
|
+
|
|
111
131
|
.face-tab {
|
|
112
132
|
display: flex;
|
|
113
133
|
align-items: center;
|
|
114
134
|
min-width: 265px;
|
|
135
|
+
|
|
115
136
|
&-item {
|
|
116
137
|
cursor: pointer;
|
|
117
138
|
width: 24px;
|
|
118
139
|
padding: 10px;
|
|
140
|
+
|
|
119
141
|
img {
|
|
120
142
|
width: 100%;
|
|
121
143
|
}
|
|
122
144
|
}
|
|
123
145
|
}
|
|
146
|
+
|
|
124
147
|
.emoji-plugin-right {
|
|
125
148
|
right: 0;
|
|
126
149
|
}
|
|
127
150
|
}
|
|
128
151
|
|
|
129
|
-
|
|
130
152
|
// upload styles
|
|
131
153
|
.upload-picker {
|
|
132
154
|
position: relative;
|
|
133
155
|
padding: 10px 16px;
|
|
134
156
|
min-width: 180px;
|
|
157
|
+
|
|
135
158
|
&:hover {
|
|
136
159
|
color: #147aff;
|
|
137
160
|
}
|
|
161
|
+
|
|
138
162
|
input {
|
|
139
163
|
position: absolute;
|
|
140
164
|
cursor: pointer;
|
|
@@ -148,12 +172,13 @@ ul li {
|
|
|
148
172
|
|
|
149
173
|
.input-quote {
|
|
150
174
|
padding: 7px 16px;
|
|
151
|
-
background: #
|
|
175
|
+
background: #f9f9f9;
|
|
152
176
|
display: flex;
|
|
153
177
|
align-items: center;
|
|
178
|
+
|
|
154
179
|
&-content {
|
|
155
180
|
flex: 1;
|
|
156
|
-
background: #
|
|
181
|
+
background: #fff;
|
|
157
182
|
padding: 2px 14px;
|
|
158
183
|
position: relative;
|
|
159
184
|
display: flex;
|
|
@@ -162,21 +187,24 @@ ul li {
|
|
|
162
187
|
font-size: 14px;
|
|
163
188
|
font-family: PingFangSC-Medium;
|
|
164
189
|
line-height: 17px;
|
|
165
|
-
color: #
|
|
190
|
+
color: #000;
|
|
191
|
+
|
|
166
192
|
&::before {
|
|
167
193
|
content: "";
|
|
168
194
|
position: absolute;
|
|
169
195
|
width: 6px;
|
|
170
196
|
height: 100%;
|
|
171
|
-
background: #
|
|
197
|
+
background: #999;
|
|
172
198
|
top: 0;
|
|
173
199
|
left: 0;
|
|
174
200
|
}
|
|
201
|
+
|
|
175
202
|
span {
|
|
176
203
|
padding-top: 8px;
|
|
177
204
|
opacity: 0.6;
|
|
178
205
|
}
|
|
179
206
|
}
|
|
207
|
+
|
|
180
208
|
.icon {
|
|
181
209
|
margin: 0 5px 0 16px;
|
|
182
210
|
}
|
|
@@ -184,18 +212,20 @@ ul li {
|
|
|
184
212
|
|
|
185
213
|
// TUIForward
|
|
186
214
|
.tui-forward {
|
|
187
|
-
background: #
|
|
215
|
+
background: #fff;
|
|
188
216
|
border-radius: 16px;
|
|
189
217
|
display: flex;
|
|
190
218
|
flex-direction: column;
|
|
191
219
|
overflow: hidden;
|
|
192
220
|
width: 300px;
|
|
193
221
|
max-height: 90%;
|
|
222
|
+
|
|
194
223
|
&-header {
|
|
195
224
|
display: flex;
|
|
196
225
|
align-items: center;
|
|
197
226
|
padding: 24px 20px;
|
|
198
227
|
}
|
|
228
|
+
|
|
199
229
|
&-title {
|
|
200
230
|
padding: 0 16px;
|
|
201
231
|
font-family: PingFangSC-Medium;
|
|
@@ -204,10 +234,12 @@ ul li {
|
|
|
204
234
|
font-size: 14px;
|
|
205
235
|
line-height: 17px;
|
|
206
236
|
}
|
|
237
|
+
|
|
207
238
|
&-main {
|
|
208
239
|
padding: 0 20px;
|
|
209
240
|
max-height: calc(100vh - 200px);
|
|
210
241
|
overflow-y: auto;
|
|
242
|
+
|
|
211
243
|
.no-result {
|
|
212
244
|
font-family: PingFangSC-Medium;
|
|
213
245
|
font-size: 14px;
|
|
@@ -215,14 +247,17 @@ ul li {
|
|
|
215
247
|
line-height: 20px;
|
|
216
248
|
padding: 10px;
|
|
217
249
|
text-align: center;
|
|
218
|
-
color: #
|
|
250
|
+
color: #999;
|
|
219
251
|
}
|
|
220
252
|
}
|
|
253
|
+
|
|
221
254
|
&-search {
|
|
222
255
|
padding: 10px 15px;
|
|
223
256
|
}
|
|
257
|
+
|
|
224
258
|
&-list {
|
|
225
259
|
padding: 13px 0;
|
|
260
|
+
|
|
226
261
|
&-title {
|
|
227
262
|
font-family: PingFangSC-Medium;
|
|
228
263
|
font-style: normal;
|
|
@@ -230,6 +265,7 @@ ul li {
|
|
|
230
265
|
font-size: 14px;
|
|
231
266
|
line-height: 20px;
|
|
232
267
|
}
|
|
268
|
+
|
|
233
269
|
&-item {
|
|
234
270
|
padding: 6px 0;
|
|
235
271
|
font-family: PingFangSC-Medium;
|
|
@@ -241,11 +277,13 @@ ul li {
|
|
|
241
277
|
justify-content: space-between;
|
|
242
278
|
align-items: center;
|
|
243
279
|
width: 100%;
|
|
280
|
+
|
|
244
281
|
.info {
|
|
245
282
|
display: flex;
|
|
246
283
|
align-items: center;
|
|
247
284
|
flex-shrink: 0;
|
|
248
285
|
width: 100%;
|
|
286
|
+
|
|
249
287
|
&-nick {
|
|
250
288
|
padding: 0 13px;
|
|
251
289
|
font-family: PingFangSC-Medium;
|
|
@@ -263,15 +301,17 @@ ul li {
|
|
|
263
301
|
}
|
|
264
302
|
}
|
|
265
303
|
}
|
|
304
|
+
|
|
266
305
|
&-footer {
|
|
267
|
-
background: rgba(249, 249, 249,
|
|
306
|
+
background: rgba(249, 249, 249, 94%);
|
|
268
307
|
padding: 13px 10px;
|
|
269
308
|
display: flex;
|
|
270
309
|
justify-content: space-between;
|
|
271
310
|
align-items: center;
|
|
311
|
+
|
|
272
312
|
.button {
|
|
273
313
|
cursor: pointer;
|
|
274
|
-
background: #
|
|
314
|
+
background: #0365f9;
|
|
275
315
|
border-radius: 31px;
|
|
276
316
|
padding: 10px 21px;
|
|
277
317
|
font-family: PingFangSC-Medium;
|
|
@@ -279,12 +319,13 @@ ul li {
|
|
|
279
319
|
font-weight: 400;
|
|
280
320
|
font-size: 14px;
|
|
281
321
|
line-height: 20px;
|
|
282
|
-
color: #
|
|
322
|
+
color: #fff;
|
|
283
323
|
border: none;
|
|
284
324
|
}
|
|
325
|
+
|
|
285
326
|
&-name {
|
|
286
327
|
flex: 1;
|
|
287
|
-
overflow
|
|
328
|
+
overflow: hidden;
|
|
288
329
|
word-break: break-all;
|
|
289
330
|
text-overflow: ellipsis;
|
|
290
331
|
display: -webkit-box;
|
|
@@ -296,7 +337,8 @@ ul li {
|
|
|
296
337
|
|
|
297
338
|
.transmitter {
|
|
298
339
|
padding: 0 10px;
|
|
340
|
+
|
|
299
341
|
.icon-send {
|
|
300
342
|
transform: rotate(90deg);
|
|
301
343
|
}
|
|
302
|
-
}
|
|
344
|
+
}
|
|
@@ -20,9 +20,9 @@ export interface MessageListProps extends InfiniteScrollProps {
|
|
|
20
20
|
highlightedMessageId?: string,
|
|
21
21
|
intervalsTimer?: number,
|
|
22
22
|
}
|
|
23
|
-
function TUIMessageListWithContext
|
|
23
|
+
function TUIMessageListWithContext<T extends MessageListProps>(
|
|
24
24
|
props: PropsWithChildren<T>,
|
|
25
|
-
):React.ReactElement {
|
|
25
|
+
): React.ReactElement {
|
|
26
26
|
const {
|
|
27
27
|
highlightedMessageId: propsHighlightedMessageId,
|
|
28
28
|
loadMore: propsLoadMore,
|
|
@@ -46,8 +46,8 @@ function TUIMessageListWithContext <T extends MessageListProps>(
|
|
|
46
46
|
const { TUIMessage, EmptyStateIndicator = DefaultEmptyStateIndicator } = useComponentContext('TUIMessageList');
|
|
47
47
|
|
|
48
48
|
const highlightedMessageId = propsHighlightedMessageId
|
|
49
|
-
|
|
50
|
-
|
|
49
|
+
|| TUIMessageListConfig?.highlightedMessageId
|
|
50
|
+
|| contextHighlightedMessageId;
|
|
51
51
|
|
|
52
52
|
const intervalsTimer = (propsIntervalsTimer || TUIMessageListConfig?.intervalsTimer || 30) * 60;
|
|
53
53
|
|
|
@@ -71,7 +71,9 @@ function TUIMessageListWithContext <T extends MessageListProps>(
|
|
|
71
71
|
const HTMLCollection = ulElement?.children || [];
|
|
72
72
|
const element = HTMLCollection[HTMLCollection.length - 1];
|
|
73
73
|
const timer = setTimeout(() => {
|
|
74
|
-
|
|
74
|
+
if (messageListRef?.current) {
|
|
75
|
+
messageListRef.current.scrollTop = messageListRef.current.scrollHeight;
|
|
76
|
+
}
|
|
75
77
|
setFirstRender(true);
|
|
76
78
|
clearTimeout(timer);
|
|
77
79
|
}, 100);
|
|
@@ -87,7 +89,12 @@ function TUIMessageListWithContext <T extends MessageListProps>(
|
|
|
87
89
|
}
|
|
88
90
|
const { children } = element;
|
|
89
91
|
children[children.length - 1].classList.add('high-lighted');
|
|
90
|
-
|
|
92
|
+
if (messageListRef?.current) {
|
|
93
|
+
const highlightedMessageRect = element.getBoundingClientRect();
|
|
94
|
+
const messageListRect = messageListRef.current.getBoundingClientRect();
|
|
95
|
+
const finalScrollTop = highlightedMessageRect.top - messageListRect.top + messageListRef.current.scrollTop;
|
|
96
|
+
messageListRef.current.scrollTop = finalScrollTop;
|
|
97
|
+
}
|
|
91
98
|
const timer = setTimeout(() => {
|
|
92
99
|
children[children.length - 1].classList.remove('high-lighted');
|
|
93
100
|
clearTimeout(timer);
|
|
@@ -108,8 +115,8 @@ function TUIMessageListWithContext <T extends MessageListProps>(
|
|
|
108
115
|
>
|
|
109
116
|
<ul ref={setUlElement}>
|
|
110
117
|
{
|
|
111
|
-
|
|
112
|
-
|
|
118
|
+
elements?.length && elements.length > 0 ? elements : <EmptyStateIndicator listType="message" />
|
|
119
|
+
}
|
|
113
120
|
</ul>
|
|
114
121
|
</InfiniteScroll>
|
|
115
122
|
</div>
|
|
@@ -117,9 +124,9 @@ function TUIMessageListWithContext <T extends MessageListProps>(
|
|
|
117
124
|
}
|
|
118
125
|
|
|
119
126
|
const MemoizedTUIMessageListContext = React.memo(TUIMessageListWithContext) as
|
|
120
|
-
typeof TUIMessageListWithContext;
|
|
127
|
+
typeof TUIMessageListWithContext;
|
|
121
128
|
|
|
122
|
-
export function TUIMessageList(props:MessageListProps):React.ReactElement {
|
|
129
|
+
export function TUIMessageList(props: MessageListProps): React.ReactElement {
|
|
123
130
|
return (
|
|
124
131
|
<MemoizedTUIMessageListContext {...props} />
|
|
125
132
|
);
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
@use "../../../styles/colors/color-theme" as *;
|
|
2
|
+
|
|
1
3
|
ul,li,div,p,label,span {
|
|
2
4
|
margin: 0;
|
|
3
5
|
padding: 0;
|
|
@@ -12,6 +14,11 @@ ul li {
|
|
|
12
14
|
overflow-y: auto;
|
|
13
15
|
position: relative;
|
|
14
16
|
padding: 0 20px;
|
|
17
|
+
|
|
18
|
+
@include theme() {
|
|
19
|
+
background-color: get(bg-primary);
|
|
20
|
+
}
|
|
21
|
+
|
|
15
22
|
&.hide {
|
|
16
23
|
opacity: 0;
|
|
17
24
|
}
|
|
@@ -26,15 +33,22 @@ ul li {
|
|
|
26
33
|
font-style: normal;
|
|
27
34
|
font-weight: 500;
|
|
28
35
|
line-height: 17px;
|
|
29
|
-
|
|
36
|
+
|
|
37
|
+
@include theme() {
|
|
38
|
+
color: get(text-secondary);
|
|
39
|
+
}
|
|
40
|
+
|
|
30
41
|
}
|
|
31
42
|
&-time {
|
|
32
|
-
color: #7a7a7a;
|
|
33
43
|
font-family: PingFangSC-Medium;
|
|
34
44
|
font-size: 12px;
|
|
35
45
|
font-weight: 400;
|
|
36
46
|
line-height: 14px;
|
|
37
47
|
padding: 10px;
|
|
38
48
|
text-align: center;
|
|
49
|
+
|
|
50
|
+
@include theme() {
|
|
51
|
+
color: get(text-secondary);
|
|
52
|
+
}
|
|
39
53
|
}
|
|
40
54
|
}
|