tuikit-atomicx-vue3 3.4.1 → 3.5.0-beta.7

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 (536) hide show
  1. package/.eslintrc.cjs +1 -0
  2. package/dist/{MessageInput.vue_vue_type_script_setup_true_lang-D1G-LitO.js → MessageInput.vue_vue_type_script_setup_true_lang-jPzZ5INK.js} +38 -36
  3. package/dist/baseComp/Modal/Modal.js +431 -23
  4. package/dist/chat/index.d.ts +68 -53
  5. package/dist/chat/server.js +15 -15
  6. package/dist/components/AudioSetting/AudioMediaControl.js +39 -41
  7. package/dist/components/AudioSetting/AudioSettingTab.js +10 -10
  8. package/dist/components/AudioSetting/MicrophoneSelect.js +8 -8
  9. package/dist/components/AudioSetting/SpeakerSelect.js +9 -9
  10. package/dist/components/AudioSettingPanel/i18n/en-US/index.d.ts +1 -0
  11. package/dist/components/AudioSettingPanel/i18n/en-US/index.js +2 -1
  12. package/dist/components/AudioSettingPanel/i18n/zh-CN/index.d.ts +1 -0
  13. package/dist/components/AudioSettingPanel/i18n/zh-CN/index.js +2 -1
  14. package/dist/components/AudioSettingPanel/index.js +81 -73
  15. package/dist/components/BarrageInput/BarrageInputH5.js +9 -9
  16. package/dist/components/BarrageInput/EmojiPicker/EmojiPicker.js +3 -3
  17. package/dist/components/BarrageInput/MessageInputState.d.ts +28 -0
  18. package/dist/components/BarrageInput/MessageInputState.js +82 -0
  19. package/dist/components/BarrageInput/TextEditor/CharacterCountExtension.js +1 -1
  20. package/dist/components/BarrageInput/TextEditor/EditorCore.js +5 -4
  21. package/dist/components/BarrageInput/TextEditor/index.js +7 -7
  22. package/dist/components/BarrageInput/type.d.ts +17 -0
  23. package/dist/components/BarrageInput/type.js +4 -0
  24. package/dist/components/BarrageInput/utils.d.ts +30 -0
  25. package/dist/components/BarrageInput/utils.js +41 -0
  26. package/dist/components/BarrageList/BarrageList.js +80 -110
  27. package/dist/components/BarrageList/BarrageList.vue.d.ts +0 -29
  28. package/dist/components/BarrageList/BarrageListH5.js +95 -122
  29. package/dist/components/BarrageList/BarrageListH5.vue.d.ts +0 -29
  30. package/dist/components/BarrageList/BarrageListState.d.ts +58 -0
  31. package/dist/components/BarrageList/BarrageListState.js +106 -0
  32. package/dist/components/BarrageList/Message/MessageLayout/MessageBubble/MessageBubble.js +16 -24
  33. package/dist/components/BarrageList/Message/MessageLayout/MessageBubble/MessageBubble.vue.d.ts +5 -5
  34. package/dist/components/BarrageList/Message/MessageLayout/MessageLayout.js +48 -73
  35. package/dist/components/BarrageList/Message/MessageLayout/MessageLayout.vue.d.ts +5 -7
  36. package/dist/components/BarrageList/Message/TextMessage/TextMessage.js +70 -76
  37. package/dist/components/BarrageList/Message/TextMessage/TextMessage.vue.d.ts +6 -6
  38. package/dist/components/BarrageList/Message/TextMessage/emoji.d.ts +5 -0
  39. package/dist/components/BarrageList/Message/TextMessage/emoji.js +134 -0
  40. package/dist/components/BarrageList/index.d.ts +0 -36
  41. package/dist/components/CameraButton/index.js +18 -19
  42. package/dist/components/ChatSetting/GroupChatSetting/GroupChatSetting.js +2 -1
  43. package/dist/components/CoGuestPanel/CoGuestPanel.js +60 -60
  44. package/dist/components/CoHostPanel/BattlePanel.js +25 -25
  45. package/dist/components/CoHostPanel/CoHostPanel.js +60 -55
  46. package/dist/components/CoHostPanel/ConfigSettingPanel.js +49 -55
  47. package/dist/components/CoHostPanel/ConnectionPanel.js +129 -120
  48. package/dist/components/CoHostPanel/RecommendHostList.js +39 -36
  49. package/dist/components/CoHostPanel/constants.d.ts +3 -0
  50. package/dist/components/CoHostPanel/constants.js +6 -0
  51. package/dist/components/CoHostPanel/i18n/en-US/index.d.ts +1 -0
  52. package/dist/components/CoHostPanel/i18n/en-US/index.js +2 -1
  53. package/dist/components/CoHostPanel/i18n/zh-CN/index.d.ts +1 -0
  54. package/dist/components/CoHostPanel/i18n/zh-CN/index.js +3 -2
  55. package/dist/components/ContactList/ContactInfo/BlacklistInfo/BlacklistInfo.js +6 -6
  56. package/dist/components/ContactList/ContactInfo/ContactInfo.js +1 -1
  57. package/dist/components/ContactList/ContactInfo/FriendApplicationInfo/FriendApplicationInfo.js +1 -1
  58. package/dist/components/ContactList/ContactInfo/FriendInfo/FriendInfo.js +9 -9
  59. package/dist/components/ContactList/ContactInfo/GroupApplicationInfo/GroupApplicationInfo.js +1 -1
  60. package/dist/components/ContactList/ContactInfo/GroupInfo/GroupInfo.js +4 -4
  61. package/dist/components/ContactList/ContactInfo/SearchGroupInfo/SearchGroupInfo.js +8 -8
  62. package/dist/components/ContactList/ContactInfo/SearchUserInfo/SearchUserInfo.js +7 -7
  63. package/dist/components/ContactList/ContactList.js +7 -7
  64. package/dist/components/ContactList/ContactListItem/BlacklistItem/BlacklistItem.js +8 -8
  65. package/dist/components/ContactList/ContactListItem/FriendApplicationItem/FriendApplicationItem.js +5 -5
  66. package/dist/components/ContactList/ContactListItem/FriendItem/FriendItem.js +5 -5
  67. package/dist/components/ContactList/ContactListItem/GroupApplicationItem/GroupApplicationItem.js +1 -1
  68. package/dist/components/ContactList/ContactListItem/GroupItem/GroupItem.js +1 -1
  69. package/dist/components/ContactList/ContactSearch/ContactSearch.js +6 -6
  70. package/dist/components/ConversationList/ConversationActions/ConversationActions.js +49 -51
  71. package/dist/components/ConversationList/ConversationCreate/ConversationCreate.js +9 -9
  72. package/dist/components/ConversationList/ConversationList.js +4 -4
  73. package/dist/components/ConversationList/ConversationList.vue.d.ts +10 -10
  74. package/dist/components/ConversationList/ConversationPreview/ConversationPreview.vue.d.ts +10 -10
  75. package/dist/components/ConversationList/ConversationPreview/ConversationPreviewTimestamp.js +31 -29
  76. package/dist/components/ConversationList/ConversationPreview/ConversationPreviewUI.js +20 -20
  77. package/dist/components/ConversationList/ConversationPreview/ConversationPreviewUI.vue.d.ts +2 -2
  78. package/dist/components/ConversationList/ConversationPreview/index.js +1 -1
  79. package/dist/components/ConversationList/index.d.ts +30 -30
  80. package/dist/components/LiveAudienceList/LiveAudienceList.js +44 -45
  81. package/dist/components/LiveAudienceList/LiveAudienceListH5.js +7 -7
  82. package/dist/components/LiveAudienceList/UserActionMenu.js +57 -64
  83. package/dist/components/LiveList/LiveList.js +23 -23
  84. package/dist/components/LiveList/LiveListH5.js +38 -38
  85. package/dist/components/LiveScenePanel/CameraSettingDialog.js +10 -10
  86. package/dist/components/LiveScenePanel/MaterialItem.js +15 -15
  87. package/dist/components/LiveScenePanel/index.js +4 -4
  88. package/dist/components/{LiveCoreView → LiveView}/CoreViewDecorate/BattleDecorate.js +58 -58
  89. package/dist/components/{LiveCoreView → LiveView}/CoreViewDecorate/BattleUserDecorate.js +56 -49
  90. package/dist/components/{LiveCoreView → LiveView}/CoreViewDecorate/CoHostDecorate.js +6 -6
  91. package/dist/components/{LiveCoreView → LiveView}/CoreViewDecorate/LiveCoreDecorate.js +1 -1
  92. package/dist/components/{LiveCoreView → LiveView}/DefaultStreamViewUI.js +46 -43
  93. package/dist/components/LiveView/PlayerControl/AudioControl.js +133 -0
  94. package/dist/components/{LiveCoreView → LiveView}/PlayerControl/AudioControl.vue.d.ts +10 -6
  95. package/dist/components/LiveView/PlayerControl/MultiResolution.js +73 -0
  96. package/dist/components/LiveView/PlayerControl/PlayerControl.js +168 -0
  97. package/dist/components/{LiveCoreView → LiveView}/PlayerControl/PlayerControlState.d.ts +2 -2
  98. package/dist/components/LiveView/PlayerControl/PlayerControlState.js +222 -0
  99. package/dist/components/{LiveCoreView → LiveView}/PlayerControl/utils/domHelpers.d.ts +8 -1
  100. package/dist/components/LiveView/PlayerControl/utils/domHelpers.js +132 -0
  101. package/dist/components/{LiveCoreView/i18n/zh-CN → LiveView/i18n/en-US}/index.d.ts +3 -2
  102. package/dist/components/{LiveCoreView → LiveView}/i18n/en-US/index.js +4 -3
  103. package/dist/components/{LiveCoreView/i18n/en-US → LiveView/i18n/zh-CN}/index.d.ts +3 -2
  104. package/dist/components/{LiveCoreView → LiveView}/i18n/zh-CN/index.js +4 -3
  105. package/dist/components/LiveView/index.d.ts +79 -0
  106. package/dist/components/{LiveCoreView → LiveView}/index.js +44 -42
  107. package/dist/components/MessageInput/AudioCallPicker/AudioCallPicker.js +63 -65
  108. package/dist/components/MessageInput/EmojiPicker/EmojiPicker.js +88 -84
  109. package/dist/components/MessageInput/MessageInput.js +1 -1
  110. package/dist/components/MessageInput/MessageInput.vue.d.ts +5 -2
  111. package/dist/components/MessageInput/TextEditor/EditorCore.d.ts +3 -1
  112. package/dist/components/MessageInput/TextEditor/EditorCore.js +51 -63
  113. package/dist/components/MessageInput/TextEditor/TextEditor.vue.d.ts +6 -2
  114. package/dist/components/MessageInput/TextEditor/extensions/characterCountExtension.d.ts +19 -0
  115. package/dist/components/MessageInput/TextEditor/extensions/characterCountExtension.js +74 -0
  116. package/dist/components/MessageInput/TextEditor/extensions/imageExtension.d.ts +2 -0
  117. package/dist/components/MessageInput/TextEditor/extensions/imageExtension.js +62 -0
  118. package/dist/components/MessageInput/TextEditor/index.js +45 -35
  119. package/dist/components/MessageInput/VideoCallPicker/VideoCallPicker.js +67 -69
  120. package/dist/components/MessageInput/i18n/index.d.ts +4 -0
  121. package/dist/components/MessageInput/i18n/zh-CN.d.ts +4 -0
  122. package/dist/components/MessageInput/i18n/zh-CN.js +5 -1
  123. package/dist/components/MessageInput/index.d.ts +36 -6
  124. package/dist/components/MessageInput/index.js +1 -1
  125. package/dist/components/MessageList/Message/AudioMessage/WaveForm.js +24 -34
  126. package/dist/components/MessageList/Message/CustomMessage/CallMessage/CallMessage.js +29 -28
  127. package/dist/components/MessageList/Message/GroupTipMessage/index.js +13 -13
  128. package/dist/components/MessageList/Message/Message.vue.d.ts +1 -1
  129. package/dist/components/MessageList/Message/MessageLayout/MessageLayout.js +63 -69
  130. package/dist/components/MessageList/Message/VideoMessage/VideoMessage.js +48 -53
  131. package/dist/components/MessageList/Message/VideoMessage/VideoMessage.vue.d.ts +8 -8
  132. package/dist/components/MessageList/MessageList.js +8 -6
  133. package/dist/components/MessageList/MessageList.vue.d.ts +2 -2
  134. package/dist/components/MessageList/i18n/en-US.d.ts +65 -1
  135. package/dist/components/MessageList/i18n/en-US.js +66 -2
  136. package/dist/components/MessageList/i18n/index.d.ts +128 -0
  137. package/dist/components/MessageList/i18n/index.js +6 -6
  138. package/dist/components/MessageList/i18n/zh-CN.d.ts +65 -1
  139. package/dist/components/MessageList/i18n/zh-CN.js +64 -0
  140. package/dist/components/MessageList/index.d.ts +20 -20
  141. package/dist/components/MicButton/index.js +11 -11
  142. package/dist/components/Search/SearchAdvanced/DateRangePicker/DateRangePicker.js +172 -174
  143. package/dist/components/Search/SearchAdvanced/MessageAdvanced/MessageAdvanced.js +58 -60
  144. package/dist/components/Search/SearchAdvanced/SearchAdvanced.js +28 -30
  145. package/dist/components/Search/SearchAdvanced/SearchTab/SearchTab.js +22 -24
  146. package/dist/components/Search/SearchAdvanced/Slider/Slider.js +26 -28
  147. package/dist/components/Search/SearchAdvanced/UserAdvanced/UserAdvanced.js +133 -135
  148. package/dist/components/Search/SearchBar/SearchBar.js +56 -58
  149. package/dist/components/StreamMixer/LocalMixer/MixerControl.js +12 -12
  150. package/dist/components/StreamMixer/LocalMixer/index.js +66 -63
  151. package/dist/components/StreamMixer/index.js +6 -6
  152. package/dist/components/StreamView/Layout/CustomLayout.js +8 -8
  153. package/dist/components/StreamView/Layout/FloatLayout.js +124 -127
  154. package/dist/components/StreamView/Layout/GridLayout.js +5 -5
  155. package/dist/components/StreamView/index.js +25 -33
  156. package/dist/components/StreamView/manager/mediaManager.js +54 -60
  157. package/dist/components/UIKitModal/UIKitModal.d.ts +7 -0
  158. package/dist/components/UIKitModal/UIKitModal.js +156 -0
  159. package/dist/components/UIKitModal/index.d.ts +1 -0
  160. package/dist/components/UIKitModal/index.js +4 -0
  161. package/dist/components/{BarrageList/Message/RecalledMessage/RecalledMessage.vue.d.ts → UIKitModal/index.vue.d.ts} +24 -14
  162. package/dist/components/UIKitModal/type.d.ts +21 -0
  163. package/dist/components/UIKitModal/type.js +1 -0
  164. package/dist/components/UserPicker/UserPicker.js +1 -2
  165. package/dist/components/UserPicker/components/SelectedPanel/SelectedPanel.js +19 -18
  166. package/dist/components/UserPicker/hooks/useSearchFilter.d.ts +2 -2
  167. package/dist/components/UserPicker/hooks/useSearchFilter.js +39 -31
  168. package/dist/components/UserPicker/i18n/en-US.d.ts +1 -0
  169. package/dist/components/UserPicker/i18n/en-US.js +2 -1
  170. package/dist/components/UserPicker/i18n/index.d.ts +2 -0
  171. package/dist/components/UserPicker/i18n/zh-CN.d.ts +1 -0
  172. package/dist/components/UserPicker/i18n/zh-CN.js +2 -1
  173. package/dist/components/UserPicker/index.d.ts +2 -2
  174. package/dist/components/UserPicker/type.d.ts +1 -1
  175. package/dist/components/VideoSetting/CameraSelect.js +8 -8
  176. package/dist/components/VideoSetting/VideoMediaControl.js +10 -10
  177. package/dist/components/VideoSetting/VideoPreview.js +9 -9
  178. package/dist/components/VideoSetting/VideoProfile.js +6 -6
  179. package/dist/components/VideoSetting/VideoSettingTab.js +40 -39
  180. package/dist/components/VideoSettingPanel/CameraSelect.js +8 -8
  181. package/dist/components/VideoSettingPanel/VideoPreview.js +1 -1
  182. package/dist/components/VideoSettingPanel/VideoProfile.js +18 -18
  183. package/dist/hooks/useAudioControl.d.ts +3 -3
  184. package/dist/hooks/useAudioControl.js +32 -30
  185. package/dist/hooks/useRoomEngine.js +6 -6
  186. package/dist/index-B_-9wgM4.js +64 -0
  187. package/dist/{index-D-KJvDvy.js → index-DMfTuy0v.js} +574 -631
  188. package/dist/{index-D88ja_7_.js → index-DV6o6s43.js} +1691 -1660
  189. package/dist/index.d.ts +3 -1
  190. package/dist/index.js +180 -156
  191. package/dist/report/MetricsKey.d.ts +16 -0
  192. package/dist/report/MetricsKey.js +4 -0
  193. package/dist/report/dataReport.d.ts +12 -0
  194. package/dist/report/dataReport.js +45 -0
  195. package/dist/report/index.d.ts +4 -0
  196. package/dist/report/index.js +6 -0
  197. package/dist/rtc/index.d.ts +6 -81
  198. package/dist/rtc/index.js +53 -52
  199. package/dist/rtc/server.js +45 -40
  200. package/dist/states/BarrageState/BarrageState.d.ts +74 -0
  201. package/dist/states/BarrageState/BarrageState.js +80 -0
  202. package/dist/states/BarrageState/index.d.ts +1 -0
  203. package/dist/states/BarrageState/index.js +5 -0
  204. package/dist/states/{BattleState.d.ts → BattleState/BattleState.d.ts} +10 -11
  205. package/dist/states/BattleState/BattleState.js +203 -0
  206. package/dist/states/BattleState/index.d.ts +1 -0
  207. package/dist/states/BattleState/index.js +4 -0
  208. package/dist/states/CoGuestState.d.ts +24 -94
  209. package/dist/states/CoGuestState.js +297 -189
  210. package/dist/states/CoHostState/CoHostState.d.ts +2 -2
  211. package/dist/states/CoHostState/CoHostState.js +135 -131
  212. package/dist/states/{DeviceState.d.ts → DeviceState/DeviceState.d.ts} +25 -13
  213. package/dist/states/DeviceState/DeviceState.js +314 -0
  214. package/dist/states/DeviceState/index.d.ts +1 -0
  215. package/dist/states/DeviceState/index.js +4 -0
  216. package/dist/states/LiveAudienceState.d.ts +3 -1
  217. package/dist/states/LiveAudienceState.js +106 -63
  218. package/dist/states/{LiveState/index.d.ts → LiveListState/LiveListState.d.ts} +13 -8
  219. package/dist/states/LiveListState/LiveListState.js +285 -0
  220. package/dist/states/LiveListState/index.d.ts +1 -0
  221. package/dist/states/LiveListState/index.js +4 -0
  222. package/dist/states/LiveMonitorState/api/http.js +147 -129
  223. package/dist/states/LiveMonitorState/index.js +67 -62
  224. package/dist/states/LiveMonitorState/player/adapters/trtc.js +6 -6
  225. package/dist/states/LiveSeatState/index.d.ts +46 -11
  226. package/dist/states/LiveSeatState/index.js +34 -15
  227. package/dist/states/LiveSeatState/seatEventManager.d.ts +2 -0
  228. package/dist/states/LiveSeatState/seatEventManager.js +63 -42
  229. package/dist/states/LiveSeatState/seatManager.d.ts +34 -5
  230. package/dist/states/LiveSeatState/seatManager.js +131 -29
  231. package/dist/states/LiveSeatState/store.d.ts +5 -5
  232. package/dist/states/LiveSeatState/store.js +12 -10
  233. package/dist/states/LiveSeatState/usePlayStream/RTCStreamManager.js +1 -1
  234. package/dist/states/LiveSeatState/usePlayStream/RTCStreamPlayer.js +1 -1
  235. package/dist/states/LiveSeatState/usePlayStream/index.js +30 -28
  236. package/dist/states/LoginState.d.ts +23 -0
  237. package/dist/states/MessageInputState/MessageInputState.d.ts +41 -7
  238. package/dist/states/MessageInputState/MessageInputState.js +60 -59
  239. package/dist/states/MessageInputState/utils.d.ts +8 -1
  240. package/dist/states/MessageInputState/utils.js +30 -10
  241. package/dist/states/SeatStore.js +82 -83
  242. package/dist/states/UIKitModalState/UIKitModalState.d.ts +17 -0
  243. package/dist/states/UIKitModalState/UIKitModalState.js +63 -0
  244. package/dist/states/UIKitModalState/index.d.ts +1 -0
  245. package/dist/states/UIKitModalState/index.js +4 -0
  246. package/dist/states/{VideoMixerState.d.ts → VideoMixerState/VideoMixerState.d.ts} +1 -1
  247. package/dist/states/VideoMixerState/VideoMixerState.js +269 -0
  248. package/dist/states/VideoMixerState/index.d.ts +1 -0
  249. package/dist/states/VideoMixerState/index.js +4 -0
  250. package/dist/styles/index.css +1 -1
  251. package/dist/types/audience.d.ts +21 -0
  252. package/dist/types/audience.js +4 -1
  253. package/dist/types/battle.d.ts +75 -3
  254. package/dist/types/battle.js +5 -1
  255. package/dist/types/coGuest.d.ts +72 -5
  256. package/dist/types/coGuest.js +4 -2
  257. package/dist/types/device.d.ts +38 -17
  258. package/dist/types/device.js +10 -8
  259. package/dist/types/index.d.ts +2 -2
  260. package/dist/types/index.js +96 -80
  261. package/dist/types/live.d.ts +36 -21
  262. package/dist/types/live.js +6 -4
  263. package/dist/types/seat.d.ts +23 -4
  264. package/dist/types/seat.js +7 -1
  265. package/dist/utils/call.d.ts +1 -1
  266. package/dist/utils/call.js +78 -79
  267. package/dist/utils/eventCenter.d.ts +88 -0
  268. package/dist/utils/eventCenter.js +161 -0
  269. package/package.json +4 -3
  270. package/src/chat/server.ts +0 -1
  271. package/src/components/AudioSetting/AudioMediaControl.vue +1 -3
  272. package/src/components/AudioSetting/AudioSettingTab.vue +1 -2
  273. package/src/components/AudioSetting/MicrophoneSelect.vue +1 -2
  274. package/src/components/AudioSetting/SpeakerSelect.vue +1 -2
  275. package/src/components/AudioSettingPanel/i18n/en-US/index.ts +1 -0
  276. package/src/components/AudioSettingPanel/i18n/zh-CN/index.ts +1 -0
  277. package/src/components/AudioSettingPanel/index.vue +4 -2
  278. package/src/components/BarrageInput/BarrageInputH5.vue +1 -1
  279. package/src/components/BarrageInput/EmojiPicker/EmojiPicker.vue +1 -1
  280. package/src/components/BarrageInput/MessageInputState.ts +160 -0
  281. package/src/components/BarrageInput/TextEditor/TextEditor.vue +1 -1
  282. package/src/components/BarrageInput/type.ts +26 -0
  283. package/src/components/BarrageInput/utils.ts +45 -0
  284. package/src/components/BarrageList/BarrageList.vue +61 -117
  285. package/src/components/BarrageList/BarrageListH5.vue +75 -159
  286. package/src/components/BarrageList/BarrageListState.ts +223 -0
  287. package/src/components/BarrageList/Message/MessageLayout/MessageBubble/MessageBubble.vue +8 -55
  288. package/src/components/BarrageList/Message/MessageLayout/MessageLayout.vue +19 -44
  289. package/src/components/BarrageList/Message/TextMessage/TextMessage.vue +69 -96
  290. package/src/components/BarrageList/Message/TextMessage/emoji.ts +132 -0
  291. package/src/components/CameraButton/index.vue +0 -1
  292. package/src/components/ChatSetting/GroupChatSetting/GroupChatSetting.vue +5 -0
  293. package/src/components/CoGuestPanel/CoGuestPanel.vue +16 -91
  294. package/src/components/CoHostPanel/BattlePanel.vue +4 -7
  295. package/src/components/CoHostPanel/CoHostPanel.vue +11 -3
  296. package/src/components/CoHostPanel/ConfigSettingPanel.vue +2 -8
  297. package/src/components/CoHostPanel/ConnectionPanel.vue +41 -37
  298. package/src/components/CoHostPanel/RecommendHostList.vue +12 -13
  299. package/src/components/CoHostPanel/constants.ts +3 -0
  300. package/src/components/CoHostPanel/i18n/en-US/index.ts +1 -0
  301. package/src/components/CoHostPanel/i18n/zh-CN/index.ts +2 -1
  302. package/src/components/ContactList/ContactInfo/BlacklistInfo/BlacklistInfo.vue +1 -1
  303. package/src/components/ContactList/ContactInfo/ContactInfo.vue +1 -1
  304. package/src/components/ContactList/ContactInfo/FriendApplicationInfo/FriendApplicationInfo.vue +1 -1
  305. package/src/components/ContactList/ContactInfo/FriendInfo/FriendInfo.vue +1 -1
  306. package/src/components/ContactList/ContactInfo/GroupApplicationInfo/GroupApplicationInfo.vue +1 -1
  307. package/src/components/ContactList/ContactInfo/GroupInfo/GroupInfo.vue +1 -1
  308. package/src/components/ContactList/ContactInfo/SearchGroupInfo/SearchGroupInfo.vue +1 -1
  309. package/src/components/ContactList/ContactInfo/SearchUserInfo/SearchUserInfo.vue +1 -1
  310. package/src/components/ContactList/ContactList.vue +1 -1
  311. package/src/components/ContactList/ContactListItem/BlacklistItem/BlacklistItem.vue +1 -1
  312. package/src/components/ContactList/ContactListItem/FriendApplicationItem/FriendApplicationItem.vue +1 -1
  313. package/src/components/ContactList/ContactListItem/FriendItem/FriendItem.vue +1 -1
  314. package/src/components/ContactList/ContactListItem/GroupApplicationItem/GroupApplicationItem.vue +1 -1
  315. package/src/components/ContactList/ContactListItem/GroupItem/GroupItem.vue +1 -1
  316. package/src/components/ContactList/ContactSearch/ContactSearch.vue +1 -1
  317. package/src/components/ConversationList/ConversationActions/ConversationActions.vue +2 -8
  318. package/src/components/ConversationList/ConversationCreate/ConversationCreate.vue +2 -2
  319. package/src/components/ConversationList/ConversationCreate/ConversationCreateButton/ConversationCreateButton.vue +1 -1
  320. package/src/components/ConversationList/ConversationCreate/ConversationCreateGroupDetail/ConversationCreateGroupDetail.vue +1 -1
  321. package/src/components/ConversationList/ConversationCreate/ConversationCreateUserSelectList/ConversationCreateUserSelectList.vue +1 -1
  322. package/src/components/ConversationList/ConversationCreate/ConversationGroupTypeInfo/ConversationGroupTypeInfo.vue +1 -1
  323. package/src/components/ConversationList/ConversationList.vue +2 -2
  324. package/src/components/ConversationList/ConversationListContent/ConversationListContent.vue +1 -1
  325. package/src/components/ConversationList/ConversationListHeader/ConversationListHeader.vue +1 -1
  326. package/src/components/ConversationList/ConversationPlaceHolder/ConversationPlaceHolder.vue +1 -1
  327. package/src/components/ConversationList/ConversationPreview/ConversationPreview.vue +1 -1
  328. package/src/components/ConversationList/ConversationPreview/ConversationPreviewAbstract.vue +1 -1
  329. package/src/components/ConversationList/ConversationPreview/ConversationPreviewTimestamp.vue +4 -4
  330. package/src/components/ConversationList/ConversationPreview/ConversationPreviewTitle.vue +1 -1
  331. package/src/components/ConversationList/ConversationPreview/ConversationPreviewUI.vue +3 -3
  332. package/src/components/ConversationList/ConversationPreview/ConversationPreviewUnread.vue +1 -1
  333. package/src/components/ConversationList/ConversationSearch/ConversationSearch.vue +1 -1
  334. package/src/components/LiveAudienceList/LiveAudienceList.vue +4 -5
  335. package/src/components/LiveAudienceList/LiveAudienceListH5.vue +2 -2
  336. package/src/components/LiveAudienceList/UserActionMenu.vue +7 -48
  337. package/src/components/LiveList/LiveList.vue +5 -5
  338. package/src/components/LiveList/LiveListH5.vue +6 -6
  339. package/src/components/LiveScenePanel/index.vue +2 -2
  340. package/src/components/{LiveCoreView → LiveView}/CoreViewDecorate/BattleDecorate.vue +10 -15
  341. package/src/components/{LiveCoreView → LiveView}/CoreViewDecorate/BattleUserDecorate.vue +30 -31
  342. package/src/components/{LiveCoreView → LiveView}/DefaultStreamViewUI.vue +5 -3
  343. package/src/components/{LiveCoreView → LiveView}/PlayerControl/AudioControl.vue +72 -80
  344. package/src/components/{LiveCoreView → LiveView}/PlayerControl/MultiResolution.vue +30 -21
  345. package/src/components/{LiveCoreView → LiveView}/PlayerControl/PlayerControl.vue +26 -42
  346. package/src/components/LiveView/PlayerControl/PlayerControlState.ts +516 -0
  347. package/src/components/{LiveCoreView → LiveView}/PlayerControl/utils/domHelpers.ts +68 -4
  348. package/src/components/{LiveCoreView → LiveView}/i18n/en-US/index.ts +3 -2
  349. package/src/components/{LiveCoreView → LiveView}/i18n/zh-CN/index.ts +3 -2
  350. package/src/components/{LiveCoreView → LiveView}/index.ts +5 -2
  351. package/src/components/{LiveCoreView → LiveView}/index.vue +4 -3
  352. package/src/components/MessageInput/AudioCallPicker/AudioCallPicker.vue +8 -6
  353. package/src/components/MessageInput/EmojiPicker/EmojiPicker.vue +7 -3
  354. package/src/components/MessageInput/MessageInput.module.scss +1 -0
  355. package/src/components/MessageInput/MessageInput.vue +3 -1
  356. package/src/components/MessageInput/TextEditor/EditorCore.ts +17 -28
  357. package/src/components/MessageInput/TextEditor/TextEditor.vue +24 -4
  358. package/src/components/MessageInput/TextEditor/extensions/characterCountExtension.ts +159 -0
  359. package/src/components/MessageInput/TextEditor/extensions/imageExtension.ts +79 -0
  360. package/src/components/MessageInput/VideoCallPicker/VideoCallPicker.vue +8 -6
  361. package/src/components/MessageInput/i18n/zh-CN.ts +4 -0
  362. package/src/components/MessageInput/types.d.ts +1 -0
  363. package/src/components/MessageList/Message/AudioMessage/WaveForm.vue +20 -37
  364. package/src/components/MessageList/Message/CustomMessage/CallMessage/CallMessage.vue +5 -3
  365. package/src/components/MessageList/Message/GroupTipMessage/GroupTipMessage.vue +5 -4
  366. package/src/components/MessageList/Message/Message.vue +1 -1
  367. package/src/components/MessageList/Message/MessageLayout/MessageLayout.vue +8 -8
  368. package/src/components/MessageList/Message/VideoMessage/VideoMessage.vue +46 -43
  369. package/src/components/MessageList/Message/VideoMessage/index.ts +1 -1
  370. package/src/components/MessageList/MessageList.vue +2 -0
  371. package/src/components/MessageList/i18n/en-US.ts +66 -0
  372. package/src/components/MessageList/i18n/index.ts +4 -4
  373. package/src/components/MessageList/i18n/zh-CN.ts +66 -0
  374. package/src/components/MicButton/index.vue +3 -3
  375. package/src/components/Search/Search.vue +1 -1
  376. package/src/components/Search/SearchAdvanced/DateRangePicker/DateRangePicker.scss +1 -4
  377. package/src/components/Search/SearchAdvanced/DateRangePicker/DateRangePicker.vue +1 -1
  378. package/src/components/Search/SearchAdvanced/MessageAdvanced/MessageAdvanced.scss +1 -4
  379. package/src/components/Search/SearchAdvanced/MessageAdvanced/MessageAdvanced.vue +1 -1
  380. package/src/components/Search/SearchAdvanced/SearchAdvanced.scss +1 -4
  381. package/src/components/Search/SearchAdvanced/SearchAdvanced.vue +1 -1
  382. package/src/components/Search/SearchAdvanced/SearchTab/SearchTab.scss +1 -4
  383. package/src/components/Search/SearchAdvanced/SearchTab/SearchTab.vue +1 -1
  384. package/src/components/Search/SearchAdvanced/Slider/Slider.scss +1 -4
  385. package/src/components/Search/SearchAdvanced/Slider/Slider.vue +1 -1
  386. package/src/components/Search/SearchAdvanced/UserAdvanced/UserAdvanced.scss +1 -4
  387. package/src/components/Search/SearchAdvanced/UserAdvanced/UserAdvanced.vue +1 -1
  388. package/src/components/Search/SearchBar/SearchBar.scss +3 -6
  389. package/src/components/Search/SearchBar/SearchBar.vue +1 -1
  390. package/src/components/Search/SearchResults/EmptyResult/EmptyResult.vue +1 -1
  391. package/src/components/Search/SearchResults/Loading/Loading.vue +1 -1
  392. package/src/components/Search/SearchResults/SearchResults.vue +1 -1
  393. package/src/components/Search/SearchResults/SearchResultsItem/Conversation/Conversation.vue +1 -1
  394. package/src/components/Search/SearchResults/SearchResultsItem/Group/Group.vue +1 -1
  395. package/src/components/Search/SearchResults/SearchResultsItem/Message/Message.vue +1 -1
  396. package/src/components/Search/SearchResults/SearchResultsItem/SearchResultsItem.vue +1 -1
  397. package/src/components/Search/SearchResults/SearchResultsItem/User/User.vue +1 -1
  398. package/src/components/StreamMixer/LocalMixer/index.vue +6 -8
  399. package/src/components/StreamMixer/index.vue +1 -1
  400. package/src/components/StreamView/Layout/CustomLayout.vue +2 -2
  401. package/src/components/StreamView/Layout/FloatLayout.vue +88 -83
  402. package/src/components/StreamView/index.vue +28 -14
  403. package/src/components/StreamView/manager/mediaManager.ts +38 -42
  404. package/src/components/UIKitModal/UIKitModal.ts +71 -0
  405. package/src/components/UIKitModal/index.scss +134 -0
  406. package/src/components/UIKitModal/index.ts +1 -0
  407. package/src/components/UIKitModal/index.vue +160 -0
  408. package/src/components/UIKitModal/type.ts +24 -0
  409. package/src/components/UserPicker/UserPicker.vue +1 -1
  410. package/src/components/UserPicker/components/SelectedPanel/SelectedPanel.vue +1 -0
  411. package/src/components/UserPicker/hooks/useSearchFilter.ts +27 -18
  412. package/src/components/UserPicker/i18n/en-US.ts +1 -0
  413. package/src/components/UserPicker/i18n/zh-CN.ts +1 -0
  414. package/src/components/UserPicker/type.ts +1 -1
  415. package/src/components/VideoSetting/CameraSelect.vue +1 -2
  416. package/src/components/VideoSetting/VideoMediaControl.vue +1 -1
  417. package/src/components/VideoSetting/VideoPreview.vue +1 -2
  418. package/src/components/VideoSetting/VideoProfile.vue +1 -1
  419. package/src/components/VideoSetting/VideoSettingTab.vue +9 -5
  420. package/src/components/VideoSettingPanel/CameraSelect.vue +1 -2
  421. package/src/components/VideoSettingPanel/VideoProfile.vue +7 -7
  422. package/src/hooks/useAudioControl.ts +17 -4
  423. package/src/hooks/useRoomEngine.ts +1 -1
  424. package/src/index.ts +3 -0
  425. package/src/report/MetricsKey.ts +16 -0
  426. package/src/report/dataReport.ts +55 -0
  427. package/src/report/index.ts +7 -0
  428. package/src/rtc/index.ts +8 -10
  429. package/src/rtc/server.ts +4 -0
  430. package/src/types/audience.ts +27 -1
  431. package/src/types/battle.ts +87 -4
  432. package/src/types/coGuest.ts +87 -5
  433. package/src/types/device.ts +41 -16
  434. package/src/types/index.ts +2 -2
  435. package/src/types/live.ts +41 -22
  436. package/src/types/seat.ts +28 -4
  437. package/src/utils/call.ts +26 -27
  438. package/src/utils/eventCenter.ts +249 -0
  439. package/dist/DialogPortal-CvJcEAsn.js +0 -417
  440. package/dist/components/BarrageList/Message/FaceMessage/FaceMessage.js +0 -23
  441. package/dist/components/BarrageList/Message/FaceMessage/FaceMessage.vue.d.ts +0 -30
  442. package/dist/components/BarrageList/Message/FaceMessage/index.d.ts +0 -3
  443. package/dist/components/BarrageList/Message/FaceMessage/index.js +0 -4
  444. package/dist/components/BarrageList/Message/GroupTipMessage/GroupTipMessage.js +0 -4
  445. package/dist/components/BarrageList/Message/GroupTipMessage/GroupTipMessage.vue.d.ts +0 -16
  446. package/dist/components/BarrageList/Message/GroupTipMessage/index.d.ts +0 -3
  447. package/dist/components/BarrageList/Message/GroupTipMessage/index.js +0 -25
  448. package/dist/components/BarrageList/Message/ImageMessage/ImageMessage.js +0 -71
  449. package/dist/components/BarrageList/Message/ImageMessage/ImageMessage.vue.d.ts +0 -34
  450. package/dist/components/BarrageList/Message/ImageMessage/index.d.ts +0 -3
  451. package/dist/components/BarrageList/Message/ImageMessage/index.js +0 -4
  452. package/dist/components/BarrageList/Message/MergerMessage/MergerMessage.js +0 -9
  453. package/dist/components/BarrageList/Message/MergerMessage/MergerMessage.vue.d.ts +0 -2
  454. package/dist/components/BarrageList/Message/MergerMessage/index.d.ts +0 -3
  455. package/dist/components/BarrageList/Message/MergerMessage/index.js +0 -4
  456. package/dist/components/BarrageList/Message/MessageLayout/MessageMeta/MessageMeta.js +0 -40
  457. package/dist/components/BarrageList/Message/MessageLayout/MessageMeta/MessageMeta.vue.d.ts +0 -54
  458. package/dist/components/BarrageList/Message/MessageLayout/MessageMeta/MessageStatusIcon.js +0 -26
  459. package/dist/components/BarrageList/Message/MessageLayout/MessageMeta/MessageStatusIcon.vue.d.ts +0 -15
  460. package/dist/components/BarrageList/Message/MessageLayout/MessageMeta/index.d.ts +0 -3
  461. package/dist/components/BarrageList/Message/MessageLayout/MessageMeta/index.js +0 -4
  462. package/dist/components/BarrageList/Message/RecalledMessage/RecalledMessage.js +0 -41
  463. package/dist/components/BarrageList/Message/RecalledMessage/index.d.ts +0 -3
  464. package/dist/components/BarrageList/Message/RecalledMessage/index.js +0 -4
  465. package/dist/components/BarrageList/MessageForward/ForwardListItem.js +0 -45
  466. package/dist/components/BarrageList/MessageForward/ForwardListItem.vue.d.ts +0 -17
  467. package/dist/components/BarrageList/MessageForward/MessageForward.js +0 -203
  468. package/dist/components/BarrageList/MessageForward/MessageForward.vue.d.ts +0 -2
  469. package/dist/components/BarrageList/MessageForward/index.d.ts +0 -3
  470. package/dist/components/BarrageList/MessageForward/index.js +0 -4
  471. package/dist/components/LiveCoreView/PlayerControl/AudioControl.js +0 -129
  472. package/dist/components/LiveCoreView/PlayerControl/MultiResolution.js +0 -78
  473. package/dist/components/LiveCoreView/PlayerControl/PlayerControl.js +0 -168
  474. package/dist/components/LiveCoreView/PlayerControl/PlayerControlState.js +0 -267
  475. package/dist/components/LiveCoreView/PlayerControl/utils/domHelpers.js +0 -99
  476. package/dist/components/LiveCoreView/index.d.ts +0 -4
  477. package/dist/components/StreamView/Layout/MixLayout.js +0 -89
  478. package/dist/components/StreamView/Layout/MixLayout.vue.d.ts +0 -31
  479. package/dist/states/BarrageListState/BarrageListState.d.ts +0 -26
  480. package/dist/states/BarrageListState/BarrageListState.js +0 -122
  481. package/dist/states/BarrageListState/index.d.ts +0 -1
  482. package/dist/states/BarrageListState/index.js +0 -4
  483. package/dist/states/BattleState.js +0 -117
  484. package/dist/states/DeviceState.js +0 -296
  485. package/dist/states/LiveState/index.js +0 -254
  486. package/dist/states/VideoMixerState.js +0 -260
  487. package/src/components/BarrageList/Message/FaceMessage/FaceMessage.vue +0 -43
  488. package/src/components/BarrageList/Message/FaceMessage/index.ts +0 -3
  489. package/src/components/BarrageList/Message/GroupTipMessage/GroupTipMessage.vue +0 -55
  490. package/src/components/BarrageList/Message/GroupTipMessage/index.ts +0 -3
  491. package/src/components/BarrageList/Message/ImageMessage/ImageMessage.vue +0 -181
  492. package/src/components/BarrageList/Message/ImageMessage/index.ts +0 -3
  493. package/src/components/BarrageList/Message/MergerMessage/MergerMessage.vue +0 -6
  494. package/src/components/BarrageList/Message/MergerMessage/index.ts +0 -3
  495. package/src/components/BarrageList/Message/MessageLayout/MessageMeta/MessageMeta.vue +0 -70
  496. package/src/components/BarrageList/Message/MessageLayout/MessageMeta/MessageStatusIcon.vue +0 -40
  497. package/src/components/BarrageList/Message/MessageLayout/MessageMeta/index.ts +0 -3
  498. package/src/components/BarrageList/Message/RecalledMessage/RecalledMessage.vue +0 -82
  499. package/src/components/BarrageList/Message/RecalledMessage/index.ts +0 -3
  500. package/src/components/BarrageList/MessageForward/ForwardListItem.vue +0 -67
  501. package/src/components/BarrageList/MessageForward/MessageForward.vue +0 -388
  502. package/src/components/BarrageList/MessageForward/index.ts +0 -3
  503. package/src/components/LiveCoreView/PlayerControl/PlayerControlState.ts +0 -718
  504. package/src/components/StreamView/Layout/MixLayout.vue +0 -144
  505. /package/dist/components/{LiveCoreView → LiveView}/CoreViewDecorate/BattleDecorate.vue.d.ts +0 -0
  506. /package/dist/components/{LiveCoreView → LiveView}/CoreViewDecorate/BattleUserDecorate.vue.d.ts +0 -0
  507. /package/dist/components/{LiveCoreView → LiveView}/CoreViewDecorate/CoHostDecorate.vue.d.ts +0 -0
  508. /package/dist/components/{LiveCoreView → LiveView}/CoreViewDecorate/LiveCoreDecorate.vue.d.ts +0 -0
  509. /package/dist/components/{LiveCoreView → LiveView}/DefaultStreamViewUI.vue.d.ts +0 -0
  510. /package/dist/components/{LiveCoreView → LiveView}/PlayerControl/MultiResolution.vue.d.ts +0 -0
  511. /package/dist/components/{LiveCoreView → LiveView}/PlayerControl/PlayerControl.vue.d.ts +0 -0
  512. /package/dist/components/{LiveCoreView → LiveView}/PlayerControl/index.d.ts +0 -0
  513. /package/dist/components/{LiveCoreView → LiveView}/PlayerControl/index.js +0 -0
  514. /package/dist/components/{LiveCoreView → LiveView}/PlayerControl/utils/deviceDetection.d.ts +0 -0
  515. /package/dist/components/{LiveCoreView → LiveView}/PlayerControl/utils/deviceDetection.js +0 -0
  516. /package/dist/components/{LiveCoreView → LiveView}/PlayerControl/utils/fullscreenManager.d.ts +0 -0
  517. /package/dist/components/{LiveCoreView → LiveView}/PlayerControl/utils/fullscreenManager.js +0 -0
  518. /package/dist/components/{LiveCoreView → LiveView}/i18n/index.d.ts +0 -0
  519. /package/dist/components/{LiveCoreView → LiveView}/i18n/index.js +0 -0
  520. /package/dist/components/{LiveCoreView → LiveView}/index.vue.d.ts +0 -0
  521. /package/src/components/{LiveCoreView → LiveView}/CoreViewDecorate/CoHostDecorate.vue +0 -0
  522. /package/src/components/{LiveCoreView → LiveView}/CoreViewDecorate/LiveCoreDecorate.vue +0 -0
  523. /package/src/components/{LiveCoreView → LiveView}/PlayerControl/PlayerControl.module.scss +0 -0
  524. /package/src/components/{LiveCoreView → LiveView}/PlayerControl/index.ts +0 -0
  525. /package/src/components/{LiveCoreView → LiveView}/PlayerControl/utils/deviceDetection.ts +0 -0
  526. /package/src/components/{LiveCoreView → LiveView}/PlayerControl/utils/fullscreenManager.ts +0 -0
  527. /package/src/components/{LiveCoreView → LiveView}/assets/img/defeat.png +0 -0
  528. /package/src/components/{LiveCoreView → LiveView}/assets/img/draw.png +0 -0
  529. /package/src/components/{LiveCoreView → LiveView}/assets/img/victory.png +0 -0
  530. /package/src/components/{LiveCoreView → LiveView}/assets/svg/BattleOrdinaryBadge.svg +0 -0
  531. /package/src/components/{LiveCoreView → LiveView}/assets/svg/BattleTopBadge.svg +0 -0
  532. /package/src/components/{LiveCoreView → LiveView}/assets/svg/blueBkg.svg +0 -0
  533. /package/src/components/{LiveCoreView → LiveView}/assets/svg/redBkg.svg +0 -0
  534. /package/src/components/{LiveCoreView → LiveView}/assets/svg/s.svg +0 -0
  535. /package/src/components/{LiveCoreView → LiveView}/assets/svg/v.svg +0 -0
  536. /package/src/components/{LiveCoreView → LiveView}/i18n/index.ts +0 -0
