tuikit-atomicx-vue3 3.3.0-beta.3 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (243) hide show
  1. package/dist/AttachmentPicker.module-BesmtGyl.js +11 -0
  2. package/dist/FilePicker.vue_vue_type_script_setup_true_lang-CdJ4DUzE.js +76 -0
  3. package/dist/ImagePicker.vue_vue_type_script_setup_true_lang-CbNUofpK.js +76 -0
  4. package/dist/{MessageInput.vue_vue_type_script_setup_true_lang-XRL7A5Gj.js → MessageInput.vue_vue_type_script_setup_true_lang-wUJPjWbx.js} +23 -18
  5. package/dist/VideoPicker.vue_vue_type_script_setup_true_lang-CmxjbNDJ.js +76 -0
  6. package/dist/chat/index.d.ts +3747 -2386
  7. package/dist/chat/index.js +12 -11
  8. package/dist/components/BarrageInput/BarrageInputH5.js +32 -8
  9. package/dist/components/BarrageInput/EmojiPicker/EmojiPicker.js +9 -5
  10. package/dist/components/BarrageInput/TextEditor/index.js +14 -6
  11. package/dist/components/BarrageList/Message/GroupTipMessage/GroupTipMessage.vue.d.ts +4 -4
  12. package/dist/components/BarrageList/Message/TextMessage/TextMessage.js +12 -4
  13. package/dist/components/BarrageList/i18n/en-US/index.d.ts +1 -0
  14. package/dist/components/BarrageList/i18n/en-US/index.js +2 -1
  15. package/dist/components/BarrageList/i18n/zh-CN/index.d.ts +1 -0
  16. package/dist/components/BarrageList/i18n/zh-CN/index.js +2 -1
  17. package/dist/components/ChatSetting/GroupChatSetting/GroupActions/GroupActions.js +5 -3
  18. package/dist/components/ChatSetting/GroupChatSetting/GroupChatSetting.js +3 -3
  19. package/dist/components/ChatSetting/GroupChatSetting/GroupInfo/GroupInfo.js +3 -3
  20. package/dist/components/ChatSetting/GroupChatSetting/GroupManagement/GroupManagement.js +3 -3
  21. package/dist/components/ChatSetting/GroupChatSetting/GroupMembers/GroupMembers.js +3 -3
  22. package/dist/components/ChatSetting/SettingItem/SettingItem.js +21 -21
  23. package/dist/components/ChatSetting/i18n/en-US.js +3 -3
  24. package/dist/components/ChatSetting/i18n/zh-CN.js +3 -3
  25. package/dist/components/ChatSetting/index.d.ts +1 -4
  26. package/dist/components/ChatSetting/index.js +3 -6
  27. package/dist/components/CoGuestPanel/CoGuestPanel.js +1 -1
  28. package/dist/components/ContactList/ContactInfo/ContactInfo.js +17 -17
  29. package/dist/components/ContactList/ContactInfo/ContactInfo.vue.d.ts +26 -2
  30. package/dist/components/ContactList/ContactInfo/GroupInfo/GroupInfo.js +2 -1
  31. package/dist/components/ContactList/ContactList.js +19 -10
  32. package/dist/components/ContactList/ContactList.vue.d.ts +109 -1
  33. package/dist/components/ContactList/index.d.ts +158 -26
  34. package/dist/components/ConversationList/ConversationActions/ConversationActions.js +8 -9
  35. package/dist/components/ConversationList/ConversationCreate/ConversationCreate.js +2 -1
  36. package/dist/components/ConversationList/ConversationCreate/ConversationCreateGroupDetail/ConversationCreateGroupDetail.js +8 -8
  37. package/dist/components/ConversationList/ConversationCreate/ConversationCreateUserSelectList/ConversationCreateUserSelectList.js +1 -2
  38. package/dist/components/ConversationList/ConversationCreate/ConversationGroupTypeInfo/ConversationGroupTypeInfo.js +8 -8
  39. package/dist/components/ConversationList/ConversationList.js +18 -44
  40. package/dist/components/ConversationList/ConversationList.vue.d.ts +197 -1535
  41. package/dist/components/ConversationList/ConversationListContent/ConversationListContent.js +8 -11
  42. package/dist/components/ConversationList/ConversationListContent/ConversationListContent.vue.d.ts +22 -340
  43. package/dist/components/ConversationList/ConversationPreview/ConversationPreview.vue.d.ts +80 -134
  44. package/dist/components/ConversationList/ConversationPreview/ConversationPreviewAbstract.js +14 -14
  45. package/dist/components/ConversationList/ConversationPreview/ConversationPreviewTimestamp.js +14 -14
  46. package/dist/components/ConversationList/ConversationPreview/ConversationPreviewTitle.js +19 -30
  47. package/dist/components/ConversationList/ConversationPreview/ConversationPreviewTitle.vue.d.ts +0 -2
  48. package/dist/components/ConversationList/ConversationPreview/ConversationPreviewUI.js +14 -15
  49. package/dist/components/ConversationList/ConversationPreview/ConversationPreviewUI.vue.d.ts +12 -24
  50. package/dist/components/ConversationList/ConversationPreview/ConversationPreviewUnread.js +14 -14
  51. package/dist/components/ConversationList/ConversationPreview/index.d.ts +1 -1
  52. package/dist/components/ConversationList/ConversationPreview/index.js +17 -21
  53. package/dist/components/ConversationList/ConversationSearch/ConversationSearch.js +1 -0
  54. package/dist/components/ConversationList/index.d.ts +468 -2400
  55. package/dist/components/ConversationList/index.js +1 -1
  56. package/dist/components/LiveCoreView/index.js +113 -58
  57. package/dist/components/LiveCoreView/index.vue.d.ts +9 -0
  58. package/dist/components/LiveList/LiveList.js +7 -5
  59. package/dist/components/LiveList/LiveListH5.js +77 -71
  60. package/dist/components/LiveList/i18n/en-US/index.d.ts +5 -0
  61. package/dist/components/LiveList/i18n/en-US/index.js +6 -1
  62. package/dist/components/LiveList/i18n/zh-CN/index.d.ts +5 -0
  63. package/dist/components/LiveList/i18n/zh-CN/index.js +6 -1
  64. package/dist/components/LiveList/pullToRefresh.js +204 -0
  65. package/dist/components/LiveList/pullToRefresh.vue.d.ts +86 -0
  66. package/dist/components/LiveScenePanel/CameraSettingDialog.js +6 -5
  67. package/dist/components/LiveScenePanel/index.js +3 -3
  68. package/dist/components/MessageInput/AttachmentPicker/AttachmentPicker.vue.d.ts +0 -4
  69. package/dist/components/MessageInput/AttachmentPicker/FilePicker.js +1 -1
  70. package/dist/components/MessageInput/AttachmentPicker/ImagePicker.js +1 -1
  71. package/dist/components/MessageInput/AttachmentPicker/VideoPicker.js +1 -1
  72. package/dist/components/MessageInput/AttachmentPicker/index.js +14 -19
  73. package/dist/components/MessageInput/EmojiPicker/EmojiPicker.js +3 -3
  74. package/dist/components/MessageInput/MessageInput.js +1 -1
  75. package/dist/components/MessageInput/MessageInput.vue.d.ts +6 -9
  76. package/dist/components/MessageInput/TextEditor/TextEditor.vue.d.ts +2 -2
  77. package/dist/components/MessageInput/TextEditor/index.js +18 -9
  78. package/dist/components/MessageInput/index.d.ts +5 -41
  79. package/dist/components/MessageInput/index.js +4 -4
  80. package/dist/components/MessageList/Message/CustomMessage/index.js +2 -2
  81. package/dist/components/MessageList/Message/FaceMessage/FaceMessage.js +7 -5
  82. package/dist/components/MessageList/Message/FaceMessage/FaceMessage.vue.d.ts +8 -8
  83. package/dist/components/MessageList/Message/LocationMessage/LocationMessage.js +2 -1
  84. package/dist/components/MessageList/Message/MergerMessage/MergerMessage.js +2 -1
  85. package/dist/components/MessageList/Message/MessageLayout/MessageActionDropdown/MessageActionDropdown.js +12 -4
  86. package/dist/components/MessageList/Message/MessageLayout/MessageActionDropdown/MessageActionDropdown.vue.d.ts +3 -3
  87. package/dist/components/MessageList/MessageForward/MessageForward.js +2 -3
  88. package/dist/components/MessageList/MessageList.js +14 -7
  89. package/dist/components/MessageList/MessageList.vue.d.ts +1 -1
  90. package/dist/components/MessageList/MessageTimeDivider/MessageTimeDivider.js +5 -5
  91. package/dist/components/MessageList/MessageTimeDivider/MessageTimeDivider.vue.d.ts +10 -10
  92. package/dist/components/MessageList/index.d.ts +143 -5
  93. package/dist/components/MessageList/index.js +5 -5
  94. package/dist/components/Search/Search.js +1 -3
  95. package/dist/components/Search/SearchResults/EmptyResult/EmptyResult.js +4 -6
  96. package/dist/components/Search/SearchResults/Loading/Loading.js +2 -4
  97. package/dist/components/Search/SearchResults/SearchResults.js +20 -22
  98. package/dist/components/Search/SearchResults/SearchResultsItem/Conversation/Conversation.js +6 -8
  99. package/dist/components/Search/SearchResults/SearchResultsItem/Group/Group.js +5 -7
  100. package/dist/components/Search/SearchResults/SearchResultsItem/Message/Message.js +19 -21
  101. package/dist/components/Search/SearchResults/SearchResultsItem/SearchResultsItem.js +1 -3
  102. package/dist/components/Search/SearchResults/SearchResultsItem/User/User.js +5 -7
  103. package/dist/components/StreamMixer/LocalMixer/index.js +11 -5
  104. package/dist/components/StreamView/manager/mediaManager.js +1 -1
  105. package/dist/components/UserPicker/UserPicker.js +2 -2
  106. package/dist/components/UserPicker/UserPicker.vue.d.ts +7 -8
  107. package/dist/components/UserPicker/components/ListMode/ListMode.js +14 -17
  108. package/dist/components/UserPicker/components/ListMode/ListMode.vue.d.ts +2 -2
  109. package/dist/components/UserPicker/components/SelectedPanel/SelectedPanel.vue.d.ts +2 -2
  110. package/dist/components/UserPicker/components/TreeMode/TreeMode.vue.d.ts +3 -3
  111. package/dist/components/UserPicker/components/TreeMode/TreeNode.vue.d.ts +4 -4
  112. package/dist/components/UserPicker/hooks/useSearchFilter.d.ts +3 -3
  113. package/dist/components/UserPicker/hooks/useSelection.d.ts +8 -8
  114. package/dist/components/UserPicker/hooks/useTreeState.d.ts +3 -3
  115. package/dist/components/UserPicker/index.d.ts +134 -3
  116. package/dist/components/UserPicker/index.js +3 -2
  117. package/dist/components/UserPicker/type.d.ts +18 -18
  118. package/dist/index.js +6 -3
  119. package/dist/rtc/index.d.ts +9 -0
  120. package/dist/states/GroupSettingState/GroupSettingState.js +3 -3
  121. package/dist/states/LiveSeatState/usePlayStream/MixStreamPlayer.js +3 -0
  122. package/dist/states/LoginState.js +1 -0
  123. package/dist/states/MessageInputState/MessageInputState.js +25 -5
  124. package/dist/styles/index.css +1275 -3559
  125. package/dist/types/contact.d.ts +13 -12
  126. package/dist/types/conversation.d.ts +12 -14
  127. package/dist/types/engine.d.ts +12 -0
  128. package/dist/types/engine.js +15 -0
  129. package/dist/types/index.js +2 -1
  130. package/dist/utils/json.js +0 -1
  131. package/package.json +7 -3
  132. package/src/chat/index.ts +12 -4
  133. package/src/components/BarrageInput/BarrageInputH5.vue +50 -4
  134. package/src/components/BarrageInput/EmojiPicker/EmojiPicker.module.scss +1 -0
  135. package/src/components/BarrageInput/EmojiPicker/EmojiPicker.vue +1 -1
  136. package/src/components/BarrageInput/TextEditor/Editor.scss +1 -1
  137. package/src/components/BarrageInput/TextEditor/TextEditor.module.scss +2 -0
  138. package/src/components/BarrageInput/TextEditor/TextEditor.vue +6 -0
  139. package/src/components/BarrageList/Message/GroupTipMessage/GroupTipMessage.vue +8 -8
  140. package/src/components/BarrageList/Message/TextMessage/TextMessage.vue +10 -0
  141. package/src/components/BarrageList/i18n/en-US/index.ts +1 -0
  142. package/src/components/BarrageList/i18n/zh-CN/index.ts +1 -0
  143. package/src/components/ChatSetting/GroupChatSetting/GroupActions/GroupActions.vue +5 -2
  144. package/src/components/ChatSetting/GroupChatSetting/GroupChatSetting.vue +5 -4
  145. package/src/components/ChatSetting/GroupChatSetting/GroupInfo/GroupInfo.vue +2 -2
  146. package/src/components/ChatSetting/GroupChatSetting/GroupManagement/GroupManagement.vue +3 -2
  147. package/src/components/ChatSetting/GroupChatSetting/GroupMembers/GroupMembers.vue +3 -3
  148. package/src/components/ChatSetting/SettingItem/SettingItem.vue +10 -7
  149. package/src/components/ChatSetting/i18n/en-US.ts +3 -3
  150. package/src/components/ChatSetting/i18n/zh-CN.ts +3 -3
  151. package/src/components/ChatSetting/index.ts +3 -3
  152. package/src/components/CoGuestPanel/CoGuestPanel.vue +9 -0
  153. package/src/components/ContactList/ContactInfo/BlacklistInfo/BlacklistInfo.scss +2 -0
  154. package/src/components/ContactList/ContactInfo/ContactInfo.vue +17 -9
  155. package/src/components/ContactList/ContactInfo/FriendApplicationInfo/FriendApplicationInfo.scss +2 -0
  156. package/src/components/ContactList/ContactInfo/FriendInfo/FriendInfo.scss +4 -3
  157. package/src/components/ContactList/ContactInfo/GroupApplicationInfo/GroupApplicationInfo.scss +2 -0
  158. package/src/components/ContactList/ContactInfo/GroupInfo/GroupInfo.scss +2 -0
  159. package/src/components/ContactList/ContactInfo/GroupInfo/GroupInfo.vue +1 -0
  160. package/src/components/ContactList/ContactInfo/SearchGroupInfo/SearchGroupInfo.scss +2 -2
  161. package/src/components/ContactList/ContactInfo/SearchUserInfo/SearchUserInfo.scss +3 -2
  162. package/src/components/ContactList/ContactList.scss +2 -1
  163. package/src/components/ContactList/ContactList.vue +18 -3
  164. package/src/components/ContactList/ContactListItem/BlacklistItem/BlacklistItem.scss +3 -3
  165. package/src/components/ContactList/ContactListItem/FriendApplicationItem/FriendApplicationItem.scss +5 -6
  166. package/src/components/ContactList/ContactListItem/FriendItem/FriendItem.scss +3 -3
  167. package/src/components/ContactList/ContactListItem/GroupApplicationItem/GroupApplicationItem.scss +5 -6
  168. package/src/components/ContactList/ContactListItem/GroupItem/GroupItem.scss +3 -3
  169. package/src/components/ConversationList/ConversationActions/ConversationActions.scss +2 -12
  170. package/src/components/ConversationList/ConversationActions/ConversationActions.vue +2 -2
  171. package/src/components/ConversationList/ConversationCreate/ConversationCreate.vue +1 -0
  172. package/src/components/ConversationList/ConversationCreate/ConversationCreateGroupDetail/ConversationCreateGroupDetail.scss +2 -1
  173. package/src/components/ConversationList/ConversationCreate/ConversationCreateUserSelectList/ConversationCreateUserSelectList.vue +2 -2
  174. package/src/components/ConversationList/ConversationCreate/ConversationGroupTypeInfo/ConversationGroupTypeInfo.scss +2 -1
  175. package/src/components/ConversationList/ConversationList.scss +0 -5
  176. package/src/components/ConversationList/ConversationList.vue +15 -41
  177. package/src/components/ConversationList/ConversationListContent/ConversationListContent.scss +1 -0
  178. package/src/components/ConversationList/ConversationListContent/ConversationListContent.vue +13 -18
  179. package/src/components/ConversationList/ConversationPreview/ConversationPreview.scss +11 -9
  180. package/src/components/ConversationList/ConversationPreview/ConversationPreview.vue +14 -16
  181. package/src/components/ConversationList/ConversationPreview/ConversationPreviewTitle.vue +2 -14
  182. package/src/components/ConversationList/ConversationPreview/index.ts +1 -1
  183. package/src/components/ConversationList/ConversationSearch/ConversationSearch.vue +1 -0
  184. package/src/components/LiveCoreView/index.vue +144 -78
  185. package/src/components/LiveList/LiveList.vue +3 -0
  186. package/src/components/LiveList/LiveListH5.vue +60 -85
  187. package/src/components/LiveList/i18n/en-US/index.ts +5 -0
  188. package/src/components/LiveList/i18n/zh-CN/index.ts +5 -0
  189. package/src/components/LiveList/pullToRefresh.vue +364 -0
  190. package/src/components/LiveScenePanel/CameraSettingDialog.vue +6 -5
  191. package/src/components/LiveScenePanel/index.vue +2 -2
  192. package/src/components/MessageInput/AttachmentPicker/AttachmentPicker.module.scss +4 -0
  193. package/src/components/MessageInput/AttachmentPicker/AttachmentPicker.vue +12 -17
  194. package/src/components/MessageInput/AttachmentPicker/FilePicker.vue +3 -2
  195. package/src/components/MessageInput/AttachmentPicker/ImagePicker.vue +3 -2
  196. package/src/components/MessageInput/AttachmentPicker/VideoPicker.vue +3 -2
  197. package/src/components/MessageInput/EmojiPicker/EmojiPicker.module.scss +1 -0
  198. package/src/components/MessageInput/MessageInput.vue +21 -15
  199. package/src/components/MessageInput/TextEditor/Editor.scss +1 -0
  200. package/src/components/MessageInput/TextEditor/TextEditor.vue +16 -6
  201. package/src/components/MessageInput/types.d.ts +3 -4
  202. package/src/components/MessageList/Message/CustomMessage/CustomMessage.vue +1 -1
  203. package/src/components/MessageList/Message/FaceMessage/FaceMessage.vue +10 -7
  204. package/src/components/MessageList/Message/LocationMessage/LocationMessage.vue +3 -1
  205. package/src/components/MessageList/Message/MergerMessage/MergerMessage.vue +1 -1
  206. package/src/components/MessageList/Message/MessageLayout/MessageActionDropdown/MessageActionDropdown.vue +2 -2
  207. package/src/components/MessageList/MessageForward/MessageForward.vue +3 -3
  208. package/src/components/MessageList/MessageList.vue +17 -5
  209. package/src/components/MessageList/MessageTimeDivider/MessageTimeDivider.vue +9 -9
  210. package/src/components/MessageList/index.ts +5 -4
  211. package/src/components/Search/Search.scss +0 -3
  212. package/src/components/Search/SearchResults/EmptyResult/EmptyResult.scss +0 -3
  213. package/src/components/Search/SearchResults/Loading/Loading.scss +0 -3
  214. package/src/components/Search/SearchResults/SearchResults.scss +7 -16
  215. package/src/components/Search/SearchResults/SearchResultsItem/Conversation/Conversation.scss +5 -11
  216. package/src/components/Search/SearchResults/SearchResultsItem/Group/Group.scss +5 -11
  217. package/src/components/Search/SearchResults/SearchResultsItem/Message/Message.scss +5 -11
  218. package/src/components/Search/SearchResults/SearchResultsItem/SearchResultsItem.scss +0 -3
  219. package/src/components/Search/SearchResults/SearchResultsItem/User/User.scss +5 -6
  220. package/src/components/StreamMixer/LocalMixer/index.vue +9 -4
  221. package/src/components/StreamView/manager/mediaManager.ts +1 -1
  222. package/src/components/UserPicker/UserPicker.vue +6 -9
  223. package/src/components/UserPicker/components/ListMode/ListMode.vue +3 -7
  224. package/src/components/UserPicker/components/SelectedPanel/SelectedPanel.vue +2 -2
  225. package/src/components/UserPicker/components/TreeMode/TreeMode.vue +3 -3
  226. package/src/components/UserPicker/components/TreeMode/TreeNode.vue +3 -3
  227. package/src/components/UserPicker/hooks/useSearchFilter.ts +15 -14
  228. package/src/components/UserPicker/hooks/useSelection.ts +32 -32
  229. package/src/components/UserPicker/hooks/useTreeState.ts +4 -4
  230. package/src/components/UserPicker/index.ts +16 -14
  231. package/src/components/UserPicker/type.ts +18 -18
  232. package/src/types/contact.ts +13 -12
  233. package/src/types/conversation.ts +12 -14
  234. package/src/types/engine.ts +15 -0
  235. package/src/utils/json.ts +0 -4
  236. package/dist/AttachmentPicker.module-0_DWsAtr.js +0 -11
  237. package/dist/FilePicker.vue_vue_type_script_setup_true_lang-CaSj3Gh_.js +0 -72
  238. package/dist/ImagePicker.vue_vue_type_script_setup_true_lang-CrzGMmrh.js +0 -72
  239. package/dist/VideoPicker.vue_vue_type_script_setup_true_lang-DTv6TJKr.js +0 -72
  240. package/dist/states/UIOpenControlState/UIOpenControlState.d.ts +0 -15
  241. package/dist/states/UIOpenControlState/UIOpenControlState.js +0 -28
  242. package/dist/states/UIOpenControlState/index.d.ts +0 -1
  243. package/dist/states/UIOpenControlState/index.js +0 -4
