From 61e9c38a439995223ce87a1b0765869ef2716ca8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=B5=A9?= <15830956848@163.com> Date: Mon, 21 Apr 2025 18:05:32 +0800 Subject: [PATCH] add_TUIKIT --- .gitignore | 1 - TUIKit/CHANGELOG.md | 204 +++++ 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/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/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/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/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/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/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 | 5 + 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/sample.scss | 99 +++ .../components/TUIChat/chat-header/index.vue | 91 ++ TUIKit/components/TUIChat/config.ts | 83 ++ .../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 + .../emoji-picker/emoji-picker-dialog.vue | 185 ++++ .../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 | 211 +++++ .../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 | 86 ++ .../image-upload/index.ts | 2 + .../image-upload/index.vue | 156 ++++ .../TUIChat/message-input-toolbar/index.ts | 2 + .../TUIChat/message-input-toolbar/index.vue | 316 +++++++ .../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 | 36 + .../toolbar-item-container/style/web.scss | 24 + .../user-selector/index.ts | 2 + .../user-selector/index.vue | 127 +++ .../video-upload/index.ts | 2 + .../video-upload/index.vue | 155 ++++ .../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 + .../message-input/message-input-at/index.vue | 301 +++++++ .../message-input/message-input-audio.vue | 340 ++++++++ .../message-input/message-input-button.vue | 103 +++ .../message-input-quote/index.vue | 157 ++++ .../components/TUIChat/message-list/index.vue | 749 ++++++++++++++++ .../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 | 273 ++++++ .../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 | 426 +++++++++ .../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 | 47 + 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 | 157 ++++ .../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/style/h5.scss | 130 +++ .../TUIContact/contact-info/style/index.scss | 3 + .../TUIContact/contact-info/style/web.scss | 151 ++++ .../contact-list/contact-list-item/index.vue | 258 ++++++ .../TUIContact/contact-list/index.ts | 3 + .../TUIContact/contact-list/index.vue | 366 ++++++++ .../TUIContact/contact-list/indexsea.vue | 366 ++++++++ .../TUIContact/contact-list/style/h5.scss | 12 + .../TUIContact/contact-list/style/index.scss | 3 + .../TUIContact/contact-list/style/web.scss | 85 ++ .../TUIContact/contact-search/index.ts | 2 + .../TUIContact/contact-search/index.vue | 253 ++++++ TUIKit/components/TUIContact/index.ts | 5 + .../TUIContact/select-friend/index.ts | 3 + .../TUIContact/select-friend/index.vue | 100 +++ .../TUIContact/select-friend/index1.vue | 98 +++ TUIKit/components/TUIContact/server.ts | 44 + TUIKit/components/TUIContact/utils/index.ts | 359 ++++++++ .../TUIConversation/actions-menu/index.vue | 232 +++++ .../conversation-header/index.ts | 3 + .../conversation-header/index.vue | 96 ++ .../conversation-header/server.ts | 78 ++ .../conversation-list/index.vue | 311 +++++++ .../conversation-list/style/color.scss | 77 ++ .../conversation-list/style/h5.scss | 43 + .../conversation-list/style/index.scss | 4 + .../conversation-list/style/web.scss | 186 ++++ .../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 | 110 +++ TUIKit/components/TUIConversation/server.ts | 163 ++++ .../TUIConversation/style/color.scss | 12 + .../TUIConversation/style/index.scss | 3 + .../components/TUIConversation/style/web.css | 107 +++ .../components/TUIConversation/style/web.scss | 107 +++ .../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 | 303 +++++++ .../TUIGroup/create-group/style/color.scss | 104 +++ .../TUIGroup/create-group/style/h5.scss | 97 ++ .../TUIGroup/create-group/style/index.scss | 4 + .../TUIGroup/create-group/style/web.scss | 106 +++ TUIKit/components/TUIGroup/index.ts | 6 + TUIKit/components/TUIGroup/index.vue | 56 ++ .../components/TUIGroup/manage-group/index.ts | 3 + .../TUIGroup/manage-group/index.vue | 825 ++++++++++++++++++ .../TUIGroup/manage-group/manage-admin.vue | 338 +++++++ .../TUIGroup/manage-group/manage-member.vue | 300 +++++++ .../TUIGroup/manage-group/manage-name.vue | 264 ++++++ .../manage-group/manage-notification.vue | 268 ++++++ .../TUIGroup/manage-group/manage-profile.vue | 275 ++++++ .../TUIGroup/manage-group/style/color.scss | 64 ++ .../TUIGroup/manage-group/style/h5.scss | 3 + .../TUIGroup/manage-group/style/index.scss | 39 + .../TUIGroup/manage-group/style/web.scss | 243 ++++++ .../TUIGroup/select-member/index.ts | 3 + .../TUIGroup/select-member/index.vue | 120 +++ TUIKit/components/TUIGroup/server.ts | 95 ++ TUIKit/components/TUISearch/index.ts | 5 + TUIKit/components/TUISearch/index.vue | 207 +++++ .../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 | 215 +++++ .../components/TUISearch/search-more/index.ts | 3 + .../TUISearch/search-more/index.vue | 164 ++++ .../TUISearch/search-result/index.ts | 2 + .../TUISearch/search-result/index.vue | 566 ++++++++++++ .../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 | 73 ++ TUIKit/components/TUISearch/style/h5.scss | 39 + TUIKit/components/TUISearch/style/index.scss | 3 + TUIKit/components/TUISearch/style/web.scss | 28 + 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 | 119 +++ .../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/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 | 93 ++ .../common/Transfer/style/transfer.scss | 13 + .../components/common/Transfer/style/web.scss | 141 +++ TUIKit/components/index.ts | 23 + TUIKit/constant.ts | 48 + 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 | 3 + TUIKit/interface.ts | 326 +++++++ TUIKit/locales/en/TUIChat.ts | 156 ++++ TUIKit/locales/en/TUIContact.ts | 66 ++ TUIKit/locales/en/TUIConversation.ts | 24 + TUIKit/locales/en/TUIGroup.ts | 86 ++ 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 | 156 ++++ TUIKit/locales/zh_cn/TUIContact.ts | 68 ++ TUIKit/locales/zh_cn/TUIConversation.ts | 24 + TUIKit/locales/zh_cn/TUIGroup.ts | 87 ++ 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 | 156 ++++ TUIKit/locales/zh_tw/TUIContact.ts | 66 ++ TUIKit/locales/zh_tw/TUIConversation.ts | 24 + TUIKit/locales/zh_tw/TUIGroup.ts | 87 ++ 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 | 172 ++++ TUIKit/plugins/plugin-components/index.ts | 37 + .../message-call/message-call-c2c.vue | 116 +++ .../message-call/message-call-group.vue | 51 ++ .../message-customer/index.ts | 5 + .../message-customer-service.vue | 16 + .../message-plugin-layout.vue | 123 +++ .../plugin-components/message-plugin.vue | 106 +++ .../message-room/message-room-default.vue | 42 + .../message-room/message-room.vue | 19 + TUIKit/server.ts | 173 ++++ TUIKit/shims-vue.d.ts | 29 + .../.stylelintrc.json | 40 + .../tui-customer-service-plugin/CHANGELOG.md | 50 ++ TUIKit/tui-customer-service-plugin/README.md | 36 + .../adapter-vue-uniapp.ts | 11 + .../adapter-vue-web.ts | 73 ++ .../adapter-vue.ts | 11 + .../assets/iconRight.svg | 3 + .../assets/imRobotGuess.svg | 4 + .../assets/refresh.svg | 4 + .../assets/star.png | Bin 0 -> 4506 bytes .../assets/starLine.png | Bin 0 -> 512 bytes .../components/customer-icon.vue | 56 ++ .../components/message-branch.vue | 95 ++ .../components/message-customer-service.vue | 94 ++ .../components/message-form/form-branch.vue | 68 ++ .../components/message-form/form-input.vue | 98 +++ .../components/message-form/index.vue | 79 ++ .../components/message-product-card.vue | 104 +++ .../components/message-rating/index.vue | 57 ++ .../message-rating/message-rating-number.vue | 248 ++++++ .../message-rating/message-rating-star.vue | 238 +++++ .../components/message-rich-text.vue | 62 ++ .../components/message-robot-welcome.vue | 164 ++++ .../components/message-stream.vue | 104 +++ .../tui-customer-service-plugin/constant.ts | 114 +++ TUIKit/tui-customer-service-plugin/index.ts | 18 + TUIKit/tui-customer-service-plugin/index.vue | 60 ++ .../tui-customer-service-plugin/interface.ts | 75 ++ .../tui-customer-service-plugin/package.json | 61 ++ TUIKit/tui-customer-service-plugin/server.ts | 89 ++ .../tui-customer-service-plugin/tsconfig.json | 34 + .../tui-customer-service-plugin/typings.d.ts | 20 + .../tui-customer-service-plugin/utils/env.ts | 15 + .../utils/index.ts | 56 ++ 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/riseInput.ts | 53 ++ TUIKit/utils/type-check.ts | 44 + TUIKit/utils/unifyPromiseVue2.ts | 27 + TUIKit/vue.config.js | 2 + .../JG-JPush/android/HiPushSDK-8.0.12.307.aar | Bin 68888 -> 0 bytes .../android/agconnect-core-1.7.3.302.aar | Bin 46973 -> 0 bytes .../android/availableupdate-6.9.0.300.aar | Bin 37282 -> 0 bytes .../JG-JPush/android/base-6.9.0.300.aar | Bin 246636 -> 0 bytes .../android/baselegacyapi-6.9.0.300.aar | Bin 37487 -> 0 bytes .../JG-JPush/android/com.heytap.msp_3.5.3.aar | Bin 116644 -> 0 bytes .../JG-JPush/android/device-6.9.0.300.aar | Bin 52126 -> 0 bytes .../android/firebase-common-20.3.1.aar | Bin 67600 -> 0 bytes .../android/firebase-components-17.1.0.aar | Bin 32100 -> 0 bytes .../android/firebase-datatransport-18.1.7.aar | Bin 4421 -> 0 bytes .../android/firebase-encoders-json-18.0.0.aar | Bin 9223 -> 0 bytes .../android/firebase-iid-interop-17.1.0.aar | Bin 8426 -> 0 bytes .../android/firebase-installations-17.1.3.aar | Bin 55222 -> 0 bytes .../firebase-installations-interop-17.1.0.aar | Bin 6001 -> 0 bytes .../firebase-measurement-connector-19.0.0.aar | Bin 10625 -> 0 bytes .../android/firebase-messaging-23.1.2.aar | Bin 142101 -> 0 bytes .../JG-JPush/android/hatool-6.9.0.300.aar | Bin 83317 -> 0 bytes .../libs/MiPush_SDK_Client_6_0_1-C.jar | Bin 912460 -> 0 bytes .../android/libs/commons-codec-1.6.jar | Bin 232771 -> 0 bytes .../libs/error_prone_annotations-2.9.0.jar | Bin 15994 -> 0 bytes .../libs/firebase-annotations-16.2.0.jar | Bin 3769 -> 0 bytes .../android/libs/firebase-encoders-17.0.0.jar | Bin 17847 -> 0 bytes .../libs/firebase-encoders-proto-16.0.0.jar | Bin 38980 -> 0 bytes .../JG-JPush/android/libs/javax.inject-1.jar | Bin 2497 -> 0 bytes .../android/libs/jpush-android-5.6.0.jar | Bin 403195 -> 0 bytes .../libs/jpush-android-plugin-fcm-v5.6.0.jar | Bin 25253 -> 0 bytes .../jpush-android-plugin-honor-v5.6.0.jar | Bin 8569 -> 0 bytes .../jpush-android-plugin-huawei-v5.6.0.jar | Bin 15492 -> 0 bytes .../jpush-android-plugin-meizu-v5.6.0.jar | Bin 8663 -> 0 bytes .../libs/jpush-android-plugin-nio-v5.6.0.jar | Bin 6589 -> 0 bytes .../libs/jpush-android-plugin-oppo-v5.6.0.jar | Bin 8203 -> 0 bytes .../libs/jpush-android-plugin-vivo-v5.6.0.jar | Bin 8789 -> 0 bytes .../jpush-android-plugin-xiaomi-v5.6.0.jar | Bin 8430 -> 0 bytes .../JG-JPush/android/libs/tasks-1.5.2.206.jar | Bin 31146 -> 0 bytes .../JG-JPush/android/log-6.9.0.300.aar | Bin 9182 -> 0 bytes .../android/network-common-6.0.2.300.aar | Bin 53977 -> 0 bytes .../network-framework-compat-6.0.2.300.aar | Bin 29585 -> 0 bytes .../android/network-grs-6.0.2.300.aar | Bin 80793 -> 0 bytes .../JG-JPush/android/niopush-sdk-v1.0.aar | Bin 10284 -> 0 bytes .../android/opendevice-6.11.0.300.aar | Bin 71300 -> 0 bytes .../android/play-services-base-18.0.1.aar | Bin 548703 -> 0 bytes .../android/play-services-basement-18.1.0.aar | Bin 379617 -> 0 bytes .../play-services-cloud-messaging-17.0.1.aar | Bin 31573 -> 0 bytes .../android/play-services-stats-17.0.2.aar | Bin 14753 -> 0 bytes .../android/play-services-tasks-18.0.2.aar | Bin 73978 -> 0 bytes .../JG-JPush/android/push-6.11.0.300.aar | Bin 152384 -> 0 bytes .../JG-JPush/android/push-internal-5.0.3.aar | Bin 89744 -> 0 bytes .../android/security-base-1.2.0.307.aar | Bin 49462 -> 0 bytes .../android/security-encrypt-1.2.0.307.aar | Bin 47005 -> 0 bytes .../android/security-ssl-1.2.0.307.aar | Bin 91792 -> 0 bytes .../JG-JPush/android/stats-6.9.0.300.aar | Bin 26962 -> 0 bytes .../JG-JPush/android/transport-api-3.0.0.aar | Bin 4898 -> 0 bytes .../android/transport-backend-cct-3.1.8.aar | Bin 35074 -> 0 bytes .../android/transport-runtime-3.1.8.aar | Bin 112298 -> 0 bytes .../JG-JPush/android/ui-6.9.0.300.aar | Bin 98881 -> 0 bytes .../android/uniplugin_jpush-release.aar | Bin 69170 -> 0 bytes .../android/vivo_pushSDK_v4.0.6.0_506.aar | Bin 228100 -> 0 bytes .../Headers/JPushModule.h | 17 - .../ios/UniPluginJPush.framework/Info.plist | Bin 753 -> 0 bytes .../PrivacyInfo.xcprivacy | 23 - .../UniPluginJPush.framework/UniPluginJPush | Bin 2636392 -> 0 bytes nativeplugins/JG-JPush/package.json | 169 ---- 494 files changed, 33455 insertions(+), 210 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/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/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/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/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/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/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/sample.scss 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/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/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/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-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/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/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/indexsea.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/select-friend/index.ts create mode 100644 TUIKit/components/TUIContact/select-friend/index.vue create mode 100644 TUIKit/components/TUIContact/select-friend/index1.vue create mode 100644 TUIKit/components/TUIContact/server.ts create mode 100644 TUIKit/components/TUIContact/utils/index.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.css 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/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/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-customer/index.ts create mode 100644 TUIKit/plugins/plugin-components/message-customer/message-customer-service.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/tui-customer-service-plugin/.stylelintrc.json create mode 100644 TUIKit/tui-customer-service-plugin/CHANGELOG.md create mode 100644 TUIKit/tui-customer-service-plugin/README.md create mode 100644 TUIKit/tui-customer-service-plugin/adapter-vue-uniapp.ts create mode 100644 TUIKit/tui-customer-service-plugin/adapter-vue-web.ts create mode 100644 TUIKit/tui-customer-service-plugin/adapter-vue.ts create mode 100644 TUIKit/tui-customer-service-plugin/assets/iconRight.svg create mode 100644 TUIKit/tui-customer-service-plugin/assets/imRobotGuess.svg create mode 100644 TUIKit/tui-customer-service-plugin/assets/refresh.svg create mode 100644 TUIKit/tui-customer-service-plugin/assets/star.png create mode 100644 TUIKit/tui-customer-service-plugin/assets/starLine.png create mode 100644 TUIKit/tui-customer-service-plugin/components/customer-icon.vue create mode 100644 TUIKit/tui-customer-service-plugin/components/message-branch.vue create mode 100644 TUIKit/tui-customer-service-plugin/components/message-customer-service.vue create mode 100644 TUIKit/tui-customer-service-plugin/components/message-form/form-branch.vue create mode 100644 TUIKit/tui-customer-service-plugin/components/message-form/form-input.vue create mode 100644 TUIKit/tui-customer-service-plugin/components/message-form/index.vue create mode 100644 TUIKit/tui-customer-service-plugin/components/message-product-card.vue create mode 100644 TUIKit/tui-customer-service-plugin/components/message-rating/index.vue create mode 100644 TUIKit/tui-customer-service-plugin/components/message-rating/message-rating-number.vue create mode 100644 TUIKit/tui-customer-service-plugin/components/message-rating/message-rating-star.vue create mode 100644 TUIKit/tui-customer-service-plugin/components/message-rich-text.vue create mode 100644 TUIKit/tui-customer-service-plugin/components/message-robot-welcome.vue create mode 100644 TUIKit/tui-customer-service-plugin/components/message-stream.vue create mode 100644 TUIKit/tui-customer-service-plugin/constant.ts create mode 100644 TUIKit/tui-customer-service-plugin/index.ts create mode 100644 TUIKit/tui-customer-service-plugin/index.vue create mode 100644 TUIKit/tui-customer-service-plugin/interface.ts create mode 100644 TUIKit/tui-customer-service-plugin/package.json create mode 100644 TUIKit/tui-customer-service-plugin/server.ts create mode 100644 TUIKit/tui-customer-service-plugin/tsconfig.json create mode 100644 TUIKit/tui-customer-service-plugin/typings.d.ts create mode 100644 TUIKit/tui-customer-service-plugin/utils/env.ts create mode 100644 TUIKit/tui-customer-service-plugin/utils/index.ts 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/riseInput.ts create mode 100644 TUIKit/utils/type-check.ts create mode 100644 TUIKit/utils/unifyPromiseVue2.ts create mode 100644 TUIKit/vue.config.js delete mode 100644 nativeplugins/JG-JPush/android/HiPushSDK-8.0.12.307.aar delete mode 100644 nativeplugins/JG-JPush/android/agconnect-core-1.7.3.302.aar delete mode 100644 nativeplugins/JG-JPush/android/availableupdate-6.9.0.300.aar delete mode 100644 nativeplugins/JG-JPush/android/base-6.9.0.300.aar delete mode 100644 nativeplugins/JG-JPush/android/baselegacyapi-6.9.0.300.aar delete mode 100644 nativeplugins/JG-JPush/android/com.heytap.msp_3.5.3.aar delete mode 100644 nativeplugins/JG-JPush/android/device-6.9.0.300.aar delete mode 100644 nativeplugins/JG-JPush/android/firebase-common-20.3.1.aar delete mode 100644 nativeplugins/JG-JPush/android/firebase-components-17.1.0.aar delete mode 100644 nativeplugins/JG-JPush/android/firebase-datatransport-18.1.7.aar delete mode 100644 nativeplugins/JG-JPush/android/firebase-encoders-json-18.0.0.aar delete mode 100644 nativeplugins/JG-JPush/android/firebase-iid-interop-17.1.0.aar delete mode 100644 nativeplugins/JG-JPush/android/firebase-installations-17.1.3.aar delete mode 100644 nativeplugins/JG-JPush/android/firebase-installations-interop-17.1.0.aar delete mode 100644 nativeplugins/JG-JPush/android/firebase-measurement-connector-19.0.0.aar delete mode 100644 nativeplugins/JG-JPush/android/firebase-messaging-23.1.2.aar delete mode 100644 nativeplugins/JG-JPush/android/hatool-6.9.0.300.aar delete mode 100644 nativeplugins/JG-JPush/android/libs/MiPush_SDK_Client_6_0_1-C.jar delete mode 100644 nativeplugins/JG-JPush/android/libs/commons-codec-1.6.jar delete mode 100644 nativeplugins/JG-JPush/android/libs/error_prone_annotations-2.9.0.jar delete mode 100644 nativeplugins/JG-JPush/android/libs/firebase-annotations-16.2.0.jar delete mode 100644 nativeplugins/JG-JPush/android/libs/firebase-encoders-17.0.0.jar delete mode 100644 nativeplugins/JG-JPush/android/libs/firebase-encoders-proto-16.0.0.jar delete mode 100755 nativeplugins/JG-JPush/android/libs/javax.inject-1.jar delete mode 100644 nativeplugins/JG-JPush/android/libs/jpush-android-5.6.0.jar delete mode 100644 nativeplugins/JG-JPush/android/libs/jpush-android-plugin-fcm-v5.6.0.jar delete mode 100644 nativeplugins/JG-JPush/android/libs/jpush-android-plugin-honor-v5.6.0.jar delete mode 100644 nativeplugins/JG-JPush/android/libs/jpush-android-plugin-huawei-v5.6.0.jar delete mode 100644 nativeplugins/JG-JPush/android/libs/jpush-android-plugin-meizu-v5.6.0.jar delete mode 100644 nativeplugins/JG-JPush/android/libs/jpush-android-plugin-nio-v5.6.0.jar delete mode 100644 nativeplugins/JG-JPush/android/libs/jpush-android-plugin-oppo-v5.6.0.jar delete mode 100644 nativeplugins/JG-JPush/android/libs/jpush-android-plugin-vivo-v5.6.0.jar delete mode 100644 nativeplugins/JG-JPush/android/libs/jpush-android-plugin-xiaomi-v5.6.0.jar delete mode 100644 nativeplugins/JG-JPush/android/libs/tasks-1.5.2.206.jar delete mode 100644 nativeplugins/JG-JPush/android/log-6.9.0.300.aar delete mode 100644 nativeplugins/JG-JPush/android/network-common-6.0.2.300.aar delete mode 100644 nativeplugins/JG-JPush/android/network-framework-compat-6.0.2.300.aar delete mode 100644 nativeplugins/JG-JPush/android/network-grs-6.0.2.300.aar delete mode 100644 nativeplugins/JG-JPush/android/niopush-sdk-v1.0.aar delete mode 100644 nativeplugins/JG-JPush/android/opendevice-6.11.0.300.aar delete mode 100644 nativeplugins/JG-JPush/android/play-services-base-18.0.1.aar delete mode 100644 nativeplugins/JG-JPush/android/play-services-basement-18.1.0.aar delete mode 100644 nativeplugins/JG-JPush/android/play-services-cloud-messaging-17.0.1.aar delete mode 100644 nativeplugins/JG-JPush/android/play-services-stats-17.0.2.aar delete mode 100644 nativeplugins/JG-JPush/android/play-services-tasks-18.0.2.aar delete mode 100644 nativeplugins/JG-JPush/android/push-6.11.0.300.aar delete mode 100644 nativeplugins/JG-JPush/android/push-internal-5.0.3.aar delete mode 100644 nativeplugins/JG-JPush/android/security-base-1.2.0.307.aar delete mode 100644 nativeplugins/JG-JPush/android/security-encrypt-1.2.0.307.aar delete mode 100644 nativeplugins/JG-JPush/android/security-ssl-1.2.0.307.aar delete mode 100644 nativeplugins/JG-JPush/android/stats-6.9.0.300.aar delete mode 100644 nativeplugins/JG-JPush/android/transport-api-3.0.0.aar delete mode 100644 nativeplugins/JG-JPush/android/transport-backend-cct-3.1.8.aar delete mode 100644 nativeplugins/JG-JPush/android/transport-runtime-3.1.8.aar delete mode 100644 nativeplugins/JG-JPush/android/ui-6.9.0.300.aar delete mode 100644 nativeplugins/JG-JPush/android/uniplugin_jpush-release.aar delete mode 100644 nativeplugins/JG-JPush/android/vivo_pushSDK_v4.0.6.0_506.aar delete mode 100644 nativeplugins/JG-JPush/ios/UniPluginJPush.framework/Headers/JPushModule.h delete mode 100644 nativeplugins/JG-JPush/ios/UniPluginJPush.framework/Info.plist delete mode 100644 nativeplugins/JG-JPush/ios/UniPluginJPush.framework/PrivacyInfo.xcprivacy delete mode 100644 nativeplugins/JG-JPush/ios/UniPluginJPush.framework/UniPluginJPush delete mode 100755 nativeplugins/JG-JPush/package.json diff --git a/.gitignore b/.gitignore index 385f0a20..ae26e741 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,5 @@ # OSX .DS_Store -/TUIKit/ /node_modules/ #Intellij idea .idea/ diff --git a/TUIKit/CHANGELOG.md b/TUIKit/CHANGELOG.md new file mode 100644 index 00000000..83f74103 --- /dev/null +++ b/TUIKit/CHANGELOG.md @@ -0,0 +1,204 @@ +## [2.4.1] (2025-01-22) + +### Fix +- 修复 EmojiPicker 表情选择面板点击无响应问题。 + +## [2.4.0] (2025-01-16) + +### Fix +- 修复 sendMessage 时携带的默认信息,支持用户自定义配置。 + +## [2.3.8] (2025-01-10) + +### Features +- 支持文本消息 url 高亮跳转 + +## Fix +- 修复自定义大表情失效问题 +- 修复 login 时好友列表数据未重置问题 + +## [2.3.3] (2024-10-28) + +### Features +- 支持群组禁言后发送消息错误提示国际化 + +## Fix +- 修复集成 CallKit 点击通话按钮偶现无响应问题 + +## [2.3.2] (2024-10-28) + +## Fix + +- 修复 H5 环境下群管理页面返回直接回到会话列表页面的问题 +- 移除 H5 环境下群聊页面出现App环境下的菜单按钮 + +## [2.3.1] (2024-10-25) + +## Fix +- 修复撤回消息中撤回人为空问题 +- 修复 TUIContact 修改好友备注后列表显示未更新问题 +- 优化 uniapp 打包 app 群管理入口至导航栏 +- 优化 uniapp 打包 app 软键盘弹出体验 + +## [2.3.0] (2024-10-21) + +## Fix +- 修复集成音视频通话 InputToolbar 点击按钮无响应问题 + +## [2.2.9] (2024-10-17) + +## Fix +- 修复 Callkit 融合被叫超时无应答英文词条翻译错误问题 + +## [2.2.8] (2024-09-24) + +### Features +- 支持繁体中文语言 +- 支持新增自定义语言类型 + +## [2.2.7] (2024-09-13) + +### Features +- 优化 C2C 会话音视频通话信令上屏(对齐微信体验) + +## [2.2.6] (2024-09-06) + +### Features +- Work 类型群组支持普通群成员修改群名称、群公告信息 + +## [2.2.3] (2024-07-05) + +### Features +- 支持会话草稿 +- 语音消息使用红点提示是否播放 + +### Fix +- 修复邀请加入群聊选人组件未过滤已有群成员问题 +- 修复 TUISearch 搜索文本消息出现 [系统消息] 前缀问题 +- 修复 TUIGroup 中 group-profile\group-name在 vue3 环境下 UI 崩坏的问题 +- 修复 Overlay 在构建微信小程序时点击事件无法触发的问题 +- 修复消息引用语音但展示为"聊天记录"的问题 +- 修复 Callkit 在 H5 环境下布局只有半屏的问题 + +## [2.2.0] (2024-06-17) + +### Features +- 支持消息多选、消息逐条转发、消息合并转发 +- 优化 TUIKit 集成流程 +- 支持表情包自定义 +- uniapp callkit 支持 offlinePushInfo +- uniapp callkit 支持自定义铃音 +- 被引用消息撤回时隐藏原始消息内容并提醒已撤回 + +## [2.1.3] (2024-05-17) + +### Features +- TUIKit 适配 uniapp cli +- 点击空白区域时收起小表情面板和工具栏 +- callkit 提供音视频通话中途加人能力 不包括app平台 + +### Fix +- 修复视频一定概率无法播放的问题 +- 修复消息引用的视觉左侧未对齐的问题 + +## [2.1.1] (2024-04-26) + +### Features +- 支持语音转文字 +- 文本消息转翻译兼容小表情上屏,兼容提及所有人 + +### Fix +- 优化已读回执详情列表超长昵称的显示效果 +- 解决转发消息已读回执失效的问题 +- 解决加没有群申请时额外请求用户信息的问题 + +## [2.1.0] (2024-04-12) + +### Features +- 新增消息翻译功能 + +### Fix +- uniapp 修复选人组件搜索失效问题 + +## [2.0.9] (2024-03-29) + +### Features +- ScrollButton 支持未读新消息提示 +- 群未决申请展示优化 + +### Update +- 下线本地审核相关入口 + +### Fix +- 修复 nick 过长样式溢出问题 + +## [2.0.8] (2024-03-15) + +### Fix +- 修复已知问题,提升稳定性 + +## [2.0.7] (2024-03-15) + +### Features +- 会话列表菜单出现位置跟随手指 + +### Fix +- 修复一定概率下图片无法预览的问题 + +## [2.0.6] (2024-03-01) + +### Features + +- 升级 universal api 引入方式 +- 支持 TUISearch 消息云端搜索 + +## [2.0.5] (2024-02-04) + +### Features + +- 聊天界面更新黄脸小表情 +- 添加音频播放动画 + +### Fix + +- 语音场景优化 修复了语音播放相关的体验问题 + +## [2.0.4] (2024-01-19) + +### Features + +- 支持文本消息复制 + +### Fix + +- 修复 uniapp 打包 APP、小程序 语音首次发送失败问题 + +## [2.0.3] (2024-01-12) + +### Features + +- TUIContact 关系链支持用户在线状态。 +- TUIContact 中获取客服列表的时机调整为 Engine 设置商业化能力位之后。 + +### Fix + +- 修复已知问题,提升稳定性 + +## [2.0.2] (2024-01-05) + +### Fix + +- 修复已知问题,提升稳定性 + +## [2.0.0] (2023-12-21) + +### Features + +- 全面支持 uniapp Vue2 & uniapp Vue3,包括以下主体功能: + - TUIChat: 负责消息界面展示,包括多类型消息收发,消息引用/删除/撤回/转发、查询消息已读回执详情等功能。 + - TUIConversation: 负责会话列表的展示和编辑,包括会话置顶、会话消息免打扰、会话删除等功能. + - TUIGroup: 负责群聊的创建以及群资料、群成员、群组权限、群公告、群禁言的管理。 + - TUIContact: 负责联系人与群组展示,添加好友,移入黑名单,好友备注,信息展示等功能。 +- 同时,我们还提供了功能丰富的插件系统: + - TUICustomerService: 在线客服插件,支持灵活的路由排队、客服接待、智能机器人功能,配合功能丰富的管理端与数据分析能力,支持客服多终端办公,免费试用请点击 https://cloud.tencent.com/document/product/269/92648#ae4e3f5c-94db-4df3-8a49-65d23ce417b8 开通。 + - TUICallKit: 音视频通话 UI 组件,支持两人或多人进行音视频通话,覆盖游戏社交、在线客服、视频客服、在线问诊、保险咨询等场景,免费试用请点击 https://cloud.tencent.com/document/product/269/79861#step1 开通。 diff --git a/TUIKit/README.md b/TUIKit/README.md new file mode 100644 index 00000000..0e5b58d9 --- /dev/null +++ b/TUIKit/README.md @@ -0,0 +1,56 @@ +## 关于 chat-uikit-uniapp + +chat-uikit-uniapp (vue2 / vue3)是基于腾讯云 Chat SDK 的一款 uniapp UI 组件库,它提供了一些通用的 UI 组件,包含会话、聊天、群组、关系链等功能。基于这些精心设计的 UI 组件,您可以快速构建优雅的、可靠的、可扩展的 Chat 应用。 +chat-uikit-uniapp 界面效果如下图所示: +![](https://qcloudimg.tencent-cloud.cn/raw/2f16b1be0591a325250f9066af898036.png) + +> 为尊重表情设计版权,IM Demo/TUIKit 工程中不包含大表情元素切图,正式上线商用前请您替换为自己设计或拥有版权的其他表情包。默认的小黄脸表情包版权归腾讯云所有,可有偿授权使用,如您希望获得授权可 [提交工单](https://console.cloud.tencent.com/workorder/category?level1_id=29&level2_id=40&source=14&data_title=%E5%8D%B3%E6%97%B6%E9%80%9A%E4%BF%A1%20IM&step=1) 联系我们。 + +## chat-uikit-uniapp 支持平台 + +- Android +- iOS +- 微信小程序 +- H5 + +## 含 UI 集成 TUILogin 使用说明 + +``` javascript +// 引入 TUILogin 模块 +import { TUILogin } from '@tencentcloud/tui-core'; +``` +初始化登录参数 options 配置说明: +| 参数 | 类型 | 含义 | +| --- | --- | --- | +| SDKAppID | number | 云通信应用的 SDKAppID,必填 | +| userID | string | 用户 ID,必填 | +| userSig |string | 用户登录密钥,必填 | +| TIMPush | any | 推送插件实例,uniapp 打包 app 时集成推送插件可用 | +| pushConfig | object | 推送插件配置信息,uniapp 打包 app 时集成推送插件可用 | +| useUploadPlugin | boolean | 是否使用上传插件, 默认 false | +| proxyServer | string | WebSocket 服务器代理地址 | +| fileUploadProxy | string | 图片、视频、文件上传代理地址 | +| fileDownloadProxy | string | 图片、视频、文件下载代理地址 | +| framework | string \| undefined | 使用的 UI 框架,可选值: vue2、vue3、undefined,必填 | + +``` javascript +// 初始化登录 +TUILogin.login(options); +``` + +``` javascript +// 登出 +TUILogin.logout(); +``` + +``` javascript +// 设置 Chat SDK 日志输出级别 +TUILogin.setLogLevel(0); // 0:普通日志级别 1:release 级别日志 2:告警级别 3:错误级别 4:无日志级别 +``` + +``` javascript +// 获取 Chat SDK 实例 +const { chat } = TUILogin.getContext(); +``` + +## 【源码集成】[请参考 TUIKit 集成文档](https://cloud.tencent.com/document/product/269/64507) diff --git a/TUIKit/adapter-vue.ts b/TUIKit/adapter-vue.ts new file mode 100644 index 00000000..f1d94542 --- /dev/null +++ b/TUIKit/adapter-vue.ts @@ -0,0 +1,14 @@ +let vueVersion: number; +let framework = 'vue2'; +// #ifndef VUE3 +export * from '@vue/composition-api'; +vueVersion = 2; +// #endif + +// #ifdef VUE3 +export * from 'vue'; +vueVersion = 3; +framework = 'vue3'; +// #endif +console.warn(`[adapter-vue]: vue version is ${vueVersion}`); +export { vueVersion, framework }; diff --git a/TUIKit/assets/icon/add-circle.svg b/TUIKit/assets/icon/add-circle.svg new file mode 100644 index 00000000..aa908005 --- /dev/null +++ b/TUIKit/assets/icon/add-circle.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/TUIKit/assets/icon/add.svg b/TUIKit/assets/icon/add.svg new file mode 100644 index 00000000..f154f346 --- /dev/null +++ b/TUIKit/assets/icon/add.svg @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/TUIKit/assets/icon/at.svg b/TUIKit/assets/icon/at.svg new file mode 100644 index 00000000..e26825a4 --- /dev/null +++ b/TUIKit/assets/icon/at.svg @@ -0,0 +1,12 @@ + + + 画板 + + + + + + + + + \ No newline at end of file diff --git a/TUIKit/assets/icon/audio.svg b/TUIKit/assets/icon/audio.svg new file mode 100644 index 00000000..deacedee --- /dev/null +++ b/TUIKit/assets/icon/audio.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/TUIKit/assets/icon/back.svg b/TUIKit/assets/icon/back.svg new file mode 100644 index 00000000..0af55aaf --- /dev/null +++ b/TUIKit/assets/icon/back.svg @@ -0,0 +1,16 @@ + + + ic_back_white + + + + + + + + + + + + + diff --git a/TUIKit/assets/icon/call-video.svg b/TUIKit/assets/icon/call-video.svg new file mode 100644 index 00000000..dc76641b --- /dev/null +++ b/TUIKit/assets/icon/call-video.svg @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/TUIKit/assets/icon/call-voice.svg b/TUIKit/assets/icon/call-voice.svg new file mode 100644 index 00000000..4793fcf5 --- /dev/null +++ b/TUIKit/assets/icon/call-voice.svg @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/TUIKit/assets/icon/call.png b/TUIKit/assets/icon/call.png new file mode 100644 index 0000000000000000000000000000000000000000..d8d86fe736461a69a09f18ee2749a54ee4fd10f5 GIT binary patch literal 4120 zcmV+z5a;iSP)4Tx07!|Imj_T&Sr>rsd+8yeB}6)*H$gf9q=e7{2uKGTAqfylh=BkiDk_UB zxT1)NprYt1MZvWIvQ|W~EeeWVH^?HOtcwL3D*pq9;O;;F|IdGB&YbU^cka38-nsY9 zc>s_VIU-RitO!7wFjE}r>q(D}iKXKP0UF2y8c+ka9Bzh)84?l*5Sg)mm-lx8G-+>J zOy>Ic_y1Ltc>D}508j|R@w^Of8p09UMc4$1 zL42gi{EYbT@+AH(XS^&Yhm$Dd>9tG=-b;`nO69EhKeyw5OIoUAW)34nNl9YAP{b-D zdv-r1JwV37_@Lk!7VxIxr#MOC7cs-!3|8z6^Eh4svazW_fis*S@L|jHWU|9&n4jSt zHpAldP}y7wVit3TIpW!QB`Faye-fW9%b%MR9yP;Rg2AWAKBW|GQL}{fGr!FnH26PTRUgAe!h@7n=>O?RvVA+hv8=U0(>3rg{AOI zcnk$lawr-~7iEEBpjfD2R4gh1B}T1A6`{&eHK;~Z8>$m^8zn`Jpgy6oXbPH+wm`d} z{m>C;E_yk7HF^`e5?zaKMt7iZqx;aK=x-P@MiXO>amKJQ(U?R`Hl`3$jyZ@qiMfR7 z#SCEHW3gBo))?!E^~1(sld&tYo3OjFP1y6;Zfrkx42Q$1;mmQaxL_Oymx(LH?Zh3% zox}Cu25=woa(ErQ4c-SIix=Y8;mh&$__O#P{2+duphz$zI1_>iJi-b>3E=>tjc}7N zKo}<~5siti#BgFVaV@ce*hsuYd`x^RCnu*T=OnjKP9T>rS0Q&)?uuNW+$WMU$&ADz zEhb4wn@NXA=SdGpZ^>k`5!r(rOU@*3CfAWKlAn@4%2VVm<=OH)`8D!Y^3C!+@~;#K z3Wf?yg{2C)3grsN6>chwC=wKn6j_QK#np;cil-FsDUK;ol&qD4mC}?pDb*`oRT@&p zDH|z!EAx~Kl=mxNRPLvsDEbr@g-cmaIY7BY8K7dR##A;nnOaOeLhYiCswk`2sYI&e zs8p$(QIXP6G$R_DmP#w39i!c)eV(H=hdGBoXXBj4IX!besA{NssPa{dRGU=Uy5oArdJ%f-^qTaZ=o9rB`U(1F`tACo208`{4Dt*b3?3R13>k(=hC2*94L=we z8$}syFlsRxGFCNa8|NA~7(X^4o4A`SH>okXV~RCpn5LNSHoavAo7tNsnN^wHG>6R{ z%mwDV&AaDf<~q$4&aIhy&w^yZw8*k(u;{a-Sq56Jvuv?^HP2vP?7Xe>I_G_}vbRdL zI$-t4TG`s)dYyHf^&1;A8?H^2%^h2^t&i;*+g97xcII|`yFGUI?J4#P>^IoA+kbU% zbPzi7rgU_h1z3)oj^L`k=0Kct%_t;u&F1wCB z>hI{k%D*Fk6c83r8SpI7EKnTSwg6t>zhK*f$3ccc!l0I55X=tV7W^c{IAnRquM4pY zLl#yod>(2Ynitv`MhROMRv-30+%vo+{85BSge0OpQXz72WL@NkD6go}C~5S(=vC3z zW7J~=F|Dz<*vQy}v15z87j0iOu-JZa;o`eXjF;prxw=$+Y3kB5%M_MzmK~47#6`u` z$9>@hb80wa@$C3r@uOT8cL(<+&x2RS8|J(6OZkHdt_h_HLy4}5+Y*P9+>^?aMg%ND zrQmh4UvhQwhm_!yLn#xfQK?O7__VmRQ$l57im)SHJ3S}8TVyUO6iJsmFWB}C@#FW!DU1BkLVu-KXz@j-MDk(w<2EAwPLH{^5QR>xSOv1Wc^dcPZOIHHg}ac zl+ES&`+|vGS3$`_v(aVa;-fdsD{c5>gdG!wB4#^H_MPNniPJ^9W zc7CZ$s_d=utZLe&xohLD54(B0d-izjX{^?&F0TH(SFrc~KHq)KHAXe%`?348_CG%m zd7$%W#?N&J)ejaQ{CY@uNLm|O+fnCOS68oDU(x_KNE(I@FFt(hh}V(UMvKOMO|+)s zqu{9I=!;+Cez|)r;8^={#_`4zh9`ENq?{~jhMHG2kG3SWNLyoCyHEL_YHxFCJNc{S zuZK?So~}Bha;D@g@od4_iF3K<#?Fh*k6cK+(BHnS{n5qfi+4H}c640|xOC;R&*h7q z%+7OHT(6wI>U{OoHO94;>kikOZ`j{B`J4T3C%YWFnr}MZY`x`ltF3!}_t_rzo(s3V zZePB`zH_}dsJHuW#NGS%7T=TJ=iMKAkow^D!>otnkMbX59v3}Pd{X{Y^J&fRroT5y z9i(Uay!viD3w!pcpWFZPkBmRQ3=}*kKQABD8LS(!89F`eGkojCq89@%MK8xk3jb94 zbJr`AS111R`0K`K^yt8A@#~2)Kjsbvj3+W#gP50AN0!{w| zOcD4`Jl%6oi30$Qh?#7QSmyyail|XOk{i*WEEtt$|2mWdQ1shriHjdZ3vj6}9IAvH#W=%~1DgXcg2mk?xX#fNO z00031000^Q000000-yo_1ONa40RR91AfN*P1ONa40RR91AOHXW0FO>U$p8QZ;z>k7 zR9Fe+SIuu5MHGMIj~EDcNWBhOqe7Kdi8(|f-3p0Z;uEK~7fx>P4i`@Cg;Uad%LNV) zF1>*NfcjJ}>4iv$bwO0ZwrCWD~MJ*?AxHdtWmX zqF0?nGyvMdLV8L}mauLR$!1Sd<*&y5R#Yzd?di-vtk=xo`Z)7=R7lUgdz(mnjP*Rm z#h4H))7p%=*Z#W`l~v!+`3$n3Piy+cw>16PrvaPz4Mer9>Vgk{dy?0#n0N5o-v3Z`^WQPi=(P(rfCD%Qv z5(9PT$Nz5E?^pVQuD~G+fBB>kU!PuBLQM^l4*)q&Gdo6NAkW+NpSY+tJayDbnC1!} z&YvwTT?=mV=kKN!m-|<^lNiK=pqtz+VNKp|Op4_SHhWebk5;pm6uCT-{><~vU zArDqL65!8!?XB3(=mW4FA&5Ec7n1Ql;DGL4wfDk{kkR-X{3LpK>6)uzj4BbGjt~^kw@C7*B+x6NF=sF<5CFb$y^jJDEmAc--RU^C5dxqJ4T~3p=v{+EFz73?@(6O$gnCIw zWB?%SU!&o`z(!|Y7ZVze)=lPRa_{_zL+TQM8Q>G- zoNzMlWoQ5Z8_VSKrn?y}PHAs9AGddRp0urJxR^Q!SrH;5L2#O8a;KMB53(a^C;)e} z*&Ys+WfaLr>MDlUP4*sy2$8|J-DGyQ8N6sXg}8vegae<9b1e_lKoIV^f^idvOA*D_ z`d7+N)ywEy;RCG2*N~1h^UzEcoBCFQVk`JYnwa=bak~JURR583L+QJG_jhOnlt3<< z*-}?Azl_wi`Us&#n(iVxc&zZBM5LTo6y5>?x2OCH=fU;hwH(w}_IVr`0Ty`geM3(I zJv`Id+h8P^&(W~qISl2|_sxFf4axcmX`^engCxM&t6saa`pE!TXwV34@UhFhacQn_ zehnZmu@g__{#Di9BU7M^b5YJ@r|u#hDPYFSNh}X5KqWtHL;>I9_U4qOM6$Ej-hIGw zV*y~n4&H)L+EVX6cw)qbC_N7l$a43fX2b(^j+|Hnym^#3C2=Xs9MS;K#G9hpm(q+@ zJD&?v;*Bz*=N#{N^j=mnF9bksdIUriRm-_Ni95x8+96VTY~maqyoQeX;*Wamjk(kLAhkd#KG9o--Z2#gSEgb^woBP68D zQR3h4%kTC7aPB?lp4anmJ~tk&|CoXlObP%1C}3LZM*p_UKOjIv|E6cDZvX&5TIZ^! z28XGsaln1Op1Ha^0RUR@Z{HEajm?>mMQ4pqD(pwZg`XfjoAd_bCDEj`SIs!b$>2>iv5!5%98{W}ry43mFU5OCPO zz0!^w4+5kz$Z{D9)Pj_AMU7d0?ZHx#q_Pft$=f!H{}u?-6ubju>m$UR;j!a&*wOP`t{VYsn0q4 z{Ti!O-}*Ux-ipMY(Jw}JeLjeXpGGW#_Wgse@AK%{B>T)Ghf&NJEfTWqq^Bdd_OQy@ z@b1Z3KYttc`Gs#{-Ifi=2avoR`a`ItymM=KcdBfj_^2H8wR8+MRamv&VjFt_lH7)sJ7#&;h*}^mTRf3oi&miLlYa z0QKG4i8f+D(B_iu{OH@bkL6*;0VMcw%0PIU$SbKyV&2bqa{yv2o&r+(n7EgNr5{;_ zBuiHY8wE)X<3Cs7<=fY?hS{NB_kbBg!x2FpPjr}m+-o7I6Ia| z4i@zozEp52KC|jpDn&nXiNlMJn)J0jN`{YyR+W~I%7ThPtqji7OjR8f{z_kk2~`7^ zJ_r1YiYbzwbiPNJVJA>a2~vg376Oq0$b*=O*>!>Md_U8!r?je2uubDr)>{^YTJRcm8D^=)=6#P8w-`w#kA z2MhWxuteVMC%%EKofIp??1@b4vuj^ZE-pV_vfXlo=cBYlxn<}gNff@2s*-)X!#e5z#M$TzjE5(x~y~gP-%K3RjY+Ca2@4il+_q zAkr98-PdKL?W8|RhZsBs-tf`VC()ZHunhc2FiEJOKjKg3H_WVk8~JuRQ;PqGptT9u zXpkSmA0l{`NtTHdv_%|Np!lxo8DHy|8^|iRt23kQs|FELk~tQ-imC_2$<=%{b5-iq zo0W*Fe8aS9xWs*MUY53C5o^hESy*9-WUOqglJiFXpsb?bqe{2R;L1~zL_{7U#6+oP z>PP1fqwlTNEtQIfk8AR(L=Y3Et0m#EF!iYFwc_3%eA6=JCvdtMiErdTtg6~=&tkT+ zvs$wnvb3I8%xKinc;vRm`ZxLK{5C&$%9@azm#kc&yPc0A>mV(F8I+k#%I}nPyz>B7fv;JHDp=d>a+yVb@vVG~fPm2*R zyEdSG%tju3dY1$J56%WV!UPJ$qa6wqowA zbelL!{5iv3C)4QH*_z>+ua@)jU(nMxRVjrA#RgFml?`1-+N)>b_j&+5b>X-<3wL33 zvf{6!ou1L2`$&3fMmY1a(4-KYWv&%qgYB_fj2u#lQTc+(vZEfOTw%QB?w4^48g3wK zBvWHFeGtm##+u8tz^qAP$!N;{`_YnkC-<#kG%T9CSkZ{n*T>O%GnTKRa+=TeymQB7 zYS!Vq1Hr?(#I;XZ5YXq`9jHig!GEz8&S%Rf-1({3N$nzKhn-N#-=lfC&2Qrqm(5g*ea-smy2!uC*8g$*V?1C$mq#ZR z@Kz>se?D@VYsojD=4NKWsBC&^`p$!_Rr1}`*M!j(58Kv1Ztd1V7nJLiBb2Thb{c#7 zQ3aO%;Z?fT`*o+aZVP4Y&o}C+&_U>s-+}wCwKLVi^>>|SA8>b%R>Q_6H6?%EG~Rst zt)xU9ggSE`oOnt6gNl*;HdrfA%K~DtXt@2v%&fuOb{Zh91&*N-c@(-AH=8!2nK&4x z*Id3{g00-#Nwi%LZx0c|KDqH3JQ<{mf%+Ge<_o#Stb%ys;z zyhj?wTIzh=dF`n{7V^9D{o>!#ls8J< z&iuY__nz#Fw23g->h-jSkzM`{vLEySALwE6){{U2M58!VIVMAbZS>_|Ek&A;f}MDtQ+D@n3(Hae4xKrl$uG_{Tv2V5}>E z;2#721Na{R06Y}l|1K^l{Qq&pf2NGKP%QvJd<#=oK?DL1tgSs4HK_~BHZ^xMJmK2} zjRw?ZOmSzX{XpF^J`NmDhe{@$dboB19tB04#%ggshqkcYHi3^92a4hgH+_Y8CO=(M zo7Lk@%qTDLmCoVB7-q;EgTWY)MpLaGd4wBIdI6Tyka|!3F~c=D=8nXLp4O8=OctozpY}2o!09;|qK=Dq`%Bd{4PnHZ79shkwJH86R4QP+S8Rmmy|> zc89Du31*rUehxA>wfxaqvQX%zP?Mz@zQ+YnJP%>DkB`{%eSryV#WaAFQP}v4!g_6Z zobw)_uIP8^WP(fDOXQ4Eh*2Ct^RR$2)or0c*g@$Z>ppSUsk>yo?z)`$?!RA6OFN|x zF+sWmp0oR{#VQJ%U0|$eoV$OBmp}R@q&&6Ws9ucXI-a*!?{f%>o{FTvB>P3%;XM_? zxT%|J-X=d}XwPbL=kY^3uCW>ccx>adnPFm(=Cz~bDnD-$8RzeZq~M9(omf>ojk zgmO0Xme|R_1jnrO6ix;gHj%Z+dDPA@ivq1N_LOcnjl;OX8)3n! zY|-KRG$o6rCVfelyazY3IJr%e&G-j|820U-i)|t|l*NrJ5Rjj0Z%E{&b33ii#}|BagJgBV%@#p{IC> zaO#AQkCwee1_lbAew><=`Y?S%o(4j_Z|_XauTz#9J z-v&MW%xZm8I$zOoD{xwiukO&*nn4fpMJFWZHdoPm?vDC+CkXc>DC_~4+x(?!b}FCd zSu8vNL1PXwO~>Sv2l6X)hz5ARiWF58jKz*Zt39Svkj=L?Xx%*kLrznAGR%D8>wCpL zz-#K(cOS)iLgWnQ4P0FP&Qm&PW0PA z2sPCUC+%@H8NO3*J_ejlnd@9Ol8DB+`J%_=(f8;Hd>eVO{UK>42XOO@16Sx?A0$AV zh=Ww-4aaxV*Q*-F*DTs^IeZp%OF+wxB59wGc|p`^Qj=V4{(%r}1`eORCI6|(LDlsn zo6szoXo)zqMXiQa!n>ibGo=W>gshdEyS~SYg1v&e&*wQo)QxHe<*;K8rJo~r{{lfQ z1`7O}7Qe;)irYo$5f@ozpu3dPID}g?N>=MjKof-0PPq?b(|Z3}B4W^pbvj{plHi_a zV$wZInk><}k6|>c%b)SGgV)6EtMi#a^i^ z56@pIfVo!g$fO^?TSl@3y|*!vVQk?KiF-cTc|-5^@_Z<<;_P`ZK~De(`-+3iZ@TFS zB@4;qc*Pw#vO=eYCZG&hWu?&Wg}Z%!y{q9hi7_}tuq#!dg97y=}{cA0e~<3SFwUFoebX4R0zX#slWk1y3!#8VnU zRFYFHB$GB}RQtU+cXjWrWB4j24G<+xc$@aowcyvS*4+fxy~Z?DXR!7MY|sGZV> gug-*TTK@b6mM1NcYpe-f{nrOz8v5$>s&Px# literal 0 HcmV?d00001 diff --git a/TUIKit/assets/icon/cancel.svg b/TUIKit/assets/icon/cancel.svg new file mode 100644 index 00000000..1cf848b4 --- /dev/null +++ b/TUIKit/assets/icon/cancel.svg @@ -0,0 +1,23 @@ + + + 清除 + + + + + + + + + + + + + + + + + + + + diff --git a/TUIKit/assets/icon/check-sm.svg b/TUIKit/assets/icon/check-sm.svg new file mode 100644 index 00000000..69a5e1c8 --- /dev/null +++ b/TUIKit/assets/icon/check-sm.svg @@ -0,0 +1,3 @@ + + + diff --git a/TUIKit/assets/icon/close-dark.svg b/TUIKit/assets/icon/close-dark.svg new file mode 100644 index 00000000..cfc8bc05 --- /dev/null +++ b/TUIKit/assets/icon/close-dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/TUIKit/assets/icon/close-image.png b/TUIKit/assets/icon/close-image.png new file mode 100644 index 0000000000000000000000000000000000000000..d6cc4349148ee7a26f7bb74b885d9f7881ede239 GIT binary patch literal 6231 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 literal 0 HcmV?d00001 diff --git a/TUIKit/assets/icon/convertText_en.svg b/TUIKit/assets/icon/convertText_en.svg new file mode 100644 index 00000000..6a8dd655 --- /dev/null +++ b/TUIKit/assets/icon/convertText_en.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/TUIKit/assets/icon/convertText_zh.svg b/TUIKit/assets/icon/convertText_zh.svg new file mode 100644 index 00000000..ef2c6434 --- /dev/null +++ b/TUIKit/assets/icon/convertText_zh.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/TUIKit/assets/icon/d-left-arrow.svg b/TUIKit/assets/icon/d-left-arrow.svg new file mode 100644 index 00000000..24d57594 --- /dev/null +++ b/TUIKit/assets/icon/d-left-arrow.svg @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/TUIKit/assets/icon/d-right-arrow.svg b/TUIKit/assets/icon/d-right-arrow.svg new file mode 100644 index 00000000..6fca7c5c --- /dev/null +++ b/TUIKit/assets/icon/d-right-arrow.svg @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/TUIKit/assets/icon/del-icon.svg b/TUIKit/assets/icon/del-icon.svg new file mode 100644 index 00000000..b2832c0f --- /dev/null +++ b/TUIKit/assets/icon/del-icon.svg @@ -0,0 +1,25 @@ + + + + + + + + + + \ No newline at end of file diff --git a/TUIKit/assets/icon/double-arrow.svg b/TUIKit/assets/icon/double-arrow.svg new file mode 100644 index 00000000..0496fda4 --- /dev/null +++ b/TUIKit/assets/icon/double-arrow.svg @@ -0,0 +1 @@ + diff --git a/TUIKit/assets/icon/down-icon.svg b/TUIKit/assets/icon/down-icon.svg new file mode 100644 index 00000000..a921e8ea --- /dev/null +++ b/TUIKit/assets/icon/down-icon.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/TUIKit/assets/icon/downaload-image.png b/TUIKit/assets/icon/downaload-image.png new file mode 100644 index 0000000000000000000000000000000000000000..498d63af202a8367d1e4b313024fb9e20b0efd5a GIT binary patch literal 6408 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 TBO?X>`-S)*qbv=VG!FS6kW6M6 literal 0 HcmV?d00001 diff --git a/TUIKit/assets/icon/download.svg b/TUIKit/assets/icon/download.svg new file mode 100644 index 00000000..9d49c854 --- /dev/null +++ b/TUIKit/assets/icon/download.svg @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/TUIKit/assets/icon/edit.svg b/TUIKit/assets/icon/edit.svg new file mode 100644 index 00000000..2ad307eb --- /dev/null +++ b/TUIKit/assets/icon/edit.svg @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/TUIKit/assets/icon/evalute-dark.svg b/TUIKit/assets/icon/evalute-dark.svg new file mode 100644 index 00000000..b9833be7 --- /dev/null +++ b/TUIKit/assets/icon/evalute-dark.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/TUIKit/assets/icon/evalute-light.svg b/TUIKit/assets/icon/evalute-light.svg new file mode 100644 index 00000000..7cd651b8 --- /dev/null +++ b/TUIKit/assets/icon/evalute-light.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/TUIKit/assets/icon/face-dark.svg b/TUIKit/assets/icon/face-dark.svg new file mode 100644 index 00000000..fcbe3adf --- /dev/null +++ b/TUIKit/assets/icon/face-dark.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/TUIKit/assets/icon/face-light.svg b/TUIKit/assets/icon/face-light.svg new file mode 100644 index 00000000..98bf5631 --- /dev/null +++ b/TUIKit/assets/icon/face-light.svg @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/TUIKit/assets/icon/face-uni.png b/TUIKit/assets/icon/face-uni.png new file mode 100644 index 0000000000000000000000000000000000000000..93214877dcfc0583af3cf08538c28cec51a90566 GIT binary patch literal 5015 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 + + + + + diff --git a/TUIKit/assets/icon/file-light.svg b/TUIKit/assets/icon/file-light.svg new file mode 100644 index 00000000..a3acf0c8 --- /dev/null +++ b/TUIKit/assets/icon/file-light.svg @@ -0,0 +1,13 @@ + + + + + + + \ No newline at end of file diff --git a/TUIKit/assets/icon/forward-each.svg b/TUIKit/assets/icon/forward-each.svg new file mode 100644 index 00000000..41599b42 --- /dev/null +++ b/TUIKit/assets/icon/forward-each.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/TUIKit/assets/icon/forward-merge.svg b/TUIKit/assets/icon/forward-merge.svg new file mode 100644 index 00000000..7a8588a2 --- /dev/null +++ b/TUIKit/assets/icon/forward-merge.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/TUIKit/assets/icon/icon-arrow-left.svg b/TUIKit/assets/icon/icon-arrow-left.svg new file mode 100644 index 00000000..97d4c986 --- /dev/null +++ b/TUIKit/assets/icon/icon-arrow-left.svg @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/TUIKit/assets/icon/icon-c2c.svg b/TUIKit/assets/icon/icon-c2c.svg new file mode 100644 index 00000000..e33ef15d --- /dev/null +++ b/TUIKit/assets/icon/icon-c2c.svg @@ -0,0 +1,36 @@ + + + 编组 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/TUIKit/assets/icon/icon-close.svg b/TUIKit/assets/icon/icon-close.svg new file mode 100644 index 00000000..f5f3e045 --- /dev/null +++ b/TUIKit/assets/icon/icon-close.svg @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/TUIKit/assets/icon/image-dark.svg b/TUIKit/assets/icon/image-dark.svg new file mode 100644 index 00000000..6a122ae7 --- /dev/null +++ b/TUIKit/assets/icon/image-dark.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/TUIKit/assets/icon/image-light.svg b/TUIKit/assets/icon/image-light.svg new file mode 100644 index 00000000..1088ed6d --- /dev/null +++ b/TUIKit/assets/icon/image-light.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/TUIKit/assets/icon/image-uni.png b/TUIKit/assets/icon/image-uni.png new file mode 100644 index 0000000000000000000000000000000000000000..7d12d8431d28a3b71e84d97170d6c00b349397e5 GIT binary patch literal 4377 zcmV+!5$5iRP)4Tx07!|Imj_T&Sr>rsd+8yeB}6)*H$gf9q=e7{2uKGTAqfylh=BkiDk_UB zxT1)NprYt1MZvWIvQ|W~EeeWVH^?HOtcwL3D*pq9;O;;F|IdGB&YbU^cka38-nsY9 zc>s_VIU-RitO!7wFjE}r>q(D}iKXKP0UF2y8c+ka9Bzh)84?l*5Sg)mm-lx8G-+>J zOy>Ic_y1Ltc>D}508j|R@w^Of8p09UMc4$1 zL42gi{EYbT@+AH(XS^&Yhm$Dd>9tG=-b;`nO69EhKeyw5OIoUAW)34nNl9YAP{b-D zdv-r1JwV37_@Lk!7VxIxr#MOC7cs-!3|8z6^Eh4svazW_fis*S@L|jHWU|9&n4jSt zHpAldP}y7wVit3TIpW!QB`Faye-fW9%b%MR9yP;Rg2AWAKBW|GQL}{fGr!FnH26PTRUgAe!h@7n=>O?RvVA+hv8=U0(>3rg{AOI zcnk$lawr-~7iEEBpjfD2R4gh1B}T1A6`{&eHK;~Z8>$m^8zn`Jpgy6oXbPH+wm`d} z{m>C;E_yk7HF^`e5?zaKMt7iZqx;aK=x-P@MiXO>amKJQ(U?R`Hl`3$jyZ@qiMfR7 z#SCEHW3gBo))?!E^~1(sld&tYo3OjFP1y6;Zfrkx42Q$1;mmQaxL_Oymx(LH?Zh3% zox}Cu25=woa(ErQ4c-SIix=Y8;mh&$__O#P{2+duphz$zI1_>iJi-b>3E=>tjc}7N zKo}<~5siti#BgFVaV@ce*hsuYd`x^RCnu*T=OnjKP9T>rS0Q&)?uuNW+$WMU$&ADz zEhb4wn@NXA=SdGpZ^>k`5!r(rOU@*3CfAWKlAn@4%2VVm<=OH)`8D!Y^3C!+@~;#K z3Wf?yg{2C)3grsN6>chwC=wKn6j_QK#np;cil-FsDUK;ol&qD4mC}?pDb*`oRT@&p zDH|z!EAx~Kl=mxNRPLvsDEbr@g-cmaIY7BY8K7dR##A;nnOaOeLhYiCswk`2sYI&e zs8p$(QIXP6G$R_DmP#w39i!c)eV(H=hdGBoXXBj4IX!besA{NssPa{dRGU=Uy5oArdJ%f-^qTaZ=o9rB`U(1F`tACo208`{4Dt*b3?3R13>k(=hC2*94L=we z8$}syFlsRxGFCNa8|NA~7(X^4o4A`SH>okXV~RCpn5LNSHoavAo7tNsnN^wHG>6R{ z%mwDV&AaDf<~q$4&aIhy&w^yZw8*k(u;{a-Sq56Jvuv?^HP2vP?7Xe>I_G_}vbRdL zI$-t4TG`s)dYyHf^&1;A8?H^2%^h2^t&i;*+g97xcII|`yFGUI?J4#P>^IoA+kbU% zbPzi7rgU_h1z3)oj^L`k=0Kct%_t;u&F1wCB z>hI{k%D*Fk6c83r8SpI7EKnTSwg6t>zhK*f$3ccc!l0I55X=tV7W^c{IAnRquM4pY zLl#yod>(2Ynitv`MhROMRv-30+%vo+{85BSge0OpQXz72WL@NkD6go}C~5S(=vC3z zW7J~=F|Dz<*vQy}v15z87j0iOu-JZa;o`eXjF;prxw=$+Y3kB5%M_MzmK~47#6`u` z$9>@hb80wa@$C3r@uOT8cL(<+&x2RS8|J(6OZkHdt_h_HLy4}5+Y*P9+>^?aMg%ND zrQmh4UvhQwhm_!yLn#xfQK?O7__VmRQ$l57im)SHJ3S}8TVyUO6iJsmFWB}C@#FW!DU1BkLVu-KXz@j-MDk(w<2EAwPLH{^5QR>xSOv1Wc^dcPZOIHHg}ac zl+ES&`+|vGS3$`_v(aVa;-fdsD{c5>gdG!wB4#^H_MPNniPJ^9W zc7CZ$s_d=utZLe&xohLD54(B0d-izjX{^?&F0TH(SFrc~KHq)KHAXe%`?348_CG%m zd7$%W#?N&J)ejaQ{CY@uNLm|O+fnCOS68oDU(x_KNE(I@FFt(hh}V(UMvKOMO|+)s zqu{9I=!;+Cez|)r;8^={#_`4zh9`ENq?{~jhMHG2kG3SWNLyoCyHEL_YHxFCJNc{S zuZK?So~}Bha;D@g@od4_iF3K<#?Fh*k6cK+(BHnS{n5qfi+4H}c640|xOC;R&*h7q z%+7OHT(6wI>U{OoHO94;>kikOZ`j{B`J4T3C%YWFnr}MZY`x`ltF3!}_t_rzo(s3V zZePB`zH_}dsJHuW#NGS%7T=TJ=iMKAkow^D!>otnkMbX59v3}Pd{X{Y^J&fRroT5y z9i(Uay!viD3w!pcpWFZPkBmRQ3=}*kKQABD8LS(!89F`eGkojCq89@%MK8xk3jb94 zbJr`AS111R`0K`K^yt8A@#~2)Kjsbvj3+W#gP50AN0!{w| zOcD4`Jl%6oi30$Qh?#7QSmyyail|XOk{i*WEEtt$|2mWdQ1shriHjdZ3vj6}9IAvH#W=%~1DgXcg2mk?xX#fNO z00031000^Q000000-yo_1ONa40RR91XrKcC1ONa40RR91Pyhe`0L{vZYybcS<4Ht8 zRCodHoWE}zMHI*1+?|PW<%pET9O6e(CFjHi9T*gWpsaVW=flje`fCf{7yyI68h9_U(JbE@pG{PxyWF54f`WC2ZZkomA1Ky017nGm8UO zePLu|1ddO=0xunVKJcd3u787|zJl%T?Z9+{ZqzDq1n0x|&V<4tr@wgY1v@R};h^?_ zRzTEp#>O61m*%lh+7nYRdt&+0?E!6o=s6Q6Ywm)b@6?hG9(dZhgjRt_kcD)kM;2E@m9s@hI`}r8bBK$c4jgj&<1F0EB?Tf z2Cp3aJ)jNH`o<6bB}9m&83qpi9?%Bp)~)z}XzGW9zX!Ad`stTn;o9|Y{Ywdmr93<@ zr*@DwKvcw))h}=|G`d_-T5dgRIAp0F8lPweCy8$Dbh>ck`*nC|Xb7Hs;_<+Y)N(F- z`Wa7_26_oM#p#~ScFLo%4b3jl0M;2JQBUtCb|!A(^NJ*~2ti0_OOf3%oWuYX!TG** zl(2?JK9)KFYnNSTbza3i>@~0&5-QWUAuLvc*rPlAO9+?r{C zVn878NGa!+TNf6*Ai}QkG-4A^Se*?^*Np+_oej4L~n0UN7x6>J}7N(%yXQopV(ouM!+`F%DeofY)!#oIVxB%?cG&=E)5H?gV^T6}G zt+XMP5Kz2c8cAAL$c?b~MWhX>RDg6zT9}Nb38_4Q5|FeYP-#Ib0ia|hEo(@H29%bh zWeKUcfKryUtRNK-PSADTjcHCuvDS$`zm@OIlKp@&l*@l9mLd9IU94r1icp&As9o>ZJvN2(m?m zlq#UI_R@kt1lgiMN)ONgOIkmWQUJt~76gcFK`kj!KrCrtXdc*Akdgz$lJ>y+5x@CC zN&pZ`T0|bc$-I!X0%A$?^?A>cZb-GBbE`6tq`~l9FK2FOt8GV!t2ouuP~CP=<84UB z+j}(tia(du#nS`0G2PyvKBypqezy>nbA182KbL03oJ*5)_PK$e8nO-I17b-_^C_H@odzM4NmT&ZsKt2pXDdLlMbIZt0-qH_y&|UcU}GkC^gpF T2> + + diff --git a/TUIKit/assets/icon/left-arrow.svg b/TUIKit/assets/icon/left-arrow.svg new file mode 100644 index 00000000..2be419f0 --- /dev/null +++ b/TUIKit/assets/icon/left-arrow.svg @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/TUIKit/assets/icon/loading.gif b/TUIKit/assets/icon/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..be7c806e62c7833bc621544dad4d83c72963c14c GIT binary patch literal 177671 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 literal 0 HcmV?d00001 diff --git a/TUIKit/assets/icon/loading.png b/TUIKit/assets/icon/loading.png new file mode 100644 index 0000000000000000000000000000000000000000..6adfca7adb66bb85397921f403399fca5529688e GIT binary patch literal 4469 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 Hu0mjfHdCj_ literal 0 HcmV?d00001 diff --git a/TUIKit/assets/icon/minus.svg b/TUIKit/assets/icon/minus.svg new file mode 100644 index 00000000..b92ab01d --- /dev/null +++ b/TUIKit/assets/icon/minus.svg @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/TUIKit/assets/icon/more-uni.png b/TUIKit/assets/icon/more-uni.png new file mode 100644 index 0000000000000000000000000000000000000000..8376db263b3ed6519b0282179d9e969bb534ee8d GIT binary patch literal 4652 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 JWt~$(69DWghmimP literal 0 HcmV?d00001 diff --git a/TUIKit/assets/icon/msg-audio.svg b/TUIKit/assets/icon/msg-audio.svg new file mode 100644 index 00000000..f2315fd4 --- /dev/null +++ b/TUIKit/assets/icon/msg-audio.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/TUIKit/assets/icon/msg-copy.svg b/TUIKit/assets/icon/msg-copy.svg new file mode 100644 index 00000000..a5ed5890 --- /dev/null +++ b/TUIKit/assets/icon/msg-copy.svg @@ -0,0 +1,30 @@ + + + 编组 14 + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/TUIKit/assets/icon/msg-del.svg b/TUIKit/assets/icon/msg-del.svg new file mode 100644 index 00000000..2d01337f --- /dev/null +++ b/TUIKit/assets/icon/msg-del.svg @@ -0,0 +1,33 @@ + + + 矩形 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/TUIKit/assets/icon/msg-forward.svg b/TUIKit/assets/icon/msg-forward.svg new file mode 100644 index 00000000..172bfb5e --- /dev/null +++ b/TUIKit/assets/icon/msg-forward.svg @@ -0,0 +1,31 @@ + + + 编组 + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/TUIKit/assets/icon/msg-quote.svg b/TUIKit/assets/icon/msg-quote.svg new file mode 100644 index 00000000..d5332710 --- /dev/null +++ b/TUIKit/assets/icon/msg-quote.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/TUIKit/assets/icon/msg-revoke.svg b/TUIKit/assets/icon/msg-revoke.svg new file mode 100644 index 00000000..d3494f7f --- /dev/null +++ b/TUIKit/assets/icon/msg-revoke.svg @@ -0,0 +1,29 @@ + + + 矩形 + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/TUIKit/assets/icon/multiple-select.svg b/TUIKit/assets/icon/multiple-select.svg new file mode 100644 index 00000000..d4da3c57 --- /dev/null +++ b/TUIKit/assets/icon/multiple-select.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/TUIKit/assets/icon/mute.svg b/TUIKit/assets/icon/mute.svg new file mode 100644 index 00000000..59a5f074 --- /dev/null +++ b/TUIKit/assets/icon/mute.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/TUIKit/assets/icon/plus.svg b/TUIKit/assets/icon/plus.svg new file mode 100644 index 00000000..2ccfad2a --- /dev/null +++ b/TUIKit/assets/icon/plus.svg @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/TUIKit/assets/icon/radio.svg b/TUIKit/assets/icon/radio.svg new file mode 100644 index 00000000..bb4f31b8 --- /dev/null +++ b/TUIKit/assets/icon/radio.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/TUIKit/assets/icon/right-arrow.svg b/TUIKit/assets/icon/right-arrow.svg new file mode 100644 index 00000000..3dc5700b --- /dev/null +++ b/TUIKit/assets/icon/right-arrow.svg @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/TUIKit/assets/icon/right-icon.svg b/TUIKit/assets/icon/right-icon.svg new file mode 100644 index 00000000..c90c2fd1 --- /dev/null +++ b/TUIKit/assets/icon/right-icon.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/TUIKit/assets/icon/rotate-left.svg b/TUIKit/assets/icon/rotate-left.svg new file mode 100644 index 00000000..1a3c875a --- /dev/null +++ b/TUIKit/assets/icon/rotate-left.svg @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/TUIKit/assets/icon/rotate-right.svg b/TUIKit/assets/icon/rotate-right.svg new file mode 100644 index 00000000..7ab04abd --- /dev/null +++ b/TUIKit/assets/icon/rotate-right.svg @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/TUIKit/assets/icon/search-default.svg b/TUIKit/assets/icon/search-default.svg new file mode 100644 index 00000000..16607cba --- /dev/null +++ b/TUIKit/assets/icon/search-default.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/TUIKit/assets/icon/search-more.svg b/TUIKit/assets/icon/search-more.svg new file mode 100644 index 00000000..af3e11ce --- /dev/null +++ b/TUIKit/assets/icon/search-more.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/TUIKit/assets/icon/search.svg b/TUIKit/assets/icon/search.svg new file mode 100644 index 00000000..d64b94f7 --- /dev/null +++ b/TUIKit/assets/icon/search.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/TUIKit/assets/icon/selected.svg b/TUIKit/assets/icon/selected.svg new file mode 100644 index 00000000..7fd5bd31 --- /dev/null +++ b/TUIKit/assets/icon/selected.svg @@ -0,0 +1,27 @@ + + + 编组 14 + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/TUIKit/assets/icon/setting.svg b/TUIKit/assets/icon/setting.svg new file mode 100644 index 00000000..ebda9dc3 --- /dev/null +++ b/TUIKit/assets/icon/setting.svg @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/TUIKit/assets/icon/star-light.png b/TUIKit/assets/icon/star-light.png new file mode 100644 index 0000000000000000000000000000000000000000..77c9e32b8148c66525f587e7843d811c1a6aa0ea GIT binary patch literal 5884 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 literal 0 HcmV?d00001 diff --git a/TUIKit/assets/icon/start-group.svg b/TUIKit/assets/icon/start-group.svg new file mode 100644 index 00000000..6fd02f85 --- /dev/null +++ b/TUIKit/assets/icon/start-group.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/TUIKit/assets/icon/translate.svg b/TUIKit/assets/icon/translate.svg new file mode 100644 index 00000000..8b7ae249 --- /dev/null +++ b/TUIKit/assets/icon/translate.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/TUIKit/assets/icon/video-dark.svg b/TUIKit/assets/icon/video-dark.svg new file mode 100644 index 00000000..1828560c --- /dev/null +++ b/TUIKit/assets/icon/video-dark.svg @@ -0,0 +1,11 @@ + + + + + + diff --git a/TUIKit/assets/icon/video-light.svg b/TUIKit/assets/icon/video-light.svg new file mode 100644 index 00000000..d9915101 --- /dev/null +++ b/TUIKit/assets/icon/video-light.svg @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/TUIKit/assets/icon/video-play.png b/TUIKit/assets/icon/video-play.png new file mode 100644 index 0000000000000000000000000000000000000000..15957a9828b2d38a887d23624178255ff3b173ad GIT binary patch literal 2321 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 LNkvXXu0mjfacjoB literal 0 HcmV?d00001 diff --git a/TUIKit/assets/icon/words-dark.svg b/TUIKit/assets/icon/words-dark.svg new file mode 100644 index 00000000..c8f6c89e --- /dev/null +++ b/TUIKit/assets/icon/words-dark.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/TUIKit/assets/icon/words-light.svg b/TUIKit/assets/icon/words-light.svg new file mode 100644 index 00000000..934bcdae --- /dev/null +++ b/TUIKit/assets/icon/words-light.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/TUIKit/assets/icon/zoom-in.svg b/TUIKit/assets/icon/zoom-in.svg new file mode 100644 index 00000000..d861ab70 --- /dev/null +++ b/TUIKit/assets/icon/zoom-in.svg @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/TUIKit/assets/icon/zoom-out.svg b/TUIKit/assets/icon/zoom-out.svg new file mode 100644 index 00000000..890cf9fb --- /dev/null +++ b/TUIKit/assets/icon/zoom-out.svg @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/TUIKit/assets/styles/sample.scss b/TUIKit/assets/styles/sample.scss new file mode 100644 index 00000000..8a110b02 --- /dev/null +++ b/TUIKit/assets/styles/sample.scss @@ -0,0 +1,99 @@ +/* stylelint-disable */ +.TUIKit { + display: flex; + width: 100vw; + height: 100vh; + overflow: hidden; + text-align: left; + .TUIKit-navbar { + background: #e8e8e9; + overflow: hidden; + .TUIKit-navbar-item { + padding: 10px; + color: #147aff; + font-weight: 500; + cursor: pointer; + } + .TUIKit-navbar-item-active { + background: #dddddd; + } + } + .TUIKit-main-container { + flex: 1; + display: flex; + overflow: hidden; + .TUIKit-main { + flex: 1; + display: flex; + .TUIKit-main-aside { + min-width: 285px; + flex: 0 0 24%; + border-right: 1px solid #f4f5f9; + } + .TUIKit-main-main { + flex: 1; + display: flex; + .chat{ + flex: 1; + } + .chat-aside { + position: absolute; + top: 50px; + right: 0; + box-sizing: border-box; + max-width: 360px; + max-height: calc(100% - 50px); + border-radius: 8px 0 0 8px; + z-index: 9999; + } + } + } + .callkit-container { + position: fixed; + left: calc(50% - 25rem); + top: calc(50% - 18rem); + width: 50rem; + height: 36rem; + } + .callkit-container.miniMized { + left: auto; + right: 10px; + top: 70px; + background: transparent; + } + } +} +.TUIKit-h5 { + display: flex; + flex-direction: column-reverse; + .TUIKit-navbar { + display: flex; + flex-direction: row; + .TUIKit-navbar-item { + flex: 1; + text-align: center; + cursor: none; + } + } + .TUIKit-main-container { + flex: 1; + .TUIKit-main { + .TUIKit-main-aside { + flex: 1; + } + .TUIKit-main-main { + .chat-popup { + position: absolute; + max-width: 100%; + max-height: 100%; + } + } + } + .callkit-container { + left: 0; + top: 0; + width: 100%; + height: 100%; + } + } +} diff --git a/TUIKit/components/TUIChat/chat-header/index.vue b/TUIKit/components/TUIChat/chat-header/index.vue new file mode 100644 index 00000000..b64b3373 --- /dev/null +++ b/TUIKit/components/TUIChat/chat-header/index.vue @@ -0,0 +1,91 @@ + + + \ No newline at end of file diff --git a/TUIKit/components/TUIChat/config.ts b/TUIKit/components/TUIChat/config.ts new file mode 100644 index 00000000..ed99f3d6 --- /dev/null +++ b/TUIKit/components/TUIChat/config.ts @@ -0,0 +1,83 @@ +class TUIChatConfig { + static instance: TUIChatConfig; + private chatType: string; + private features: Record; + private theme: string; + constructor() { + this.chatType = ''; + this.features = { + 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, + InputEvaluation: true, + InputQuickReplies: true, + InputMention: true, + MessageSearch: true, + ReadStatus: true, + }; + 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; + } + + 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; + } +} + +const ChatConfig = TUIChatConfig.getInstance(); +const hideTUIChatFeatures = ChatConfig.hideTUIChatFeatures.bind(ChatConfig); + +export { + hideTUIChatFeatures, +}; + +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 00000000..d6501df1 --- /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 00000000..e90d1af9 --- /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 00000000..c6ee4dc2 --- /dev/null +++ b/TUIKit/components/TUIChat/emoji-config/index.ts @@ -0,0 +1,140 @@ +import { TUITranslateService } from '@tencentcloud/chat-uikit-engine'; +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 00000000..baa4fd11 --- /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 00000000..7086a1f1 --- /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 00000000..144009ea --- /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 00000000..6a2188ce --- /dev/null +++ b/TUIKit/components/TUIChat/entry-chat-only.ts @@ -0,0 +1,35 @@ +import { TUILogin } from '@tencentcloud/tui-core'; +import { TUIConversationService } from '@tencentcloud/chat-uikit-engine'; +// #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 00000000..4b87813d --- /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 00000000..a4f6c17f --- /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/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 00000000..faf192d3 --- /dev/null +++ b/TUIKit/components/TUIChat/message-input-toolbar/emoji-picker/emoji-picker-dialog.vue @@ -0,0 +1,185 @@ + + + + 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 00000000..33cc7405 --- /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 00000000..3066bc85 --- /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 00000000..552adfca --- /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 00000000..618221ff --- /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 00000000..536b0500 --- /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 00000000..f9a4b117 --- /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 00000000..83e41fa6 --- /dev/null +++ b/TUIKit/components/TUIChat/message-input-toolbar/evaluate/index.vue @@ -0,0 +1,211 @@ +