@@ -0,0 +1,516 @@
1
+ import type { Ref } from 'vue';
2
+ import { computed, ref, watch } from 'vue';
3
+ import { TUIVideoQuality } from '@tencentcloud/tuiroom-engine-js';
4
+ import useRoomEngine from '../../../hooks/useRoomEngine';
5
+ import { useLiveSeatState } from '../../../states/LiveSeatState';
6
+ import { useLiveListState } from '../../../states/LiveListState';
7
+ import {
8
+ getDeviceType,
9
+ shouldRotateToLandscapeForFullscreen,
10
+ hadLandscapeRotationToUndo,
11
+ } from './utils/deviceDetection';
12
+ import {
13
+ DOMElementGetter,
14
+ EventListenerManager,
15
+ } from './utils/domHelpers';
16
+ import {
17
+ FullscreenManager,
18
+ FullscreenMode,
19
+ OrientationManager,
20
+ StyleManager,
21
+ } from './utils/fullscreenManager';
22
+ import type {
23
+ FullscreenResult
24
+ } from './utils/fullscreenManager';
25
+
26
+ // Player fill mode enum
27
+ export enum FillMode {
28
+ CONTAIN = 'contain',
29
+ COVER = 'cover',
30
+ FILL = 'fill',
31
+ }
32
+
33
+ // Resolution enum
34
+ export enum Resolution {
35
+ R360P = TUIVideoQuality.kVideoQuality_360p,
36
+ R540P = TUIVideoQuality.kVideoQuality_540p,
37
+ R720P = TUIVideoQuality.kVideoQuality_720p,
38
+ R1080P = TUIVideoQuality.kVideoQuality_1080p,
39
+ }
40
+
41
+ // Player control state interface
42
+ export interface PlayerControlState {
43
+ // State properties
44
+ isPlaying: Ref<boolean>;
45
+ currentFillMode: Ref<FillMode>;
46
+ isFullscreen: Ref<boolean>;
47
+ isLandscapeStyleMode: Ref<boolean>;
48
+ isPictureInPicture: Ref<boolean>;
49
+ currentVolume: Ref<number>;
50
+ isMuted: Ref<boolean>;
51
+
52
+ // Resolution state properties
53
+ resolutionList: Ref<Resolution[]>;
54
+ currentResolution: Ref<Resolution | undefined>;
55
+
56
+ // Basic control methods
57
+ resume: () => Promise<boolean>;
58
+ pause: () => Promise<boolean>;
59
+
60
+ // Fullscreen control methods
61
+ requestFullscreen: () => Promise<FullscreenResult>;
62
+ exitFullscreen: () => Promise<FullscreenResult>;
63
+
64
+ // Picture-in-picture control methods
65
+ requestPictureInPicture: () => Promise<boolean>;
66
+ exitPictureInPicture: () => Promise<boolean>;
67
+
68
+ // Resolution control methods
69
+ switchResolution: (resolution: Resolution) => Promise<boolean>;
70
+
71
+ // Other control methods
72
+ setVolume: (volume: number) => Promise<boolean>; // Volume range: 0-100
73
+ setMute: (muted: boolean) => Promise<boolean>;
74
+ changeFillMode: (fillMode: FillMode) => Promise<boolean>;
75
+ // Cleanup method
76
+ cleanup: () => void;
77
+ }
78
+
79
+ // Constants
80
+ const VOLUME_CONSTANTS = {
81
+ // Default volume level when component initializes (100% volume)
82
+ DEFAULT_VOLUME: 100,
83
+ // Minimum allowed volume level (silent)
84
+ MIN_VOLUME: 0,
85
+ // Maximum allowed volume level (full volume)
86
+ MAX_VOLUME: 100,
87
+ // Volume level when muted (silent)
88
+ MUTE_VOLUME: 0,
89
+ };
90
+
91
+ const TIMING_CONSTANTS = {
92
+ // Delay in milliseconds before resuming playback after leaving picture-in-picture
93
+ // Allows browser to handle state transitions naturally
94
+ PIP_RESUME_DELAY: 300,
95
+ };
96
+
97
+ const ARRAY_CONSTANTS = {
98
+ // Index of the first element in an array
99
+ FIRST_INDEX: 0,
100
+ };
101
+
102
+ // State management
103
+ const isPlaying = ref(true);
104
+ const currentFillMode = ref<FillMode>(FillMode.CONTAIN);
105
+ const isFullscreen = ref(false);
106
+ const isLandscapeStyleMode = ref(false);
107
+ const isPictureInPicture = ref(false);
108
+ const currentVolume = ref(VOLUME_CONSTANTS.DEFAULT_VOLUME);
109
+ const isMuted = ref(false); // Mute state - synced across all rooms
110
+
111
+ // Internal storage for volume restoration (not reactive)
112
+ let restoreVolume = VOLUME_CONSTANTS.DEFAULT_VOLUME;
113
+
114
+ // Resolution state management
115
+ const resolutionList = ref<Resolution[]>([]);
116
+ const currentResolution = ref<Resolution | undefined>();
117
+
118
+ const roomEngine = useRoomEngine();
119
+
120
+ /**
121
+ * Player control state management hook
122
+ */
123
+ export function usePlayerControlState(): PlayerControlState {
124
+ // Dependency injection
125
+ const { currentLive } = useLiveListState();
126
+ const { canvas } = useLiveSeatState();
127
+
128
+ // Event listener management
129
+ const eventManager = new EventListenerManager();
130
+
131
+ // Orientation listener ID for cleanup
132
+ const orientationListenerId = `player-control-${Date.now()}`;
133
+
134
+ // Computed properties
135
+ const isLandscapeStream = computed(() =>
136
+ canvas.value ? canvas.value.width > canvas.value.height : false,
137
+ );
138
+ const isPortraitStream = computed(() =>
139
+ canvas.value ? canvas.value.width < canvas.value.height : false,
140
+ );
141
+
142
+ // Device information
143
+ const deviceType = getDeviceType();
144
+
145
+ /**
146
+ * Error handling wrapper
147
+ */
148
+ const withErrorHandling = async <T>(
149
+ operation: () => Promise<T>,
150
+ operationName: string,
151
+ fallbackValue: T,
152
+ ): Promise<T> => {
153
+ try {
154
+ return await operation();
155
+ } catch (error) {
156
+ console.error(`${operationName} operation failed:`, error);
157
+ return fallbackValue;
158
+ }
159
+ };
160
+
161
+ const resume = async (): Promise<boolean> => withErrorHandling(async () => {
162
+ await roomEngine.instance?.callExperimentalAPI(JSON.stringify({
163
+ api: 'resume',
164
+ params: {},
165
+ }));
166
+ isPlaying.value = true;
167
+ return true;
168
+ }, 'Resume playback', false);
169
+
170
+ const pause = async (): Promise<boolean> => withErrorHandling(async () => {
171
+ await roomEngine.instance?.callExperimentalAPI(JSON.stringify({
172
+ api: 'pause',
173
+ params: {},
174
+ }));
175
+ isPlaying.value = false;
176
+ return true;
177
+ }, 'Pause playback', false);
178
+
179
+ /**
180
+ * Handle orientation change
181
+ */
182
+ const handleOrientationChange = (newOrientation: 'portrait' | 'landscape' | 'unknown'): void => {
183
+ if (!isFullscreen.value || !isLandscapeStream.value) {
184
+ return;
185
+ }
186
+
187
+ const elements = DOMElementGetter.getAllElements();
188
+ if (!elements.view) {
189
+ console.warn('live-core-view element not found for orientation change handling');
190
+ return;
191
+ }
192
+
193
+ StyleManager.smartApplyLandscapeStyles(elements.view, newOrientation);
194
+ };
195
+
196
+ /**
197
+ * Fullscreen control methods
198
+ */
199
+ const requestFullscreen = async (): Promise<FullscreenResult> => withErrorHandling(async () => {
200
+ const elements = DOMElementGetter.getAllElements();
201
+ const validation = DOMElementGetter.validateElements(elements);
202
+
203
+ if (!validation.isValid) {
204
+ throw new Error(`Missing required DOM elements: ${validation.missingElements.join(', ')}`);
205
+ }
206
+
207
+ const shouldRotateToLandscape = shouldRotateToLandscapeForFullscreen(deviceType, isLandscapeStream.value);
208
+
209
+ const result: FullscreenResult = await FullscreenManager.requestFullscreen(
210
+ elements.container!,
211
+ elements.view!,
212
+ deviceType,
213
+ isPortraitStream.value,
214
+ shouldRotateToLandscape,
215
+ );
216
+
217
+ if (result.success) {
218
+ isFullscreen.value = true;
219
+ } else {
220
+ console.error('Fullscreen request failed:', result.error);
221
+ }
222
+ isLandscapeStyleMode.value = result.shouldRotateToLandscape;
223
+ return result;
224
+ }, 'Request fullscreen', { success: false, mode: FullscreenMode.CSS_SIMULATED, shouldRotateToLandscape: false });
225
+
226
+ const exitFullscreen = async (): Promise<FullscreenResult> => withErrorHandling(async () => {
227
+ const elements = DOMElementGetter.getAllElements();
228
+ if (!elements.view) {
229
+ throw new Error('live-core-view element not found');
230
+ }
231
+
232
+ const hadLandscapeRotation = hadLandscapeRotationToUndo(deviceType, isLandscapeStream.value);
233
+
234
+ const result: FullscreenResult = await FullscreenManager.exitFullscreen(
235
+ elements.view,
236
+ deviceType,
237
+ hadLandscapeRotation,
238
+ );
239
+
240
+ if (result.mode === FullscreenMode.CSS_SIMULATED) {
241
+ isFullscreen.value = false;
242
+ }
243
+
244
+ if (!result.success) {
245
+ console.error('Fullscreen exit failed:', result.error);
246
+ }
247
+ isLandscapeStyleMode.value = false;
248
+ return result;
249
+ }, 'Exit fullscreen', { success: false, mode: FullscreenMode.CSS_SIMULATED, shouldRotateToLandscape: false });
250
+
251
+ /**
252
+ * Picture-in-picture control methods
253
+ */
254
+ const requestPictureInPicture = async (): Promise<boolean> => withErrorHandling(async () => {
255
+ const video = DOMElementGetter.getVideoElement();
256
+ if (!video) {
257
+ throw new Error('Video element not found');
258
+ }
259
+
260
+ if (!video.requestPictureInPicture) {
261
+ throw new Error('Picture-in-picture not supported in current environment');
262
+ }
263
+
264
+ setupVideoEventListeners();
265
+ await video.requestPictureInPicture();
266
+ return true;
267
+ }, 'Request picture-in-picture', false);
268
+
269
+ const exitPictureInPicture = async (): Promise<boolean> => withErrorHandling(async () => {
270
+ if (!document.exitPictureInPicture) {
271
+ throw new Error('Exit picture-in-picture not supported in current environment');
272
+ }
273
+
274
+ await document.exitPictureInPicture();
275
+ return true;
276
+ }, 'Exit picture-in-picture', false);
277
+
278
+ /**
279
+ * Resolution control methods
280
+ */
281
+ const switchResolution = async (resolution: Resolution): Promise<boolean> => withErrorHandling(async () => {
282
+ if (!roomEngine.instance) {
283
+ throw new Error('Room engine instance not available');
284
+ }
285
+ console.debug('Switching to resolution:', resolution);
286
+ await roomEngine.instance.callExperimentalAPI(
287
+ JSON.stringify({
288
+ api: 'switchPlaybackQuality',
289
+ params: {
290
+ quality: resolution,
291
+ autoSwitch: false,
292
+ },
293
+ }),
294
+ );
295
+ if (!isPlaying.value) {
296
+ isPlaying.value = true;
297
+ }
298
+ currentResolution.value = resolution;
299
+ return true;
300
+ }, 'Switch resolution', false);
301
+
302
+ const getResolutionList = async (roomId: string): Promise<Resolution[]> => withErrorHandling(async () => {
303
+ if (!roomEngine.instance) {
304
+ throw new Error('Room engine instance not available');
305
+ }
306
+
307
+ const resolutions = await roomEngine.instance.callExperimentalAPI(
308
+ JSON.stringify({
309
+ api: 'queryPlaybackQualityList',
310
+ params: {
311
+ roomId,
312
+ },
313
+ }),
314
+ );
315
+
316
+ return (resolutions || []) as Resolution[];
317
+ }, 'Get resolution list', []);
318
+
319
+ const initializeResolution = async (roomId: string, applyResolution = true): Promise<void> => {
320
+ try {
321
+ const availableResolutions = await getResolutionList(roomId);
322
+ resolutionList.value = availableResolutions;
323
+
324
+ if (availableResolutions.length === ARRAY_CONSTANTS.FIRST_INDEX) {
325
+ console.warn('[Resolution] No resolutions available for room:', roomId);
326
+ currentResolution.value = undefined;
327
+ return;
328
+ }
329
+
330
+ // Always set to the first available resolution when entering a room
331
+ const targetResolution = availableResolutions[ARRAY_CONSTANTS.FIRST_INDEX];
332
+ currentResolution.value = targetResolution;
333
+ if (applyResolution) {
334
+ await switchResolution(targetResolution);
335
+ }
336
+ } catch (error) {
337
+ console.error('[Resolution] Failed to initialize resolution:', error);
338
+ }
339
+ };
340
+
341
+ /**
342
+ * Other control methods
343
+ */
344
+ const setVolume = async (volume: number): Promise<boolean> => withErrorHandling(async () => {
345
+ if (volume < VOLUME_CONSTANTS.MIN_VOLUME || volume > VOLUME_CONSTANTS.MAX_VOLUME) {
346
+ throw new Error(`Volume value must be between ${VOLUME_CONSTANTS.MIN_VOLUME}-${VOLUME_CONSTANTS.MAX_VOLUME}`);
347
+ }
348
+ await roomEngine.instance?.setAudioPlayoutVolume({ volume });
349
+ currentVolume.value = volume;
350
+ restoreVolume = volume;
351
+ isMuted.value = volume == VOLUME_CONSTANTS.MUTE_VOLUME;
352
+ return true;
353
+ }, 'Set volume', false);
354
+
355
+ const setMute = async (muted: boolean): Promise<boolean> => withErrorHandling(async () => {
356
+ let volume;
357
+ if (muted) {
358
+ restoreVolume = currentVolume.value;
359
+ volume = VOLUME_CONSTANTS.MUTE_VOLUME;
360
+ } else {
361
+ volume = restoreVolume || VOLUME_CONSTANTS.DEFAULT_VOLUME;
362
+ }
363
+ await roomEngine.instance?.setAudioPlayoutVolume({ volume });
364
+ currentVolume.value = volume;
365
+ isMuted.value = muted;
366
+ return true;
367
+ }, 'Set mute', false);
368
+
369
+ const changeFillMode = async (fillMode: FillMode): Promise<boolean> => withErrorHandling(async () => {
370
+ currentFillMode.value = fillMode;
371
+ return true;
372
+ }, 'Change fill mode', false);
373
+
374
+ /**
375
+ * Handle style cleanup when exiting fullscreen
376
+ */
377
+ const handleFullscreenExit = (): void => {
378
+ try {
379
+ const elements = DOMElementGetter.getAllElements();
380
+ if (!elements.view) {
381
+ console.warn('View element not found for fullscreen exit cleanup');
382
+ return;
383
+ }
384
+
385
+ StyleManager.removeFullscreenStyles(elements.view);
386
+ StyleManager.removeLandscapeStyles(elements.view);
387
+
388
+ if (deviceType !== 'desktop') {
389
+ OrientationManager.unlockOrientation().catch(() => {
390
+ // Ignore orientation unlock errors in non-desktop environments
391
+ });
392
+ }
393
+ isLandscapeStyleMode.value = false;
394
+ } catch (error) {
395
+ console.error('Fullscreen exit cleanup failed:', error);
396
+ }
397
+ };
398
+
399
+ /**
400
+ * Event listener setup for fullscreen state changes
401
+ * Handles fullscreen API events across different browsers and visibility changes
402
+ */
403
+ const setupFullscreenEventListeners = (): void => {
404
+ const handleFullscreenChange = () => {
405
+ const isCurrentlyFullscreen = !!document.fullscreenElement;
406
+ const wasFullscreen = isFullscreen.value;
407
+
408
+ isFullscreen.value = isCurrentlyFullscreen;
409
+ if (wasFullscreen && !isCurrentlyFullscreen) {
410
+ handleFullscreenExit();
411
+ }
412
+ };
413
+
414
+ // Add fullscreen event listeners for various browsers
415
+ eventManager.addListener('fullscreenchange', document, 'fullscreenchange', handleFullscreenChange);
416
+ eventManager.addListener('webkitfullscreenchange', document, 'webkitfullscreenchange', handleFullscreenChange);
417
+ eventManager.addListener('mozfullscreenchange', document, 'mozfullscreenchange', handleFullscreenChange);
418
+ eventManager.addListener('MSFullscreenChange', document, 'MSFullscreenChange', handleFullscreenChange);
419
+
420
+ const handleVisibilityChange = () => {
421
+ if (document.visibilityState === 'visible' && isFullscreen.value) {
422
+ const actuallyFullscreen = !!document.fullscreenElement;
423
+ if (!actuallyFullscreen) {
424
+ isFullscreen.value = false;
425
+ handleFullscreenExit();
426
+ }
427
+ }
428
+ };
429
+
430
+ eventManager.addListener('visibilitychange', document, 'visibilitychange', handleVisibilityChange);
431
+ };
432
+
433
+ const setupVideoEventListeners = (): void => {
434
+ const video = DOMElementGetter.getVideoElement();
435
+ if (!video) {
436
+ console.warn('Video element not found for setting up event listeners');
437
+ return;
438
+ }
439
+
440
+ const handleEnterPictureInPicture = () => {
441
+ isPictureInPicture.value = true;
442
+ };
443
+
444
+ const handleLeavePictureInPicture = () => {
445
+ isPictureInPicture.value = false;
446
+ setTimeout(resume, TIMING_CONSTANTS.PIP_RESUME_DELAY);
447
+ };
448
+
449
+ eventManager.addListener('enterpictureinpicture', video, 'enterpictureinpicture', handleEnterPictureInPicture);
450
+ eventManager.addListener('leavepictureinpicture', video, 'leavepictureinpicture', handleLeavePictureInPicture);
451
+ };
452
+
453
+ /**
454
+ * Cleanup method
455
+ */
456
+ const cleanup = (): void => {
457
+ OrientationManager.removeOrientationListener(orientationListenerId);
458
+ eventManager.removeAllListeners();
459
+ };
460
+
461
+ setupFullscreenEventListeners();
462
+ setupVideoEventListeners();
463
+ OrientationManager.addOrientationListener(orientationListenerId, handleOrientationChange);
464
+
465
+ watch(
466
+ () => currentLive.value?.liveId,
467
+ async (newLiveId) => {
468
+ if (newLiveId) {
469
+ isPlaying.value = true;
470
+ isPictureInPicture.value = false;
471
+ isFullscreen.value = false;
472
+ resolutionList.value = [];
473
+ currentResolution.value = undefined;
474
+ // When pulling a TRTC stream, this interface has a cache, but when using TCPlayer, there is no cache
475
+ await setVolume(currentVolume.value);
476
+ await initializeResolution(newLiveId, false);
477
+
478
+ // Print player control state after entering room
479
+ console.log('[PlayerControl] State after entering room:', JSON.stringify({
480
+ isPlaying: isPlaying.value,
481
+ currentFillMode: currentFillMode.value,
482
+ isFullscreen: isFullscreen.value,
483
+ isLandscapeStyleMode: isLandscapeStyleMode.value,
484
+ isPictureInPicture: isPictureInPicture.value,
485
+ currentVolume: currentVolume.value,
486
+ resolutionList: resolutionList.value,
487
+ currentResolution: currentResolution.value,
488
+ }));
489
+ }
490
+ },
491
+ );
492
+
493
+ // Return interface implementation
494
+ return {
495
+ isPlaying,
496
+ currentFillMode,
497
+ isFullscreen,
498
+ isLandscapeStyleMode,
499
+ isPictureInPicture,
500
+ currentVolume,
501
+ isMuted,
502
+ resolutionList,
503
+ currentResolution,
504
+ resume,
505
+ pause,
506
+ requestFullscreen,
507
+ exitFullscreen,
508
+ requestPictureInPicture,
509
+ exitPictureInPicture,
510
+ switchResolution,
511
+ setVolume,
512
+ setMute,
513
+ changeFillMode,
514
+ cleanup,
515
+ };
516
+ }
@@ -73,7 +73,8 @@ export class DOMElementGetter {
73
73
  }