@@ -31,18 +31,18 @@
31
31
  :empty="renderConversationList.length === 0"
32
32
  :loading="!conversationList"
33
33
  :error="false"
34
- :placeholder-empty-list="PlaceholderEmptyList"
35
- :placeholder-loading="PlaceholderLoading"
36
- :placeholder-load-error="PlaceholderLoadError"
34
+ :PlaceholderEmptyList="PlaceholderEmptyList"
35
+ :PlaceholderLoading="PlaceholderLoading"
36
+ :PlaceholderLoadError="PlaceholderLoadError"
37
37
  >
38
38
  <ConversationPreview
39
39
  v-for="conversation in renderConversationList"
40
40
  :key="conversation.conversationID"
41
41
  :conversation="conversation"
42
42
  :enable-actions="enableActions"
43
- :avatar="Avatar"
44
- :preview="Preview"
45
- :conversation-actions="ConversationActions"
43
+ :Avatar="Avatar"
44
+ :Preview="Preview"
45
+ :ConversationActions="ConversationActions"
46
46
  :actions-config="actionsConfig"
47
47
  @select="handleSelectConversation"
48
48
  />
@@ -53,16 +53,12 @@
53
53
  <script lang="ts" setup>
54
54
  import { computed, ref, watch } from 'vue';
