@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.
Files changed (164) hide show
  1. package/.babelrc +2 -2
  2. package/.editorconfig +16 -0
  3. package/.eslintrc.js +225 -48
  4. package/.husky/pre-commit +4 -0
  5. package/.lintstagedrc.json +6 -0
  6. package/.stylelintrc.js +40 -0
  7. package/CHANGELOG.md +14 -0
  8. package/README.md +8 -8
  9. package/dist/cjs/assets/fonts/iconfont.ttf +0 -0
  10. package/dist/cjs/assets/fonts/iconfont.woff +0 -0
  11. package/dist/cjs/assets/fonts/iconfont.woff2 +0 -0
  12. package/dist/cjs/components/ConversationPreview/ConversationPreviewContent.js +1 -1
  13. package/dist/cjs/components/ConversationPreview/utils.js +1 -1
  14. package/dist/cjs/components/DivWithEdit/WithText.js +1 -1
  15. package/dist/cjs/components/Input/Input.js +1 -1
  16. package/dist/cjs/components/Plugins/index.js +1 -1
  17. package/dist/cjs/components/TUIKit/TUIKit.js +1 -1
  18. package/dist/cjs/components/TUIMessage/utils/emojiMap.js +1 -1
  19. package/dist/cjs/components/TUIMessageInput/TUIMessageInputDefault.js +1 -1
  20. package/dist/cjs/components/TUIMessageInput/hooks/useEmojiPicker.js +1 -1
  21. package/dist/cjs/components/TUIMessageInput/hooks/useMessageInputText.js +1 -1
  22. package/dist/cjs/components/TUIMessageList/TUIMessageList.js +1 -1
  23. package/dist/cjs/components/untils.js +1 -1
  24. package/dist/cjs/context/TUIKitContext.js +1 -1
  25. package/dist/cjs/index.css +2 -1
  26. package/dist/cjs/index.d.css +646 -172
  27. package/dist/cjs/index.d.ts +1 -1
  28. package/dist/cjs/index.js +1 -1
  29. package/dist/cjs/locales/en-US/index.js +1 -0
  30. package/dist/cjs/locales/index.js +1 -1
  31. package/dist/cjs/locales/ja-JP/TUIChat.js +1 -0
  32. package/dist/cjs/locales/ja-JP/TUIContact.js +1 -0
  33. package/dist/cjs/locales/ja-JP/TUIConversation.js +1 -0
  34. package/dist/cjs/locales/ja-JP/TUIProfile.js +1 -0
  35. package/dist/cjs/locales/ja-JP/index.js +1 -0
  36. package/dist/cjs/locales/ko-KR/TUIChat.js +1 -0
  37. package/dist/cjs/locales/ko-KR/TUIContact.js +1 -0
  38. package/dist/cjs/locales/ko-KR/TUIConversation.js +1 -0
  39. package/dist/cjs/locales/ko-KR/TUIProfile.js +1 -0
  40. package/dist/cjs/locales/ko-KR/index.js +1 -0
  41. package/dist/cjs/utils/env.d.ts +4 -3
  42. package/dist/cjs/utils/env.js +1 -1
  43. package/dist/esm/assets/fonts/iconfont.ttf +0 -0
  44. package/dist/esm/assets/fonts/iconfont.woff +0 -0
  45. package/dist/esm/assets/fonts/iconfont.woff2 +0 -0
  46. package/dist/esm/components/ConversationPreview/ConversationPreviewContent.js +1 -1
  47. package/dist/esm/components/ConversationPreview/utils.js +1 -1
  48. package/dist/esm/components/DivWithEdit/WithText.js +1 -1
  49. package/dist/esm/components/Input/Input.js +1 -1
  50. package/dist/esm/components/Plugins/index.js +1 -1
  51. package/dist/esm/components/TUIKit/TUIKit.js +1 -1
  52. package/dist/esm/components/TUIMessage/utils/emojiMap.js +1 -1
  53. package/dist/esm/components/TUIMessageInput/TUIMessageInputDefault.js +1 -1
  54. package/dist/esm/components/TUIMessageInput/hooks/useEmojiPicker.js +1 -1
  55. package/dist/esm/components/TUIMessageInput/hooks/useMessageInputText.js +1 -1
  56. package/dist/esm/components/TUIMessageList/TUIMessageList.js +1 -1
  57. package/dist/esm/components/untils.js +1 -1
  58. package/dist/esm/context/TUIKitContext.js +1 -1
  59. package/dist/esm/index.css +2 -1
  60. package/dist/esm/index.d.css +646 -172
  61. package/dist/esm/index.d.ts +1 -1
  62. package/dist/esm/index.js +1 -1
  63. package/dist/esm/locales/en-US/index.js +1 -0
  64. package/dist/esm/locales/index.js +1 -1
  65. package/dist/esm/locales/ja-JP/TUIChat.js +1 -0
  66. package/dist/esm/locales/ja-JP/TUIContact.js +1 -0
  67. package/dist/esm/locales/ja-JP/TUIConversation.js +1 -0
  68. package/dist/esm/locales/ja-JP/TUIProfile.js +1 -0
  69. package/dist/esm/locales/ja-JP/index.js +1 -0
  70. package/dist/esm/locales/ko-KR/TUIChat.js +1 -0
  71. package/dist/esm/locales/ko-KR/TUIContact.js +1 -0
  72. package/dist/esm/locales/ko-KR/TUIConversation.js +1 -0
  73. package/dist/esm/locales/ko-KR/TUIProfile.js +1 -0
  74. package/dist/esm/locales/ko-KR/index.js +1 -0
  75. package/dist/esm/utils/env.d.ts +4 -3
  76. package/dist/esm/utils/env.js +1 -1
  77. package/package.json +22 -16
  78. package/rollup.config.js +40 -25
  79. package/src/assets/fonts/iconfont.ttf +0 -0
  80. package/src/assets/fonts/iconfont.woff +0 -0
  81. package/src/assets/fonts/iconfont.woff2 +0 -0
  82. package/src/components/ConversationCreate/styles/ConversationCreatGroupDetail.scss +16 -7
  83. package/src/components/ConversationCreate/styles/index.scss +23 -13
  84. package/src/components/ConversationPreview/ConversationPreviewContent.tsx +1 -2
  85. package/src/components/ConversationPreview/styles/index.scss +47 -19
  86. package/src/components/ConversationPreview/utils.tsx +37 -29
  87. package/src/components/DivWithEdit/WithText.tsx +4 -2
  88. package/src/components/Input/Input.tsx +3 -1
  89. package/src/components/Input/styles/index.scss +7 -5
  90. package/src/components/Model/styles/layout.scss +3 -3
  91. package/src/components/Plugins/styles/color.scss +17 -3
  92. package/src/components/Popup/styles/layout.scss +2 -1
  93. package/src/components/TUIChatHeader/styles/layout.scss +13 -2
  94. package/src/components/TUIConversationList/index.scss +26 -9
  95. package/src/components/TUIKit/TUIKit.tsx +4 -3
  96. package/src/components/TUIKit/styles/index.scss +27 -7
  97. package/src/components/TUIManage/styles/index.scss +20 -10
  98. package/src/components/TUIMessage/styles/color.scss +20 -9
  99. package/src/components/TUIMessage/styles/layout.scss +44 -11
  100. package/src/components/TUIMessage/utils/emojiMap.ts +1 -1
  101. package/src/components/TUIMessageInput/TUIMessageInputDefault.tsx +3 -1
  102. package/src/components/TUIMessageInput/hooks/useEmojiPicker.tsx +1 -1
  103. package/src/components/TUIMessageInput/hooks/useMessageInputText.tsx +3 -1
  104. package/src/components/TUIMessageInput/styles/color.scss +25 -6
  105. package/src/components/TUIMessageInput/styles/layout.scss +58 -16
  106. package/src/components/TUIMessageList/TUIMessageList.tsx +17 -10
  107. package/src/components/TUIMessageList/styles/layout.scss +16 -2
  108. package/src/components/TUIProfile/styles/layout.scss +33 -16
  109. package/src/components/untils.ts +13 -17
  110. package/src/context/TUIKitContext.tsx +6 -1
  111. package/src/locales/en-US/TUIGlobal.ts +6 -0
  112. package/src/locales/en-US/index.ts +14 -0
  113. package/src/locales/index.ts +15 -7
  114. package/src/locales/ja-JP/TUIChat.ts +27 -0
  115. package/src/locales/ja-JP/TUIContact.ts +30 -0
  116. package/src/locales/ja-JP/TUIConversation.ts +33 -0
  117. package/src/locales/ja-JP/TUIGlobal.ts +6 -0
  118. package/src/locales/ja-JP/TUIProfile.ts +15 -0
  119. package/src/locales/{en → ja-JP}/index.ts +0 -2
  120. package/src/locales/ko-KR/TUIChat.ts +27 -0
  121. package/src/locales/ko-KR/TUIContact.ts +30 -0
  122. package/src/locales/ko-KR/TUIConversation.ts +33 -0
  123. package/src/locales/ko-KR/TUIGlobal.ts +6 -0
  124. package/src/locales/ko-KR/TUIProfile.ts +15 -0
  125. package/src/locales/ko-KR/index.ts +11 -0
  126. package/src/locales/zh-CN/TUIGlobal.ts +6 -0
  127. package/src/styles/colors/_color-dark.scss +35 -0
  128. package/src/styles/colors/_color-light.scss +35 -0
  129. package/src/styles/colors/_color-theme.scss +54 -0
  130. package/src/styles/fonts/icon-font.scss +18 -0
  131. package/src/styles/index.scss +4 -0
  132. package/src/styles/normalize.scss +355 -0
  133. package/src/utils/env.ts +7 -2
  134. package/tsconfig.json +1 -0
  135. package/dist/cjs/locales/en/index.js +0 -1
  136. package/dist/esm/locales/en/index.js +0 -1
  137. package/src/components/TUIKit/styles/reset.scss +0 -67
  138. /package/dist/cjs/locales/{en → en-US}/TUIChat.js +0 -0
  139. /package/dist/cjs/locales/{en → en-US}/TUIContact.js +0 -0
  140. /package/dist/cjs/locales/{en → en-US}/TUIConversation.js +0 -0
  141. /package/dist/cjs/locales/{en → en-US}/TUIProfile.js +0 -0
  142. /package/dist/cjs/locales/{zh_cn → zh-CN}/TUIChat.js +0 -0
  143. /package/dist/cjs/locales/{zh_cn → zh-CN}/TUIContact.js +0 -0
  144. /package/dist/cjs/locales/{zh_cn → zh-CN}/TUIConversation.js +0 -0
  145. /package/dist/cjs/locales/{zh_cn → zh-CN}/TUIProfile.js +0 -0
  146. /package/dist/cjs/locales/{zh_cn → zh-CN}/index.js +0 -0
  147. /package/dist/esm/locales/{en → en-US}/TUIChat.js +0 -0
  148. /package/dist/esm/locales/{en → en-US}/TUIContact.js +0 -0
  149. /package/dist/esm/locales/{en → en-US}/TUIConversation.js +0 -0
  150. /package/dist/esm/locales/{en → en-US}/TUIProfile.js +0 -0
  151. /package/dist/esm/locales/{zh_cn → zh-CN}/TUIChat.js +0 -0
  152. /package/dist/esm/locales/{zh_cn → zh-CN}/TUIContact.js +0 -0
  153. /package/dist/esm/locales/{zh_cn → zh-CN}/TUIConversation.js +0 -0
  154. /package/dist/esm/locales/{zh_cn → zh-CN}/TUIProfile.js +0 -0
  155. /package/dist/esm/locales/{zh_cn → zh-CN}/index.js +0 -0
  156. /package/src/locales/{en → en-US}/TUIChat.ts +0 -0
  157. /package/src/locales/{en → en-US}/TUIContact.ts +0 -0
  158. /package/src/locales/{en → en-US}/TUIConversation.ts +0 -0
  159. /package/src/locales/{en → en-US}/TUIProfile.ts +0 -0
  160. /package/src/locales/{zh_cn → zh-CN}/TUIChat.ts +0 -0
  161. /package/src/locales/{zh_cn → zh-CN}/TUIContact.ts +0 -0
  162. /package/src/locales/{zh_cn → zh-CN}/TUIConversation.ts +0 -0
  163. /package/src/locales/{zh_cn → zh-CN}/TUIProfile.ts +0 -0
  164. /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