74
74
 
75
75
  /**
76
- * Validate if elements exist
76
+ * Validate if required elements exist for fullscreen
77
+ * Note: video element is optional because canvas rendering (TRTC SDK) doesn't use video
77
78
  */
78
79
  static validateElements(elements: { container?: HTMLElement | null; view?: HTMLElement | null; video?: HTMLVideoElement | null }): {
79
80
  isValid: boolean;
@@ -87,9 +88,8 @@ export class DOMElementGetter {
87
88
  if (elements.view === null) {
88
89
  missingElements.push('live-core-view');
89
90
  }
90
- if (elements.video === null) {
91
- missingElements.push('video');
92
- }
91
+ // Video element is not required for fullscreen (canvas rendering works without it)
92
+ // Only required for picture-in-picture feature
93
93
 
94
94
  return {
95
95
  isValid: missingElements.length === 0,
@@ -143,3 +143,67 @@ export class EventListenerManager {
143
143
  return this.listeners.size;
144
144
  }
145
145
  }
146
+
147
+ /**
148
+ * Wait for video element to be mounted in DOM
149
+ * @param timeout Maximum wait time in milliseconds
150
+ * @returns Promise that resolves with video element or null if timeout
151
+ */
152
+ export const waitForVideoMounted = (timeout = 3000): Promise<HTMLVideoElement | null> => {
153
+ return new Promise((resolve) => {
154
+ const container = document.querySelector('#atomicx-live-stream-content');
155
+ if (!container) {
156
+ resolve(null);
157
+ return;
158
+ }
159
+
160
+ let timeoutId: number | null = null;
161
+
162
+ const observer = new MutationObserver((mutations) => {
163
+ for (const mutation of mutations) {
164
+ if (mutation.type === 'childList') {
165
+ mutation.addedNodes.forEach((node) => {
166
+ if (node.nodeName === 'VIDEO') {
167
+ const video = node as HTMLVideoElement;
168
+
169
+ // Temporarily remove volumechange listener to prevent syncVolumeState interference
170
+ const originalVolumeHandler = (video as any).onvolumechange;
171
+ (video as any).onvolumechange = null;
172
+
173
+ const handleLoadedData = () => {
174
+ if (timeoutId) clearTimeout(timeoutId);
175
+ observer.disconnect();
176
+ video.removeEventListener('loadeddata', handleLoadedData);
177
+ setTimeout(() => {
178
+ (video as any).onvolumechange = originalVolumeHandler;
179
+ }, 100);
180
+ resolve(video);
181
+ };
182
+
183
+ if (video.readyState >= 2) {
184
+ if (timeoutId) clearTimeout(timeoutId);
185
+ observer.disconnect();
186
+ setTimeout(() => {
187
+ (video as any).onvolumechange = originalVolumeHandler;
188
+ }, 100);
189
+ resolve(video);
190
+ } else {
191
+ video.addEventListener('loadeddata', handleLoadedData, { once: true });
192
+ }
193
+ }
194
+ });
195
+ }
196
+ }
197
+ });
198
+
199
+ observer.observe(container, {
200
+ childList: true,
201
+ subtree: true,
202
+ });
203
+
204
+ timeoutId = window.setTimeout(() => {
205
+ observer.disconnect();
206
+ resolve(null);
207
+ }, timeout);
208
+ });
209
+ };
@@ -7,8 +7,8 @@ export const resource = {
7
7
  'Exit Picture in Picture': 'Exit Picture in Picture',
8
8
  'Fullscreen': 'Fullscreen',
9
9
  'Exit Fullscreen': 'Exit Fullscreen',
10
- 'Mute': 'Mute',
11
- 'Unmute': 'Unmute',
10
+ 'Open Speaker': 'Open Speaker',
11
+ 'Close Speaker': 'Close Speaker',
12
12
  'The system does not support picture-in-picture mode': 'The system does not support picture-in-picture mode',
13
13
  'co-Hosting': 'co-Hosting',
14
14
  'In battle': 'In battle',
@@ -16,4 +16,5 @@ export const resource = {
16
16
  '540P': '540P',
17
17
  '720P': '720P',
18
18
  '1080P': '1080P',
19
+ 'Connecting': 'Connecting',
19
20
  };
@@ -7,8 +7,8 @@ export const resource = {
7
7
  'Exit Picture in Picture': '退出画中画',
8
8
  'Fullscreen': '全屏',
9
9
  'Exit Fullscreen': '退出全屏',
10
- 'Mute': '静音',
11
- 'Unmute': '取消静音',
10
+ 'Open Speaker': '取消静音',
11
+ 'Close Speaker': '静音',
12
12
  'The system does not support picture-in-picture mode': '系统不支持画中画模式',
13
13
  'co-Hosting': '连线中',
14
14
  'In battle': 'PK中',
@@ -16,4 +16,5 @@ export const resource = {
16
16
  '540P': '标清',
17
17
  '720P': '高清',
18
18
  '1080P': '超清',
19
+ 'Connecting': '连线中',
19
20
  };
@@ -1,9 +1,12 @@
1
1
  import { addI18n } from '../../i18n';
2
2
  import DefaultStreamViewUI from './DefaultStreamViewUI.vue';
3
3
  import { enUSResource, zhCNResource } from './i18n';
4
- import LiveCoreView from './index.vue';
4
+ import LiveViewComponent from './index.vue';
5
5
 
6
6
  addI18n('en-US', { translation: enUSResource });
7
7
  addI18n('zh-CN', { translation: zhCNResource });
8
8
 
9
- export { LiveCoreView, DefaultStreamViewUI };
9
+ const LiveCoreView = LiveViewComponent;
10
+ const LiveView = LiveViewComponent;
11
+
12
+ export { LiveCoreView, LiveView, DefaultStreamViewUI };
@@ -57,7 +57,7 @@
57
57
  import { ref, computed, watch, onMounted, onBeforeUnmount, useSlots, type ComputedRef, Teleport } from 'vue';
58
58
  import { useUIKit } from '@tencentcloud/uikit-base-component-vue3';
59
59
  import { useLiveSeatState } from '../../states/LiveSeatState';
60
- import { useLiveState } from '../../states/LiveState';
60
+ import { useLiveListState } from '../../states/LiveListState';
61
61
  import { useLoginState } from '../../states/LoginState';
62
62
  import { getContentSize } from '../../utils/domOperation';
63
63
  import DefaultStreamViewUI from './DefaultStreamViewUI.vue';
@@ -70,7 +70,7 @@ import { usePlayerControlState } from './PlayerControl';
70
70
  const { isFullscreen, isLandscapeStyleMode } = usePlayerControlState();
71
71
  const { t } = useUIKit();
72
72
  const { seatList, canvas, startPlayStream, stopPlayStream } = useLiveSeatState();
73
- const { currentLive } = useLiveState();
73
+ const { currentLive } = useLiveListState();
74
74
 
75
75
  const slots = useSlots();
76
76
 
@@ -80,7 +80,7 @@ const { loginUserInfo } = useLoginState();
80
80
  const isPlayedVideo = ref(false);
81
81
  const isMounted = ref(false);
82
82
  const isAlignCenter = computed(() => {
83
- if (!isInStreamMixerComp.value && isPortraitContainer.value && widthRatio.value < heightRatio.value) {
83
+ if (!isInStreamMixerComp.value && isPortraitContainer.value && widthRatio.value < heightRatio.value && isMobile) {
84
84
  return false;
85
85
  }
86
86
  return true;
@@ -419,6 +419,7 @@ onBeforeUnmount(() => {
419
419
  position: absolute;
420
420
  top: 0;
421
421
  left: 0;
422
+ overflow: hidden;
422
423
  }
423
424
 
424
425
  .live-core-ui {