From 2294b3b76e6bf495bee16aefcd770e018a724c1f Mon Sep 17 00:00:00 2001 From: bobobobo <1055026847@qq.com> Date: Tue, 30 Dec 2025 23:28:59 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=81=8A=E5=A4=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +- App.vue | 2 +- TUIKit/CHANGELOG.md | 286 ++ TUIKit/README.md | 56 + TUIKit/adapter-vue.ts | 14 + TUIKit/assets/icon/add-circle.svg | 7 + TUIKit/assets/icon/add.svg | 12 + TUIKit/assets/icon/at.svg | 12 + TUIKit/assets/icon/audio.svg | 6 + TUIKit/assets/icon/back.svg | 16 + TUIKit/assets/icon/black-list.svg | 9 + TUIKit/assets/icon/break-btn.svg | 4 + TUIKit/assets/icon/break.svg | 4 + TUIKit/assets/icon/call-video.svg | 6 + TUIKit/assets/icon/call-voice.svg | 6 + TUIKit/assets/icon/call.png | Bin 0 -> 4120 bytes TUIKit/assets/icon/camera-uni.png | Bin 0 -> 4914 bytes TUIKit/assets/icon/cancel.svg | 23 + TUIKit/assets/icon/check-sm.svg | 3 + TUIKit/assets/icon/clear-history.svg | 6 + TUIKit/assets/icon/close-dark.svg | 3 + TUIKit/assets/icon/close-image.png | Bin 0 -> 6231 bytes TUIKit/assets/icon/convertText_en.svg | 7 + TUIKit/assets/icon/convertText_zh.svg | 8 + TUIKit/assets/icon/custom.svg | 3 + TUIKit/assets/icon/d-left-arrow.svg | 5 + TUIKit/assets/icon/d-right-arrow.svg | 5 + TUIKit/assets/icon/del-icon.svg | 25 + TUIKit/assets/icon/double-arrow.svg | 1 + TUIKit/assets/icon/down-icon.svg | 3 + TUIKit/assets/icon/downaload-image.png | Bin 0 -> 6408 bytes TUIKit/assets/icon/download.svg | 6 + TUIKit/assets/icon/edit.svg | 7 + TUIKit/assets/icon/evalute-dark.svg | 6 + TUIKit/assets/icon/evalute-light.svg | 7 + TUIKit/assets/icon/face-dark.svg | 7 + TUIKit/assets/icon/face-light.svg | 8 + TUIKit/assets/icon/face-uni.png | Bin 0 -> 5015 bytes TUIKit/assets/icon/file-dark.svg | 12 + TUIKit/assets/icon/file-light.svg | 13 + TUIKit/assets/icon/forward-each.svg | 6 + TUIKit/assets/icon/forward-merge.svg | 8 + TUIKit/assets/icon/groups.svg | 7 + TUIKit/assets/icon/icon-arrow-left.svg | 7 + TUIKit/assets/icon/icon-c2c.svg | 36 + TUIKit/assets/icon/icon-close.svg | 6 + TUIKit/assets/icon/image-dark.svg | 12 + TUIKit/assets/icon/image-light.svg | 13 + TUIKit/assets/icon/image-uni.png | Bin 0 -> 4377 bytes TUIKit/assets/icon/input-close.svg | 3 + TUIKit/assets/icon/left-arrow.svg | 6 + TUIKit/assets/icon/loading.gif | Bin 0 -> 177671 bytes TUIKit/assets/icon/loading.png | Bin 0 -> 4469 bytes TUIKit/assets/icon/minus.svg | 6 + TUIKit/assets/icon/more-uni.png | Bin 0 -> 4652 bytes TUIKit/assets/icon/more.png | Bin 0 -> 842 bytes TUIKit/assets/icon/more.svg | 5 + TUIKit/assets/icon/msg-audio.svg | 1 + TUIKit/assets/icon/msg-copy.svg | 30 + TUIKit/assets/icon/msg-del.svg | 33 + TUIKit/assets/icon/msg-forward.svg | 31 + TUIKit/assets/icon/msg-quote.svg | 8 + TUIKit/assets/icon/msg-revoke.svg | 29 + TUIKit/assets/icon/multiple-select.svg | 5 + TUIKit/assets/icon/mute.svg | 8 + TUIKit/assets/icon/new-contacts.svg | 8 + TUIKit/assets/icon/plus.svg | 7 + TUIKit/assets/icon/radio.svg | 6 + TUIKit/assets/icon/right-arrow.svg | 14 + TUIKit/assets/icon/right-icon.svg | 3 + TUIKit/assets/icon/rotate-left.svg | 7 + TUIKit/assets/icon/rotate-right.svg | 7 + TUIKit/assets/icon/search-default.svg | 52 + TUIKit/assets/icon/search-more.svg | 7 + TUIKit/assets/icon/search.svg | 4 + TUIKit/assets/icon/selected.svg | 27 + TUIKit/assets/icon/setting.svg | 8 + TUIKit/assets/icon/star-light.png | Bin 0 -> 5884 bytes TUIKit/assets/icon/star.png | Bin 0 -> 1370 bytes TUIKit/assets/icon/start-group.svg | 6 + TUIKit/assets/icon/translate.svg | 12 + TUIKit/assets/icon/video-dark.svg | 11 + TUIKit/assets/icon/video-light.svg | 12 + TUIKit/assets/icon/video-play.png | Bin 0 -> 2321 bytes TUIKit/assets/icon/video-uni.png | Bin 0 -> 4109 bytes TUIKit/assets/icon/words-dark.svg | 6 + TUIKit/assets/icon/words-light.svg | 7 + TUIKit/assets/icon/zoom-in.svg | 9 + TUIKit/assets/icon/zoom-out.svg | 9 + TUIKit/assets/styles/common.scss | 59 + TUIKit/assets/styles/sample.scss | 99 + .../TUIChat/aiRobotManager/aiRobotManager.ts | 262 ++ .../TUIChat/aiRobotManager/const.ts | 11 + .../TUIChat/aiRobotManager/index.ts | 5 + .../components/TUIChat/aiRobotManager/info.ts | 3 + .../TUIChat/aiRobotManager/interface.ts | 5 + .../components/TUIChat/chat-header/index.vue | 98 + TUIKit/components/TUIChat/config.ts | 130 + .../TUIChat/emoji-config/custom-emoji.ts | 15 + .../TUIChat/emoji-config/default-emoji.ts | 114 + .../components/TUIChat/emoji-config/index.ts | 140 + .../TUIChat/emoji-config/locales/en.ts | 66 + .../TUIChat/emoji-config/locales/zh_cn.ts | 66 + .../TUIChat/emoji-config/locales/zh_tw.ts | 66 + TUIKit/components/TUIChat/entry-chat-only.ts | 35 + TUIKit/components/TUIChat/forward/index.vue | 159 + TUIKit/components/TUIChat/index.ts | 6 + TUIKit/components/TUIChat/index.vue | 309 ++ .../album-upload/index.ts | 2 + .../album-upload/index.vue | 41 + .../camera-upload/index.ts | 2 + .../camera-upload/index.vue | 41 + .../clearHistory/index.ts | 2 + .../clearHistory/index.vue | 94 + .../emoji-picker/emoji-picker-dialog.vue | 186 ++ .../emoji-picker/index.ts | 2 + .../emoji-picker/index.vue | 81 + .../emoji-picker/style/h5.scss | 25 + .../emoji-picker/style/index.scss | 4 + .../emoji-picker/style/web.scss | 55 + .../message-input-toolbar/evaluate/index.ts | 2 + .../message-input-toolbar/evaluate/index.vue | 209 ++ .../evaluate/style/color.scss | 57 + .../evaluate/style/h5.scss | 63 + .../evaluate/style/index.scss | 4 + .../evaluate/style/web.scss | 93 + .../file-upload/index.ts | 2 + .../file-upload/index.vue | 37 + .../image-upload/index.ts | 2 + .../image-upload/index.vue | 41 + .../TUIChat/message-input-toolbar/index.ts | 2 + .../TUIChat/message-input-toolbar/index.vue | 304 ++ .../message-input-toolbar/style/uni.scss | 111 + .../toolbar-item-container/index.vue | 138 + .../toolbar-item-container/style/color.scss | 6 + .../toolbar-item-container/style/h5.scss | 7 + .../toolbar-item-container/style/index.scss | 5 + .../toolbar-item-container/style/uni.scss | 37 + .../toolbar-item-container/style/web.scss | 24 + .../uploadToolkit/constants.ts | 135 + .../uploadToolkit/index.ts | 11 + .../uploadToolkit/useUpload.ts | 183 ++ .../uploadToolkit/utils.ts | 116 + .../user-selector/index.ts | 2 + .../user-selector/index.vue | 148 + .../video-upload/index.ts | 2 + .../video-upload/index.vue | 41 + .../message-input-toolbar/words/index.ts | 2 + .../message-input-toolbar/words/index.vue | 95 + .../words/style/color.scss | 8 + .../message-input-toolbar/words/style/h5.scss | 29 + .../words/style/index.scss | 5 + .../words/style/web.scss | 32 + .../components/TUIChat/message-input/index.ts | 2 + .../TUIChat/message-input/index.vue | 240 ++ .../message-input/message-input-at/index.vue | 395 +++ .../message-input/message-input-audio.vue | 617 ++++ .../message-input/message-input-button.vue | 114 + .../message-input/message-input-editor.vue | 321 ++ .../message-input-quote/index.vue | 157 + .../components/TUIChat/message-list/index.vue | 745 +++++ .../TUIChat/message-list/link/index.ts | 23 + .../message-elements/message-audio.vue | 257 ++ .../message-elements/message-bubble.vue | 485 +++ .../message-convert/convert-content.vue | 101 + .../message-convert/index.vue | 99 + .../message-elements/message-custom.vue | 187 ++ .../message-elements/message-face.vue | 44 + .../message-elements/message-file.vue | 78 + .../message-elements/message-image.vue | 85 + .../message-elements/message-location.vue | 33 + .../message-elements/message-quote/index.vue | 199 ++ .../message-quote/interface.ts | 60 + .../message-elements/message-record/index.vue | 137 + .../message-elements/message-text.vue | 191 ++ .../message-elements/message-timestamp.vue | 74 + .../message-elements/message-tip.vue | 48 + .../message-translate/index.vue | 124 + .../message-translate/translation-content.vue | 124 + .../message-elements/message-video.vue | 65 + .../message-elements/read-status/index.vue | 200 ++ .../simple-message-list/index.vue | 433 +++ .../simple-message-list/message-container.vue | 102 + .../message-group-application/index.vue | 336 +++ .../message-list/message-tool/index.vue | 453 +++ .../message-tool/message-revoked.vue | 58 + .../message-list/read-receipt-panel/index.vue | 456 +++ .../read-receipt-panel/interface.ts | 27 + .../message-list/scroll-button/index.vue | 176 ++ .../TUIChat/message-list/style/color.scss | 32 + .../TUIChat/message-list/style/h5.scss | 16 + .../TUIChat/message-list/style/index.scss | 11 + .../TUIChat/message-list/style/web.scss | 177 ++ .../TUIChat/mulitple-select-panel/index.vue | 134 + .../TUIChat/offlinePushInfoManager/const.ts | 17 + .../TUIChat/offlinePushInfoManager/index.ts | 6 + .../TUIChat/offlinePushInfoManager/info.ts | 8 + .../offlinePushInfoManager/interface.ts | 49 + .../offlinePushInfoManager.ts | 76 + TUIKit/components/TUIChat/server.ts | 91 + TUIKit/components/TUIChat/style/h5.scss | 46 + TUIKit/components/TUIChat/style/index.scss | 12 + TUIKit/components/TUIChat/style/uni.scss | 10 + TUIKit/components/TUIChat/style/web.scss | 46 + TUIKit/components/TUIChat/style/wx.scss | 5 + .../components/TUIChat/utils/chatStorage.ts | 70 + .../TUIChat/utils/conversationDraft.ts | 86 + .../TUIChat/utils/convertVoiceToText.ts | 62 + .../components/TUIChat/utils/sendMessage.ts | 155 + .../components/TUIChat/utils/translation.ts | 203 ++ TUIKit/components/TUIChat/utils/utils.ts | 161 + TUIKit/components/TUIChat/utils/wordsList.ts | 29 + TUIKit/components/TUIChat/video-play.vue | 58 + TUIKit/components/TUIChat/web-view.vue | 13 + .../contact-info/contact-info-config.ts | 201 ++ .../TUIContact/contact-info/index.ts | 3 + .../TUIContact/contact-info/index.vue | 423 +++ .../TUIContact/contact-info/style/h5.scss | 130 + .../TUIContact/contact-info/style/index.scss | 3 + .../TUIContact/contact-info/style/web.scss | 151 + .../contact-list/components/FriendList.vue | 89 + .../contact-list/components/index.js | 1 + .../contact-list/contact-list-item/index.vue | 252 ++ .../TUIContact/contact-list/index.ts | 3 + .../TUIContact/contact-list/index.vue | 376 +++ .../TUIContact/contact-list/style/h5.scss | 16 + .../TUIContact/contact-list/style/index.scss | 3 + .../TUIContact/contact-list/style/web.scss | 111 + .../TUIContact/contact-search/index.ts | 2 + .../TUIContact/contact-search/index.vue | 177 ++ TUIKit/components/TUIContact/index.ts | 5 + TUIKit/components/TUIContact/index.vue | 200 ++ .../TUIContact/select-friend/index.ts | 3 + .../TUIContact/select-friend/index.vue | 115 + TUIKit/components/TUIContact/server.ts | 43 + .../utils/getChinesePinyinFirstLetter.ts | 14 + TUIKit/components/TUIContact/utils/index.ts | 359 +++ .../TUIContact/utils/sortByFirstChar.ts | 153 + .../TUIConversation/actions-menu/index.vue | 232 ++ .../conversation-header/index.ts | 3 + .../conversation-header/index.vue | 119 + .../conversation-header/server.ts | 80 + .../conversation-list/index.vue | 311 ++ .../conversation-list/style/color.scss | 89 + .../conversation-list/style/h5.scss | 43 + .../conversation-list/style/index.scss | 4 + .../conversation-list/style/web.scss | 189 ++ .../conversation-network/index.ts | 3 + .../conversation-network/index.vue | 33 + TUIKit/components/TUIConversation/entry.ts | 2 + TUIKit/components/TUIConversation/index.ts | 5 + TUIKit/components/TUIConversation/index.vue | 191 ++ TUIKit/components/TUIConversation/server.ts | 163 ++ .../TUIConversation/style/color.scss | 12 + .../TUIConversation/style/index.scss | 3 + .../components/TUIConversation/style/web.scss | 138 + .../create-group/group-introduction/config.ts | 50 + .../create-group/group-introduction/index.vue | 75 + .../components/TUIGroup/create-group/index.ts | 3 + .../TUIGroup/create-group/index.vue | 278 ++ .../TUIGroup/create-group/style/color.scss | 104 + .../TUIGroup/create-group/style/h5.scss | 99 + .../TUIGroup/create-group/style/index.scss | 4 + .../TUIGroup/create-group/style/web.scss | 93 + TUIKit/components/TUIGroup/index.ts | 6 + TUIKit/components/TUIGroup/index.vue | 103 + .../components/TUIGroup/manage-group/index.ts | 3 + .../TUIGroup/manage-group/index.vue | 865 ++++++ .../TUIGroup/manage-group/manage-admin.vue | 338 +++ .../TUIGroup/manage-group/manage-member.vue | 307 ++ .../TUIGroup/manage-group/manage-name.vue | 298 ++ .../manage-group/manage-notification.vue | 275 ++ .../TUIGroup/manage-group/manage-profile.vue | 290 ++ .../TUIGroup/manage-group/style/color.scss | 63 + .../TUIGroup/manage-group/style/h5.scss | 3 + .../TUIGroup/manage-group/style/index.scss | 39 + .../TUIGroup/manage-group/style/web.scss | 258 ++ .../TUIGroup/select-member/index.ts | 3 + .../TUIGroup/select-member/index.vue | 121 + TUIKit/components/TUIGroup/server.ts | 94 + TUIKit/components/TUISearch/index.ts | 5 + TUIKit/components/TUISearch/index.vue | 218 ++ .../TUISearch/search-container/index.ts | 2 + .../TUISearch/search-container/index.vue | 259 ++ .../TUISearch/search-container/style/h5.scss | 36 + .../search-container/style/index.scss | 3 + .../TUISearch/search-container/style/web.scss | 114 + .../TUISearch/search-input/index.ts | 2 + .../TUISearch/search-input/index.vue | 246 ++ .../components/TUISearch/search-more/index.ts | 3 + .../TUISearch/search-more/index.vue | 162 + .../TUISearch/search-result/index.ts | 2 + .../TUISearch/search-result/index.vue | 589 ++++ .../search-result-default/index.ts | 2 + .../search-result-default/index.vue | 50 + .../search-result-item/index.vue | 211 ++ .../message-abstract-custom.vue | 237 ++ .../message-abstract-file.vue | 152 + .../message-abstract-image.vue | 40 + .../message-abstract-text.vue | 93 + .../message-abstract-video.vue | 70 + .../search-result-item/style/h5.scss | 24 + .../search-result-item/style/index.scss | 3 + .../search-result-item/style/web.scss | 262 ++ .../search-result-loading/index.ts | 2 + .../search-result-loading/index.vue | 25 + .../TUISearch/search-result/style/h5.scss | 67 + .../TUISearch/search-result/style/index.scss | 3 + .../TUISearch/search-result/style/web.scss | 180 ++ .../components/TUISearch/search-time-list.ts | 45 + .../components/TUISearch/search-type-list.ts | 86 + TUIKit/components/TUISearch/server.ts | 76 + TUIKit/components/TUISearch/style/h5.scss | 38 + TUIKit/components/TUISearch/style/index.scss | 3 + TUIKit/components/TUISearch/style/web.scss | 31 + TUIKit/components/TUISearch/type.ts | 76 + TUIKit/components/TUISearch/utils.ts | 346 +++ TUIKit/components/common/Avatar/index.vue | 147 + TUIKit/components/common/BottomPopup/index.ts | 3 + .../components/common/BottomPopup/index.vue | 159 + .../common/BottomPopup/style/h5.scss | 60 + .../common/BottomPopup/style/index.scss | 3 + .../common/BottomPopup/style/modal.scss | 3 + .../common/DatePicker/date-picker-panel.vue | 308 ++ .../common/DatePicker/date-picker.ts | 19 + .../common/DatePicker/date-table.vue | 321 ++ TUIKit/components/common/DatePicker/index.ts | 2 + TUIKit/components/common/DatePicker/index.vue | 270 ++ TUIKit/components/common/Dialog/index.ts | 3 + TUIKit/components/common/Dialog/index.vue | 127 + .../components/common/Dialog/style/color.scss | 43 + .../common/Dialog/style/dialog.scss | 4 + TUIKit/components/common/Dialog/style/h5.scss | 56 + .../components/common/Dialog/style/web.scss | 61 + TUIKit/components/common/Drawer/index.vue | 159 + TUIKit/components/common/FetchMore/index.vue | 96 + TUIKit/components/common/Icon.vue | 82 + .../common/ImagePreviewer/image-item.vue | 79 + .../components/common/ImagePreviewer/index.ts | 3 + .../common/ImagePreviewer/index.vue | 678 +++++ TUIKit/components/common/Loading/index.ts | 2 + TUIKit/components/common/Loading/index.vue | 47 + TUIKit/components/common/MaskLayer/index.vue | 56 + TUIKit/components/common/Navigation/index.ts | 3 + TUIKit/components/common/Navigation/index.vue | 106 + TUIKit/components/common/Overlay/index.vue | 129 + TUIKit/components/common/Popconfirm/index.vue | 188 ++ .../common/ProgressMessage/index.vue | 92 + .../components/common/RadioSelect/index.vue | 61 + TUIKit/components/common/SelectUser/index.ts | 3 + TUIKit/components/common/SelectUser/index.vue | 69 + TUIKit/components/common/Slider/index.vue | 64 + TUIKit/components/common/SwitchBar/index.ts | 2 + TUIKit/components/common/SwitchBar/index.vue | 74 + TUIKit/components/common/Toast/index.ts | 36 + TUIKit/components/common/Toast/type.ts | 8 + TUIKit/components/common/Transfer/index.ts | 2 + TUIKit/components/common/Transfer/index.vue | 332 +++ .../common/Transfer/style/color.scss | 68 + .../components/common/Transfer/style/h5.scss | 95 + .../common/Transfer/style/transfer.scss | 13 + .../components/common/Transfer/style/web.scss | 141 + .../common/UIKitModal/UIKitModal.ts | 76 + TUIKit/components/common/UIKitModal/index.ts | 2 + TUIKit/components/index.ts | 23 + TUIKit/constant.ts | 55 + TUIKit/debug/GenerateTestUserSig.js | 37 + TUIKit/debug/index.d.ts | 2 + TUIKit/debug/index.js | 1 + .../debug/lib-generate-test-usersig-es.min.js | 2 + TUIKit/index.ts | 27 + TUIKit/index.vue | 4 + TUIKit/interface.ts | 334 +++ TUIKit/locales/en/TUIChat.ts | 173 ++ TUIKit/locales/en/TUIContact.ts | 66 + TUIKit/locales/en/TUIConversation.ts | 24 + TUIKit/locales/en/TUIGroup.ts | 87 + TUIKit/locales/en/TUISearch.ts | 41 + TUIKit/locales/en/component.ts | 21 + TUIKit/locales/en/emoji.ts | 2 + TUIKit/locales/en/evaluate.ts | 11 + TUIKit/locales/en/index.ts | 41 + TUIKit/locales/en/message.ts | 62 + TUIKit/locales/en/time.ts | 37 + TUIKit/locales/en/words.ts | 19 + TUIKit/locales/index.ts | 16 + TUIKit/locales/zh_cn/TUIChat.ts | 173 ++ TUIKit/locales/zh_cn/TUIContact.ts | 68 + TUIKit/locales/zh_cn/TUIConversation.ts | 24 + TUIKit/locales/zh_cn/TUIGroup.ts | 88 + TUIKit/locales/zh_cn/TUISearch.ts | 41 + TUIKit/locales/zh_cn/component.ts | 21 + TUIKit/locales/zh_cn/emoji.ts | 2 + TUIKit/locales/zh_cn/evaluate.ts | 11 + TUIKit/locales/zh_cn/index.ts | 41 + TUIKit/locales/zh_cn/message.ts | 62 + TUIKit/locales/zh_cn/time.ts | 37 + TUIKit/locales/zh_cn/translate.ts | 164 ++ TUIKit/locales/zh_cn/words.ts | 14 + TUIKit/locales/zh_tw/TUIChat.ts | 173 ++ TUIKit/locales/zh_tw/TUIContact.ts | 66 + TUIKit/locales/zh_tw/TUIConversation.ts | 24 + TUIKit/locales/zh_tw/TUIGroup.ts | 88 + TUIKit/locales/zh_tw/TUISearch.ts | 41 + TUIKit/locales/zh_tw/component.ts | 21 + TUIKit/locales/zh_tw/emoji.ts | 2 + TUIKit/locales/zh_tw/evaluate.ts | 11 + TUIKit/locales/zh_tw/index.ts | 41 + TUIKit/locales/zh_tw/message.ts | 62 + TUIKit/locales/zh_tw/time.ts | 37 + TUIKit/locales/zh_tw/translate.ts | 164 ++ TUIKit/locales/zh_tw/words.ts | 14 + TUIKit/plugins/extension-server/callkit.ts | 141 + TUIKit/plugins/plugin-components/index.ts | 35 + .../message-call/message-call-c2c.vue | 117 + .../message-call/message-call-group.vue | 51 + .../message-plugin-layout.vue | 123 + .../plugin-components/message-plugin.vue | 92 + .../message-room/message-room-default.vue | 42 + .../message-room/message-room.vue | 19 + TUIKit/server.ts | 175 ++ TUIKit/shims-vue.d.ts | 29 + TUIKit/static/message-selected.png | Bin 0 -> 5601 bytes TUIKit/static/message.png | Bin 0 -> 1288 bytes TUIKit/static/profile-selected.png | Bin 0 -> 2173 bytes TUIKit/static/profile.png | Bin 0 -> 1397 bytes TUIKit/static/relation-selected.png | Bin 0 -> 5368 bytes TUIKit/static/relation.png | Bin 0 -> 1733 bytes TUIKit/utils/documentLink.ts | 23 + TUIKit/utils/enableSampleTaskStatus.ts | 8 + TUIKit/utils/env.ts | 17 + TUIKit/utils/index.ts | 1 + TUIKit/utils/lodash.ts | 169 ++ TUIKit/utils/permission.js | 101 + TUIKit/utils/riseInput.ts | 156 + TUIKit/utils/type-check.ts | 44 + TUIKit/utils/unifyPromiseVue2.ts | 27 + TUIKit/vue.config.js | 2 + manifest.json | 184 +- package-lock.json | 2596 +++++++++++++++++ package.json | 16 + pages/mall/comment.vue | 2 +- pages/news-list/news-list.vue | 17 +- static/message-selected.png | Bin 0 -> 5601 bytes static/message.png | Bin 0 -> 1288 bytes static/profile-selected.png | Bin 0 -> 2173 bytes static/profile.png | Bin 0 -> 1397 bytes static/relation-selected.png | Bin 0 -> 5368 bytes static/relation.png | Bin 0 -> 1733 bytes stores/user.js | 19 +- 450 files changed, 37066 insertions(+), 96 deletions(-) create mode 100644 TUIKit/CHANGELOG.md create mode 100644 TUIKit/README.md create mode 100644 TUIKit/adapter-vue.ts create mode 100644 TUIKit/assets/icon/add-circle.svg create mode 100644 TUIKit/assets/icon/add.svg create mode 100644 TUIKit/assets/icon/at.svg create mode 100644 TUIKit/assets/icon/audio.svg create mode 100644 TUIKit/assets/icon/back.svg create mode 100644 TUIKit/assets/icon/black-list.svg create mode 100644 TUIKit/assets/icon/break-btn.svg create mode 100644 TUIKit/assets/icon/break.svg create mode 100644 TUIKit/assets/icon/call-video.svg create mode 100644 TUIKit/assets/icon/call-voice.svg create mode 100644 TUIKit/assets/icon/call.png create mode 100644 TUIKit/assets/icon/camera-uni.png create mode 100644 TUIKit/assets/icon/cancel.svg create mode 100644 TUIKit/assets/icon/check-sm.svg create mode 100644 TUIKit/assets/icon/clear-history.svg create mode 100644 TUIKit/assets/icon/close-dark.svg create mode 100644 TUIKit/assets/icon/close-image.png create mode 100644 TUIKit/assets/icon/convertText_en.svg create mode 100644 TUIKit/assets/icon/convertText_zh.svg create mode 100644 TUIKit/assets/icon/custom.svg create mode 100644 TUIKit/assets/icon/d-left-arrow.svg create mode 100644 TUIKit/assets/icon/d-right-arrow.svg create mode 100644 TUIKit/assets/icon/del-icon.svg create mode 100644 TUIKit/assets/icon/double-arrow.svg create mode 100644 TUIKit/assets/icon/down-icon.svg create mode 100644 TUIKit/assets/icon/downaload-image.png create mode 100644 TUIKit/assets/icon/download.svg create mode 100644 TUIKit/assets/icon/edit.svg create mode 100644 TUIKit/assets/icon/evalute-dark.svg create mode 100644 TUIKit/assets/icon/evalute-light.svg create mode 100644 TUIKit/assets/icon/face-dark.svg create mode 100644 TUIKit/assets/icon/face-light.svg create mode 100644 TUIKit/assets/icon/face-uni.png create mode 100644 TUIKit/assets/icon/file-dark.svg create mode 100644 TUIKit/assets/icon/file-light.svg create mode 100644 TUIKit/assets/icon/forward-each.svg create mode 100644 TUIKit/assets/icon/forward-merge.svg create mode 100644 TUIKit/assets/icon/groups.svg create mode 100644 TUIKit/assets/icon/icon-arrow-left.svg create mode 100644 TUIKit/assets/icon/icon-c2c.svg create mode 100644 TUIKit/assets/icon/icon-close.svg create mode 100644 TUIKit/assets/icon/image-dark.svg create mode 100644 TUIKit/assets/icon/image-light.svg create mode 100644 TUIKit/assets/icon/image-uni.png create mode 100644 TUIKit/assets/icon/input-close.svg create mode 100644 TUIKit/assets/icon/left-arrow.svg create mode 100644 TUIKit/assets/icon/loading.gif create mode 100644 TUIKit/assets/icon/loading.png create mode 100644 TUIKit/assets/icon/minus.svg create mode 100644 TUIKit/assets/icon/more-uni.png create mode 100644 TUIKit/assets/icon/more.png create mode 100644 TUIKit/assets/icon/more.svg create mode 100644 TUIKit/assets/icon/msg-audio.svg create mode 100644 TUIKit/assets/icon/msg-copy.svg create mode 100644 TUIKit/assets/icon/msg-del.svg create mode 100644 TUIKit/assets/icon/msg-forward.svg create mode 100644 TUIKit/assets/icon/msg-quote.svg create mode 100644 TUIKit/assets/icon/msg-revoke.svg create mode 100644 TUIKit/assets/icon/multiple-select.svg create mode 100644 TUIKit/assets/icon/mute.svg create mode 100644 TUIKit/assets/icon/new-contacts.svg create mode 100644 TUIKit/assets/icon/plus.svg create mode 100644 TUIKit/assets/icon/radio.svg create mode 100644 TUIKit/assets/icon/right-arrow.svg create mode 100644 TUIKit/assets/icon/right-icon.svg create mode 100644 TUIKit/assets/icon/rotate-left.svg create mode 100644 TUIKit/assets/icon/rotate-right.svg create mode 100644 TUIKit/assets/icon/search-default.svg create mode 100644 TUIKit/assets/icon/search-more.svg create mode 100644 TUIKit/assets/icon/search.svg create mode 100644 TUIKit/assets/icon/selected.svg create mode 100644 TUIKit/assets/icon/setting.svg create mode 100644 TUIKit/assets/icon/star-light.png create mode 100644 TUIKit/assets/icon/star.png create mode 100644 TUIKit/assets/icon/start-group.svg create mode 100644 TUIKit/assets/icon/translate.svg create mode 100644 TUIKit/assets/icon/video-dark.svg create mode 100644 TUIKit/assets/icon/video-light.svg create mode 100644 TUIKit/assets/icon/video-play.png create mode 100644 TUIKit/assets/icon/video-uni.png create mode 100644 TUIKit/assets/icon/words-dark.svg create mode 100644 TUIKit/assets/icon/words-light.svg create mode 100644 TUIKit/assets/icon/zoom-in.svg create mode 100644 TUIKit/assets/icon/zoom-out.svg create mode 100644 TUIKit/assets/styles/common.scss create mode 100644 TUIKit/assets/styles/sample.scss create mode 100644 TUIKit/components/TUIChat/aiRobotManager/aiRobotManager.ts create mode 100644 TUIKit/components/TUIChat/aiRobotManager/const.ts create mode 100644 TUIKit/components/TUIChat/aiRobotManager/index.ts create mode 100644 TUIKit/components/TUIChat/aiRobotManager/info.ts create mode 100644 TUIKit/components/TUIChat/aiRobotManager/interface.ts create mode 100644 TUIKit/components/TUIChat/chat-header/index.vue create mode 100644 TUIKit/components/TUIChat/config.ts create mode 100644 TUIKit/components/TUIChat/emoji-config/custom-emoji.ts create mode 100644 TUIKit/components/TUIChat/emoji-config/default-emoji.ts create mode 100644 TUIKit/components/TUIChat/emoji-config/index.ts create mode 100644 TUIKit/components/TUIChat/emoji-config/locales/en.ts create mode 100644 TUIKit/components/TUIChat/emoji-config/locales/zh_cn.ts create mode 100644 TUIKit/components/TUIChat/emoji-config/locales/zh_tw.ts create mode 100644 TUIKit/components/TUIChat/entry-chat-only.ts create mode 100644 TUIKit/components/TUIChat/forward/index.vue create mode 100644 TUIKit/components/TUIChat/index.ts create mode 100644 TUIKit/components/TUIChat/index.vue create mode 100644 TUIKit/components/TUIChat/message-input-toolbar/album-upload/index.ts create mode 100644 TUIKit/components/TUIChat/message-input-toolbar/album-upload/index.vue create mode 100644 TUIKit/components/TUIChat/message-input-toolbar/camera-upload/index.ts create mode 100644 TUIKit/components/TUIChat/message-input-toolbar/camera-upload/index.vue create mode 100644 TUIKit/components/TUIChat/message-input-toolbar/clearHistory/index.ts create mode 100644 TUIKit/components/TUIChat/message-input-toolbar/clearHistory/index.vue create mode 100644 TUIKit/components/TUIChat/message-input-toolbar/emoji-picker/emoji-picker-dialog.vue create mode 100644 TUIKit/components/TUIChat/message-input-toolbar/emoji-picker/index.ts create mode 100644 TUIKit/components/TUIChat/message-input-toolbar/emoji-picker/index.vue create mode 100644 TUIKit/components/TUIChat/message-input-toolbar/emoji-picker/style/h5.scss create mode 100644 TUIKit/components/TUIChat/message-input-toolbar/emoji-picker/style/index.scss create mode 100644 TUIKit/components/TUIChat/message-input-toolbar/emoji-picker/style/web.scss create mode 100644 TUIKit/components/TUIChat/message-input-toolbar/evaluate/index.ts create mode 100644 TUIKit/components/TUIChat/message-input-toolbar/evaluate/index.vue create mode 100644 TUIKit/components/TUIChat/message-input-toolbar/evaluate/style/color.scss create mode 100644 TUIKit/components/TUIChat/message-input-toolbar/evaluate/style/h5.scss create mode 100644 TUIKit/components/TUIChat/message-input-toolbar/evaluate/style/index.scss create mode 100644 TUIKit/components/TUIChat/message-input-toolbar/evaluate/style/web.scss create mode 100644 TUIKit/components/TUIChat/message-input-toolbar/file-upload/index.ts create mode 100644 TUIKit/components/TUIChat/message-input-toolbar/file-upload/index.vue create mode 100644 TUIKit/components/TUIChat/message-input-toolbar/image-upload/index.ts create mode 100644 TUIKit/components/TUIChat/message-input-toolbar/image-upload/index.vue create mode 100644 TUIKit/components/TUIChat/message-input-toolbar/index.ts create mode 100644 TUIKit/components/TUIChat/message-input-toolbar/index.vue create mode 100644 TUIKit/components/TUIChat/message-input-toolbar/style/uni.scss create mode 100644 TUIKit/components/TUIChat/message-input-toolbar/toolbar-item-container/index.vue create mode 100644 TUIKit/components/TUIChat/message-input-toolbar/toolbar-item-container/style/color.scss create mode 100644 TUIKit/components/TUIChat/message-input-toolbar/toolbar-item-container/style/h5.scss create mode 100644 TUIKit/components/TUIChat/message-input-toolbar/toolbar-item-container/style/index.scss create mode 100644 TUIKit/components/TUIChat/message-input-toolbar/toolbar-item-container/style/uni.scss create mode 100644 TUIKit/components/TUIChat/message-input-toolbar/toolbar-item-container/style/web.scss create mode 100644 TUIKit/components/TUIChat/message-input-toolbar/uploadToolkit/constants.ts create mode 100644 TUIKit/components/TUIChat/message-input-toolbar/uploadToolkit/index.ts create mode 100644 TUIKit/components/TUIChat/message-input-toolbar/uploadToolkit/useUpload.ts create mode 100644 TUIKit/components/TUIChat/message-input-toolbar/uploadToolkit/utils.ts create mode 100644 TUIKit/components/TUIChat/message-input-toolbar/user-selector/index.ts create mode 100644 TUIKit/components/TUIChat/message-input-toolbar/user-selector/index.vue create mode 100644 TUIKit/components/TUIChat/message-input-toolbar/video-upload/index.ts create mode 100644 TUIKit/components/TUIChat/message-input-toolbar/video-upload/index.vue create mode 100644 TUIKit/components/TUIChat/message-input-toolbar/words/index.ts create mode 100644 TUIKit/components/TUIChat/message-input-toolbar/words/index.vue create mode 100644 TUIKit/components/TUIChat/message-input-toolbar/words/style/color.scss create mode 100644 TUIKit/components/TUIChat/message-input-toolbar/words/style/h5.scss create mode 100644 TUIKit/components/TUIChat/message-input-toolbar/words/style/index.scss create mode 100644 TUIKit/components/TUIChat/message-input-toolbar/words/style/web.scss create mode 100644 TUIKit/components/TUIChat/message-input/index.ts create mode 100644 TUIKit/components/TUIChat/message-input/index.vue create mode 100644 TUIKit/components/TUIChat/message-input/message-input-at/index.vue create mode 100644 TUIKit/components/TUIChat/message-input/message-input-audio.vue create mode 100644 TUIKit/components/TUIChat/message-input/message-input-button.vue create mode 100644 TUIKit/components/TUIChat/message-input/message-input-editor.vue create mode 100644 TUIKit/components/TUIChat/message-input/message-input-quote/index.vue create mode 100644 TUIKit/components/TUIChat/message-list/index.vue create mode 100644 TUIKit/components/TUIChat/message-list/link/index.ts create mode 100644 TUIKit/components/TUIChat/message-list/message-elements/message-audio.vue create mode 100644 TUIKit/components/TUIChat/message-list/message-elements/message-bubble.vue create mode 100644 TUIKit/components/TUIChat/message-list/message-elements/message-convert/convert-content.vue create mode 100644 TUIKit/components/TUIChat/message-list/message-elements/message-convert/index.vue create mode 100644 TUIKit/components/TUIChat/message-list/message-elements/message-custom.vue create mode 100644 TUIKit/components/TUIChat/message-list/message-elements/message-face.vue create mode 100644 TUIKit/components/TUIChat/message-list/message-elements/message-file.vue create mode 100644 TUIKit/components/TUIChat/message-list/message-elements/message-image.vue create mode 100644 TUIKit/components/TUIChat/message-list/message-elements/message-location.vue create mode 100644 TUIKit/components/TUIChat/message-list/message-elements/message-quote/index.vue create mode 100644 TUIKit/components/TUIChat/message-list/message-elements/message-quote/interface.ts create mode 100644 TUIKit/components/TUIChat/message-list/message-elements/message-record/index.vue create mode 100644 TUIKit/components/TUIChat/message-list/message-elements/message-text.vue create mode 100644 TUIKit/components/TUIChat/message-list/message-elements/message-timestamp.vue create mode 100644 TUIKit/components/TUIChat/message-list/message-elements/message-tip.vue create mode 100644 TUIKit/components/TUIChat/message-list/message-elements/message-translate/index.vue create mode 100644 TUIKit/components/TUIChat/message-list/message-elements/message-translate/translation-content.vue create mode 100644 TUIKit/components/TUIChat/message-list/message-elements/message-video.vue create mode 100644 TUIKit/components/TUIChat/message-list/message-elements/read-status/index.vue create mode 100644 TUIKit/components/TUIChat/message-list/message-elements/simple-message-list/index.vue create mode 100644 TUIKit/components/TUIChat/message-list/message-elements/simple-message-list/message-container.vue create mode 100644 TUIKit/components/TUIChat/message-list/message-group-application/index.vue create mode 100644 TUIKit/components/TUIChat/message-list/message-tool/index.vue create mode 100644 TUIKit/components/TUIChat/message-list/message-tool/message-revoked.vue create mode 100644 TUIKit/components/TUIChat/message-list/read-receipt-panel/index.vue create mode 100644 TUIKit/components/TUIChat/message-list/read-receipt-panel/interface.ts create mode 100644 TUIKit/components/TUIChat/message-list/scroll-button/index.vue create mode 100644 TUIKit/components/TUIChat/message-list/style/color.scss create mode 100644 TUIKit/components/TUIChat/message-list/style/h5.scss create mode 100644 TUIKit/components/TUIChat/message-list/style/index.scss create mode 100644 TUIKit/components/TUIChat/message-list/style/web.scss create mode 100644 TUIKit/components/TUIChat/mulitple-select-panel/index.vue create mode 100644 TUIKit/components/TUIChat/offlinePushInfoManager/const.ts create mode 100644 TUIKit/components/TUIChat/offlinePushInfoManager/index.ts create mode 100644 TUIKit/components/TUIChat/offlinePushInfoManager/info.ts create mode 100644 TUIKit/components/TUIChat/offlinePushInfoManager/interface.ts create mode 100644 TUIKit/components/TUIChat/offlinePushInfoManager/offlinePushInfoManager.ts create mode 100644 TUIKit/components/TUIChat/server.ts create mode 100644 TUIKit/components/TUIChat/style/h5.scss create mode 100644 TUIKit/components/TUIChat/style/index.scss create mode 100644 TUIKit/components/TUIChat/style/uni.scss create mode 100644 TUIKit/components/TUIChat/style/web.scss create mode 100644 TUIKit/components/TUIChat/style/wx.scss create mode 100644 TUIKit/components/TUIChat/utils/chatStorage.ts create mode 100644 TUIKit/components/TUIChat/utils/conversationDraft.ts create mode 100644 TUIKit/components/TUIChat/utils/convertVoiceToText.ts create mode 100644 TUIKit/components/TUIChat/utils/sendMessage.ts create mode 100644 TUIKit/components/TUIChat/utils/translation.ts create mode 100644 TUIKit/components/TUIChat/utils/utils.ts create mode 100644 TUIKit/components/TUIChat/utils/wordsList.ts create mode 100644 TUIKit/components/TUIChat/video-play.vue create mode 100644 TUIKit/components/TUIChat/web-view.vue create mode 100644 TUIKit/components/TUIContact/contact-info/contact-info-config.ts create mode 100644 TUIKit/components/TUIContact/contact-info/index.ts create mode 100644 TUIKit/components/TUIContact/contact-info/index.vue create mode 100644 TUIKit/components/TUIContact/contact-info/style/h5.scss create mode 100644 TUIKit/components/TUIContact/contact-info/style/index.scss create mode 100644 TUIKit/components/TUIContact/contact-info/style/web.scss create mode 100644 TUIKit/components/TUIContact/contact-list/components/FriendList.vue create mode 100644 TUIKit/components/TUIContact/contact-list/components/index.js create mode 100644 TUIKit/components/TUIContact/contact-list/contact-list-item/index.vue create mode 100644 TUIKit/components/TUIContact/contact-list/index.ts create mode 100644 TUIKit/components/TUIContact/contact-list/index.vue create mode 100644 TUIKit/components/TUIContact/contact-list/style/h5.scss create mode 100644 TUIKit/components/TUIContact/contact-list/style/index.scss create mode 100644 TUIKit/components/TUIContact/contact-list/style/web.scss create mode 100644 TUIKit/components/TUIContact/contact-search/index.ts create mode 100644 TUIKit/components/TUIContact/contact-search/index.vue create mode 100644 TUIKit/components/TUIContact/index.ts create mode 100644 TUIKit/components/TUIContact/index.vue create mode 100644 TUIKit/components/TUIContact/select-friend/index.ts create mode 100644 TUIKit/components/TUIContact/select-friend/index.vue create mode 100644 TUIKit/components/TUIContact/server.ts create mode 100644 TUIKit/components/TUIContact/utils/getChinesePinyinFirstLetter.ts create mode 100644 TUIKit/components/TUIContact/utils/index.ts create mode 100644 TUIKit/components/TUIContact/utils/sortByFirstChar.ts create mode 100644 TUIKit/components/TUIConversation/actions-menu/index.vue create mode 100644 TUIKit/components/TUIConversation/conversation-header/index.ts create mode 100644 TUIKit/components/TUIConversation/conversation-header/index.vue create mode 100644 TUIKit/components/TUIConversation/conversation-header/server.ts create mode 100644 TUIKit/components/TUIConversation/conversation-list/index.vue create mode 100644 TUIKit/components/TUIConversation/conversation-list/style/color.scss create mode 100644 TUIKit/components/TUIConversation/conversation-list/style/h5.scss create mode 100644 TUIKit/components/TUIConversation/conversation-list/style/index.scss create mode 100644 TUIKit/components/TUIConversation/conversation-list/style/web.scss create mode 100644 TUIKit/components/TUIConversation/conversation-network/index.ts create mode 100644 TUIKit/components/TUIConversation/conversation-network/index.vue create mode 100644 TUIKit/components/TUIConversation/entry.ts create mode 100644 TUIKit/components/TUIConversation/index.ts create mode 100644 TUIKit/components/TUIConversation/index.vue create mode 100644 TUIKit/components/TUIConversation/server.ts create mode 100644 TUIKit/components/TUIConversation/style/color.scss create mode 100644 TUIKit/components/TUIConversation/style/index.scss create mode 100644 TUIKit/components/TUIConversation/style/web.scss create mode 100644 TUIKit/components/TUIGroup/create-group/group-introduction/config.ts create mode 100644 TUIKit/components/TUIGroup/create-group/group-introduction/index.vue create mode 100644 TUIKit/components/TUIGroup/create-group/index.ts create mode 100644 TUIKit/components/TUIGroup/create-group/index.vue create mode 100644 TUIKit/components/TUIGroup/create-group/style/color.scss create mode 100644 TUIKit/components/TUIGroup/create-group/style/h5.scss create mode 100644 TUIKit/components/TUIGroup/create-group/style/index.scss create mode 100644 TUIKit/components/TUIGroup/create-group/style/web.scss create mode 100644 TUIKit/components/TUIGroup/index.ts create mode 100644 TUIKit/components/TUIGroup/index.vue create mode 100644 TUIKit/components/TUIGroup/manage-group/index.ts create mode 100644 TUIKit/components/TUIGroup/manage-group/index.vue create mode 100644 TUIKit/components/TUIGroup/manage-group/manage-admin.vue create mode 100644 TUIKit/components/TUIGroup/manage-group/manage-member.vue create mode 100644 TUIKit/components/TUIGroup/manage-group/manage-name.vue create mode 100644 TUIKit/components/TUIGroup/manage-group/manage-notification.vue create mode 100644 TUIKit/components/TUIGroup/manage-group/manage-profile.vue create mode 100644 TUIKit/components/TUIGroup/manage-group/style/color.scss create mode 100644 TUIKit/components/TUIGroup/manage-group/style/h5.scss create mode 100644 TUIKit/components/TUIGroup/manage-group/style/index.scss create mode 100644 TUIKit/components/TUIGroup/manage-group/style/web.scss create mode 100644 TUIKit/components/TUIGroup/select-member/index.ts create mode 100644 TUIKit/components/TUIGroup/select-member/index.vue create mode 100644 TUIKit/components/TUIGroup/server.ts create mode 100644 TUIKit/components/TUISearch/index.ts create mode 100644 TUIKit/components/TUISearch/index.vue create mode 100644 TUIKit/components/TUISearch/search-container/index.ts create mode 100644 TUIKit/components/TUISearch/search-container/index.vue create mode 100644 TUIKit/components/TUISearch/search-container/style/h5.scss create mode 100644 TUIKit/components/TUISearch/search-container/style/index.scss create mode 100644 TUIKit/components/TUISearch/search-container/style/web.scss create mode 100644 TUIKit/components/TUISearch/search-input/index.ts create mode 100644 TUIKit/components/TUISearch/search-input/index.vue create mode 100644 TUIKit/components/TUISearch/search-more/index.ts create mode 100644 TUIKit/components/TUISearch/search-more/index.vue create mode 100644 TUIKit/components/TUISearch/search-result/index.ts create mode 100644 TUIKit/components/TUISearch/search-result/index.vue create mode 100644 TUIKit/components/TUISearch/search-result/search-result-default/index.ts create mode 100644 TUIKit/components/TUISearch/search-result/search-result-default/index.vue create mode 100644 TUIKit/components/TUISearch/search-result/search-result-item/index.vue create mode 100644 TUIKit/components/TUISearch/search-result/search-result-item/message-abstract/message-abstract-custom.vue create mode 100644 TUIKit/components/TUISearch/search-result/search-result-item/message-abstract/message-abstract-file.vue create mode 100644 TUIKit/components/TUISearch/search-result/search-result-item/message-abstract/message-abstract-image.vue create mode 100644 TUIKit/components/TUISearch/search-result/search-result-item/message-abstract/message-abstract-text.vue create mode 100644 TUIKit/components/TUISearch/search-result/search-result-item/message-abstract/message-abstract-video.vue create mode 100644 TUIKit/components/TUISearch/search-result/search-result-item/style/h5.scss create mode 100644 TUIKit/components/TUISearch/search-result/search-result-item/style/index.scss create mode 100644 TUIKit/components/TUISearch/search-result/search-result-item/style/web.scss create mode 100644 TUIKit/components/TUISearch/search-result/search-result-loading/index.ts create mode 100644 TUIKit/components/TUISearch/search-result/search-result-loading/index.vue create mode 100644 TUIKit/components/TUISearch/search-result/style/h5.scss create mode 100644 TUIKit/components/TUISearch/search-result/style/index.scss create mode 100644 TUIKit/components/TUISearch/search-result/style/web.scss create mode 100644 TUIKit/components/TUISearch/search-time-list.ts create mode 100644 TUIKit/components/TUISearch/search-type-list.ts create mode 100644 TUIKit/components/TUISearch/server.ts create mode 100644 TUIKit/components/TUISearch/style/h5.scss create mode 100644 TUIKit/components/TUISearch/style/index.scss create mode 100644 TUIKit/components/TUISearch/style/web.scss create mode 100644 TUIKit/components/TUISearch/type.ts create mode 100644 TUIKit/components/TUISearch/utils.ts create mode 100644 TUIKit/components/common/Avatar/index.vue create mode 100644 TUIKit/components/common/BottomPopup/index.ts create mode 100644 TUIKit/components/common/BottomPopup/index.vue create mode 100644 TUIKit/components/common/BottomPopup/style/h5.scss create mode 100644 TUIKit/components/common/BottomPopup/style/index.scss create mode 100644 TUIKit/components/common/BottomPopup/style/modal.scss create mode 100644 TUIKit/components/common/DatePicker/date-picker-panel.vue create mode 100644 TUIKit/components/common/DatePicker/date-picker.ts create mode 100644 TUIKit/components/common/DatePicker/date-table.vue create mode 100644 TUIKit/components/common/DatePicker/index.ts create mode 100644 TUIKit/components/common/DatePicker/index.vue create mode 100644 TUIKit/components/common/Dialog/index.ts create mode 100644 TUIKit/components/common/Dialog/index.vue create mode 100644 TUIKit/components/common/Dialog/style/color.scss create mode 100644 TUIKit/components/common/Dialog/style/dialog.scss create mode 100644 TUIKit/components/common/Dialog/style/h5.scss create mode 100644 TUIKit/components/common/Dialog/style/web.scss create mode 100644 TUIKit/components/common/Drawer/index.vue create mode 100644 TUIKit/components/common/FetchMore/index.vue create mode 100644 TUIKit/components/common/Icon.vue create mode 100644 TUIKit/components/common/ImagePreviewer/image-item.vue create mode 100644 TUIKit/components/common/ImagePreviewer/index.ts create mode 100644 TUIKit/components/common/ImagePreviewer/index.vue create mode 100644 TUIKit/components/common/Loading/index.ts create mode 100644 TUIKit/components/common/Loading/index.vue create mode 100644 TUIKit/components/common/MaskLayer/index.vue create mode 100644 TUIKit/components/common/Navigation/index.ts create mode 100644 TUIKit/components/common/Navigation/index.vue create mode 100644 TUIKit/components/common/Overlay/index.vue create mode 100644 TUIKit/components/common/Popconfirm/index.vue create mode 100644 TUIKit/components/common/ProgressMessage/index.vue create mode 100644 TUIKit/components/common/RadioSelect/index.vue create mode 100644 TUIKit/components/common/SelectUser/index.ts create mode 100644 TUIKit/components/common/SelectUser/index.vue create mode 100644 TUIKit/components/common/Slider/index.vue create mode 100644 TUIKit/components/common/SwitchBar/index.ts create mode 100644 TUIKit/components/common/SwitchBar/index.vue create mode 100644 TUIKit/components/common/Toast/index.ts create mode 100644 TUIKit/components/common/Toast/type.ts create mode 100644 TUIKit/components/common/Transfer/index.ts create mode 100644 TUIKit/components/common/Transfer/index.vue create mode 100644 TUIKit/components/common/Transfer/style/color.scss create mode 100644 TUIKit/components/common/Transfer/style/h5.scss create mode 100644 TUIKit/components/common/Transfer/style/transfer.scss create mode 100644 TUIKit/components/common/Transfer/style/web.scss create mode 100644 TUIKit/components/common/UIKitModal/UIKitModal.ts create mode 100644 TUIKit/components/common/UIKitModal/index.ts create mode 100644 TUIKit/components/index.ts create mode 100644 TUIKit/constant.ts create mode 100644 TUIKit/debug/GenerateTestUserSig.js create mode 100644 TUIKit/debug/index.d.ts create mode 100644 TUIKit/debug/index.js create mode 100644 TUIKit/debug/lib-generate-test-usersig-es.min.js create mode 100644 TUIKit/index.ts create mode 100644 TUIKit/index.vue create mode 100644 TUIKit/interface.ts create mode 100644 TUIKit/locales/en/TUIChat.ts create mode 100644 TUIKit/locales/en/TUIContact.ts create mode 100644 TUIKit/locales/en/TUIConversation.ts create mode 100644 TUIKit/locales/en/TUIGroup.ts create mode 100644 TUIKit/locales/en/TUISearch.ts create mode 100644 TUIKit/locales/en/component.ts create mode 100644 TUIKit/locales/en/emoji.ts create mode 100644 TUIKit/locales/en/evaluate.ts create mode 100644 TUIKit/locales/en/index.ts create mode 100644 TUIKit/locales/en/message.ts create mode 100644 TUIKit/locales/en/time.ts create mode 100644 TUIKit/locales/en/words.ts create mode 100644 TUIKit/locales/index.ts create mode 100644 TUIKit/locales/zh_cn/TUIChat.ts create mode 100644 TUIKit/locales/zh_cn/TUIContact.ts create mode 100644 TUIKit/locales/zh_cn/TUIConversation.ts create mode 100644 TUIKit/locales/zh_cn/TUIGroup.ts create mode 100644 TUIKit/locales/zh_cn/TUISearch.ts create mode 100644 TUIKit/locales/zh_cn/component.ts create mode 100644 TUIKit/locales/zh_cn/emoji.ts create mode 100644 TUIKit/locales/zh_cn/evaluate.ts create mode 100644 TUIKit/locales/zh_cn/index.ts create mode 100644 TUIKit/locales/zh_cn/message.ts create mode 100644 TUIKit/locales/zh_cn/time.ts create mode 100644 TUIKit/locales/zh_cn/translate.ts create mode 100644 TUIKit/locales/zh_cn/words.ts create mode 100644 TUIKit/locales/zh_tw/TUIChat.ts create mode 100644 TUIKit/locales/zh_tw/TUIContact.ts create mode 100644 TUIKit/locales/zh_tw/TUIConversation.ts create mode 100644 TUIKit/locales/zh_tw/TUIGroup.ts create mode 100644 TUIKit/locales/zh_tw/TUISearch.ts create mode 100644 TUIKit/locales/zh_tw/component.ts create mode 100644 TUIKit/locales/zh_tw/emoji.ts create mode 100644 TUIKit/locales/zh_tw/evaluate.ts create mode 100644 TUIKit/locales/zh_tw/index.ts create mode 100644 TUIKit/locales/zh_tw/message.ts create mode 100644 TUIKit/locales/zh_tw/time.ts create mode 100644 TUIKit/locales/zh_tw/translate.ts create mode 100644 TUIKit/locales/zh_tw/words.ts create mode 100644 TUIKit/plugins/extension-server/callkit.ts create mode 100644 TUIKit/plugins/plugin-components/index.ts create mode 100644 TUIKit/plugins/plugin-components/message-call/message-call-c2c.vue create mode 100644 TUIKit/plugins/plugin-components/message-call/message-call-group.vue create mode 100644 TUIKit/plugins/plugin-components/message-plugin-layout.vue create mode 100644 TUIKit/plugins/plugin-components/message-plugin.vue create mode 100644 TUIKit/plugins/plugin-components/message-room/message-room-default.vue create mode 100644 TUIKit/plugins/plugin-components/message-room/message-room.vue create mode 100644 TUIKit/server.ts create mode 100644 TUIKit/shims-vue.d.ts create mode 100644 TUIKit/static/message-selected.png create mode 100644 TUIKit/static/message.png create mode 100644 TUIKit/static/profile-selected.png create mode 100644 TUIKit/static/profile.png create mode 100644 TUIKit/static/relation-selected.png create mode 100644 TUIKit/static/relation.png create mode 100644 TUIKit/utils/documentLink.ts create mode 100644 TUIKit/utils/enableSampleTaskStatus.ts create mode 100644 TUIKit/utils/env.ts create mode 100644 TUIKit/utils/index.ts create mode 100644 TUIKit/utils/lodash.ts create mode 100644 TUIKit/utils/permission.js create mode 100644 TUIKit/utils/riseInput.ts create mode 100644 TUIKit/utils/type-check.ts create mode 100644 TUIKit/utils/unifyPromiseVue2.ts create mode 100644 TUIKit/vue.config.js create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 static/message-selected.png create mode 100644 static/message.png create mode 100644 static/profile-selected.png create mode 100644 static/profile.png create mode 100644 static/relation-selected.png create mode 100644 static/relation.png diff --git a/.gitignore b/.gitignore index efe7735..2ddd675 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -unpackage \ No newline at end of file +node_modules +unpackage diff --git a/App.vue b/App.vue index 6b707a0..de1333d 100644 --- a/App.vue +++ b/App.vue @@ -1,4 +1,4 @@ - + diff --git a/TUIKit/components/TUIChat/config.ts b/TUIKit/components/TUIChat/config.ts new file mode 100644 index 0000000..a4ee9c4 --- /dev/null +++ b/TUIKit/components/TUIChat/config.ts @@ -0,0 +1,130 @@ +const defaultFeatures = { + DownloadFile: true, + CopyMessage: true, + DeleteMessage: true, + RevokeMessage: true, + QuoteMessage: true, + ForwardMessage: true, + TranslateMessage: true, + VoiceToText: true, + MultiSelection: true, + EmojiReaction: true, + InputEmoji: true, + InputStickers: true, + InputImage: true, + InputVoice: true, + InputVideo: true, + InputFile: true, + InputAlbum: true, + InputCamera: true, + InputEvaluation: true, + InputQuickReplies: true, + InputMention: true, + MessageSearch: true, + ReadStatus: true, + ClearHistory: false, +}; + +enum FeaturesType { + DownloadFile = 'DownloadFile', + CopyMessage = 'CopyMessage', + DeleteMessage = 'DeleteMessage', + RevokeMessage = 'RevokeMessage', + QuoteMessage = 'QuoteMessage', + ForwardMessage = 'ForwardMessage', + TranslateMessage = 'TranslateMessage', + VoiceToText = 'VoiceToText', + MultiSelection = 'MultiSelection', + EmojiReaction = 'EmojiReaction', + InputEmoji = 'InputEmoji', + InputStickers = 'InputStickers', + InputImage = 'InputImage', + InputVoice = 'InputVoice', + InputVideo = 'InputVideo', + InputFile = 'InputFile', + InputAlbum = 'InputAlbum', + InputCamera = 'InputCamera', + InputEvaluation = 'InputEvaluation', + InputQuickReplies = 'InputQuickReplies', + InputMention = 'InputMention', + MessageSearch = 'MessageSearch', + ReadStatus = 'ReadStatus', + ClearHistory = 'ClearHistory', +} + +class TUIChatConfig { + static instance: TUIChatConfig; + private chatType: string; + private features: Record; + private theme: string; + constructor() { + this.chatType = ''; + this.features = JSON.parse(JSON.stringify(defaultFeatures)); + this.theme = 'light'; + } + + static getInstance(): TUIChatConfig { + if (!TUIChatConfig.instance) { + TUIChatConfig.instance = new TUIChatConfig(); + } + return TUIChatConfig.instance; + } + + setChatType(chatType: string) { + this.chatType = chatType; + } + + getChatType() { + return this.chatType; + } + + showTUIChatFeatures(features?: string[]) { + if (!features) { + return; + } else { + features.forEach((feature: string) => { + this.features[feature] = true; + }); + } + } + + hideTUIChatFeatures(features: string[]) { + if (!features) { + return; + } + features.forEach((feature: string) => { + if (this.features[feature]) { + this.features[feature] = false; + } + }); + } + + getFeatureConfig(key?: string) { + if (key) { + return this.features[key]; + } + return this.features; + } + + setTheme(theme: string) { + this.theme = theme; + } + + getTheme() { + return this.theme; + } + + resetFeatureConfig() { + this.features = JSON.parse(JSON.stringify(defaultFeatures)); + } +} + +const ChatConfig = TUIChatConfig.getInstance(); +const hideTUIChatFeatures = ChatConfig.hideTUIChatFeatures.bind(ChatConfig); + +export { + hideTUIChatFeatures, + FeaturesType, +}; + +export default ChatConfig; diff --git a/TUIKit/components/TUIChat/emoji-config/custom-emoji.ts b/TUIKit/components/TUIChat/emoji-config/custom-emoji.ts new file mode 100644 index 0000000..d6501df --- /dev/null +++ b/TUIKit/components/TUIChat/emoji-config/custom-emoji.ts @@ -0,0 +1,15 @@ +import { IEmojiGroupList } from '../../../interface'; + +/** +* Custom big emoji +*/ +export const CUSTOM_BIG_EMOJI_URL: string = ''; + +export const CUSTOM_BIG_EMOJI_GROUP_LIST: IEmojiGroupList = []; + +/** +* Custom basic emoji +*/ +export const CUSTOM_BASIC_EMOJI_URL: string = ''; + +export const CUSTOM_BASIC_EMOJI_URL_MAPPING: Record = {}; diff --git a/TUIKit/components/TUIChat/emoji-config/default-emoji.ts b/TUIKit/components/TUIChat/emoji-config/default-emoji.ts new file mode 100644 index 0000000..e90d1af --- /dev/null +++ b/TUIKit/components/TUIChat/emoji-config/default-emoji.ts @@ -0,0 +1,114 @@ +/** + * Emoji input interface in the chat screen. + * In respect for the copyright of the emoji design, the Chat Demo/TUIKit project does not include the cutouts of large emoji elements. + * Please replace them with your own designed or copyrighted emoji packs before the official launch for commercial use. + * The default small yellow face emoji pack is copyrighted by Tencent Cloud and can be authorized for a fee. + * If you wish to obtain authorization, please submit a ticket to contact us. + * + * submit a ticket url:https://console.tencentcloud.com/workorder/category?level1_id=29&level2_id=40&source=14&data_title=Chat&step=1 + */ +import { default as emojiCNLocales } from './locales/zh_cn'; +import { default as emojiENLocales } from './locales/en'; +import { EMOJI_TYPE } from '../../../constant'; +import { IEmojiGroupList } from '../../../interface'; + +export const DEFAULT_BASIC_EMOJI_URL = 'https://web.sdk.qcloud.com/im/assets/emoji-plugin/'; +export const DEFAULT_BIG_EMOJI_URL = 'https://web.sdk.qcloud.com/im/assets/face-elem/'; + +export const DEFAULT_BASIC_EMOJI_URL_MAPPING: Record = { + '[TUIEmoji_Expect]': 'emoji_0@2x.png', + '[TUIEmoji_Blink]': 'emoji_1@2x.png', + '[TUIEmoji_Guffaw]': 'emoji_2@2x.png', + '[TUIEmoji_KindSmile]': 'emoji_3@2x.png', + '[TUIEmoji_Haha]': 'emoji_4@2x.png', + '[TUIEmoji_Cheerful]': 'emoji_5@2x.png', + '[TUIEmoji_Smile]': 'emoji_6@2x.png', + '[TUIEmoji_Sorrow]': 'emoji_7@2x.png', + '[TUIEmoji_Speechless]': 'emoji_8@2x.png', + '[TUIEmoji_Amazed]': 'emoji_9@2x.png', + '[TUIEmoji_Complacent]': 'emoji_10@2x.png', + '[TUIEmoji_Lustful]': 'emoji_11@2x.png', + '[TUIEmoji_Stareyes]': 'emoji_12@2x.png', + '[TUIEmoji_Giggle]': 'emoji_13@2x.png', + '[TUIEmoji_Daemon]': 'emoji_14@2x.png', + '[TUIEmoji_Rage]': 'emoji_15@2x.png', + '[TUIEmoji_Yawn]': 'emoji_16@2x.png', + '[TUIEmoji_TearsLaugh]': 'emoji_17@2x.png', + '[TUIEmoji_Silly]': 'emoji_18@2x.png', + '[TUIEmoji_Wail]': 'emoji_19@2x.png', + '[TUIEmoji_Kiss]': 'emoji_20@2x.png', + '[TUIEmoji_Trapped]': 'emoji_21@2x.png', + '[TUIEmoji_Fear]': 'emoji_22@2x.png', + '[TUIEmoji_BareTeeth]': 'emoji_23@2x.png', + '[TUIEmoji_FlareUp]': 'emoji_24@2x.png', + '[TUIEmoji_Tact]': 'emoji_25@2x.png', + '[TUIEmoji_Shit]': 'emoji_26@2x.png', + '[TUIEmoji_ShutUp]': 'emoji_27@2x.png', + '[TUIEmoji_Sigh]': 'emoji_28@2x.png', + '[TUIEmoji_Hehe]': 'emoji_29@2x.png', + '[TUIEmoji_Silent]': 'emoji_30@2x.png', + '[TUIEmoji_Skull]': 'emoji_31@2x.png', + '[TUIEmoji_Mask]': 'emoji_32@2x.png', + '[TUIEmoji_Beer]': 'emoji_33@2x.png', + '[TUIEmoji_Cake]': 'emoji_34@2x.png', + '[TUIEmoji_RedPacket]': 'emoji_35@2x.png', + '[TUIEmoji_Bombs]': 'emoji_36@2x.png', + '[TUIEmoji_Ai]': 'emoji_37@2x.png', + '[TUIEmoji_Celebrate]': 'emoji_38@2x.png', + '[TUIEmoji_Bless]': 'emoji_39@2x.png', + '[TUIEmoji_Flower]': 'emoji_40@2x.png', + '[TUIEmoji_Watermelon]': 'emoji_41@2x.png', + '[TUIEmoji_Cow]': 'emoji_42@2x.png', + '[TUIEmoji_Fool]': 'emoji_43@2x.png', + '[TUIEmoji_Surprised]': 'emoji_44@2x.png', + '[TUIEmoji_Askance]': 'emoji_45@2x.png', + '[TUIEmoji_Monster]': 'emoji_46@2x.png', + '[TUIEmoji_Pig]': 'emoji_47@2x.png', + '[TUIEmoji_Coffee]': 'emoji_48@2x.png', + '[TUIEmoji_Ok]': 'emoji_49@2x.png', + '[TUIEmoji_Heart]': 'emoji_50@2x.png', + '[TUIEmoji_Sun]': 'emoji_51@2x.png', + '[TUIEmoji_Moon]': 'emoji_52@2x.png', + '[TUIEmoji_Star]': 'emoji_53@2x.png', + '[TUIEmoji_Rich]': 'emoji_54@2x.png', + '[TUIEmoji_Fortune]': 'emoji_55@2x.png', + '[TUIEmoji_857]': 'emoji_56@2x.png', + '[TUIEmoji_666]': 'emoji_57@2x.png', + '[TUIEmoji_Prohibit]': 'emoji_58@2x.png', + '[TUIEmoji_Convinced]': 'emoji_59@2x.png', + '[TUIEmoji_Knife]': 'emoji_60@2x.png', + '[TUIEmoji_Like]': 'emoji_61@2x.png', +}; + +export const BIG_EMOJI_GROUP_LIST: IEmojiGroupList = [ + { + emojiGroupID: 1, + type: EMOJI_TYPE.BIG, + url: DEFAULT_BIG_EMOJI_URL, + list: ['yz00', 'yz01', 'yz02', 'yz03', 'yz04', 'yz05', 'yz06', 'yz07', 'yz08', + 'yz09', 'yz10', 'yz11', 'yz12', 'yz13', 'yz14', 'yz15', 'yz16', 'yz17'], + }, + { + emojiGroupID: 2, + type: EMOJI_TYPE.BIG, + url: DEFAULT_BIG_EMOJI_URL, + list: ['ys00', 'ys01', 'ys02', 'ys03', 'ys04', 'ys05', 'ys06', 'ys07', 'ys08', + 'ys09', 'ys10', 'ys11', 'ys12', 'ys13', 'ys14', 'ys15'], + }, + { + emojiGroupID: 3, + type: EMOJI_TYPE.BIG, + url: DEFAULT_BIG_EMOJI_URL, + list: ['gcs00', 'gcs01', 'gcs02', 'gcs03', 'gcs04', 'gcs05', 'gcs06', 'gcs07', + 'gcs08', 'gcs09', 'gcs10', 'gcs11', 'gcs12', 'gcs13', 'gcs14', 'gcs15', 'gcs16'], + }, +]; + +export const BASIC_EMOJI_NAME_TO_KEY_MAPPING = { + ...Object.fromEntries( + Object.entries(emojiCNLocales)?.map(([key, val]) => [val, key]), + ), + ...Object.fromEntries( + Object.entries(emojiENLocales)?.map(([key, val]) => [val, key]), + ), +}; diff --git a/TUIKit/components/TUIChat/emoji-config/index.ts b/TUIKit/components/TUIChat/emoji-config/index.ts new file mode 100644 index 0000000..259fffd --- /dev/null +++ b/TUIKit/components/TUIChat/emoji-config/index.ts @@ -0,0 +1,140 @@ +import { TUITranslateService } from '@tencentcloud/chat-uikit-engine-lite'; +import { CUSTOM_BASIC_EMOJI_URL, CUSTOM_BIG_EMOJI_URL, CUSTOM_BASIC_EMOJI_URL_MAPPING, CUSTOM_BIG_EMOJI_GROUP_LIST } from './custom-emoji'; +import { DEFAULT_BASIC_EMOJI_URL, BIG_EMOJI_GROUP_LIST, DEFAULT_BASIC_EMOJI_URL_MAPPING, BASIC_EMOJI_NAME_TO_KEY_MAPPING, DEFAULT_BIG_EMOJI_URL } from './default-emoji'; +import { default as emojiCNLocales } from './locales/zh_cn'; +import { IEmojiGroupList } from '../../../interface'; +import { EMOJI_TYPE } from '../../../constant'; +import { isWeChat } from '../../../utils/env'; + +const hasCustomBasicEmoji = CUSTOM_BASIC_EMOJI_URL && Object.keys(CUSTOM_BASIC_EMOJI_URL_MAPPING).length; + +const BASIC_EMOJI_URL = hasCustomBasicEmoji ? CUSTOM_BASIC_EMOJI_URL : DEFAULT_BASIC_EMOJI_URL; + +const BASIC_EMOJI_URL_MAPPING = hasCustomBasicEmoji ? CUSTOM_BASIC_EMOJI_URL_MAPPING : DEFAULT_BASIC_EMOJI_URL_MAPPING; + +const EMOJI_GROUP_LIST: IEmojiGroupList = [ + { + emojiGroupID: 0, + type: EMOJI_TYPE.BASIC, + url: BASIC_EMOJI_URL, + list: Object.keys(BASIC_EMOJI_URL_MAPPING), + }, + ...BIG_EMOJI_GROUP_LIST, + ...CUSTOM_BIG_EMOJI_GROUP_LIST, +]; + +/** + * Converts a basic emoji key into its corresponding name. + * Example: + * '[Smile]' => '[TUIEmoji_Smile]' + * @param {string} key - The emoji key. + * @return {string} The corresponding emoji name. + */ +const convertKeyToEmojiName = (key: string): string => { + // WeChat does not support emoji translation + return isWeChat ? emojiCNLocales[key] : TUITranslateService.t(`Emoji.${key}`); +}; + +/** + * Transforms a text containing emoji keys into a text with Chinese or English basic emoji names + * Example: + * 'hello[TUIEmoji_Smile]!' => 'hello[Smile]!'' + * @param {string} text - The text containing emoji keys. + * @return {string} The transformed text with emoji keys replaced by emoji names. + */ +const transformTextWithKeysToEmojiNames = (text: string): string => { + if (!text) { + return ''; + } + const reg = /(\[.+?\])/g; + let txt: string = text; + if (reg.test(text)) { + txt = text.replace(reg, match => BASIC_EMOJI_URL_MAPPING[match] ? convertKeyToEmojiName(match) : match); + } + return txt; +}; + +/** + * Transforms a text containing Chinese or English basic emoji names into a text with emoji keys. + * Example: + * 'hello[Smile]!' => 'hello[TUIEmoji_Smile]!' + * @param {string} text - The text containing emoji names. + * @return {string} The transformed text with emoji names replaced by emoji keys. + */ +const transformTextWithEmojiNamesToKeys = (text: string) => { + if (!text) { + return ''; + } + const reg = /(\[.+?\])/g; + let txt: string = text; + if (reg.test(text)) { + txt = text.replace(reg, match => BASIC_EMOJI_NAME_TO_KEY_MAPPING[match] || match); + } + return txt; +}; + +/** +* The configuration aims to provide compatibility with versions prior to 2.2.0 +*/ +const emojiConfig = { + emojiBaseUrl: BASIC_EMOJI_URL, + emojiUrlMapping: BASIC_EMOJI_URL_MAPPING, + emojiNameMapping: { + ...emojiCNLocales, + }, +}; + +/** + * Transform text message to renderable array contains image and text. + * Example: hello[TUIEmoji_Smile], I am happy. + * -> [{type: 'text', content: 'hello'}, {type: 'image', content: 'https://.../smile.png'}, {type: 'text', content: ', I am happy.'}] + * @param text + * @returns Array<{ type: 'text' | 'image'; content: string; emojiKey?: string; }> + */ +const parseTextToRenderArray = (text: string): Array<{ type: 'text' | 'image'; content: string; emojiKey?: string }> => { + const emojiRegex = /\[([^\]]+)\]/g; + const result: any[] = []; + + let match: RegExpExecArray | null; + let lastIndex = 0; + + while ((match = emojiRegex.exec(text)) !== null) { + const startIndex = match.index; + const endIndex = emojiRegex.lastIndex; + const emojiKey = match[0]; + + if (startIndex > lastIndex) { + result.push({ type: 'text', content: text.substring(lastIndex, startIndex) }); + } + + const emojiUrl = BASIC_EMOJI_URL + BASIC_EMOJI_URL_MAPPING[emojiKey]; + if (emojiUrl) { + result.push({ type: 'image', content: emojiUrl, emojiKey }); + } else { + result.push({ type: 'text', content: emojiKey }); + } + + lastIndex = endIndex; + emojiRegex.lastIndex = lastIndex; + } + + if (lastIndex < text.length) { + result.push({ type: 'text', content: text.substring(lastIndex) }); + } + + return result; +}; + +export { + EMOJI_GROUP_LIST, + CUSTOM_BIG_EMOJI_URL, + DEFAULT_BIG_EMOJI_URL, + CUSTOM_BASIC_EMOJI_URL, + BASIC_EMOJI_URL_MAPPING, + CUSTOM_BASIC_EMOJI_URL_MAPPING, + convertKeyToEmojiName, + parseTextToRenderArray, + transformTextWithKeysToEmojiNames, + transformTextWithEmojiNamesToKeys, + emojiConfig, +}; diff --git a/TUIKit/components/TUIChat/emoji-config/locales/en.ts b/TUIKit/components/TUIChat/emoji-config/locales/en.ts new file mode 100644 index 0000000..baa4fd1 --- /dev/null +++ b/TUIKit/components/TUIChat/emoji-config/locales/en.ts @@ -0,0 +1,66 @@ +const Emoji = { + '[TUIEmoji_Smile]': '[Smile]', + '[TUIEmoji_Expect]': '[Expect]', + '[TUIEmoji_Blink]': '[Blink]', + '[TUIEmoji_Guffaw]': '[Guffaw]', + '[TUIEmoji_KindSmile]': '[KindSmile]', + '[TUIEmoji_Haha]': '[Haha]', + '[TUIEmoji_Cheerful]': '[Cheerful]', + '[TUIEmoji_Speechless]': '[Speechless]', + '[TUIEmoji_Amazed]': '[Amazed]', + '[TUIEmoji_Sorrow]': '[Sorrow]', + '[TUIEmoji_Complacent]': '[Complacent]', + '[TUIEmoji_Silly]': '[Silly]', + '[TUIEmoji_Lustful]': '[Lustful]', + '[TUIEmoji_Giggle]': '[Giggle]', + '[TUIEmoji_Kiss]': '[Kiss]', + '[TUIEmoji_Wail]': '[Wail]', + '[TUIEmoji_TearsLaugh]': '[TearsLaugh]', + '[TUIEmoji_Trapped]': '[Trapped]', + '[TUIEmoji_Mask]': '[Mask]', + '[TUIEmoji_Fear]': '[Fear]', + '[TUIEmoji_BareTeeth]': '[BareTeeth]', + '[TUIEmoji_FlareUp]': '[FlareUp]', + '[TUIEmoji_Yawn]': '[Yawn]', + '[TUIEmoji_Tact]': '[Tact]', + '[TUIEmoji_Stareyes]': '[StarEyes]', + '[TUIEmoji_ShutUp]': '[ShutUp]', + '[TUIEmoji_Sigh]': '[Sigh]', + '[TUIEmoji_Hehe]': '[Hehe]', + '[TUIEmoji_Silent]': '[Silent]', + '[TUIEmoji_Surprised]': '[Surprised]', + '[TUIEmoji_Askance]': '[Askance]]', + '[TUIEmoji_Ok]': '[OK]', + '[TUIEmoji_Shit]': '[Shit]', + '[TUIEmoji_Monster]': '[Monster]', + '[TUIEmoji_Daemon]': '[Daemon]', + '[TUIEmoji_Rage]': '[Rage]', + '[TUIEmoji_Fool]': '[Fool]', + '[TUIEmoji_Pig]': '[Pig]', + '[TUIEmoji_Cow]': '[Cow]', + '[TUIEmoji_Ai]': '[AI]', + '[TUIEmoji_Skull]': '[Skull]', + '[TUIEmoji_Bombs]': '[Bombs]', + '[TUIEmoji_Coffee]': '[Coffee]', + '[TUIEmoji_Cake]': '[Cake]', + '[TUIEmoji_Beer]': '[Beer]', + '[TUIEmoji_Flower]': '[Flower]', + '[TUIEmoji_Watermelon]': '[Watermelon]', + '[TUIEmoji_Rich]': '[Rich]', + '[TUIEmoji_Heart]': '[Heart]', + '[TUIEmoji_Moon]': '[Moon]', + '[TUIEmoji_Sun]': '[Sun]', + '[TUIEmoji_Star]': '[Star]', + '[TUIEmoji_RedPacket]': '[RedPacket]', + '[TUIEmoji_Celebrate]': '[Celebrate]', + '[TUIEmoji_Bless]': '[Bless]', + '[TUIEmoji_Fortune]': '[Fortune]', + '[TUIEmoji_Convinced]': '[Convinced]', + '[TUIEmoji_Prohibit]': '[Prohibit]', + '[TUIEmoji_666]': '[666]', + '[TUIEmoji_857]': '[857]', + '[TUIEmoji_Knife]': '[Knife]', + '[TUIEmoji_Like]': '[Like]', +}; + +export default Emoji; diff --git a/TUIKit/components/TUIChat/emoji-config/locales/zh_cn.ts b/TUIKit/components/TUIChat/emoji-config/locales/zh_cn.ts new file mode 100644 index 0000000..7086a1f --- /dev/null +++ b/TUIKit/components/TUIChat/emoji-config/locales/zh_cn.ts @@ -0,0 +1,66 @@ +const Emoji: Record = { + '[TUIEmoji_Smile]': '[微笑]', + '[TUIEmoji_Expect]': '[期待]', + '[TUIEmoji_Blink]': '[眨眼]', + '[TUIEmoji_Guffaw]': '[大笑]', + '[TUIEmoji_KindSmile]': '[姨母笑]', + '[TUIEmoji_Haha]': '[哈哈哈]', + '[TUIEmoji_Cheerful]': '[愉快]', + '[TUIEmoji_Speechless]': '[无语]', + '[TUIEmoji_Amazed]': '[惊讶]', + '[TUIEmoji_Sorrow]': '[悲伤]', + '[TUIEmoji_Complacent]': '[得意]', + '[TUIEmoji_Silly]': '[傻了]', + '[TUIEmoji_Lustful]': '[色]', + '[TUIEmoji_Giggle]': '[憨笑]', + '[TUIEmoji_Kiss]': '[亲亲]', + '[TUIEmoji_Wail]': '[大哭]', + '[TUIEmoji_TearsLaugh]': '[哭笑]', + '[TUIEmoji_Trapped]': '[困]', + '[TUIEmoji_Mask]': '[口罩]', + '[TUIEmoji_Fear]': '[恐惧]', + '[TUIEmoji_BareTeeth]': '[龇牙]', + '[TUIEmoji_FlareUp]': '[发怒]', + '[TUIEmoji_Yawn]': '[打哈欠]', + '[TUIEmoji_Tact]': '[机智]', + '[TUIEmoji_Stareyes]': '[星星眼]', + '[TUIEmoji_ShutUp]': '[闭嘴]', + '[TUIEmoji_Sigh]': '[叹气]', + '[TUIEmoji_Hehe]': '[呵呵]', + '[TUIEmoji_Silent]': '[收声]', + '[TUIEmoji_Surprised]': '[惊喜]', + '[TUIEmoji_Askance]': '[白眼]', + '[TUIEmoji_Ok]': '[OK]', + '[TUIEmoji_Shit]': '[便便]', + '[TUIEmoji_Monster]': '[怪兽]', + '[TUIEmoji_Daemon]': '[恶魔]', + '[TUIEmoji_Rage]': '[恶魔怒]', + '[TUIEmoji_Fool]': '[衰]', + '[TUIEmoji_Pig]': '[猪]', + '[TUIEmoji_Cow]': '[牛]', + '[TUIEmoji_Ai]': '[AI]', + '[TUIEmoji_Skull]': '[骷髅]', + '[TUIEmoji_Bombs]': '[炸弹]', + '[TUIEmoji_Coffee]': '[咖啡]', + '[TUIEmoji_Cake]': '[蛋糕]', + '[TUIEmoji_Beer]': '[啤酒]', + '[TUIEmoji_Flower]': '[花]', + '[TUIEmoji_Watermelon]': '[瓜]', + '[TUIEmoji_Rich]': '[壕]', + '[TUIEmoji_Heart]': '[爱心]', + '[TUIEmoji_Moon]': '[月亮]', + '[TUIEmoji_Sun]': '[太阳]', + '[TUIEmoji_Star]': '[星星]', + '[TUIEmoji_RedPacket]': '[红包]', + '[TUIEmoji_Celebrate]': '[庆祝]', + '[TUIEmoji_Bless]': '[福]', + '[TUIEmoji_Fortune]': '[发]', + '[TUIEmoji_Convinced]': '[服]', + '[TUIEmoji_Prohibit]': '[禁]', + '[TUIEmoji_666]': '[666]', + '[TUIEmoji_857]': '[857]', + '[TUIEmoji_Knife]': '[刀]', + '[TUIEmoji_Like]': '[赞]', +}; + +export default Emoji; diff --git a/TUIKit/components/TUIChat/emoji-config/locales/zh_tw.ts b/TUIKit/components/TUIChat/emoji-config/locales/zh_tw.ts new file mode 100644 index 0000000..144009e --- /dev/null +++ b/TUIKit/components/TUIChat/emoji-config/locales/zh_tw.ts @@ -0,0 +1,66 @@ +const Emoji: Record = { + '[TUIEmoji_Smile]': '[微笑]', + '[TUIEmoji_Expect]': '[期待]', + '[TUIEmoji_Blink]': '[眨眼]', + '[TUIEmoji_Guffaw]': '[大笑]', + '[TUIEmoji_KindSmile]': '[姨母笑]', + '[TUIEmoji_Haha]': '[哈哈哈]', + '[TUIEmoji_Cheerful]': '[愉快]', + '[TUIEmoji_Speechless]': '[無語]', + '[TUIEmoji_Amazed]': '[驚訝]', + '[TUIEmoji_Sorrow]': '[悲傷]', + '[TUIEmoji_Complacent]': '[得意]', + '[TUIEmoji_Silly]': '[傻了]', + '[TUIEmoji_Lustful]': '[色]', + '[TUIEmoji_Giggle]': '[憨笑]', + '[TUIEmoji_Kiss]': '[親親]', + '[TUIEmoji_Wail]': '[大哭]', + '[TUIEmoji_TearsLaugh]': '[哭笑]', + '[TUIEmoji_Trapped]': '[困]', + '[TUIEmoji_Mask]': '[口罩]', + '[TUIEmoji_Fear]': '[恐懼]', + '[TUIEmoji_BareTeeth]': '[齜牙]', + '[TUIEmoji_FlareUp]': '[發怒]', + '[TUIEmoji_Yawn]': '[打哈欠]', + '[TUIEmoji_Tact]': '[機智]', + '[TUIEmoji_Stareyes]': '[星星眼]', + '[TUIEmoji_ShutUp]': '[閉嘴]', + '[TUIEmoji_Sigh]': '[嘆氣]', + '[TUIEmoji_Hehe]': '[呵呵]', + '[TUIEmoji_Silent]': '[收聲]', + '[TUIEmoji_Surprised]': '[驚喜]', + '[TUIEmoji_Askance]': '[白眼]', + '[TUIEmoji_Ok]': '[OK]', + '[TUIEmoji_Shit]': '[便便]', + '[TUIEmoji_Monster]': '[怪獸]', + '[TUIEmoji_Daemon]': '[惡魔]', + '[TUIEmoji_Rage]': '[惡魔怒]', + '[TUIEmoji_Fool]': '[衰]', + '[TUIEmoji_Pig]': '[豬]', + '[TUIEmoji_Cow]': '[牛]', + '[TUIEmoji_Ai]': '[AI]', + '[TUIEmoji_Skull]': '[骷髏]', + '[TUIEmoji_Bombs]': '[炸彈]', + '[TUIEmoji_Coffee]': '[咖啡]', + '[TUIEmoji_Cake]': '[蛋糕]', + '[TUIEmoji_Beer]': '[啤酒]', + '[TUIEmoji_Flower]': '[花]', + '[TUIEmoji_Watermelon]': '[瓜]', + '[TUIEmoji_Rich]': '[壕]', + '[TUIEmoji_Heart]': '[愛心]', + '[TUIEmoji_Moon]': '[月亮]', + '[TUIEmoji_Sun]': '[太陽]', + '[TUIEmoji_Star]': '[星星]', + '[TUIEmoji_RedPacket]': '[紅包]', + '[TUIEmoji_Celebrate]': '[慶祝]', + '[TUIEmoji_Bless]': '[福]', + '[TUIEmoji_Fortune]': '[發]', + '[TUIEmoji_Convinced]': '[服]', + '[TUIEmoji_Prohibit]': '[禁]', + '[TUIEmoji_666]': '[666]', + '[TUIEmoji_857]': '[857]', + '[TUIEmoji_Knife]': '[刀]', + '[TUIEmoji_Like]': '[讚]', +}; + +export default Emoji; diff --git a/TUIKit/components/TUIChat/entry-chat-only.ts b/TUIKit/components/TUIChat/entry-chat-only.ts new file mode 100644 index 0000000..86b8e15 --- /dev/null +++ b/TUIKit/components/TUIChat/entry-chat-only.ts @@ -0,0 +1,35 @@ +import { TUILogin } from '@tencentcloud/tui-core-lite'; +import { TUIConversationService } from '@tencentcloud/chat-uikit-engine-lite'; +// #ifdef MP-WEIXIN +import { TUIChatKit } from '../../index.ts'; +// #endif + +export const initChat = (options: Record) => { + // #ifdef MP-WEIXIN + // uni-app packages the mini program. + // If you call TUIChatKit.init() directly during import, an error will be reported. + // You need to init during the page onLoad. + TUIChatKit.init(); + // #endif + + // When opening TUIChat, the options and options.conversationID parameters carried in the url, + // determine whether to enter the Chat from the [Conversation List] or [Online Communication]. + const { chat } = TUILogin.getContext(); + if (options && options.conversationID && chat?.isReady()) { + const { conversationID } = options; + // verify conversationID + if (!conversationID.startsWith('C2C') && !conversationID.startsWith('GROUP')) { + console.warn('conversationID from options is invalid.'); + return; + } + // open chat + TUIConversationService.switchConversation(conversationID); + } +}; + +export const logout = (flag: boolean) => { + if (flag) { + return TUILogin.logout(); + } + return Promise.resolve(); +}; diff --git a/TUIKit/components/TUIChat/forward/index.vue b/TUIKit/components/TUIChat/forward/index.vue new file mode 100644 index 0000000..1e93751 --- /dev/null +++ b/TUIKit/components/TUIChat/forward/index.vue @@ -0,0 +1,159 @@ + + + diff --git a/TUIKit/components/TUIChat/index.ts b/TUIKit/components/TUIChat/index.ts new file mode 100644 index 0000000..a4f6c17 --- /dev/null +++ b/TUIKit/components/TUIChat/index.ts @@ -0,0 +1,6 @@ +import TUIChat from './index.vue'; +import Server from './server'; + +new Server(); + +export default TUIChat; diff --git a/TUIKit/components/TUIChat/index.vue b/TUIKit/components/TUIChat/index.vue new file mode 100644 index 0000000..51dadba --- /dev/null +++ b/TUIKit/components/TUIChat/index.vue @@ -0,0 +1,309 @@ + + + + diff --git a/TUIKit/components/TUIChat/message-input-toolbar/album-upload/index.ts b/TUIKit/components/TUIChat/message-input-toolbar/album-upload/index.ts new file mode 100644 index 0000000..d84f35a --- /dev/null +++ b/TUIKit/components/TUIChat/message-input-toolbar/album-upload/index.ts @@ -0,0 +1,2 @@ +import AlbumUpload from './index.vue'; +export default AlbumUpload; diff --git a/TUIKit/components/TUIChat/message-input-toolbar/album-upload/index.vue b/TUIKit/components/TUIChat/message-input-toolbar/album-upload/index.vue new file mode 100644 index 0000000..dbd62b6 --- /dev/null +++ b/TUIKit/components/TUIChat/message-input-toolbar/album-upload/index.vue @@ -0,0 +1,41 @@ + + + + diff --git a/TUIKit/components/TUIChat/message-input-toolbar/camera-upload/index.ts b/TUIKit/components/TUIChat/message-input-toolbar/camera-upload/index.ts new file mode 100644 index 0000000..9b497e3 --- /dev/null +++ b/TUIKit/components/TUIChat/message-input-toolbar/camera-upload/index.ts @@ -0,0 +1,2 @@ +import CameraUpload from './index.vue'; +export default CameraUpload; diff --git a/TUIKit/components/TUIChat/message-input-toolbar/camera-upload/index.vue b/TUIKit/components/TUIChat/message-input-toolbar/camera-upload/index.vue new file mode 100644 index 0000000..4d47d90 --- /dev/null +++ b/TUIKit/components/TUIChat/message-input-toolbar/camera-upload/index.vue @@ -0,0 +1,41 @@ + + + + diff --git a/TUIKit/components/TUIChat/message-input-toolbar/clearHistory/index.ts b/TUIKit/components/TUIChat/message-input-toolbar/clearHistory/index.ts new file mode 100644 index 0000000..e574464 --- /dev/null +++ b/TUIKit/components/TUIChat/message-input-toolbar/clearHistory/index.ts @@ -0,0 +1,2 @@ +import Words from "./index.vue"; +export default Words; diff --git a/TUIKit/components/TUIChat/message-input-toolbar/clearHistory/index.vue b/TUIKit/components/TUIChat/message-input-toolbar/clearHistory/index.vue new file mode 100644 index 0000000..255b63f --- /dev/null +++ b/TUIKit/components/TUIChat/message-input-toolbar/clearHistory/index.vue @@ -0,0 +1,94 @@ + + + diff --git a/TUIKit/components/TUIChat/message-input-toolbar/emoji-picker/emoji-picker-dialog.vue b/TUIKit/components/TUIChat/message-input-toolbar/emoji-picker/emoji-picker-dialog.vue new file mode 100644 index 0000000..cf894ca --- /dev/null +++ b/TUIKit/components/TUIChat/message-input-toolbar/emoji-picker/emoji-picker-dialog.vue @@ -0,0 +1,186 @@ + + + + diff --git a/TUIKit/components/TUIChat/message-input-toolbar/emoji-picker/index.ts b/TUIKit/components/TUIChat/message-input-toolbar/emoji-picker/index.ts new file mode 100644 index 0000000..33cc740 --- /dev/null +++ b/TUIKit/components/TUIChat/message-input-toolbar/emoji-picker/index.ts @@ -0,0 +1,2 @@ +import EmojiPicker from './index.vue'; +export default EmojiPicker; diff --git a/TUIKit/components/TUIChat/message-input-toolbar/emoji-picker/index.vue b/TUIKit/components/TUIChat/message-input-toolbar/emoji-picker/index.vue new file mode 100644 index 0000000..719f303 --- /dev/null +++ b/TUIKit/components/TUIChat/message-input-toolbar/emoji-picker/index.vue @@ -0,0 +1,81 @@ + + + diff --git a/TUIKit/components/TUIChat/message-input-toolbar/emoji-picker/style/h5.scss b/TUIKit/components/TUIChat/message-input-toolbar/emoji-picker/style/h5.scss new file mode 100644 index 0000000..552adfc --- /dev/null +++ b/TUIKit/components/TUIChat/message-input-toolbar/emoji-picker/style/h5.scss @@ -0,0 +1,25 @@ +.emoji-picker-h5 { + width: 100%; + + &-list { + justify-content: space-between; + } + + &-list::after { + content: ""; + display: block; + flex: 1 1 auto; + } + + .send-btn { + width: 50px; + height: 30px; + background-color: #55C06A; + position: absolute; + right: 10px; + font-size: 16px; + color: #fff; + text-align: center; + line-height: 30px; + } +} diff --git a/TUIKit/components/TUIChat/message-input-toolbar/emoji-picker/style/index.scss b/TUIKit/components/TUIChat/message-input-toolbar/emoji-picker/style/index.scss new file mode 100644 index 0000000..618221f --- /dev/null +++ b/TUIKit/components/TUIChat/message-input-toolbar/emoji-picker/style/index.scss @@ -0,0 +1,4 @@ +@import "../../../../../assets/styles/common"; +@import "./web"; +@import "./h5"; + diff --git a/TUIKit/components/TUIChat/message-input-toolbar/emoji-picker/style/web.scss b/TUIKit/components/TUIChat/message-input-toolbar/emoji-picker/style/web.scss new file mode 100644 index 0000000..536b050 --- /dev/null +++ b/TUIKit/components/TUIChat/message-input-toolbar/emoji-picker/style/web.scss @@ -0,0 +1,55 @@ +.emoji-picker { + width: 405px; + height: 300px; + display: flex; + flex-direction: column; + + &-list { + flex: 1; + display: flex; + flex-wrap: wrap; + overflow-y: auto; + margin: 2px; + + &::-webkit-scrollbar { + display: none; + } + + &-item { + cursor: pointer; + padding: 5px; + + .emoji { + width: 30px; + height: 30px; + } + + .emoji-big { + width: 70px; + height: 70px; + } + } + } + + &-tab { + display: flex; + align-items: center; + + &-item { + padding: 0 10px; + cursor: pointer; + + .icon { + margin: 10px; + width: 20px; + height: 20px; + + &-big { + margin: 2px 0; + width: 30px; + height: 30px; + } + } + } + } +} diff --git a/TUIKit/components/TUIChat/message-input-toolbar/evaluate/index.ts b/TUIKit/components/TUIChat/message-input-toolbar/evaluate/index.ts new file mode 100644 index 0000000..f9a4b11 --- /dev/null +++ b/TUIKit/components/TUIChat/message-input-toolbar/evaluate/index.ts @@ -0,0 +1,2 @@ +import Evaluate from './index.vue'; +export default Evaluate; diff --git a/TUIKit/components/TUIChat/message-input-toolbar/evaluate/index.vue b/TUIKit/components/TUIChat/message-input-toolbar/evaluate/index.vue new file mode 100644 index 0000000..53d1b67 --- /dev/null +++ b/TUIKit/components/TUIChat/message-input-toolbar/evaluate/index.vue @@ -0,0 +1,209 @@ +