- color: #7A7A7A;
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
- color: #FFFFFF;
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-radius: none;
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
- background: #FFFFFF;
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
- outline: 1px solid #147AFF;
9
+ @include theme() {
10
+ outline: 1px solid get(status-info);
11
+ }
4
12
  }
13
+
5
14
  .input-box {
6
- border: 1px solid #D3DAF3;
7
- background: #FFFFFF;
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
- &:focus, &:active{
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: #F9F9F9;
175
+ background: #f9f9f9;
152
176
  display: flex;
153
177
  align-items: center;
178
+
154
179
  &-content {
155
180
  flex: 1;
156
- background: #FFFFFF;
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: #000000;
190
+ color: #000;
191
+
166
192
  &::before {
167
193
  content: "";
168
194
  position: absolute;
169
195
  width: 6px;
170
196
  height: 100%;
171
- background: #999999;
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: #FFFFFF;
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: #999999;
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, 0.94);
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: #0365F9;
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: #FFFFFF;
322
+ color: #fff;
283
323
  border: none;
284
324
  }
325
+
285
326
  &-name {
286
327
  flex: 1;
287
- overflow : hidden;
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 <T extends MessageListProps>(
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
- || TUIMessageListConfig?.highlightedMessageId
50
- || contextHighlightedMessageId;
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
- element?.scrollIntoView();
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
- element?.scrollIntoView({ block: 'center' });
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
- elements?.length && elements.length > 0 ? elements : <EmptyStateIndicator listType="message" />
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
- color: #999999;
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
  }