tuikit-atomicx-vue3 0.1.1 → 3.3.0-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/MessageInput.vue_vue_type_script_setup_true_lang-XRL7A5Gj.js +123 -0
- package/dist/{PopoverTrigger-ByOI-vdB.js → PopoverTrigger-BKOIHfdS.js} +1 -1
- package/dist/{PopperContent-BaiCn-CA.js → PopperContent-DtL7HVWz.js} +29 -21
- package/dist/baseComp/TuiSwitch.js +2 -2
- package/dist/baseComp/index.d.ts +0 -1
- package/dist/baseComp/index.js +1 -3
- package/dist/chat/index.d.ts +2230 -4090
- package/dist/chat/index.js +16 -8
- package/dist/components/Avatar/Avatar.js +35 -10
- package/dist/components/Avatar/Avatar.vue.d.ts +1 -1
- package/dist/components/BarrageInput/BarrageInput.vue.d.ts +2 -2
- package/dist/components/BarrageInput/BarrageInputH5.js +30 -10
- package/dist/components/BarrageInput/BarrageInputH5.vue.d.ts +2 -2
- package/dist/components/BarrageInput/EmojiPicker/EmojiPicker.js +1 -1
- package/dist/components/BarrageInput/TextEditor/index.js +13 -5
- package/dist/components/BarrageInput/constants.d.ts +3 -0
- package/dist/components/BarrageInput/constants.js +6 -0
- package/dist/components/BarrageInput/i18n/en-US/index.d.ts +2 -0
- package/dist/components/BarrageInput/i18n/en-US/index.js +3 -1
- package/dist/components/BarrageInput/i18n/zh-CN/index.d.ts +2 -0
- package/dist/components/BarrageInput/i18n/zh-CN/index.js +3 -1
- package/dist/components/BarrageInput/index.d.ts +18 -18
- package/dist/components/BarrageList/BarrageList.js +5 -6
- package/dist/components/BarrageList/BarrageListH5.js +5 -6
- package/dist/components/BarrageList/Message/MessageLayout/MessageLayout.js +1 -1
- package/dist/components/BarrageList/Message/MessageLayout/MessageMeta/MessageMeta.js +5 -4
- package/dist/components/BarrageList/Message/MessageLayout/MessageMeta/MessageMeta.vue.d.ts +2 -2
- package/dist/components/BarrageList/Message/MessageLayout/MessageMeta/MessageStatusIcon.js +7 -4
- package/dist/components/BarrageList/Message/TextMessage/TextMessage.js +1 -1
- package/dist/components/ChatSetting/ChatSetting.js +8 -11
- package/dist/components/ChatSetting/GroupChatSetting/GroupActions/GroupActions.js +2 -1
- package/dist/components/ChatSetting/GroupChatSetting/GroupChatSetting.js +2 -1
- package/dist/components/ChatSetting/GroupChatSetting/GroupInfo/GroupInfo.js +2 -2
- package/dist/components/ChatSetting/GroupChatSetting/GroupManagement/GroupManagement.js +2 -1
- package/dist/components/ChatSetting/GroupChatSetting/GroupMembers/GroupMembers.js +2 -2
- package/dist/components/ChatSetting/SettingItem/SettingItem.js +116 -89
- package/dist/components/ChatSetting/i18n/index.d.ts +191 -1
- package/dist/components/ChatSetting/i18n/index.js +3 -4
- package/dist/components/ChatSetting/index.js +4 -0
- package/dist/components/ContactList/ContactInfo/BlacklistInfo/BlacklistInfo.js +78 -0
- package/dist/components/ContactList/ContactInfo/BlacklistInfo/BlacklistInfo.vue.d.ts +33 -0
- package/dist/components/ContactList/ContactInfo/BlacklistInfo/index.d.ts +1 -0
- package/dist/components/ContactList/ContactInfo/BlacklistInfo/index.js +4 -0
- package/dist/components/ContactList/ContactInfo/ContactInfo.js +257 -0
- package/dist/components/ContactList/ContactInfo/ContactInfo.vue.d.ts +56 -0
- package/dist/components/ContactList/ContactInfo/FriendApplicationInfo/FriendApplicationInfo.js +96 -0
- package/dist/components/ContactList/ContactInfo/FriendApplicationInfo/FriendApplicationInfo.vue.d.ts +37 -0
- package/dist/components/ContactList/ContactInfo/FriendApplicationInfo/index.d.ts +1 -0
- package/dist/components/ContactList/ContactInfo/FriendApplicationInfo/index.js +4 -0
- package/dist/components/ContactList/ContactInfo/FriendInfo/FriendInfo.js +228 -0
- package/dist/components/ContactList/ContactInfo/FriendInfo/FriendInfo.vue.d.ts +39 -0
- package/dist/components/ContactList/ContactInfo/FriendInfo/index.d.ts +1 -0
- package/dist/components/ContactList/ContactInfo/FriendInfo/index.js +4 -0
- package/dist/components/ContactList/ContactInfo/GroupApplicationInfo/GroupApplicationInfo.js +101 -0
- package/dist/components/ContactList/ContactInfo/GroupApplicationInfo/GroupApplicationInfo.vue.d.ts +37 -0
- package/dist/components/ContactList/ContactInfo/GroupApplicationInfo/index.d.ts +1 -0
- package/dist/components/ContactList/ContactInfo/GroupApplicationInfo/index.js +4 -0
- package/dist/components/ContactList/ContactInfo/GroupInfo/GroupInfo.js +154 -0
- package/dist/components/ContactList/ContactInfo/GroupInfo/GroupInfo.vue.d.ts +37 -0
- package/dist/components/ContactList/ContactInfo/GroupInfo/index.d.ts +1 -0
- package/dist/components/ContactList/ContactInfo/GroupInfo/index.js +4 -0
- package/dist/components/ContactList/ContactInfo/SearchGroupInfo/SearchGroupInfo.js +141 -0
- package/dist/components/ContactList/ContactInfo/SearchGroupInfo/SearchGroupInfo.vue.d.ts +32 -0
- package/dist/components/ContactList/ContactInfo/SearchGroupInfo/index.d.ts +1 -0
- package/dist/components/ContactList/ContactInfo/SearchGroupInfo/index.js +4 -0
- package/dist/components/ContactList/ContactInfo/SearchUserInfo/SearchUserInfo.js +122 -0
- package/dist/components/ContactList/ContactInfo/SearchUserInfo/SearchUserInfo.vue.d.ts +33 -0
- package/dist/components/ContactList/ContactInfo/SearchUserInfo/index.d.ts +1 -0
- package/dist/components/ContactList/ContactInfo/SearchUserInfo/index.js +4 -0
- package/dist/components/ContactList/ContactInfo/index.d.ts +8 -0
- package/dist/components/ContactList/ContactInfo/index.js +18 -0
- package/dist/components/ContactList/ContactList.js +281 -0
- package/dist/components/ContactList/ContactList.vue.d.ts +41 -0
- package/dist/components/ContactList/ContactListItem/BlacklistItem/BlacklistItem.js +52 -0
- package/dist/components/ContactList/ContactListItem/BlacklistItem/BlacklistItem.vue.d.ts +25 -0
- package/dist/components/ContactList/ContactListItem/BlacklistItem/index.d.ts +1 -0
- package/dist/components/ContactList/ContactListItem/BlacklistItem/index.js +4 -0
- package/dist/components/ContactList/ContactListItem/ContactListItem.js +4 -0
- package/dist/components/ContactList/ContactListItem/ContactListItem.vue.d.ts +30 -0
- package/dist/components/ContactList/ContactListItem/FriendApplicationItem/FriendApplicationItem.js +76 -0
- package/dist/components/ContactList/ContactListItem/FriendApplicationItem/FriendApplicationItem.vue.d.ts +27 -0
- package/dist/components/ContactList/ContactListItem/FriendApplicationItem/index.d.ts +1 -0
- package/dist/components/ContactList/ContactListItem/FriendApplicationItem/index.js +4 -0
- package/dist/components/ContactList/ContactListItem/FriendItem/FriendItem.js +53 -0
- package/dist/components/ContactList/ContactListItem/FriendItem/FriendItem.vue.d.ts +25 -0
- package/dist/components/ContactList/ContactListItem/FriendItem/index.d.ts +1 -0
- package/dist/components/ContactList/ContactListItem/FriendItem/index.js +4 -0
- package/dist/components/ContactList/ContactListItem/GroupApplicationItem/GroupApplicationItem.js +79 -0
- package/dist/components/ContactList/ContactListItem/GroupApplicationItem/GroupApplicationItem.vue.d.ts +27 -0
- package/dist/components/ContactList/ContactListItem/GroupApplicationItem/index.d.ts +1 -0
- package/dist/components/ContactList/ContactListItem/GroupApplicationItem/index.js +4 -0
- package/dist/components/ContactList/ContactListItem/GroupItem/GroupItem.js +52 -0
- package/dist/components/ContactList/ContactListItem/GroupItem/GroupItem.vue.d.ts +25 -0
- package/dist/components/ContactList/ContactListItem/GroupItem/index.d.ts +1 -0
- package/dist/components/ContactList/ContactListItem/GroupItem/index.js +4 -0
- package/dist/components/ContactList/ContactListItem/index.d.ts +6 -0
- package/dist/components/ContactList/ContactListItem/index.js +95 -0
- package/dist/components/ContactList/ContactSearch/ContactSearch.js +85 -0
- package/dist/components/ContactList/ContactSearch/ContactSearch.vue.d.ts +8 -0
- package/dist/components/ContactList/ContactSearch/index.d.ts +1 -0
- package/dist/components/ContactList/ContactSearch/index.js +4 -0
- package/dist/components/ContactList/constants/const.d.ts +3 -0
- package/dist/components/ContactList/constants/const.js +6 -0
- package/dist/components/ContactList/hooks/index.d.ts +1 -0
- package/dist/components/ContactList/hooks/index.js +4 -0
- package/dist/components/ContactList/hooks/useContactList.d.ts +9 -0
- package/dist/components/ContactList/hooks/useContactList.js +18 -0
- package/dist/components/ContactList/i18n/en-US.d.ts +77 -0
- package/dist/components/ContactList/i18n/en-US.js +80 -0
- package/dist/components/ContactList/i18n/index.d.ts +4 -0
- package/dist/components/ContactList/i18n/index.js +6 -0
- package/dist/components/ContactList/i18n/zh-CN.d.ts +77 -0
- package/dist/components/ContactList/i18n/zh-CN.js +80 -0
- package/dist/components/ContactList/index.d.ts +310 -0
- package/dist/components/ContactList/index.js +16 -0
- package/dist/components/ConversationList/ConversationActions/ConversationActions.js +31 -46
- package/dist/components/ConversationList/ConversationActions/ConversationActions.vue.d.ts +1 -10
- package/dist/components/ConversationList/ConversationCreate/ConversationCreate.js +160 -100
- package/dist/components/ConversationList/ConversationCreate/ConversationCreate.vue.d.ts +0 -3
- package/dist/components/ConversationList/ConversationCreate/ConversationCreateButton/ConversationCreateButton.js +79 -17
- package/dist/components/ConversationList/ConversationCreate/ConversationCreateButton/ConversationCreateButton.vue.d.ts +6 -12
- package/dist/components/ConversationList/ConversationCreate/ConversationCreateGroupDetail/ConversationCreateGroupDetail.js +78 -158
- package/dist/components/ConversationList/ConversationCreate/ConversationCreateGroupDetail/ConversationCreateGroupDetail.vue.d.ts +5 -4
- package/dist/components/ConversationList/ConversationCreate/ConversationCreateUserSelectList/ConversationCreateUserSelectList.js +38 -207
- package/dist/components/ConversationList/ConversationCreate/ConversationCreateUserSelectList/ConversationCreateUserSelectList.vue.d.ts +3 -9
- package/dist/components/ConversationList/ConversationCreate/ConversationGroupTypeInfo/ConversationGroupTypeInfo.js +35 -23
- package/dist/components/ConversationList/ConversationCreate/ConversationGroupTypeInfo/ConversationGroupTypeInfo.vue.d.ts +2 -11
- package/dist/components/ConversationList/ConversationCreate/ConversationGroupTypeInfo/index.js +1 -2
- package/dist/components/ConversationList/ConversationCreate/ConversationGroupTypeInfo/type.d.ts +2 -7
- package/dist/components/ConversationList/ConversationCreate/ConversationGroupTypeInfo/type.js +6 -14
- package/dist/components/ConversationList/ConversationCreate/index.d.ts +0 -2
- package/dist/components/ConversationList/ConversationCreate/index.js +5 -9
- package/dist/components/ConversationList/ConversationList.js +51 -39
- package/dist/components/ConversationList/ConversationList.vue.d.ts +654 -1510
- package/dist/components/ConversationList/ConversationListContent/ConversationListContent.js +4 -4
- package/dist/components/ConversationList/ConversationListContent/ConversationListContent.vue.d.ts +1 -1
- package/dist/components/ConversationList/ConversationPlaceHolder/ConversationPlaceHolder.js +2 -2
- package/dist/components/ConversationList/ConversationPreview/ConversationPreview.vue.d.ts +596 -1404
- package/dist/components/ConversationList/ConversationPreview/ConversationPreviewAbstract.js +1 -1
- package/dist/components/ConversationList/ConversationPreview/ConversationPreviewUI.js +13 -29
- package/dist/components/ConversationList/ConversationPreview/ConversationPreviewUI.vue.d.ts +146 -348
- package/dist/components/ConversationList/ConversationPreview/index.js +3 -3
- package/dist/components/ConversationList/ConversationPreview/utils.js +8 -8
- package/dist/components/ConversationList/ConversationSearch/ConversationSearch.js +5 -5
- package/dist/components/ConversationList/ConversationSearch/ConversationSearch.vue.d.ts +8 -8
- package/dist/components/ConversationList/hooks/useConversation.d.ts +6 -0
- package/dist/components/ConversationList/hooks/useConversation.js +20 -0
- package/dist/components/ConversationList/hooks/useConversationCreate.d.ts +5 -0
- package/dist/components/ConversationList/hooks/useConversationCreate.js +24 -0
- package/dist/components/ConversationList/i18n/en-US.d.ts +16 -0
- package/dist/components/ConversationList/i18n/en-US.js +25 -7
- package/dist/components/ConversationList/i18n/zh-CN.d.ts +16 -0
- package/dist/components/ConversationList/i18n/zh-CN.js +24 -6
- package/dist/components/ConversationList/index.d.ts +2096 -4595
- package/dist/components/{LiveStreamView → LiveCoreView}/DefaultStreamViewUI.js +1 -1
- package/dist/components/LiveCoreView/index.d.ts +4 -0
- package/dist/components/{LiveStreamView → LiveCoreView}/index.js +68 -74
- package/dist/components/LiveList/LiveList.js +71 -45
- package/dist/components/LiveList/LiveListH5.js +14 -15
- package/dist/components/LiveScenePanel/CameraSettingDialog.js +1 -2
- package/dist/components/LiveScenePanel/icons/AddIcon.js +2 -2
- package/dist/components/LiveScenePanel/icons/CameraIcon.js +2 -2
- package/dist/components/LiveScenePanel/icons/CameraMirror.js +2 -2
- package/dist/components/LiveScenePanel/icons/CameraUnmirror.js +2 -2
- package/dist/components/LiveScenePanel/icons/ImageIcon.js +2 -2
- package/dist/components/LiveScenePanel/icons/MoreIcon.js +2 -2
- package/dist/components/LiveScenePanel/icons/ScreenIcon.js +2 -2
- package/dist/components/MessageInput/AttachmentPicker/index.js +1 -1
- package/dist/components/MessageInput/EmojiPicker/EmojiPicker.js +1 -1
- package/dist/components/MessageInput/MessageInput.js +1 -1
- package/dist/components/MessageInput/QuotedMessagePreview/index.js +2 -2
- package/dist/components/MessageInput/SendButton/index.js +1 -1
- package/dist/components/MessageInput/TextEditor/index.js +6 -5
- package/dist/components/MessageInput/i18n/index.d.ts +24 -1
- package/dist/components/MessageInput/i18n/index.js +7 -8
- package/dist/components/MessageInput/index.d.ts +409 -6
- package/dist/components/MessageInput/index.js +23 -125
- package/dist/components/MessageList/Message/AudioMessage/PlayButton.js +3 -3
- package/dist/components/MessageList/Message/ImageMessage/ImageMessage.js +2 -2
- package/dist/components/MessageList/Message/MessageLayout/MessageActionDropdown/MessageActionDropdown.js +3 -3
- package/dist/components/MessageList/Message/MessageLayout/MessageActionDropdown/MessageActionDropdown.vue.d.ts +5 -5
- package/dist/components/MessageList/Message/MessageLayout/MessageLayout.js +1 -1
- package/dist/components/MessageList/Message/MessageLayout/MessageMeta/MessageMeta.js +34 -30
- package/dist/components/MessageList/Message/MessageLayout/MessageMeta/MessageMeta.vue.d.ts +0 -10
- package/dist/components/MessageList/MessageForward/MessageForward.js +4 -4
- package/dist/components/MessageList/MessageList.js +66 -60
- package/dist/components/MessageList/MessageList.vue.d.ts +3 -3
- package/dist/components/MessageList/ScrollToBottom/ScrollToBottom.js +32 -0
- package/dist/components/MessageList/ScrollToBottom/ScrollToBottom.vue.d.ts +6 -0
- package/dist/components/MessageList/ScrollToBottom/index.d.ts +3 -0
- package/dist/components/MessageList/ScrollToBottom/index.js +4 -0
- package/dist/components/MessageList/i18n/en-US.d.ts +5 -0
- package/dist/components/MessageList/i18n/en-US.js +6 -1
- package/dist/components/MessageList/i18n/index.d.ts +85 -1
- package/dist/components/MessageList/i18n/index.js +7 -8
- package/dist/components/MessageList/i18n/zh-CN.d.ts +5 -0
- package/dist/components/MessageList/i18n/zh-CN.js +6 -1
- package/dist/components/MessageList/index.js +4 -0
- package/dist/components/Search/Search.js +4 -4
- package/dist/components/Search/Search.vue.d.ts +4 -4
- package/dist/components/Search/SearchAdvanced/DateRangePicker/DateRangePicker.js +15 -9
- package/dist/components/Search/SearchAdvanced/MessageAdvanced/MessageAdvanced.js +12 -7
- package/dist/components/Search/SearchAdvanced/SearchAdvanced.js +2 -2
- package/dist/components/Search/SearchAdvanced/SearchTab/SearchTab.js +10 -5
- package/dist/components/Search/SearchAdvanced/UserAdvanced/UserAdvanced.js +10 -10
- package/dist/components/Search/SearchBar/SearchBar.js +3 -2
- package/dist/components/Search/SearchResults/EmptyResult/EmptyResult.js +1 -1
- package/dist/components/Search/SearchResults/SearchResults.js +82 -69
- package/dist/components/Search/SearchResults/SearchResultsItem/Conversation/Conversation.js +8 -8
- package/dist/components/Search/SearchResults/SearchResultsItem/utils/highlightText.d.ts +5 -6
- package/dist/components/Search/i18n/en-US/Search.js +9 -9
- package/dist/components/Search/i18n/zh-CN/Search.js +13 -13
- package/dist/components/Search/index.d.ts +6 -6
- package/dist/components/StreamMixer/LocalMixer/MixerControl.js +14 -10
- package/dist/components/StreamMixer/LocalMixer/index.js +81 -56
- package/dist/components/StreamMixer/icons/CameraMirror.js +2 -2
- package/dist/components/StreamMixer/icons/Delete.js +2 -2
- package/dist/components/StreamMixer/icons/Down.js +2 -2
- package/dist/components/StreamMixer/icons/Rotation.js +2 -2
- package/dist/components/StreamMixer/icons/Up.js +2 -2
- package/dist/components/StreamMixer/index.js +2 -2
- package/dist/components/StreamView/common/StreamCover/index.js +2 -2
- package/dist/components/UserPicker/components/TreeMode/TreeNode.js +2 -2
- package/dist/components/UserPicker/i18n/index.d.ts +15 -1
- package/dist/components/UserPicker/i18n/index.js +3 -4
- package/dist/components/UserPicker/index.d.ts +0 -1
- package/dist/components/UserPicker/index.js +6 -3
- package/dist/components/VideoSettingPanel/VideoPreview.js +3 -4
- package/dist/components/VideoSettingPanel/VideoProfile.js +3 -4
- package/dist/components/VideoSettingPanel/i18n/en-US/index.d.ts +5 -0
- package/dist/components/VideoSettingPanel/i18n/en-US/index.js +8 -3
- package/dist/components/VideoSettingPanel/i18n/zh-CN/index.d.ts +5 -0
- package/dist/components/VideoSettingPanel/i18n/zh-CN/index.js +8 -3
- package/dist/components/VideoSettingPanel/index.js +3 -3
- package/dist/hooks/useLongPress.d.ts +4 -4
- package/dist/hooks/useMessageActions.js +5 -5
- package/dist/hooks/useMouseHover.d.ts +7 -5
- package/dist/hooks/useMouseHover.js +3 -1
- package/dist/index.js +12 -6
- package/dist/rtc/index.d.ts +22 -20
- package/dist/rtc/index.js +6 -3
- package/dist/states/BarrageListState/BarrageListState.js +3 -2
- package/dist/states/CoHostState.d.ts +1 -1
- package/dist/states/CoHostState.js +59 -62
- package/dist/states/ContactListState/ContactListState.d.ts +16 -16
- package/dist/states/ContactListState/ContactListState.js +20 -20
- package/dist/states/ConversationListState/ConversationListState.d.ts +13 -12
- package/dist/states/ConversationListState/ConversationListState.js +19 -19
- package/dist/states/LiveSeatState/seatEventManager.js +3 -5
- package/dist/states/LiveSeatState/usePlayStream/MixStreamPlayer.js +9 -0
- package/dist/states/LiveState/index.d.ts +4 -4
- package/dist/states/LiveState/index.js +4 -2
- package/dist/states/LoginState.js +1 -3
- package/dist/states/MessageInputState/MessageInputState.js +18 -18
- package/dist/states/SearchState.d.ts +2 -2
- package/dist/states/SearchState.js +124 -127
- package/dist/styles/index.css +1954 -1070
- package/dist/types/contact.d.ts +145 -9
- package/dist/types/conversation.d.ts +36 -28
- package/dist/types/conversation.js +22 -0
- package/dist/types/index.js +5 -3
- package/dist/types/live.d.ts +2 -3
- package/dist/types/types.d.ts +0 -8
- package/dist/types/types.js +0 -10
- package/dist/utils/time.d.ts +2 -2
- package/dist/utils/time.js +253 -1471
- package/package.json +23 -5
- package/src/baseComp/View/View.vue +1 -2
- package/src/baseComp/index.ts +1 -2
- package/src/chat/index.ts +11 -0
- package/src/components/Avatar/Avatar.vue +12 -11
- package/src/components/BarrageInput/BarrageInputH5.vue +36 -9
- package/src/components/BarrageInput/TextEditor/TextEditor.vue +13 -5
- package/src/components/BarrageInput/constants.ts +3 -0
- package/src/components/BarrageInput/i18n/en-US/index.ts +2 -0
- package/src/components/BarrageInput/i18n/zh-CN/index.ts +2 -0
- package/src/components/BarrageList/BarrageList.vue +2 -2
- package/src/components/BarrageList/BarrageListH5.vue +2 -2
- package/src/components/BarrageList/Message/MessageLayout/MessageLayout.vue +0 -1
- package/src/components/BarrageList/Message/MessageLayout/MessageMeta/MessageMeta.vue +5 -2
- package/src/components/BarrageList/Message/MessageLayout/MessageMeta/MessageStatusIcon.vue +7 -3
- package/src/components/BarrageList/Message/TextMessage/TextMessage.vue +3 -3
- package/src/components/ChatSetting/ChatSetting.vue +6 -10
- package/src/components/ChatSetting/GroupChatSetting/GroupInfo/GroupInfo.vue +1 -1
- package/src/components/ChatSetting/SettingItem/SettingItem.vue +40 -36
- package/src/components/ChatSetting/i18n/index.ts +3 -5
- package/src/components/ChatSetting/index.ts +5 -1
- package/src/components/ContactList/ContactInfo/BlacklistInfo/BlacklistInfo.scss +50 -0
- package/src/components/ContactList/ContactInfo/BlacklistInfo/BlacklistInfo.vue +71 -0
- package/src/components/ContactList/ContactInfo/BlacklistInfo/index.ts +1 -0
- package/src/components/ContactList/ContactInfo/ContactInfo.scss +33 -0
- package/src/components/ContactList/ContactInfo/ContactInfo.vue +256 -0
- package/src/components/ContactList/ContactInfo/FriendApplicationInfo/FriendApplicationInfo.scss +82 -0
- package/src/components/ContactList/ContactInfo/FriendApplicationInfo/FriendApplicationInfo.vue +88 -0
- package/src/components/ContactList/ContactInfo/FriendApplicationInfo/index.ts +1 -0
- package/src/components/ContactList/ContactInfo/FriendInfo/FriendInfo.scss +92 -0
- package/src/components/ContactList/ContactInfo/FriendInfo/FriendInfo.vue +219 -0
- package/src/components/ContactList/ContactInfo/FriendInfo/index.ts +1 -0
- package/src/components/ContactList/ContactInfo/GroupApplicationInfo/GroupApplicationInfo.scss +82 -0
- package/src/components/ContactList/ContactInfo/GroupApplicationInfo/GroupApplicationInfo.vue +99 -0
- package/src/components/ContactList/ContactInfo/GroupApplicationInfo/index.ts +1 -0
- package/src/components/ContactList/ContactInfo/GroupInfo/GroupInfo.scss +52 -0
- package/src/components/ContactList/ContactInfo/GroupInfo/GroupInfo.vue +146 -0
- package/src/components/ContactList/ContactInfo/GroupInfo/index.ts +1 -0
- package/src/components/ContactList/ContactInfo/SearchGroupInfo/SearchGroupInfo.scss +111 -0
- package/src/components/ContactList/ContactInfo/SearchGroupInfo/SearchGroupInfo.vue +147 -0
- package/src/components/ContactList/ContactInfo/SearchGroupInfo/index.ts +1 -0
- package/src/components/ContactList/ContactInfo/SearchUserInfo/SearchUserInfo.scss +111 -0
- package/src/components/ContactList/ContactInfo/SearchUserInfo/SearchUserInfo.vue +128 -0
- package/src/components/ContactList/ContactInfo/SearchUserInfo/index.ts +1 -0
- package/src/components/ContactList/ContactInfo/index.ts +8 -0
- package/src/components/ContactList/ContactList.scss +124 -0
- package/src/components/ContactList/ContactList.vue +299 -0
- package/src/components/ContactList/ContactListItem/BlacklistItem/BlacklistItem.scss +39 -0
- package/src/components/ContactList/ContactListItem/BlacklistItem/BlacklistItem.vue +47 -0
- package/src/components/ContactList/ContactListItem/BlacklistItem/index.ts +1 -0
- package/src/components/ContactList/ContactListItem/ContactListItem.vue +98 -0
- package/src/components/ContactList/ContactListItem/FriendApplicationItem/FriendApplicationItem.scss +58 -0
- package/src/components/ContactList/ContactListItem/FriendApplicationItem/FriendApplicationItem.vue +70 -0
- package/src/components/ContactList/ContactListItem/FriendApplicationItem/index.ts +1 -0
- package/src/components/ContactList/ContactListItem/FriendItem/FriendItem.scss +39 -0
- package/src/components/ContactList/ContactListItem/FriendItem/FriendItem.vue +47 -0
- package/src/components/ContactList/ContactListItem/FriendItem/index.ts +1 -0
- package/src/components/ContactList/ContactListItem/GroupApplicationItem/GroupApplicationItem.scss +57 -0
- package/src/components/ContactList/ContactListItem/GroupApplicationItem/GroupApplicationItem.vue +78 -0
- package/src/components/ContactList/ContactListItem/GroupApplicationItem/index.ts +1 -0
- package/src/components/ContactList/ContactListItem/GroupItem/GroupItem.scss +39 -0
- package/src/components/ContactList/ContactListItem/GroupItem/GroupItem.vue +47 -0
- package/src/components/ContactList/ContactListItem/GroupItem/index.ts +1 -0
- package/src/components/ContactList/ContactListItem/index.ts +6 -0
- package/src/components/ContactList/ContactSearch/ContactSearch.scss +58 -0
- package/src/components/ContactList/ContactSearch/ContactSearch.vue +98 -0
- package/src/components/ContactList/ContactSearch/index.ts +1 -0
- package/src/components/ContactList/constants/const.ts +7 -0
- package/src/components/ContactList/hooks/index.ts +1 -0
- package/src/components/ContactList/hooks/useContactList.ts +21 -0
- package/src/components/ContactList/i18n/en-US.ts +77 -0
- package/src/components/ContactList/i18n/index.ts +4 -0
- package/src/components/ContactList/i18n/zh-CN.ts +77 -0
- package/src/components/ContactList/index.ts +18 -0
- package/src/components/ConversationList/ConversationActions/ConversationActions.scss +34 -35
- package/src/components/ConversationList/ConversationActions/ConversationActions.vue +15 -29
- package/src/components/ConversationList/ConversationCreate/ConversationCreate.scss +11 -37
- package/src/components/ConversationList/ConversationCreate/ConversationCreate.vue +154 -69
- package/src/components/ConversationList/ConversationCreate/ConversationCreateButton/ConversationCreateButton.scss +37 -1
- package/src/components/ConversationList/ConversationCreate/ConversationCreateButton/ConversationCreateButton.vue +70 -15
- package/src/components/ConversationList/ConversationCreate/ConversationCreateGroupDetail/ConversationCreateGroupDetail.scss +19 -66
- package/src/components/ConversationList/ConversationCreate/ConversationCreateGroupDetail/ConversationCreateGroupDetail.vue +72 -139
- package/src/components/ConversationList/ConversationCreate/ConversationCreateUserSelectList/ConversationCreateUserSelectList.scss +5 -129
- package/src/components/ConversationList/ConversationCreate/ConversationCreateUserSelectList/ConversationCreateUserSelectList.vue +42 -183
- package/src/components/ConversationList/ConversationCreate/ConversationGroupTypeInfo/ConversationGroupTypeInfo.scss +14 -11
- package/src/components/ConversationList/ConversationCreate/ConversationGroupTypeInfo/ConversationGroupTypeInfo.vue +23 -18
- package/src/components/ConversationList/ConversationCreate/ConversationGroupTypeInfo/type.ts +2 -8
- package/src/components/ConversationList/ConversationCreate/index.ts +0 -2
- package/src/components/ConversationList/ConversationList.scss +1 -0
- package/src/components/ConversationList/ConversationList.vue +44 -25
- package/src/components/ConversationList/ConversationListContent/ConversationListContent.scss +2 -5
- package/src/components/ConversationList/ConversationPlaceHolder/ConversationPlaceHolder.vue +2 -2
- package/src/components/ConversationList/ConversationPreview/ConversationPreviewAbstract.vue +1 -1
- package/src/components/ConversationList/ConversationPreview/ConversationPreviewUI.vue +6 -19
- package/src/components/ConversationList/ConversationPreview/utils.ts +11 -11
- package/src/components/ConversationList/hooks/useConversation.ts +21 -0
- package/src/components/ConversationList/hooks/useConversationCreate.ts +29 -0
- package/src/components/ConversationList/i18n/en-US.ts +26 -6
- package/src/components/ConversationList/i18n/zh-CN.ts +25 -5
- package/src/components/{LiveStreamView → LiveCoreView}/index.ts +4 -3
- package/src/components/{LiveStreamView → LiveCoreView}/index.vue +109 -88
- package/src/components/LiveList/LiveList.vue +94 -38
- package/src/components/LiveList/LiveListH5.vue +47 -23
- package/src/components/MessageInput/MessageInput.module.scss +1 -1
- package/src/components/MessageInput/QuotedMessagePreview/QuotedMessagePreview.vue +2 -2
- package/src/components/MessageInput/SendButton/SendButton.vue +1 -1
- package/src/components/MessageInput/TextEditor/Editor.scss +3 -2
- package/src/components/MessageInput/TextEditor/TextEditor.module.scss +1 -0
- package/src/components/MessageInput/TextEditor/TextEditor.vue +2 -0
- package/src/components/MessageInput/i18n/index.ts +1 -7
- package/src/components/MessageInput/index.ts +25 -8
- package/src/components/MessageList/Message/MessageLayout/MessageActionDropdown/MessageActionDropdown.vue +4 -4
- package/src/components/MessageList/Message/MessageLayout/MessageLayout.vue +0 -1
- package/src/components/MessageList/Message/MessageLayout/MessageMeta/MessageMeta.vue +16 -17
- package/src/components/MessageList/MessageForward/MessageForward.vue +2 -2
- package/src/components/MessageList/MessageList.vue +21 -5
- package/src/components/MessageList/ScrollToBottom/ScrollToBottom.vue +50 -0
- package/src/components/MessageList/ScrollToBottom/index.ts +5 -0
- package/src/components/MessageList/i18n/en-US.ts +5 -0
- package/src/components/MessageList/i18n/index.ts +1 -5
- package/src/components/MessageList/i18n/zh-CN.ts +5 -0
- package/src/components/MessageList/index.ts +4 -1
- package/src/components/Search/Search.vue +0 -4
- package/src/components/Search/SearchAdvanced/DateRangePicker/DateRangePicker.vue +125 -38
- package/src/components/Search/SearchAdvanced/MessageAdvanced/MessageAdvanced.vue +24 -16
- package/src/components/Search/SearchAdvanced/SearchAdvanced.vue +9 -7
- package/src/components/Search/SearchAdvanced/SearchTab/SearchTab.vue +4 -3
- package/src/components/Search/SearchAdvanced/UserAdvanced/UserAdvanced.scss +0 -1
- package/src/components/Search/SearchAdvanced/UserAdvanced/UserAdvanced.vue +57 -23
- package/src/components/Search/SearchBar/SearchBar.scss +0 -2
- package/src/components/Search/SearchBar/SearchBar.vue +7 -5
- package/src/components/Search/SearchResults/EmptyResult/EmptyResult.vue +4 -2
- package/src/components/Search/SearchResults/SearchResults.scss +5 -11
- package/src/components/Search/SearchResults/SearchResults.vue +25 -29
- package/src/components/Search/SearchResults/SearchResultsItem/Conversation/Conversation.scss +1 -9
- package/src/components/Search/SearchResults/SearchResultsItem/utils/highlightText.ts +15 -16
- package/src/components/Search/i18n/en-US/Search.ts +9 -9
- package/src/components/Search/i18n/zh-CN/Search.ts +13 -13
- package/src/components/StreamMixer/LocalMixer/MixerControl.vue +20 -15
- package/src/components/StreamMixer/LocalMixer/index.vue +130 -57
- package/src/components/StreamMixer/index.vue +3 -3
- package/src/components/UserPicker/i18n/index.ts +1 -5
- package/src/components/UserPicker/index.ts +4 -3
- package/src/components/VideoSettingPanel/VideoPreview.vue +13 -8
- package/src/components/VideoSettingPanel/VideoProfile.vue +5 -5
- package/src/components/VideoSettingPanel/i18n/en-US/index.ts +8 -3
- package/src/components/VideoSettingPanel/i18n/zh-CN/index.ts +8 -3
- package/src/components/VideoSettingPanel/index.vue +15 -9
- package/src/hooks/useLongPress.ts +7 -18
- package/src/hooks/useMessageActions.ts +5 -5
- package/src/hooks/useMouseHover.ts +9 -7
- package/src/rtc/index.ts +6 -3
- package/src/types/contact.ts +175 -12
- package/src/types/conversation.ts +42 -32
- package/src/types/live.ts +3 -5
- package/src/types/types.ts +0 -28
- package/src/utils/time.ts +8 -10
- package/dist/baseComp/Popup/Popup.js +0 -132
- package/dist/baseComp/Popup/Popup.vue.d.ts +0 -54
- package/dist/baseComp/Popup/index.d.ts +0 -2
- package/dist/baseComp/Popup/index.js +0 -4
- package/dist/components/ConversationList/ConversationCreate/ConversationCreateSelectView/ConversationCreateSelectView.js +0 -65
- package/dist/components/ConversationList/ConversationCreate/ConversationCreateSelectView/ConversationCreateSelectView.vue.d.ts +0 -17
- package/dist/components/ConversationList/ConversationCreate/ConversationCreateSelectView/index.d.ts +0 -1
- package/dist/components/ConversationList/ConversationCreate/ConversationCreateSelectView/index.js +0 -4
- package/dist/components/ConversationList/ConversationCreate/hooks/useConversationCreate.d.ts +0 -9
- package/dist/components/ConversationList/ConversationCreate/hooks/useConversationCreate.js +0 -96
- package/dist/components/ConversationList/ConversationCreate/static/word.d.ts +0 -6
- package/dist/components/ConversationList/ConversationCreate/static/word.js +0 -4
- package/dist/components/LiveStreamView/index.d.ts +0 -4
- package/src/baseComp/Popup/Popup.vue +0 -156
- package/src/baseComp/Popup/index.ts +0 -2
- package/src/components/ConversationList/ConversationCreate/ConversationCreateSelectView/ConversationCreateSelectView.scss +0 -36
- package/src/components/ConversationList/ConversationCreate/ConversationCreateSelectView/ConversationCreateSelectView.vue +0 -44
- package/src/components/ConversationList/ConversationCreate/ConversationCreateSelectView/index.ts +0 -1
- package/src/components/ConversationList/ConversationCreate/hooks/useConversationCreate.ts +0 -132
- package/src/components/ConversationList/ConversationCreate/static/word.ts +0 -300
- /package/dist/components/{LiveStreamView → LiveCoreView}/DefaultStreamViewUI.vue.d.ts +0 -0
- /package/dist/components/{LiveStreamView → LiveCoreView}/i18n/en-US/index.d.ts +0 -0
- /package/dist/components/{LiveStreamView → LiveCoreView}/i18n/en-US/index.js +0 -0
- /package/dist/components/{LiveStreamView → LiveCoreView}/i18n/index.d.ts +0 -0
- /package/dist/components/{LiveStreamView → LiveCoreView}/i18n/index.js +0 -0
- /package/dist/components/{LiveStreamView → LiveCoreView}/i18n/zh-CN/index.d.ts +0 -0
- /package/dist/components/{LiveStreamView → LiveCoreView}/i18n/zh-CN/index.js +0 -0
- /package/dist/components/{LiveStreamView → LiveCoreView}/index.vue.d.ts +0 -0
- /package/src/components/{LiveStreamView → LiveCoreView}/DefaultStreamViewUI.vue +0 -0
- /package/src/components/{LiveStreamView → LiveCoreView}/i18n/en-US/index.ts +0 -0
- /package/src/components/{LiveStreamView → LiveCoreView}/i18n/index.ts +0 -0
- /package/src/components/{LiveStreamView → LiveCoreView}/i18n/zh-CN/index.ts +0 -0
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* @param string -
|
|
4
|
-
* @returns
|
|
2
|
+
* trims and escapes a string for use in a regular expression
|
|
3
|
+
* @param string - string to trim and escape
|
|
4
|
+
* @returns string with trimmed and escaped characters
|
|
5
5
|
*/
|
|
6
6
|
function escapeRegExp(string: string): string {
|
|
7
7
|
return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
|
-
*
|
|
12
|
-
* @param text -
|
|
13
|
-
* @returns
|
|
11
|
+
* Escape HTML special characters to prevent XSS attacks
|
|
12
|
+
* @param text - string to escape
|
|
13
|
+
* @returns escaped string
|
|
14
14
|
*/
|
|
15
15
|
function sanitizeInput(text: string): string {
|
|
16
16
|
if (!text || typeof text !== 'string') {
|
|
@@ -23,25 +23,24 @@ function sanitizeInput(text: string): string {
|
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
/**
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* @param
|
|
29
|
-
* @param
|
|
30
|
-
* @
|
|
31
|
-
* @returns 包含高亮标记的HTML字符串
|
|
26
|
+
* Highlights a keyword in a given text
|
|
27
|
+
* @param text - text to highlight
|
|
28
|
+
* @param keyword - keyword to highlight
|
|
29
|
+
* @param className - CSS class name for the highlight, default is 'highlight'
|
|
30
|
+
* @returns HTML string with highlighted text
|
|
32
31
|
*/
|
|
33
32
|
export const highlightText = (
|
|
34
33
|
text: string,
|
|
35
34
|
keyword: string,
|
|
36
|
-
className
|
|
35
|
+
className = 'highlight',
|
|
37
36
|
): string => {
|
|
38
37
|
const safeText = sanitizeInput(text);
|
|
39
38
|
const safeKeyword = sanitizeInput(keyword);
|
|
40
|
-
|
|
39
|
+
|
|
41
40
|
if (!text || typeof text !== 'string') {
|
|
42
41
|
return safeText;
|
|
43
42
|
}
|
|
44
|
-
|
|
43
|
+
|
|
45
44
|
if (!safeKeyword || typeof safeKeyword !== 'string') {
|
|
46
45
|
return safeText;
|
|
47
46
|
}
|
|
@@ -73,4 +72,4 @@ export const highlightText = (
|
|
|
73
72
|
}
|
|
74
73
|
};
|
|
75
74
|
|
|
76
|
-
export default highlightText;
|
|
75
|
+
export default highlightText;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export const Search = {
|
|
2
|
-
//
|
|
2
|
+
// actions
|
|
3
3
|
'action.search': 'Search',
|
|
4
4
|
'action.cancel': 'Cancel',
|
|
5
5
|
'action.confirm': 'Confirm',
|
|
@@ -8,39 +8,39 @@ export const Search = {
|
|
|
8
8
|
'action.readMore': 'Read More',
|
|
9
9
|
'action.filter': 'Filter',
|
|
10
10
|
|
|
11
|
-
//
|
|
11
|
+
// types
|
|
12
12
|
'type.all': 'All',
|
|
13
13
|
'type.messages': 'Messages',
|
|
14
14
|
'type.users': 'Users',
|
|
15
15
|
'type.groups': 'Groups',
|
|
16
16
|
|
|
17
|
-
//
|
|
17
|
+
// input
|
|
18
18
|
'input.placeholder.keywords': 'Please enter keywords to search',
|
|
19
19
|
'input.selectTime': 'Select Time',
|
|
20
20
|
|
|
21
|
-
//
|
|
21
|
+
// status
|
|
22
22
|
'status.loading': 'Loading...',
|
|
23
23
|
'status.noContent': 'No Content',
|
|
24
24
|
|
|
25
|
-
//
|
|
25
|
+
// loading
|
|
26
26
|
'loadMore.default': 'Load More',
|
|
27
27
|
'loadMore.messages': 'Load More Messages',
|
|
28
28
|
'loadMore.users': 'Load More Users',
|
|
29
29
|
'loadMore.groups': 'Load More Groups',
|
|
30
30
|
|
|
31
|
-
//
|
|
31
|
+
// results
|
|
32
32
|
'results.title': 'Search Messages',
|
|
33
33
|
'results.relatedTo': '{{count}} texts related to',
|
|
34
34
|
'results.relatedToSuffix': 'related texts',
|
|
35
35
|
'results.foundMessages': 'Found {{count}} messages',
|
|
36
36
|
|
|
37
|
-
//
|
|
37
|
+
// message types
|
|
38
38
|
'messageType.image': 'Image Message',
|
|
39
39
|
'messageType.videoCover': 'Video Cover',
|
|
40
40
|
'messageType.custom': 'Custom Message',
|
|
41
41
|
'messageType.unsupported': 'Unsupported Message Type',
|
|
42
42
|
|
|
43
|
-
//
|
|
43
|
+
// filter
|
|
44
44
|
'filter.title': 'Filter Users',
|
|
45
45
|
'filter.gender': 'Gender',
|
|
46
46
|
'filter.age': 'Age',
|
|
@@ -50,7 +50,7 @@ export const Search = {
|
|
|
50
50
|
'filter.gender.secret': 'Secret',
|
|
51
51
|
'filter.age.yearsOld': 'years old',
|
|
52
52
|
|
|
53
|
-
//
|
|
53
|
+
// time filter
|
|
54
54
|
'timeFilter.allTime': 'All Time',
|
|
55
55
|
'timeFilter.today': 'Today',
|
|
56
56
|
'timeFilter.last3Days': 'Last 3 Days',
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export const Search = {
|
|
2
|
-
//
|
|
2
|
+
// actions
|
|
3
3
|
'action.search': '搜索',
|
|
4
4
|
'action.cancel': '取消',
|
|
5
5
|
'action.confirm': '确定',
|
|
@@ -8,39 +8,39 @@ export const Search = {
|
|
|
8
8
|
'action.readMore': '查看更多',
|
|
9
9
|
'action.filter': '筛选',
|
|
10
10
|
|
|
11
|
-
//
|
|
11
|
+
// types
|
|
12
12
|
'type.all': '全部',
|
|
13
13
|
'type.messages': '消息',
|
|
14
14
|
'type.users': '用户',
|
|
15
15
|
'type.groups': '群组',
|
|
16
16
|
|
|
17
|
-
//
|
|
17
|
+
// input
|
|
18
18
|
'input.placeholder.keywords': '请输入关键词搜索',
|
|
19
19
|
'input.selectTime': '选择时间',
|
|
20
20
|
|
|
21
|
-
//
|
|
21
|
+
// status
|
|
22
22
|
'status.loading': '加载中...',
|
|
23
23
|
'status.noContent': '暂无内容',
|
|
24
24
|
|
|
25
|
-
//
|
|
25
|
+
// loading
|
|
26
26
|
'loadMore.default': '加载更多',
|
|
27
27
|
'loadMore.messages': '加载更多消息',
|
|
28
28
|
'loadMore.users': '加载更多用户',
|
|
29
29
|
'loadMore.groups': '加载更多群组',
|
|
30
30
|
|
|
31
|
-
//
|
|
31
|
+
// results
|
|
32
32
|
'results.title': '搜索消息',
|
|
33
|
-
'results.relatedTo': '{{count}}条与',
|
|
33
|
+
'results.relatedTo': '{{count}} 条与',
|
|
34
34
|
'results.relatedToSuffix': '的消息',
|
|
35
|
-
'results.foundMessages': '发现{{count}}条消息',
|
|
35
|
+
'results.foundMessages': '发现 {{count}} 条消息',
|
|
36
36
|
|
|
37
|
-
//
|
|
37
|
+
// message types
|
|
38
38
|
'messageType.image': '图片消息',
|
|
39
39
|
'messageType.videoCover': '视频封面',
|
|
40
40
|
'messageType.custom': '自定义消息',
|
|
41
41
|
'messageType.unsupported': '不支持的消息类型',
|
|
42
42
|
|
|
43
|
-
//
|
|
43
|
+
// filter
|
|
44
44
|
'filter.title': '筛选用户',
|
|
45
45
|
'filter.gender': '性别',
|
|
46
46
|
'filter.age': '年龄',
|
|
@@ -50,11 +50,11 @@ export const Search = {
|
|
|
50
50
|
'filter.gender.secret': '保密',
|
|
51
51
|
'filter.age.yearsOld': '岁',
|
|
52
52
|
|
|
53
|
-
//
|
|
53
|
+
// time filter
|
|
54
54
|
'timeFilter.allTime': '全部时间',
|
|
55
55
|
'timeFilter.today': '今天',
|
|
56
|
-
'timeFilter.last3Days': '最近3天',
|
|
57
|
-
'timeFilter.last7Days': '最近7天',
|
|
56
|
+
'timeFilter.last3Days': '最近 3 天',
|
|
57
|
+
'timeFilter.last7Days': '最近 7 天',
|
|
58
58
|
};
|
|
59
59
|
|
|
60
60
|
export default Search;
|
|
@@ -1,15 +1,22 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div
|
|
2
|
+
<div
|
|
3
|
+
class="mixer-control"
|
|
4
|
+
@mousedown="handleMouseDown"
|
|
5
|
+
>
|
|
3
6
|
<div
|
|
4
|
-
class="mixer-control-item"
|
|
5
7
|
v-for="control in controlList"
|
|
6
|
-
:class="{ 'disable': control.disable }"
|
|
7
8
|
:key="control.name"
|
|
9
|
+
class="mixer-control-item"
|
|
10
|
+
:class="{ 'disable': control.disable }"
|
|
8
11
|
:style="control.style"
|
|
9
12
|
@click.stop="control.onClick"
|
|
10
13
|
>
|
|
11
14
|
<div class="mixer-control-item-icon">
|
|
12
|
-
<component
|
|
15
|
+
<component
|
|
16
|
+
:is="control.icon"
|
|
17
|
+
style="width: 100%; height: 100%"
|
|
18
|
+
:style="control.style"
|
|
19
|
+
/>
|
|
13
20
|
</div>
|
|
14
21
|
<span class="mixer-control-item-name">{{ control.text }}</span>
|
|
15
22
|
</div>
|
|
@@ -17,16 +24,16 @@
|
|
|
17
24
|
</template>
|
|
18
25
|
|
|
19
26
|
<script setup lang="ts">
|
|
27
|
+
import { computed } from 'vue';
|
|
28
|
+
import { TRTCVideoMirrorType, TRTCVideoRotation } from '@tencentcloud/tuiroom-engine-js';
|
|
29
|
+
import { useUIKit } from '@tencentcloud/uikit-base-component-vue3';
|
|
30
|
+
import { useVideoMixerState } from '../../../states/VideoMixerState';
|
|
20
31
|
import CameraMirror from '../icons/CameraMirror.vue';
|
|
21
32
|
import Delete from '../icons/Delete.vue';
|
|
33
|
+
import Down from '../icons/Down.vue';
|
|
22
34
|
import Rotation from '../icons/Rotation.vue';
|
|
23
35
|
import Up from '../icons/Up.vue';
|
|
24
|
-
import
|
|
25
|
-
import { useVideoMixerState } from '../../../states/VideoMixerState';
|
|
26
|
-
import { TRTCVideoMirrorType, TRTCVideoRotation } from '@tencentcloud/tuiroom-engine-js';
|
|
27
|
-
import { computed, reactive } from 'vue';
|
|
28
|
-
import { MediaSource } from '../../../types';
|
|
29
|
-
import { useUIKit } from '@tencentcloud/uikit-base-component-vue3';
|
|
36
|
+
import type { MediaSource } from '../../../types';
|
|
30
37
|
|
|
31
38
|
const { activeMediaSource, mediaSourceList, updateMediaSource, removeMediaSource } = useVideoMixerState();
|
|
32
39
|
const { t } = useUIKit();
|
|
@@ -35,12 +42,10 @@ function handleMouseDown(event: Event) {
|
|
|
35
42
|
event.stopPropagation();
|
|
36
43
|
}
|
|
37
44
|
|
|
38
|
-
const orderMediaSourceList = computed(() =>
|
|
39
|
-
return [...mediaSourceList.value].sort((a: MediaSource, b: MediaSource) => a.layout.zOrder - b.layout.zOrder);
|
|
40
|
-
});
|
|
45
|
+
const orderMediaSourceList = computed(() => [...mediaSourceList.value].sort((a: MediaSource, b: MediaSource) => a.layout.zOrder - b.layout.zOrder));
|
|
41
46
|
|
|
42
|
-
const isActiveMediaSourceTop = computed(() => activeMediaSource.value
|
|
43
|
-
const isActiveMediaSourceBottom = computed(() => activeMediaSource.value
|
|
47
|
+
const isActiveMediaSourceTop = computed(() => activeMediaSource.value?.id === orderMediaSourceList.value[0]?.id);
|
|
48
|
+
const isActiveMediaSourceBottom = computed(() => activeMediaSource.value?.id === orderMediaSourceList.value[orderMediaSourceList.value.length - 1]?.id);
|
|
44
49
|
|
|
45
50
|
const controlList = computed(() => [
|
|
46
51
|
{
|
|
@@ -1,37 +1,51 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
2
|
+
<div
|
|
3
|
+
ref="localMixerRef"
|
|
4
|
+
class="local-mixer-container"
|
|
5
|
+
>
|
|
6
|
+
<div
|
|
7
|
+
id="local-video-mixer"
|
|
8
|
+
class="local-mixer-content"
|
|
9
|
+
/>
|
|
10
|
+
<MixerControl
|
|
11
|
+
v-if="activeMediaSource"
|
|
12
|
+
ref="mixControlRef"
|
|
13
|
+
class="mixer-control"
|
|
14
|
+
:style="mixControlStyle"
|
|
15
|
+
/>
|
|
16
|
+
<div
|
|
17
|
+
v-if="mediaSourceList.length === 0"
|
|
18
|
+
class="local-mixer-placeholder"
|
|
19
|
+
>
|
|
8
20
|
<span class="placeholder-text">{{ t('No video') }}</span>
|
|
9
21
|
</div>
|
|
10
22
|
</div>
|
|
11
23
|
</template>
|
|
12
24
|
|
|
13
25
|
<script setup lang="ts">
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import { useVideoMixerState } from '../../../states/VideoMixerState';
|
|
26
|
+
import type { Ref } from 'vue';
|
|
27
|
+
import { ref, onMounted, watch, onUnmounted, computed, nextTick } from 'vue';
|
|
17
28
|
import TUIRoomEngine, {
|
|
18
29
|
TRTCVideoResolutionMode,
|
|
19
30
|
TRTCVideoRotation,
|
|
20
31
|
TUIVideoQuality,
|
|
21
32
|
} from '@tencentcloud/tuiroom-engine-js';
|
|
33
|
+
import { useUIKit } from '@tencentcloud/uikit-base-component-vue3';
|
|
34
|
+
import { useRoomEngine } from '../../../hooks/useRoomEngine';
|
|
22
35
|
import { useLiveState } from '../../../states/LiveState';
|
|
36
|
+
import { useVideoMixerState } from '../../../states/VideoMixerState';
|
|
23
37
|
import { LiveStatus, LiveOrientation } from '../../../types';
|
|
38
|
+
import { debounce } from '../../../utils/utils';
|
|
24
39
|
import MixerControl from './MixerControl.vue';
|
|
25
|
-
import { useUIKit } from '@tencentcloud/uikit-base-component-vue3';
|
|
26
40
|
|
|
27
41
|
const { t } = useUIKit();
|
|
28
42
|
|
|
29
43
|
const { currentLive } = useLiveState();
|
|
30
44
|
|
|
45
|
+
const mixControlRef = ref<InstanceType<typeof MixerControl> | null>(null);
|
|
31
46
|
const { publishVideoQuality, activeMediaSource, enableLocalVideoMixer, mediaSourceList } = useVideoMixerState();
|
|
32
47
|
enableLocalVideoMixer();
|
|
33
48
|
|
|
34
|
-
|
|
35
49
|
const currentLiveOrientation = computed(() => {
|
|
36
50
|
if (currentLive.value
|
|
37
51
|
&& currentLive.value?.layoutTemplate >= 200 && currentLive.value?.layoutTemplate <= 599) {
|
|
@@ -47,7 +61,7 @@ const localMixerRef = ref();
|
|
|
47
61
|
|
|
48
62
|
function getCanvasSize(
|
|
49
63
|
videoResolution: TUIVideoQuality,
|
|
50
|
-
resMode: TRTCVideoResolutionMode
|
|
64
|
+
resMode: TRTCVideoResolutionMode,
|
|
51
65
|
): { width: number; height: number } {
|
|
52
66
|
const sizeMap = {
|
|
53
67
|
[TUIVideoQuality.kVideoQuality_360p]: { width: 640, height: 360 },
|
|
@@ -62,28 +76,30 @@ function getCanvasSize(
|
|
|
62
76
|
return { width, height };
|
|
63
77
|
}
|
|
64
78
|
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
79
|
+
const mixControlStyle: Ref<{
|
|
80
|
+
transform: string;
|
|
81
|
+
position: string;
|
|
82
|
+
}> = ref({
|
|
83
|
+
position: 'absolute',
|
|
84
|
+
transform: 'translate(0px, 0px)',
|
|
70
85
|
});
|
|
71
86
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
87
|
+
let mixControlWidth: number;
|
|
88
|
+
let mixControlHeight: number;
|
|
89
|
+
// margin between control and media source
|
|
90
|
+
const CONTROL_MARGIN_WITH_MEDIA_SOURCE = 6;
|
|
76
91
|
|
|
77
92
|
function getMixControlStyle() {
|
|
78
93
|
if (!localMixerRef.value || !activeMediaSource.value) {
|
|
79
94
|
return;
|
|
80
95
|
}
|
|
96
|
+
|
|
81
97
|
const { width: canvasWidth, height: canvasHeight } = getCanvasSize(
|
|
82
98
|
publishVideoQuality.value,
|
|
83
|
-
currentLiveOrientation.value === LiveOrientation.Landscape ? TRTCVideoResolutionMode.TRTCVideoResolutionModeLandscape : TRTCVideoResolutionMode.TRTCVideoResolutionModePortrait
|
|
99
|
+
currentLiveOrientation.value === LiveOrientation.Landscape ? TRTCVideoResolutionMode.TRTCVideoResolutionModeLandscape : TRTCVideoResolutionMode.TRTCVideoResolutionModePortrait,
|
|
84
100
|
);
|
|
85
|
-
const { width:
|
|
86
|
-
const scale = Math.max(
|
|
101
|
+
const { width: viewportWidth, height: viewportHeight } = localMixerRef.value.getBoundingClientRect();
|
|
102
|
+
const scale = Math.max(viewportWidth / canvasWidth, viewportHeight / canvasHeight);
|
|
87
103
|
|
|
88
104
|
const previewWidth = canvasWidth * scale;
|
|
89
105
|
const previewHeight = canvasHeight * scale;
|
|
@@ -92,47 +108,105 @@ function getMixControlStyle() {
|
|
|
92
108
|
const mediaSourceWidth = right - left;
|
|
93
109
|
const mediaSourceHeight = bottom - top;
|
|
94
110
|
const rotation = activeMediaSource.value.layout.rotation || TRTCVideoRotation.TRTCVideoRotation0;
|
|
111
|
+
|
|
112
|
+
const mediaSourceTop = top * scale - (previewHeight - viewportHeight) / 2;
|
|
113
|
+
const mediaSourceLeft = left * scale - (previewWidth - viewportWidth) / 2;
|
|
114
|
+
let mediaSourceDisplayWidth;
|
|
115
|
+
let mediaSourceDisplayHeight;
|
|
116
|
+
|
|
95
117
|
if (rotation === TRTCVideoRotation.TRTCVideoRotation0 || rotation === TRTCVideoRotation.TRTCVideoRotation180) {
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
left: `${left * scale - (previewWidth - realWidth) / 2}px`,
|
|
99
|
-
width: `${mediaSourceWidth * scale}px`,
|
|
100
|
-
height: `${mediaSourceHeight * scale}px`,
|
|
101
|
-
};
|
|
118
|
+
mediaSourceDisplayWidth = mediaSourceWidth * scale;
|
|
119
|
+
mediaSourceDisplayHeight = mediaSourceHeight * scale;
|
|
102
120
|
} else {
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
121
|
+
mediaSourceDisplayWidth = mediaSourceHeight * scale;
|
|
122
|
+
mediaSourceDisplayHeight = mediaSourceWidth * scale;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
const controlPosition = calculateOptimalControlPosition(
|
|
126
|
+
mediaSourceLeft,
|
|
127
|
+
mediaSourceTop,
|
|
128
|
+
mediaSourceDisplayWidth,
|
|
129
|
+
mediaSourceDisplayHeight,
|
|
130
|
+
viewportWidth,
|
|
131
|
+
viewportHeight,
|
|
132
|
+
);
|
|
133
|
+
|
|
134
|
+
mixControlStyle.value = {
|
|
135
|
+
...controlPosition,
|
|
136
|
+
position: 'absolute',
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
function calculateOptimalControlPosition(
|
|
141
|
+
mediaSourceLeft: number,
|
|
142
|
+
mediaSourceTop: number,
|
|
143
|
+
mediaSourceWidth: number,
|
|
144
|
+
mediaSourceHeight: number,
|
|
145
|
+
viewportWidth: number,
|
|
146
|
+
viewportHeight: number,
|
|
147
|
+
) {
|
|
148
|
+
// media source boundary
|
|
149
|
+
const mediaSourceBottom = mediaSourceTop + mediaSourceHeight;
|
|
150
|
+
const mediaSourceCenterX = mediaSourceLeft + mediaSourceWidth / 2;
|
|
151
|
+
|
|
152
|
+
// ideal position
|
|
153
|
+
let controlLeft = mediaSourceCenterX - mixControlWidth / 2;
|
|
154
|
+
let controlTop = mediaSourceTop - CONTROL_MARGIN_WITH_MEDIA_SOURCE - mixControlHeight;
|
|
155
|
+
|
|
156
|
+
// horizontal boundary detection and adjustment
|
|
157
|
+
if (controlLeft < 0) {
|
|
158
|
+
controlLeft = 0;
|
|
159
|
+
} else if (controlLeft + mixControlWidth > viewportWidth) {
|
|
160
|
+
controlLeft = viewportWidth - mixControlWidth;
|
|
109
161
|
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
162
|
+
|
|
163
|
+
// vertical boundary detection and adjustment
|
|
164
|
+
// check if there is enough space to display the control above
|
|
165
|
+
const topSpaceAvailable = mediaSourceTop;
|
|
166
|
+
const bottomSpaceAvailable = viewportHeight - mediaSourceBottom;
|
|
167
|
+
|
|
168
|
+
if (controlTop >= 0 && topSpaceAvailable >= mixControlHeight + CONTROL_MARGIN_WITH_MEDIA_SOURCE) {
|
|
169
|
+
// top space is enough, keep it above
|
|
170
|
+
controlTop = Math.min(controlTop, viewportHeight - mixControlHeight);
|
|
171
|
+
} else if (bottomSpaceAvailable >= mixControlHeight + CONTROL_MARGIN_WITH_MEDIA_SOURCE) {
|
|
172
|
+
// top space is not enough, but bottom space is enough, move to bottom
|
|
173
|
+
controlTop = Math.max(0, mediaSourceBottom + CONTROL_MARGIN_WITH_MEDIA_SOURCE);
|
|
115
174
|
} else {
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
transform: 'translate(-50%, -100%)',
|
|
119
|
-
};
|
|
175
|
+
// top space is not enough, but bottom space is not enough, move to top
|
|
176
|
+
controlTop = Math.max(0, mediaSourceTop - mixControlHeight - CONTROL_MARGIN_WITH_MEDIA_SOURCE);
|
|
120
177
|
}
|
|
178
|
+
|
|
179
|
+
return {
|
|
180
|
+
transform: `translate(${controlLeft}px, ${controlTop}px)`,
|
|
181
|
+
};
|
|
121
182
|
}
|
|
122
183
|
|
|
184
|
+
const debouncedGetMixControlStyle = debounce(getMixControlStyle, 16);
|
|
185
|
+
|
|
186
|
+
watch(() => activeMediaSource.value, async (newVal, oldVal) => {
|
|
187
|
+
if (!oldVal && newVal) {
|
|
188
|
+
await nextTick();
|
|
189
|
+
const mixControlElement = mixControlRef.value?.$el as HTMLElement;
|
|
190
|
+
const { width, height } = mixControlElement?.getBoundingClientRect() || { width: 0, height: 0 };
|
|
191
|
+
mixControlWidth = width;
|
|
192
|
+
mixControlHeight = height;
|
|
193
|
+
}
|
|
194
|
+
getMixControlStyle();
|
|
195
|
+
}, { immediate: true, deep: true });
|
|
196
|
+
|
|
123
197
|
watch(
|
|
124
|
-
() => [publishVideoQuality.value, currentLiveOrientation.value
|
|
125
|
-
([newVideoQuality, newOrientation
|
|
126
|
-
if (!newVideoQuality || !newOrientation
|
|
198
|
+
() => [publishVideoQuality.value, currentLiveOrientation.value],
|
|
199
|
+
([newVideoQuality, newOrientation]) => {
|
|
200
|
+
if (!newVideoQuality || !newOrientation) {
|
|
127
201
|
return;
|
|
128
202
|
}
|
|
129
203
|
getMixControlStyle();
|
|
130
204
|
},
|
|
131
|
-
{ immediate: true, deep: true }
|
|
205
|
+
{ immediate: true, deep: true },
|
|
132
206
|
);
|
|
133
207
|
|
|
134
208
|
const re = new ResizeObserver(() => {
|
|
135
|
-
|
|
209
|
+
debouncedGetMixControlStyle();
|
|
136
210
|
});
|
|
137
211
|
|
|
138
212
|
onMounted(() => {
|
|
@@ -143,7 +217,7 @@ onMounted(() => {
|
|
|
143
217
|
getMixControlStyle();
|
|
144
218
|
});
|
|
145
219
|
|
|
146
|
-
watch(localLiveStatus, async newVal => {
|
|
220
|
+
watch(localLiveStatus, async (newVal) => {
|
|
147
221
|
if (newVal === LiveStatus.Live) {
|
|
148
222
|
const mediaSourceManager = roomEngine.instance?.getTRTCCloud().getMediaMixingManager();
|
|
149
223
|
await mediaSourceManager?.startPublish();
|
|
@@ -169,14 +243,13 @@ onUnmounted(() => {
|
|
|
169
243
|
width: 100%;
|
|
170
244
|
height: 100%;
|
|
171
245
|
}
|
|
172
|
-
.mixer-control
|
|
246
|
+
.mixer-control {
|
|
173
247
|
position: absolute;
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
left: 50%;
|
|
178
|
-
}
|
|
248
|
+
top: 0;
|
|
249
|
+
left: 0;
|
|
250
|
+
transition: transform 0.2s cubic-bezier(0.25, 0.46, 0.45, 0.94);
|
|
179
251
|
}
|
|
252
|
+
|
|
180
253
|
.local-mixer-placeholder {
|
|
181
254
|
position: absolute;
|
|
182
255
|
top: 0;
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<live-
|
|
2
|
+
<live-core-view :ignore-local-video="true">
|
|
3
3
|
<template #localVideo="{ style }">
|
|
4
4
|
<local-mixer :style="style" />
|
|
5
5
|
</template>
|
|
6
|
-
</live-
|
|
6
|
+
</live-core-view>
|
|
7
7
|
</template>
|
|
8
8
|
|
|
9
9
|
<script setup lang="ts">
|
|
10
|
+
import { LiveCoreView } from '../LiveCoreView';
|
|
10
11
|
import LocalMixer from './LocalMixer/index.vue';
|
|
11
|
-
import { LiveStreamView } from '../LiveStreamView';
|
|
12
12
|
</script>
|
|
13
13
|
|
|
14
14
|
<style scoped lang="scss"></style>
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { i18next } from '@tencentcloud/uikit-base-component-vue3';
|
|
2
|
-
|
|
3
1
|
import enUS from './en-US';
|
|
4
2
|
import zhCN from './zh-CN';
|
|
5
3
|
|
|
@@ -8,6 +6,4 @@ const resources = {
|
|
|
8
6
|
'zh-CN': zhCN,
|
|
9
7
|
};
|
|
10
8
|
|
|
11
|
-
|
|
12
|
-
i18next.addResourceBundle(lng, 'translation', { UserPicker: resource }, true, false);
|
|
13
|
-
});
|
|
9
|
+
export { resources };
|
|
@@ -7,8 +7,11 @@ import type {
|
|
|
7
7
|
IUserPickerDataSource,
|
|
8
8
|
IUserPickerResult,
|
|
9
9
|
} from './type';
|
|
10
|
+
import { addI18n } from '../../i18n';
|
|
11
|
+
import { resources } from './i18n';
|
|
10
12
|
|
|
11
|
-
|
|
13
|
+
addI18n('en-US', { translation: { UserPicker: resources['en-US'] } });
|
|
14
|
+
addI18n('zh-CN', { translation: { UserPicker: resources['zh-CN'] } });
|
|
12
15
|
|
|
13
16
|
export type {
|
|
14
17
|
IUserPickerProps,
|
|
@@ -19,5 +22,3 @@ export type {
|
|
|
19
22
|
IUserPickerResult,
|
|
20
23
|
};
|
|
21
24
|
export { UserPicker };
|
|
22
|
-
|
|
23
|
-
export default UserPicker;
|
|
@@ -1,25 +1,31 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="video-preview-container">
|
|
3
|
-
<div
|
|
3
|
+
<div
|
|
4
|
+
id="video-preview"
|
|
5
|
+
class="video-preview"
|
|
6
|
+
/>
|
|
4
7
|
<div class="attention-info">
|
|
5
8
|
<span
|
|
6
9
|
v-if="!isCameraTesting && !isCameraTestLoading"
|
|
7
10
|
class="off-camera-info"
|
|
8
|
-
|
|
11
|
+
>{{ t('Off Camera') }}
|
|
9
12
|
</span>
|
|
10
|
-
<IconLoading
|
|
13
|
+
<IconLoading
|
|
14
|
+
v-if="isCameraTestLoading"
|
|
15
|
+
size="36"
|
|
16
|
+
class="loading"
|
|
17
|
+
/>
|
|
11
18
|
</div>
|
|
12
19
|
</div>
|
|
13
20
|
</template>
|
|
14
21
|
|
|
15
22
|
<script setup lang="ts">
|
|
16
23
|
import { onMounted, onUnmounted } from 'vue';
|
|
17
|
-
import { IconLoading } from '@tencentcloud/uikit-base-component-vue3';
|
|
18
|
-
import { useI18n } from '../../locales';
|
|
19
24
|
import TUIRoomEngine from '@tencentcloud/tuiroom-engine-js';
|
|
20
|
-
import
|
|
25
|
+
import { IconLoading, useUIKit } from '@tencentcloud/uikit-base-component-vue3';
|
|
26
|
+
import { useDeviceState } from '../../states/DeviceState';
|
|
21
27
|
|
|
22
|
-
const { t } =
|
|
28
|
+
const { t } = useUIKit();
|
|
23
29
|
const { isCameraTesting, isCameraTestLoading, startCameraDeviceTest, stopCameraDeviceTest } = useDeviceState();
|
|
24
30
|
|
|
25
31
|
onMounted(async () => {
|
|
@@ -83,4 +89,3 @@ onUnmounted(async () => {
|
|
|
83
89
|
}
|
|
84
90
|
}
|
|
85
91
|
</style>
|
|
86
|
-
../../states/DeviceState
|
|
@@ -16,13 +16,13 @@
|
|
|
16
16
|
</template>
|
|
17
17
|
|
|
18
18
|
<script setup lang="ts">
|
|
19
|
-
import { watch, computed
|
|
20
|
-
import {
|
|
21
|
-
import { useI18n } from '../../locales';
|
|
19
|
+
import { watch, computed } from 'vue';
|
|
20
|
+
import type { ComputedRef } from 'vue';
|
|
22
21
|
import { TUIVideoQuality } from '@tencentcloud/tuiroom-engine-js';
|
|
23
|
-
import
|
|
22
|
+
import { TUISelect, TUIOption, useUIKit } from '@tencentcloud/uikit-base-component-vue3';
|
|
23
|
+
import { useDeviceState } from '../../states/DeviceState';
|
|
24
24
|
|
|
25
|
-
const { t } =
|
|
25
|
+
const { t } = useUIKit();
|
|
26
26
|
|
|
27
27
|
const videoQualityList: ComputedRef<
|
|
28
28
|
{ label: string; value: TUIVideoQuality }[]
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
export const resource = {
|
|
2
|
-
Camera: 'Camera',
|
|
2
|
+
'Camera': 'Camera',
|
|
3
3
|
'Select device': 'Select device',
|
|
4
|
-
Preview: 'Preview',
|
|
4
|
+
'Preview': 'Preview',
|
|
5
5
|
'Video profile': 'Video profile',
|
|
6
|
-
Resolution: 'Resolution',
|
|
6
|
+
'Resolution': 'Resolution',
|
|
7
|
+
'Low Definition': 'Low Definition',
|
|
8
|
+
'Standard Definition': 'Standard Definition',
|
|
9
|
+
'High Definition': 'High Definition',
|
|
10
|
+
'Super Definition': 'Super Definition',
|
|
11
|
+
'Off Camera': 'Off Camera',
|
|
7
12
|
};
|