55
55
  import { useConversationListState } from '../../states/ConversationListState';
56
- import {
57
- PlaceHolderTypes,
58
- } from '../../types';
59
56
  import { isH5 } from '../../utils';
60
57
  import { Avatar as DefaultAvatar } from '../Avatar';
61
58
  import { ConversationActions as DefaultConversationActions } from './ConversationActions';
62
59
  import { ConversationCreate as DefaultConversationCreate } from './ConversationCreate';
63
60
  import { ConversationListContent as DefaultConversationListContent } from './ConversationListContent';
64
61
  import { ConversationListHeader as DefaultConversationListHeader } from './ConversationListHeader';
65
- import PlaceHolder from './ConversationPlaceHolder';
66
62
  import { ConversationPreview, ConversationPreviewUI as DefaultConversationPreviewUI } from './ConversationPreview';
67
63
  import { ConversationSearch as DefaultConversationSearch } from './ConversationSearch';
68
64
  import { useConversation } from './hooks/useConversation';
@@ -88,30 +84,19 @@ const props = withDefaults(defineProps<Props>(), {
88
84
  ConversationCreate: () => DefaultConversationCreate,
89
85
  ConversationSearch: () => DefaultConversationSearch,
90
86
  ConversationActions: () => DefaultConversationActions,
91
- PlaceholderEmptyList: () => ({
92
- component: PlaceHolder,
93
- props: { type: PlaceHolderTypes.NO_CONVERSATIONS },
94
- }),
95
- PlaceholderLoading: () => ({
96
- component: PlaceHolder,
97
- props: { type: PlaceHolderTypes.LOADING },
98
- }),
99
- PlaceholderLoadError: () => ({
100
- component: PlaceHolder,
101
- props: { type: PlaceHolderTypes.WRONG },
102
- }),
87
+ PlaceholderEmptyList: undefined,
88
+ PlaceholderLoading: undefined,
89
+ PlaceholderLoadError: undefined,
103
90
  Avatar: () => DefaultAvatar,
104
91
  });
