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 界面效果如下图所示:
+
+
+> 为尊重表情设计版权,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 @@
+
+
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
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
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
zcmY+IWmptW(7^BL1_4PA1f)}uZfOvtq&tP<2!T6FLJ4UVIFJr0sq@IAQ>05c>X4A`
zMu~gz|KWX~_rvVW?#{C_yI*$Z7o(@EPENu^0ssKWH8oTW?sV`!AtJaN%UOQ5-6^1t
zf%-E*)yRXbyNQaEsiw1z4uJ2@CISGXT>*IiT<(PFP5=PhJRkt~P6Pj~<>CDAZg3v%
z|JnZ>6Wx9;0|4}$nkq_0{=mI#(u$Wa1N$zPkB#tD)$xcyJwTP%n3ukMG*z3moU%rx
z@mzi^TnV`H1?Ns&MRlEQm6Og0j>}TU+DR1<)ftWwPN#OZ$yN#v?h_3Vhf`xbrJmyA
z!aUX!a{{`Uy;$%WMZwxf?5cmufEA|AcCOm6f7{Mxz}49&Zrr~;TF<7f5zWDWj*V3z
zA=4!~nc}4{a^<@N&$h)X>gxPdEG*{Jd|8>em_7}zjhF=2msXeNzW1{9eRleJBDBK4
zy;QYUdke-}EjLiU_Pak>5R9&pE8V%(gR_QqJq2w{^gQQok?bW$t_i4nGZVUvXwEQjbgYbwYqH@5=b!$Z^g
z2G7wlMv>9(HI-)*VH;n_e()Z`Ej*;KKg$e%!MWNvnFLp)WeaB5*S2K^J8g)|-hV%7
zmbRX5h8=L*g#2-mj!;E%^#&V+(Gv?d$Qeunf1EfDn@VWm+FpuI*lptmGfN3SLLrX1
zAEBS1t}xOVrIrUeyK>Jap+0%iTI8_^*UHMr$c$%Xz{^KLfPJIo3j~3;WCWf8%h$O$f|S=zy(a>X>pEVRoYj&
zN#2vBd}aD#0@0^S%#M4$+w0)nwu$O?gcC_CH(5==G!U2I6r>O$n~e;;KPg+AH%-UI
z+eP<9?WB9@)r3eyctLdnv&4P{rWuCa5FM5EA+d5BfNR||Cz|T2B%i<=h%9-LdkYJ{
z>05bPvpukMY;n~T6%|zt?pnv4bagWG&E~76NPb-G|HXOGc&&4Nnb0Z1{96-UIhSF2
zUG6j3CY9C1vTB2!CM^jSLH*oLj6M8l&Ga4|#8hZUY{~H_eINQ2l3NaaQ@+($a(yw=
zm2eMrBuu*NXU~J%TvA%gOp=$RTCyoFpndQ$@?;^+W!nA~(o!#(LH32pMn&I!%>c(`
zA1jtI<#aQ*$xwUggR0j}@yYVfDvZQ>3#!r_>?n^w6aJr~!*%WY!WKt~Igx3Y~k4ZHVz9Yffq*S=2=_(Z%
z59e6rWlg{5im6D}PYHlheuX%;~`_FKl$I-6afmZ{m{0;Ah
z=RMo4#%bME>2xiCGfW`~`hClU_CLZ#I`(n0i98B@O6g6*G{v$TwE!GCnQr3%L3MlH
zeIxy84{c&%!fx9_xXv)urh0Eu_tytDR_2Wr^DjwS*N!9xh!8c<<}9_<=8ZWYk$#6&
zM&mV89`JJGYyF*gM$xJ<
ztn!_M&z6it{60WN1aI(RCP>H>M=tb6bSnLxvs=sdg?{*;f$X6?bY?a>hgG(V
zpN%a6`ZWxv2}am5+SorX;O%2
zGRBpK!tkIA3@qqtylyA4DaBV_l0(4E-5v1!dyBed?$epQ%J?AoeQEA>s)SHdk;_b%
za%b1xQHJFf%o
zv{*{op=#L~W~Ky(t|my#i7{e@XU=9(J{u=df&%H0GPY*IMd01aXNaIZmwQ+oz5(gG
zYQjo0q+B)R_70KT_Dxt?I+sKix{xK}=w+iC}MU@`2YQ`nEv=`Di=G^g)W@AyvJ
zlkqte*+*@#Q0{ci>A$iJNAe^im%{-s2oTxH6pY3drXP(q$c;B!
z&Ik>4$s8;Lb-6~*naSt8sbKO3cuPmF29f!a(vq*0bjun&ac5|^ld9YPx*Z%YcaOBL
z$_rK^V;|uO&X303C!(afUm%@K?8XvTadlNa
ziRDeUkib$wk}rd&ZHta)7R9~14DD0?8CnLDObW_F8uyw6?x&85G{R=co}jfGD;|N6NvajL$0J_x9~hQs6LGvJProPEp6;91
z!@ao4#ocN@BtPhzGHQFz4eNf=dKQqle;fC{)r2SphXOZj#Hc8o1(wND>wdyR$DDN7
zFE;1C;7=mJJbeum5FXq8m5g%}fosW)jy?L*)H&SKDejSsJeB_D{_~Y7g*cgHVS
z7#O*xi*ctN-!x?haj~w{pGqU$aYxlGu_cKXHD;GKn?f~UU(5|i>dLUd+Y)ZA4&Un=
z6p?$>k?UeAZi<0A-}A>!AwK^Jq`1(x2n3mnyKyiSM~kt9ep{Z<7QQJEnh2q!zGtvD
zF>mIEO&FNi`H8&wiaTjMd{phO7Y!-U^h9C%9P_4d$Y>3tHjTh~`jdxM
zMgCdj8MmVrP22&bY-AiMSp2VUoTR*>I>vkc>j0)<6CIyMs5
ze;4d}vk(zLX6w9F@&2gUgP+j$#?}WjVt6V$KSM4EkB0zmDF+^>PL^R(e|l~aQam{H
zuO-Q|l&}@_Y*rhJ!~1&~Z?f9zO;f2XFgx|ZX*qrZKzIA$Q5AC2f6(&`!8m9vz-
z3a5&_vA(Lyxa>s+aP+W5NZJL55sZEoiX;jdq{x}4-faBkm;SYM72
zz4982k#EovoEHe(nke${E2BF_Q82Cg)?7>1`$kv(zQz~I#-}n=sh<%HOnJta|4Dp4
zjEle>qPFvWwq^O5XIB4btwpc0BXNvfIZ5lMvZ=Tt>}(x@e;pi@rBsN6=kmKztyEcC
zq614#>QWLdqY|&=)>R4XLk8S%OTHuM5WleQgHsgS&VP+?&8=E;A%;
z8>Dm^W6P@7Rw0W
zpQ~rU{56JQS36w~ehgss-mc6U0{s{MJDj0JM!-pOM{N0&!%<-OsDRg)C2uBrgW7LT
z(+tWx25!-Tc_t2g$kn^LvFVhvuGg@gd)?-zIjr&MvU9zRUP-7-Onh@O4Mmsds@
z!Dc-ZF592UYc{}sIk>Sf$|`$86lDmMST{YL1C%xUP-kaA%-W=VBfLTDD2v
zP)=tb^N|~&@i4B$LFBvpZ;|}pd{^IG9xg9_Phhq(T&-^G4CatF`G|6u+x1#Z1j$e^
ze4qZ&NN`k?X8kvT+h8mAA+;+F|=g3_5x6f;-A0<3^D`x
z;SejSn@=DaJ?
z8$z+SUFWm3iS}E(>Ql_s#)|DlS4xEL{^|sdnoEWZ416;;(*Ft(_QD!Bij2%mO!U&M
zl8w*KuARVmj
zt6JV%%u+zK4zk~z&uSim(*>t3o>q&Ai=VG+(-+q~OwV#*MLpg#Vpv6jk2xg5hA$pp
zG9^a%vkQCXLydSslafCNsef$Ltyq+PCO0DcmTZZfW%+&%&2O|FKGc>7PK_3u;)3Rr
zH;~eSsn-=w`{bmP>I55($!%$0^+AOb9{;Ob^PT(ZFt!BH?5)zVC<`3$AiCNH`)%%6
zc=NBx2c@5`YY42fcL9?Z1Mwl}--^>%+j&S
zI6!OtO+5PUzm)Sv#F}x;0hU*;eBAJwUj2kItwO3PE%H(fK-YL&XsdD*FeKeus$4QW
zDhiTpI?uSADWP~kX~d-Zvvec_2Q%<2p2^FU=unj@s+GvN04Zv?UO#xG!8CUY3=Bq@
z_Zh0Ls}0-;H`7-VkiARD*vrhXXQtdm@R_)C!nZ53$j$;b0>0`94v6g3rA@k>UJRu+
zgb~l!V)*I}O*{l%+Aj-1+R!29zxFc<899RrzGL}Ex=DstSX=>mAVi>^s0r(IKtH1F
z5gG|;RKS%R@=_L)`!-i~9vrs+M)mg`RcO<$XuD
zMol?oi#2oa-WW^JnN=9B#qhRy<>$;IU9qb?ndf}>n?H#!Cag8!vC{m`$b)?@a}F_%;~I
z9ix~+AYves9M!E9Ii%O1fv8-G9ntrv!x!pJ9<4AphqM|6_zOB2t9()ESDE8Z>9&P7
zPbfHNdg42{RyK}+IT_TNOu}3+Pef0
zzESROp7LWj*O@(+g-tH0d|CU6O9S$FwmlL_N2su&SfP~kfu
z?*|ki_9%)yJ+cD*5=1DFHMc^G@Iu(}vycD~eNobI7Tsa>&dHPx_3?#oTt0Irt=>Tg
z2X}<3GWe--Kqj1480}0}>9a91yfth(8R?-;vtsmGw?nzoZPX{@(@lno`IlAw*x}x(
z!c5^$I;l5u{Z}BJk8Pz6E@TtLu6aL{f79)!Db}dycHHsNwVc51G8@-s1gonSof2c)
z5hDd(-Y;rj^P0{;wDUNt#-~29`rBezOepEDbq1Fo0aZzaw|S$DPz}_iW~z*t7e82=
zczrGC#FEheKU()LS>2La#*-7Z`9^^a1ux59tXyTE^lwq-^N05Deb+
zI6Ez2lJlAWmoEWyq^dv`NF(u&|G;1|aSFH7IO|TMhH*AGwL!jYU`b1@?o}e)Q>e>O
zNa3dVxQP?!belM2tt-gjx|QzLxI|Kwk89|r8_uU5m##r6!2)Dud%_Mwm+sg4+4CCGiKU#BkSPW
z8$p4rwb4D7fP~3FZ0~I^DMhM>Z!ev)%K9IsG7UVRcoxQs{JW#lf-&bajqd+V`n?ki
z;9+AR?DUIq>}QP);j0(u(2Y
z*6rZXDZK2!hOaCa#HrB7cA5JrM;5|{eQsO%Hqvk|{aW);s{4NsRc1W>g_!4tmZV{s
zZCM6VACaU&zdUp^#UUT0HM;AJuh`8NiNa4fG4D(R{p25&%W8Yud=w*XT&2+pQh5yG
s|HrmnVZ;k^=I`2HfcjhiKikGCtm@ZN_&S;o|AYFPs=6vw&uriR51q#r00000
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 @@
+
+
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
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
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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