105
92
 
106
93
  const emit = defineEmits<{
107
94
  selectConversation: [conversation: ConversationModel];
108
- beforeCreateConversation: [params: string | any];
95
+ beforeCreateConversation: [params: string | CreateGroupParams];
109
96
  conversationCreated: [conversation: ConversationModel];
110
97
  }>();
111
98
 
112
99
  const {
113
- filter,
114
- sort,
115
100
  enableActions,
116
101
  actionsConfig: propActionsConfig,
117
102
  enableCreate: propEnableCreate,
@@ -131,24 +116,19 @@ const renderConversationList = computed(() => {
131
116
 
132
117
  let _conversationList = conversationList.value;
133
118
 
134
- if (filter && typeof filter === 'function') {
135
- _conversationList = filter(_conversationList);
119
+ if (props.filter && typeof props.filter === 'function') {
120
+ _conversationList = props.filter(_conversationList);
136
121
  }
137
122
 
138
- if (sort && typeof sort === 'function') {
139
- _conversationList = sort(_conversationList);
123
+ if (props.sort && typeof props.sort === 'function') {
124
+ _conversationList = props.sort(_conversationList);
140
125
  }
141
126
 
142
127
  return _conversationList;
143
128
  });
144
129
 
145
130
  const isCreateModelShow = ref(false);
146
- const actionsConfig = ref<ConversationActionsConfig>({
147
- enableDelete: true,
148
- enableMute: true,
149
- enableMarkUnread: true,
150
- enablePin: true,
151
- });
131
+ const actionsConfig = ref<ConversationActionsConfig>({});
152
132
 
153
133
  const enableCreate = computed(() => propEnableCreate);
154
134
  const enableSearch = computed(() => propEnableSearch);
@@ -159,12 +139,6 @@ watch(
159
139
  (): [ConversationActionsConfig | undefined, string[] | null] => [propActionsConfig, conversationActionList.value],
160
140
  ([newActionsConfig, newConversationActionList]) => {
161
141
  if (!newActionsConfig && !newConversationActionList) {
162
- actionsConfig.value = {
163
- enableDelete: true,
164
- enableMute: true,
165
- enableMarkUnread: true,
166
- enablePin: true,
167
- };
168
142
  return;
169
143
  }
170
144
 
@@ -6,6 +6,7 @@
6
6
  flex-direction: column;
7
7
  background-color: var(--bg-color-operate, #f5f5f5);
8
8
  color: var(--text-color-primary, #333);
9
+
9
10
  @include scrollbar.scrollbar-hidden();
10
11
 
11
12
  .placeholder-error,
@@ -6,26 +6,24 @@
6
6
  <slot v-if="!error && !loading && !empty" />
7
7
 
8
8
  <component
9
- :is="PlaceholderLoadError.component"
9
+ :is="PlaceholderLoadError"
10
10
  v-else-if="error"
11
- v-bind="PlaceholderLoadError.props"
12
11
  />
13
12
 
14
13
  <component
15
- :is="PlaceholderLoading.component"
14
+ :is="PlaceholderLoading"
16
15
  v-else-if="loading"
17
- v-bind="PlaceholderLoading.props"
18
16
  />
19
17
 
20
18
  <component
21
- :is="PlaceholderEmptyList.component"
19
+ :is="PlaceholderEmptyList"
22
20
  v-else-if="empty"
23
- v-bind="PlaceholderEmptyList.props"
24
21
  />
25
22
  </div>
26
23
  </template>
27
24
 
28
25
  <script lang="ts" setup>
26
+ import { h } from 'vue';
29
27
  import { PlaceHolderTypes } from '../../../types';
30
28
  import PlaceHolder from '../ConversationPlaceHolder';
31
29
  import type { ConversationListContentProps } from '../../../types';
@@ -34,18 +32,15 @@ const props = withDefaults(defineProps<ConversationListContentProps>(), {
34
32
  empty: false,
35
33
  loading: false,
36
34
  error: false,
37
- PlaceholderEmptyList: () => ({
38
- component: PlaceHolder,
39
- props: { type: PlaceHolderTypes.NO_CONVERSATIONS },
40
- }),
41
- PlaceholderLoading: () => ({
42
- component: PlaceHolder,
43
- props: { type: PlaceHolderTypes.LOADING },
44
- }),
45
- PlaceholderLoadError: () => ({
46
- component: PlaceHolder,
47
- props: { type: PlaceHolderTypes.WRONG },
48
- }),
35
+ PlaceholderEmptyList: () => (h(PlaceHolder, {
36
+ type: PlaceHolderTypes.NO_CONVERSATIONS
37
+ })),
38
+ PlaceholderLoading: () => (h(PlaceHolder, {
39
+ type: PlaceHolderTypes.LOADING
40
+ })),
41
+ PlaceholderLoadError: () => (h(PlaceHolder, {
42
+ type: PlaceHolderTypes.WRONG
43
+ }))
49
44
  });
50
45
 
51
46
  </script>
@@ -1,3 +1,4 @@
1
+ @use '../../../styles/mixins' as mixins;
1
2
  .conversationPreview {
2
3
  display: flex;
3
4
  align-items: center;
@@ -42,18 +43,17 @@
42
43
  }
43
44
 
44
45
  &__title {
46
+ flex: 1;
45
47
  font-weight: 500;
46
48
  font-size: 14px;
47
49
  color: var(--text-color-primary, #333);
48
- overflow: hidden;
49
- text-overflow: ellipsis;
50
- white-space: nowrap;
51
- flex: 1;
50
+
51
+ @include mixins.text-ellipsis();
52
52
  }
53
53
 
54
54
  &__time {
55
55
  font-size: 12px;
56
- line-height: 24px;
56
+ line-height: 18px;
57
57
  color: var(--text-color-secondary, #666);
58
58
  flex-shrink: 0;
59
59
  margin-left: 8px;
@@ -66,12 +66,11 @@
66
66
  }
67
67
 
68
68
  &__abstract {
69
+ flex: 1;
69
70
  font-size: 12px;
70
71
  color: var(--text-color-secondary, #666);
71
- overflow: hidden;
72
- text-overflow: ellipsis;
73
- white-space: nowrap;
74
- flex: 1;
72
+
73
+ @include mixins.text-ellipsis();
75
74
  }
76
75
 
77
76
  &__external {
@@ -87,6 +86,9 @@
87
86
  &__unread {
88
87
  flex-shrink: 0;
89
88
  margin-left: 8px;
89
+ display: flex;
90
+ justify-content: center;
91
+ align-items: center;
90
92
 
91
93
  .unread-count {
92
94
  display: inline-flex;
@@ -3,17 +3,16 @@
3
3
  <component
4
4
  :is="Preview"
5
5
  :conversation="conversation"
6
- :is-selected="isSelected"
7
- :enable-actions="enableActions"
8
- :highlight-match-string="highlightMatchString"
9
- :avatar="Avatar"
10
- :conversation-actions="ConversationActions"
11
- :title="Title"
12
- :last-message-timestamp="LastMessageTimestamp"
13
- :last-message-abstract="LastMessageAbstract"
14
- :unread="Unread"
15
- :actions-config="actionsConfig"
16
- :class-name="className"
6
+ :isSelected="isSelected"
7
+ :enableActions="enableActions"
8
+ :Avatar="Avatar"
9
+ :ConversationActions="ConversationActions"
10
+ :Title="Title"
11
+ :LastMessageTimestamp="LastMessageTimestamp"
12
+ :LastMessageAbstract="LastMessageAbstract"
13
+ :Unread="Unread"
14
+ :actionsConfig="actionsConfig"
15
+ :className="className"
17
16
  :style="style"
18
17
  @select="handleSelectConversation"
19
18
  >
@@ -49,20 +48,19 @@ const emit = defineEmits<{
49
48
  selectConversation: [conversation: ConversationModel];
50
49
  }>();
51
50
 
52
- const Title = computed(() => h(ConversationPreviewTitle, {
51
+ const Title = computed(() => h(props.Title || ConversationPreviewTitle, {
53
52
  conversation: props.conversation,
54
- highlightMatchString: props.highlightMatchString,
55
53
  }));
56
54
 
57
- const LastMessageTimestamp = computed(() => h(ConversationPreviewTimestamp, {
55
+ const LastMessageTimestamp = computed(() => h(props.LastMessageTimestamp || ConversationPreviewTimestamp, {
58
56
  conversation: props.conversation,
59
57
  }));
60
58
 
61
- const LastMessageAbstract = computed(() => h(ConversationPreviewAbstract, {
59
+ const LastMessageAbstract = computed(() => h(props.LastMessageAbstract || ConversationPreviewAbstract, {
62
60
  conversation: props.conversation,
63
61
  }));
64
62
 
65
- const Unread = computed(() => h(ConversationPreviewUnread, {
63
+ const Unread = computed(() => h(props.Unread || ConversationPreviewUnread, {
66
64
  conversation: props.conversation,
67
65
  }));
68
66
 
@@ -1,29 +1,17 @@
1
1
  <template>
2
2
  <div :class="[$style.conversationPreview__title, $style.textEllipsis]">
3
- <span
4
- v-for="(item, index) in titleItems"
5
- :key="index"
6
- :class="{
7
- [$style['conversationPreview__title--highlight']]: item.isHighlight,
8
- [$style['conversationPreview__title--normal']]: !item.isHighlight,
9
- }"
10
- >
11
- {{ item.text }}
12
- </span>
3
+ {{ title }}
13
4
  </div>
14
5
  </template>
15
6
 
16
7
  <script lang="ts" setup>
17
- import { computed } from 'vue';
18
- import { generateHighlightTitle } from './utils';
19
8
  import type { ConversationModel } from '../../../types';
20
9
 
21
10
  const props = defineProps<{
22
11
  conversation: ConversationModel;
23
- highlightMatchString?: string;
24
12
  }>();
25
13
 
26
- const titleItems = computed(() => generateHighlightTitle(props.conversation, props.highlightMatchString));
14
+ const title =props?.conversation?.getShowName?.() || '';
27
15
  </script>
28
16
 
29
17
  <style lang="scss" module>
@@ -4,4 +4,4 @@ export { default as ConversationPreviewTitle } from './ConversationPreviewTitle.
4
4
  export { default as ConversationPreviewTimestamp } from './ConversationPreviewTimestamp.vue';
5
5
  export { default as ConversationPreviewAbstract } from './ConversationPreviewAbstract.vue';
6
6
  export { default as ConversationPreviewUnread } from './ConversationPreviewUnread.vue';
7
- export { generateHighlightTitle, getLatestMessagePreview } from './utils';
7
+ export { getLatestMessagePreview } from './utils';
@@ -37,6 +37,7 @@
37
37
  </div>
38
38
 
39
39
  <TUIDialog
40
+ appendTo="body"
40
41
  :customClasses="[$style.conversationSearch__advanced]"
41
42
  :visible="isShowStandard"
42
43
  :show-close="false"
@@ -2,17 +2,18 @@
2
2
  <div
3
3
  ref="liveCoreViewContainerRef"
4
4
  class="live-core-view-container"
5
+ :class="{ 'align-center': isAlignCenter }"
5
6
  >
7
+ <div
8
+ v-if="!$slots.localVideo && !isPlayedVideo"
9
+ class="live-core-placeholder"
10
+ >
11
+ <span class="placeholder-text">{{ t('No video') }}</span>
12
+ </div>
6
13
  <div
7
14
  class="live-core-view"
8
15
  :style="streamViewStyle"
9
16
  >
10
- <div
11
- v-if="!$slots.localVideo && seatList.length === 0"
12
- class="live-core-placeholder"
13
- >
14
- <span class="placeholder-text">{{ t('No video') }}</span>
15
- </div>
16
17
  <div
17
18
  id="atomicx-live-stream-content"
18
19
  class="stream-content"
@@ -55,7 +56,7 @@ import { useLiveState } from '../../states/LiveState';
55
56
  import { useLoginState } from '../../states/LoginState';
56
57
  import { getContentSize } from '../../utils/domOperation';
57
58
  import DefaultStreamViewUI from './DefaultStreamViewUI.vue';
58
- import type { SeatUserInfo } from '../../types';
59
+ import type { SeatInfo, SeatUserInfo } from '../../types';
59
60
 
60
61
  const { t } = useUIKit();
61
62
  const { seatList, canvas, startPlayStream, stopPlayStream } = useLiveSeatState();
@@ -63,23 +64,37 @@ const { currentLive } = useLiveState();
63
64
 
64
65
  const slots = useSlots();
65
66
 
66
- const ignoreLocalVideoPlay = computed(() => slots.localVideo);
67
+ const isInStreamMixerComp = computed(() => slots.localVideo);
67
68
 
68
69
  const { loginUserInfo } = useLoginState();
70
+ const isPlayedVideo = ref(false);
69
71
  const isMounted = ref(false);
72
+ const isAlignCenter = computed(() => {
73
+ if (!isInStreamMixerComp.value && isPortraitContainer.value && widthRatio.value < heightRatio.value) {
74
+ return false;
75
+ }
76
+ return true;
77
+ });
70
78
 
71
- onMounted(() => {
79
+ onMounted(async () => {
72
80
  isMounted.value = true;
73
- startPlayStream({ view: 'atomicx-live-stream-content' });
81
+ await startPlayStream({ view: 'atomicx-live-stream-content' });
82
+ isPlayedVideo.value = true;
74
83
  });
75
84
 
76
- onBeforeUnmount(() => {
85
+ onBeforeUnmount(async () => {
77
86
  isMounted.value = false;
78
- stopPlayStream();
87
+ await stopPlayStream();
88
+ isPlayedVideo.value = false;
79
89
  });
80
90
 
81
91
  const isPortraitContainer = ref(true);
82
92
  const liveCoreViewContainerRef = ref<HTMLDivElement>();
93
+
94
+ const liveCoreViewContainerSize = ref<{ width: number; height: number }>({
95
+ width: 0,
96
+ height: 0,
97
+ });
83
98
  const originStreamViewStyle = ref({
84
99
  width: 0,
85
100
  height: 0,
@@ -105,20 +120,30 @@ const ratioLayoutList = computed(() => {
105
120
  });
106
121
 
107
122
  const streamViewSize = computed(() => {
108
- if (isPortraitContainer.value) {
109
- return {
110
- width: originStreamViewStyle.value.width,
111
- height: originStreamViewStyle.value.height,
112
- };
113
- }
114
123
  return {
115
124
  width: originStreamViewStyle.value.width * originStreamViewStyle.value.scale,
116
125
  height: originStreamViewStyle.value.height * originStreamViewStyle.value.scale,
117
126
  };
118
127
  });
119
128
 
120
- const seatListWithRealSize = computed(() => seatList.value.map((item, index) => {
129
+ const seatListWithRealSize = computed(() => seatList.value.map((item: SeatInfo, index: number) => {
121
130
  const ratioLayout = ratioLayoutList.value[index];
131
+ const isPortraitAndFill = isPortraitContainer.value && fillMode.value === StreamFillMode.Fill;
132
+ const isSampleWithCanvas = seatList.value.length === 1 || (item.region?.w === canvas.value.width && item.region?.h === canvas.value.height);
133
+ if (!isInStreamMixerComp.value && isPortraitAndFill && isSampleWithCanvas) {
134
+ return {
135
+ userInfo: item.userInfo as SeatUserInfo,
136
+ region: {
137
+ position: 'absolute' as const,
138
+ left: '50%',
139
+ top: '50%',
140
+ width: `${liveCoreViewContainerSize.value.width}px`,
141
+ height: `${liveCoreViewContainerSize.value.height}px`,
142
+ transform: `translate(-50%, -50%)`,
143
+ zIndex: Number(ratioLayout.zOrder) || 0,
144
+ },
145
+ }
146
+ }
122
147
  return {
123
148
  userInfo: item.userInfo as SeatUserInfo,
124
149
  region: {
@@ -138,7 +163,7 @@ const seatListWithRealSize = computed(() => seatList.value.map((item, index) =>
138
163
  const localStreamViewInfo = computed(() => seatListWithRealSize.value.find(item => item?.userInfo?.userId === loginUserInfo.value?.userId));
139
164
 
140
165
  const needPlayStreamViewInfo = computed(() => {
141
- if (ignoreLocalVideoPlay.value) {
166
+ if (isInStreamMixerComp.value) {
142
167
  return seatListWithRealSize.value.filter(item => item.userInfo?.userId !== loginUserInfo.value?.userId);
143
168
  }
144
169
  return seatListWithRealSize.value;
@@ -152,31 +177,31 @@ const needPlayStreamViewInfo = computed(() => {
152
177
  // Based on container B's actual size, calculate the actual position and size of each child element
153
178
 
154
179
  const visualStreamSize = computed(() => {
155
- if (ratioLayoutList.value.length === 0) {
180
+ if (!isPortraitContainer.value && widthRatio.value < heightRatio.value && ratioLayoutList.value.length > 0) {
181
+ const absoluteLayoutList = ratioLayoutList.value.map(item => ({
182
+ userId: item.userId,
183
+ left: originStreamViewStyle.value.width * item.x,
184
+ top: originStreamViewStyle.value.width * item.y,
185
+ width: originStreamViewStyle.value.width * item.width,
186
+ height: item.height === -1 ? originStreamViewStyle.value.height : originStreamViewStyle.value.width * item.height,
187
+ zIndex: item.zOrder,
188
+ }));
189
+ const minX = Math.min(...absoluteLayoutList.map(item => item.left));
190
+ const minY = Math.min(...absoluteLayoutList.map(item => item.top));
191
+ const maxX = Math.max(...absoluteLayoutList.map(item => item.left + item.width));
192
+ const maxY = Math.max(...absoluteLayoutList.map(item => item.top + item.height));
156
193
  return {
157
- width: 0,
158
- height: 0,
159
- centerX: 0,
160
- centerY: 0,
194
+ width: maxX - minX,
195
+ height: maxY - minY,
196
+ centerX: (minX + maxX) / 2,
197
+ centerY: (minY + maxY) / 2,
161
198
  };
162
199
  }
163
- const absoluteLayoutList = ratioLayoutList.value.map(item => ({
164
- userId: item.userId,
165
- left: originStreamViewStyle.value.width * item.x,
166
- top: originStreamViewStyle.value.width * item.y,
167
- width: originStreamViewStyle.value.width * item.width,
168
- height: item.height === -1 ? originStreamViewStyle.value.height : originStreamViewStyle.value.width * item.height,
169
- zIndex: item.zOrder,
170
- }));
171
- const minX = Math.min(...absoluteLayoutList.map(item => item.left));
172
- const minY = Math.min(...absoluteLayoutList.map(item => item.top));
173
- const maxX = Math.max(...absoluteLayoutList.map(item => item.left + item.width));
174
- const maxY = Math.max(...absoluteLayoutList.map(item => item.top + item.height));
175
200
  return {
176
- width: maxX - minX,
177
- height: maxY - minY,
178
- centerX: (minX + maxX) / 2,
179
- centerY: (minY + maxY) / 2,
201
+ width: 0,
202
+ height: 0,
203
+ centerX: 0,
204
+ centerY: 0,
180
205
  };
181
206
  });
182
207
 
@@ -188,11 +213,12 @@ function handleStreamListTransform() {
188
213
  if (!liveCoreViewContainerRef.value) {
189
214
  return;
190
215
  }
191
- const containerRect = liveCoreViewContainerRef.value.getBoundingClientRect();
192
- const containerWidth = Math.floor(containerRect.width);
193
- const containerHeight = Math.floor(containerRect.height);
194
216
 
195
217
  if (visualStreamSize.value.width && visualStreamSize.value.height) {
218
+ const containerRect = liveCoreViewContainerRef.value.getBoundingClientRect();
219
+ const containerWidth = Math.floor(containerRect.width);
220
+ const containerHeight = Math.floor(containerRect.height);
221
+
196
222
  const scaleWidth = containerWidth / visualStreamSize.value.width;
197
223
  const scaleHeight = containerHeight / visualStreamSize.value.height;
198
224
  originStreamViewStyle.value.scale = Math.min(scaleWidth, scaleHeight);
@@ -208,12 +234,6 @@ function handleStreamListTransform() {
208
234
  }
209
235
 
210
236
  const streamViewStyle = computed(() => {
211
- if (isPortraitContainer.value) {
212
- return {
213
- width: `${Math.floor(originStreamViewStyle.value.width)}px`,
214
- height: `${Math.floor(originStreamViewStyle.value.height)}px`,
215
- };
216
- }
217
237
  return {
218
238
  width: `${Math.floor(originStreamViewStyle.value.width) * originStreamViewStyle.value.scale}px`,
219
239
  height: `${Math.floor(originStreamViewStyle.value.height) * originStreamViewStyle.value.scale}px`,
@@ -246,6 +266,35 @@ const heightRatio: ComputedRef<number> = computed(() => {
246
266
  return Number(aspectRatio.value.split(':')[1]);
247
267
  });
248
268
 
269
+ /**
270
+ * fillMode rules:
271
+ * Rule 1: If there is only one user in seatList, fillMode is Fill
272
+ * Rule 2: If a user's region in seatList matches the canvas size, fillMode is Fill
273
+ * Rule 3: If in landscape mode, fillMode must be Fit
274
+ */
275
+ enum StreamFillMode {
276
+ Fit = 'fit',
277
+ Fill = 'fill',
278
+ }
279
+
280
+ const fillMode = ref<StreamFillMode>(StreamFillMode.Fit);
281
+
282
+ watch(() => [canvas.value, seatList.value], () => {
283
+ if (canvas.value.width > canvas.value.height) {
284
+ fillMode.value = StreamFillMode.Fit;
285
+ handleStreamRegionSize();
286
+ return;
287
+ }
288
+ const onlyOneSeat = seatList.value.length === 1;
289
+ const hasOneFullScreenUser = seatList.value.find((item: any) => item.region?.w === canvas.value.width && item.region?.h === canvas.value.height);
290
+ if (!isInStreamMixerComp.value && (onlyOneSeat || hasOneFullScreenUser)) {
291
+ fillMode.value = StreamFillMode.Fill;
292
+ } else {
293
+ fillMode.value = StreamFillMode.Fit;
294
+ }
295
+ handleStreamRegionSize();
296
+ });
297
+
249
298
  function handleStreamRegionSize() {
250
299
  if (!liveCoreViewContainerRef.value) {
251
300
  return;
@@ -257,13 +306,25 @@ function handleStreamRegionSize() {
257
306
  if (widthRatio.value && heightRatio.value) {
258
307
  const scaleWidth = containerWidth / widthRatio.value;
259
308
  const scaleHeight = containerHeight / heightRatio.value;
260
- if (scaleWidth > scaleHeight) {
261
- width = (containerHeight / heightRatio.value) * widthRatio.value;
262
- height = containerHeight;
263
- }
264
- if (scaleWidth <= scaleHeight) {
265
- width = containerWidth;
266
- height = (containerWidth / widthRatio.value) * heightRatio.value;
309
+
310
+ if (fillMode.value === StreamFillMode.Fit) {
311
+ if (scaleWidth > scaleHeight) {
312
+ width = (containerHeight / heightRatio.value) * widthRatio.value;
313
+ height = containerHeight;
314
+ }
315
+ if (scaleWidth <= scaleHeight) {
316
+ width = containerWidth;
317
+ height = (containerWidth / widthRatio.value) * heightRatio.value;
318
+ }
319
+ } else {
320
+ if (scaleWidth > scaleHeight) {
321
+ width = containerWidth;
322
+ height = (containerWidth / widthRatio.value) * heightRatio.value;
323
+ }
324
+ if (scaleWidth <= scaleHeight) {
325
+ width = (containerHeight / heightRatio.value) * widthRatio.value;
326
+ height = containerHeight;
327
+ }
267
328
  }
268
329
  }
269
330
  originStreamViewStyle.value.width = width;
@@ -283,6 +344,10 @@ const getContainerOrientation = () => {
283
344
  }
284
345
  const containerRect = liveCoreViewContainerRef.value.getBoundingClientRect();
285
346
  isPortraitContainer.value = containerRect.width < containerRect.height;
347
+ liveCoreViewContainerSize.value = {
348
+ width: containerRect.width,
349
+ height: containerRect.height,
350
+ };
286
351
  };
287
352
 
288
353
  const ro = new ResizeObserver(() => {
@@ -306,32 +371,33 @@ onBeforeUnmount(() => {
306
371
  width: 100%;
307
372
  height: 100%;
308
373
  display: flex;
309
- overflow: hidden;
310
- align-items: center;
311
374
  justify-content: center;
375
+ overflow: hidden;
376
+ &.align-center {
377
+ align-items: center;
378
+ }
379
+ .live-core-placeholder {
380
+ position: absolute;
381
+ top: 0;
382
+ left: 0;
383
+ width: 100%;
384
+ height: 100%;
385
+ display: flex;
386
+ align-items: center;
387
+ justify-content: center;
388
+ .placeholder-text {
389
+ color: var(--text-color-secondary, rgba(255, 255, 255, 0.55));
390
+ font-size: 14px;
391
+ font-style: normal;
392
+ font-weight: 400;
393
+ line-height: 22px;
394
+ }
395
+ }
312
396
 
313
397
  .live-core-view {
314
398
  width: 100%;
315
399
  height: 100%;
316
- position: relative;
317
-
318
- .live-core-placeholder {
319
- position: absolute;
320
- top: 0;
321
- left: 0;
322
- width: 100%;
323
- height: 100%;
324
- display: flex;
325
- align-items: center;
326
- justify-content: center;
327
- .placeholder-text {
328
- color: var(--text-color-secondary, rgba(255, 255, 255, 0.55));
329
- font-size: 14px;
330
- font-style: normal;
331
- font-weight: 400;
332
- line-height: 22px;
333
- }
334
- }
400
+ position: absolute;
335
401
 
336
402
  .stream-content {
337
403
  width: 100%;