├── .github ├── README.md └── README_ZH.md ├── Vue2 ├── Demo │ ├── .gitignore │ ├── README.md │ ├── README_ZH.md │ ├── babel.config.js │ ├── package.json │ ├── public │ │ ├── favicon.png │ │ └── index.html │ ├── src │ │ ├── App.vue │ │ ├── TUIKit │ │ │ ├── .npmignore │ │ │ ├── .npmrc │ │ │ ├── CHANGELOG.md │ │ │ ├── README.md │ │ │ ├── adapter-vue.ts │ │ │ ├── assets │ │ │ │ ├── icon │ │ │ │ │ ├── add-circle.svg │ │ │ │ │ ├── add.svg │ │ │ │ │ ├── at.svg │ │ │ │ │ ├── audio.svg │ │ │ │ │ ├── back.svg │ │ │ │ │ ├── call-video.svg │ │ │ │ │ ├── call-voice.svg │ │ │ │ │ ├── call.png │ │ │ │ │ ├── camera-uni.png │ │ │ │ │ ├── cancel.svg │ │ │ │ │ ├── check-sm.svg │ │ │ │ │ ├── close-dark.svg │ │ │ │ │ ├── close-image.png │ │ │ │ │ ├── convertText_en.svg │ │ │ │ │ ├── convertText_zh.svg │ │ │ │ │ ├── d-left-arrow.svg │ │ │ │ │ ├── d-right-arrow.svg │ │ │ │ │ ├── del-icon.svg │ │ │ │ │ ├── double-arrow.svg │ │ │ │ │ ├── down-icon.svg │ │ │ │ │ ├── downaload-image.png │ │ │ │ │ ├── download.svg │ │ │ │ │ ├── edit.svg │ │ │ │ │ ├── evalute-dark.svg │ │ │ │ │ ├── evalute-light.svg │ │ │ │ │ ├── face-dark.svg │ │ │ │ │ ├── face-light.svg │ │ │ │ │ ├── face-uni.png │ │ │ │ │ ├── file-dark.svg │ │ │ │ │ ├── file-light.svg │ │ │ │ │ ├── forward-each.svg │ │ │ │ │ ├── forward-merge.svg │ │ │ │ │ ├── icon-arrow-left.svg │ │ │ │ │ ├── icon-c2c.svg │ │ │ │ │ ├── icon-close.svg │ │ │ │ │ ├── image-dark.svg │ │ │ │ │ ├── image-light.svg │ │ │ │ │ ├── image-uni.png │ │ │ │ │ ├── input-close.svg │ │ │ │ │ ├── left-arrow.svg │ │ │ │ │ ├── loading.gif │ │ │ │ │ ├── loading.png │ │ │ │ │ ├── minus.svg │ │ │ │ │ ├── more-uni.png │ │ │ │ │ ├── more.png │ │ │ │ │ ├── msg-audio.svg │ │ │ │ │ ├── msg-copy.svg │ │ │ │ │ ├── msg-del.svg │ │ │ │ │ ├── msg-forward.svg │ │ │ │ │ ├── msg-quote.svg │ │ │ │ │ ├── msg-revoke.svg │ │ │ │ │ ├── multiple-select.svg │ │ │ │ │ ├── mute.svg │ │ │ │ │ ├── plus.svg │ │ │ │ │ ├── radio.svg │ │ │ │ │ ├── right-arrow.svg │ │ │ │ │ ├── right-icon.svg │ │ │ │ │ ├── rotate-left.svg │ │ │ │ │ ├── rotate-right.svg │ │ │ │ │ ├── search-default.svg │ │ │ │ │ ├── search-more.svg │ │ │ │ │ ├── search.svg │ │ │ │ │ ├── selected.svg │ │ │ │ │ ├── setting.svg │ │ │ │ │ ├── star-light.png │ │ │ │ │ ├── star.png │ │ │ │ │ ├── start-group.svg │ │ │ │ │ ├── translate.svg │ │ │ │ │ ├── video-dark.svg │ │ │ │ │ ├── video-light.svg │ │ │ │ │ ├── video-play.png │ │ │ │ │ ├── video-uni.png │ │ │ │ │ ├── words-dark.svg │ │ │ │ │ ├── words-light.svg │ │ │ │ │ ├── zoom-in.svg │ │ │ │ │ └── zoom-out.svg │ │ │ │ └── styles │ │ │ │ │ ├── common.scss │ │ │ │ │ └── sample.scss │ │ │ ├── components │ │ │ │ ├── TUIChat │ │ │ │ │ ├── chat-header │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── config.ts │ │ │ │ │ ├── emoji-config │ │ │ │ │ │ ├── custom-emoji.ts │ │ │ │ │ │ ├── default-emoji.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── locales │ │ │ │ │ │ │ ├── en.ts │ │ │ │ │ │ │ ├── zh_cn.ts │ │ │ │ │ │ │ └── zh_tw.ts │ │ │ │ │ ├── forward │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── index.vue │ │ │ │ │ ├── message-input-toolbar │ │ │ │ │ │ ├── emoji-picker │ │ │ │ │ │ │ ├── emoji-picker-dialog.vue │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ │ └── style │ │ │ │ │ │ │ │ ├── h5.scss │ │ │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ │ │ └── web.scss │ │ │ │ │ │ ├── evaluate │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ │ └── style │ │ │ │ │ │ │ │ ├── color.scss │ │ │ │ │ │ │ │ ├── h5.scss │ │ │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ │ │ └── web.scss │ │ │ │ │ │ ├── file-upload │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── index.vue │ │ │ │ │ │ ├── image-upload │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── index.vue │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ ├── style │ │ │ │ │ │ │ └── uni.scss │ │ │ │ │ │ ├── toolbar-item-container │ │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ │ └── style │ │ │ │ │ │ │ │ ├── color.scss │ │ │ │ │ │ │ │ ├── h5.scss │ │ │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ │ │ ├── uni.scss │ │ │ │ │ │ │ │ └── web.scss │ │ │ │ │ │ ├── user-selector │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── index.vue │ │ │ │ │ │ ├── video-upload │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── index.vue │ │ │ │ │ │ └── words │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ │ └── style │ │ │ │ │ │ │ ├── color.scss │ │ │ │ │ │ │ ├── h5.scss │ │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ │ └── web.scss │ │ │ │ │ ├── message-input │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ ├── message-input-at │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── index.vue │ │ │ │ │ │ ├── message-input-button.vue │ │ │ │ │ │ ├── message-input-editor.vue │ │ │ │ │ │ ├── message-input-file.ts │ │ │ │ │ │ └── message-input-quote │ │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── message-list │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ ├── link │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── message-elements │ │ │ │ │ │ │ ├── message-audio.vue │ │ │ │ │ │ │ ├── message-bubble.vue │ │ │ │ │ │ │ ├── message-convert │ │ │ │ │ │ │ │ ├── convert-content.vue │ │ │ │ │ │ │ │ └── index.vue │ │ │ │ │ │ │ ├── message-custom.vue │ │ │ │ │ │ │ ├── message-face.vue │ │ │ │ │ │ │ ├── message-file.vue │ │ │ │ │ │ │ ├── message-image.vue │ │ │ │ │ │ │ ├── message-location.vue │ │ │ │ │ │ │ ├── message-quote │ │ │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ │ │ └── interface.ts │ │ │ │ │ │ │ ├── message-record │ │ │ │ │ │ │ │ └── index.vue │ │ │ │ │ │ │ ├── message-stream-markdown │ │ │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ │ │ ├── marked.ts │ │ │ │ │ │ │ │ ├── operation │ │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ │ │ │ └── type.ts │ │ │ │ │ │ │ │ └── type-writer.ts │ │ │ │ │ │ │ ├── message-text.vue │ │ │ │ │ │ │ ├── message-timestamp.vue │ │ │ │ │ │ │ ├── message-tip.vue │ │ │ │ │ │ │ ├── message-translate │ │ │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ │ │ └── translation-content.vue │ │ │ │ │ │ │ ├── message-video.vue │ │ │ │ │ │ │ ├── read-status │ │ │ │ │ │ │ │ └── index.vue │ │ │ │ │ │ │ └── simple-message-list │ │ │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ │ │ └── message-container.vue │ │ │ │ │ │ ├── message-group-application │ │ │ │ │ │ │ └── index.vue │ │ │ │ │ │ ├── message-tool │ │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ │ └── message-revoked.vue │ │ │ │ │ │ ├── read-receipt-panel │ │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ │ └── interface.ts │ │ │ │ │ │ ├── scroll-button │ │ │ │ │ │ │ └── index.vue │ │ │ │ │ │ └── style │ │ │ │ │ │ │ ├── color.scss │ │ │ │ │ │ │ ├── h5.scss │ │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ │ └── web.scss │ │ │ │ │ ├── mulitple-select-panel │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── offlinePushInfoManager │ │ │ │ │ │ ├── const.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── info.ts │ │ │ │ │ │ ├── interface.ts │ │ │ │ │ │ └── offlinePushInfoManager.ts │ │ │ │ │ ├── server.ts │ │ │ │ │ ├── style │ │ │ │ │ │ ├── h5.scss │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ ├── uni.scss │ │ │ │ │ │ ├── web.scss │ │ │ │ │ │ └── wx.scss │ │ │ │ │ └── utils │ │ │ │ │ │ ├── chatStorage.ts │ │ │ │ │ │ ├── conversationDraft.ts │ │ │ │ │ │ ├── convertVoiceToText.ts │ │ │ │ │ │ ├── copy.ts │ │ │ │ │ │ ├── sendMessage.ts │ │ │ │ │ │ ├── translation.ts │ │ │ │ │ │ ├── utils.ts │ │ │ │ │ │ └── wordsList.ts │ │ │ │ ├── TUIContact │ │ │ │ │ ├── contact-info │ │ │ │ │ │ ├── contact-info-config.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ └── style │ │ │ │ │ │ │ ├── h5.scss │ │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ │ └── web.scss │ │ │ │ │ ├── contact-list │ │ │ │ │ │ ├── contact-list-item │ │ │ │ │ │ │ └── index.vue │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ └── style │ │ │ │ │ │ │ ├── h5.scss │ │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ │ └── web.scss │ │ │ │ │ ├── contact-search │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── index.vue │ │ │ │ │ ├── select-friend │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── server.ts │ │ │ │ │ └── utils │ │ │ │ │ │ └── index.ts │ │ │ │ ├── TUIConversation │ │ │ │ │ ├── actions-menu │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── conversation-header │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ └── server.ts │ │ │ │ │ ├── conversation-list │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ └── style │ │ │ │ │ │ │ ├── color.scss │ │ │ │ │ │ │ ├── h5.scss │ │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ │ └── web.scss │ │ │ │ │ ├── conversation-network │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── index.vue │ │ │ │ │ ├── server.ts │ │ │ │ │ └── style │ │ │ │ │ │ ├── color.scss │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ └── web.scss │ │ │ │ ├── TUIGroup │ │ │ │ │ ├── create-group │ │ │ │ │ │ ├── group-introduction │ │ │ │ │ │ │ ├── config.ts │ │ │ │ │ │ │ └── index.vue │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ └── style │ │ │ │ │ │ │ ├── color.scss │ │ │ │ │ │ │ ├── h5.scss │ │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ │ └── web.scss │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── index.vue │ │ │ │ │ ├── manage-group │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ ├── manage-admin.vue │ │ │ │ │ │ ├── manage-member.vue │ │ │ │ │ │ ├── manage-name.vue │ │ │ │ │ │ ├── manage-notification.vue │ │ │ │ │ │ ├── manage-profile.vue │ │ │ │ │ │ └── style │ │ │ │ │ │ │ ├── color.scss │ │ │ │ │ │ │ ├── h5.scss │ │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ │ └── web.scss │ │ │ │ │ ├── select-member │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── index.vue │ │ │ │ │ └── server.ts │ │ │ │ ├── TUINotification │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── interface.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── TUISearch │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── index.vue │ │ │ │ │ ├── search-container │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ └── style │ │ │ │ │ │ │ ├── h5.scss │ │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ │ └── web.scss │ │ │ │ │ ├── search-input │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── search-more │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── search-result │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ ├── search-result-default │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── index.vue │ │ │ │ │ │ ├── search-result-item │ │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ │ ├── message-abstract │ │ │ │ │ │ │ │ ├── message-abstract-custom.vue │ │ │ │ │ │ │ │ ├── message-abstract-file.vue │ │ │ │ │ │ │ │ ├── message-abstract-image.vue │ │ │ │ │ │ │ │ ├── message-abstract-text.vue │ │ │ │ │ │ │ │ └── message-abstract-video.vue │ │ │ │ │ │ │ └── style │ │ │ │ │ │ │ │ ├── h5.scss │ │ │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ │ │ └── web.scss │ │ │ │ │ │ ├── search-result-loading │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── index.vue │ │ │ │ │ │ └── style │ │ │ │ │ │ │ ├── h5.scss │ │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ │ └── web.scss │ │ │ │ │ ├── search-time-list.ts │ │ │ │ │ ├── search-type-list.ts │ │ │ │ │ ├── server.ts │ │ │ │ │ ├── style │ │ │ │ │ │ ├── h5.scss │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ └── web.scss │ │ │ │ │ ├── type.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── common │ │ │ │ │ ├── Avatar │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── BottomPopup │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ └── style │ │ │ │ │ │ │ ├── h5.scss │ │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ │ └── modal.scss │ │ │ │ │ ├── DatePicker │ │ │ │ │ │ ├── date-picker-panel.vue │ │ │ │ │ │ ├── date-picker.ts │ │ │ │ │ │ ├── date-table.vue │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── Dialog │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ └── style │ │ │ │ │ │ │ ├── color.scss │ │ │ │ │ │ │ ├── dialog.scss │ │ │ │ │ │ │ ├── h5.scss │ │ │ │ │ │ │ └── web.scss │ │ │ │ │ ├── Drag │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── Drawer │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── FetchMore │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── Icon.vue │ │ │ │ │ ├── ImagePreviewer │ │ │ │ │ │ ├── image-item.vue │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── Loading │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── MaskLayer │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── Overlay │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── Popconfirm │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── ProgressMessage │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── RadioSelect │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── SelectUser │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── Slider │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── SwitchBar │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── Toast │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ └── type.ts │ │ │ │ │ └── Transfer │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ └── style │ │ │ │ │ │ ├── color.scss │ │ │ │ │ │ ├── h5.scss │ │ │ │ │ │ ├── transfer.scss │ │ │ │ │ │ └── web.scss │ │ │ │ └── index.ts │ │ │ ├── constant.ts │ │ │ ├── debug │ │ │ │ ├── GenerateTestUserSig.js │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ └── lib-generate-test-usersig-es.min.js │ │ │ ├── index.ts │ │ │ ├── index.vue │ │ │ ├── interface.ts │ │ │ ├── locales │ │ │ │ ├── en │ │ │ │ │ ├── TUIChat.ts │ │ │ │ │ ├── TUIContact.ts │ │ │ │ │ ├── TUIConversation.ts │ │ │ │ │ ├── TUIGroup.ts │ │ │ │ │ ├── TUISearch.ts │ │ │ │ │ ├── component.ts │ │ │ │ │ ├── emoji.ts │ │ │ │ │ ├── evaluate.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── message.ts │ │ │ │ │ ├── time.ts │ │ │ │ │ └── words.ts │ │ │ │ ├── index.ts │ │ │ │ ├── zh_cn │ │ │ │ │ ├── TUIChat.ts │ │ │ │ │ ├── TUIContact.ts │ │ │ │ │ ├── TUIConversation.ts │ │ │ │ │ ├── TUIGroup.ts │ │ │ │ │ ├── TUISearch.ts │ │ │ │ │ ├── component.ts │ │ │ │ │ ├── emoji.ts │ │ │ │ │ ├── evaluate.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── message.ts │ │ │ │ │ ├── time.ts │ │ │ │ │ ├── translate.ts │ │ │ │ │ └── words.ts │ │ │ │ └── zh_tw │ │ │ │ │ ├── TUIChat.ts │ │ │ │ │ ├── TUIContact.ts │ │ │ │ │ ├── TUIConversation.ts │ │ │ │ │ ├── TUIGroup.ts │ │ │ │ │ ├── TUISearch.ts │ │ │ │ │ ├── component.ts │ │ │ │ │ ├── emoji.ts │ │ │ │ │ ├── evaluate.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── message.ts │ │ │ │ │ ├── time.ts │ │ │ │ │ ├── translate.ts │ │ │ │ │ └── words.ts │ │ │ ├── plugins │ │ │ │ ├── extension-server │ │ │ │ │ └── callkit.ts │ │ │ │ └── plugin-components │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── message-call │ │ │ │ │ ├── message-call-c2c.vue │ │ │ │ │ └── message-call-group.vue │ │ │ │ │ ├── message-customer │ │ │ │ │ ├── index.ts │ │ │ │ │ └── message-customer-service.vue │ │ │ │ │ ├── message-plugin-layout.vue │ │ │ │ │ ├── message-plugin.vue │ │ │ │ │ └── message-room │ │ │ │ │ ├── message-room-default.vue │ │ │ │ │ └── message-room.vue │ │ │ ├── server.ts │ │ │ ├── shims-vue.d.ts │ │ │ └── utils │ │ │ │ ├── documentLink.ts │ │ │ │ ├── enableSampleTaskStatus.ts │ │ │ │ ├── env.ts │ │ │ │ ├── index.ts │ │ │ │ ├── lodash.ts │ │ │ │ ├── riseInput.ts │ │ │ │ └── type-check.ts │ │ ├── api │ │ │ └── index.ts │ │ ├── assets │ │ │ ├── icon │ │ │ │ ├── adv-arrow.svg │ │ │ │ ├── arrow-down-line.png │ │ │ │ ├── arrow-down.png │ │ │ │ ├── calendar.svg │ │ │ │ ├── global.png │ │ │ │ ├── menu.png │ │ │ │ ├── message-real.svg │ │ │ │ ├── message-selected.svg │ │ │ │ ├── message.svg │ │ │ │ ├── profile-selected.svg │ │ │ │ ├── profile.svg │ │ │ │ ├── relation-real.svg │ │ │ │ ├── relation-selected.svg │ │ │ │ ├── relation.svg │ │ │ │ └── setting.png │ │ │ └── image │ │ │ │ ├── adv-background.svg │ │ │ │ ├── adv-bg.svg │ │ │ │ ├── create-group.png │ │ │ │ ├── h5 │ │ │ │ ├── adv-im.svg │ │ │ │ ├── adv-more.svg │ │ │ │ └── login-bg.png │ │ │ │ ├── login-background.png │ │ │ │ ├── logo.svg │ │ │ │ ├── txc-logo.svg │ │ │ │ └── warn.svg │ │ ├── components │ │ │ ├── About.vue │ │ │ ├── AdvList.vue │ │ │ ├── AdvListItem.vue │ │ │ ├── ChatDefaultContent.vue │ │ │ ├── EditProfile.vue │ │ │ ├── EditProfilePopup.vue │ │ │ ├── Header.vue │ │ │ ├── Menu.vue │ │ │ └── NavBar.vue │ │ ├── locales │ │ │ ├── en │ │ │ │ ├── home.json │ │ │ │ ├── index.ts │ │ │ │ ├── login.json │ │ │ │ └── profile.json │ │ │ ├── index.ts │ │ │ ├── zh_cn │ │ │ │ ├── home.json │ │ │ │ ├── index.ts │ │ │ │ ├── login.json │ │ │ │ └── profile.json │ │ │ └── zh_tw │ │ │ │ ├── home.json │ │ │ │ ├── index.ts │ │ │ │ ├── login.json │ │ │ │ └── profile.json │ │ ├── main.ts │ │ ├── router │ │ │ └── index.ts │ │ ├── shims-tsx.d.ts │ │ ├── shims-vue.d.ts │ │ ├── store │ │ │ └── index.ts │ │ ├── styles │ │ │ ├── common.scss │ │ │ ├── h5 │ │ │ │ ├── home.scss │ │ │ │ ├── login.scss │ │ │ │ └── profile.scss │ │ │ ├── home.scss │ │ │ ├── login.scss │ │ │ ├── profile.scss │ │ │ └── web │ │ │ │ ├── home.scss │ │ │ │ ├── login.scss │ │ │ │ └── profile.scss │ │ ├── utils │ │ │ └── link.ts │ │ └── views │ │ │ ├── Home.vue │ │ │ ├── Login.vue │ │ │ └── Profile.vue │ ├── tsconfig.json │ └── vue.config.js └── TUIKit │ ├── .eslintignore │ ├── .eslintrc.js │ ├── .npmignore │ ├── .npmrc │ ├── CHANGELOG.md │ ├── README.md │ ├── adapter-vue.ts │ ├── assets │ ├── icon │ │ ├── add-circle.svg │ │ ├── add.svg │ │ ├── at.svg │ │ ├── audio.svg │ │ ├── back.svg │ │ ├── call-video.svg │ │ ├── call-voice.svg │ │ ├── call.png │ │ ├── camera-uni.png │ │ ├── cancel.svg │ │ ├── check-sm.svg │ │ ├── close-dark.svg │ │ ├── close-image.png │ │ ├── convertText_en.svg │ │ ├── convertText_zh.svg │ │ ├── d-left-arrow.svg │ │ ├── d-right-arrow.svg │ │ ├── del-icon.svg │ │ ├── double-arrow.svg │ │ ├── down-icon.svg │ │ ├── downaload-image.png │ │ ├── download.svg │ │ ├── edit.svg │ │ ├── evalute-dark.svg │ │ ├── evalute-light.svg │ │ ├── face-dark.svg │ │ ├── face-light.svg │ │ ├── face-uni.png │ │ ├── file-dark.svg │ │ ├── file-light.svg │ │ ├── forward-each.svg │ │ ├── forward-merge.svg │ │ ├── icon-arrow-left.svg │ │ ├── icon-c2c.svg │ │ ├── icon-close.svg │ │ ├── image-dark.svg │ │ ├── image-light.svg │ │ ├── image-uni.png │ │ ├── input-close.svg │ │ ├── left-arrow.svg │ │ ├── loading.gif │ │ ├── loading.png │ │ ├── minus.svg │ │ ├── more-uni.png │ │ ├── more.png │ │ ├── msg-audio.svg │ │ ├── msg-copy.svg │ │ ├── msg-del.svg │ │ ├── msg-forward.svg │ │ ├── msg-quote.svg │ │ ├── msg-revoke.svg │ │ ├── multiple-select.svg │ │ ├── mute.svg │ │ ├── plus.svg │ │ ├── radio.svg │ │ ├── right-arrow.svg │ │ ├── right-icon.svg │ │ ├── rotate-left.svg │ │ ├── rotate-right.svg │ │ ├── search-default.svg │ │ ├── search-more.svg │ │ ├── search.svg │ │ ├── selected.svg │ │ ├── setting.svg │ │ ├── star-light.png │ │ ├── star.png │ │ ├── start-group.svg │ │ ├── translate.svg │ │ ├── video-dark.svg │ │ ├── video-light.svg │ │ ├── video-play.png │ │ ├── video-uni.png │ │ ├── words-dark.svg │ │ ├── words-light.svg │ │ ├── zoom-in.svg │ │ └── zoom-out.svg │ └── styles │ │ ├── common.scss │ │ └── sample.scss │ ├── components │ ├── TUIChat │ │ ├── chat-header │ │ │ └── index.vue │ │ ├── config.ts │ │ ├── emoji-config │ │ │ ├── custom-emoji.ts │ │ │ ├── default-emoji.ts │ │ │ ├── index.ts │ │ │ └── locales │ │ │ │ ├── en.ts │ │ │ │ ├── zh_cn.ts │ │ │ │ └── zh_tw.ts │ │ ├── forward │ │ │ └── index.vue │ │ ├── index.ts │ │ ├── index.vue │ │ ├── message-input-toolbar │ │ │ ├── emoji-picker │ │ │ │ ├── emoji-picker-dialog.vue │ │ │ │ ├── index.ts │ │ │ │ ├── index.vue │ │ │ │ └── style │ │ │ │ │ ├── h5.scss │ │ │ │ │ ├── index.scss │ │ │ │ │ └── web.scss │ │ │ ├── evaluate │ │ │ │ ├── index.ts │ │ │ │ ├── index.vue │ │ │ │ └── style │ │ │ │ │ ├── color.scss │ │ │ │ │ ├── h5.scss │ │ │ │ │ ├── index.scss │ │ │ │ │ └── web.scss │ │ │ ├── file-upload │ │ │ │ ├── index.ts │ │ │ │ └── index.vue │ │ │ ├── image-upload │ │ │ │ ├── index.ts │ │ │ │ └── index.vue │ │ │ ├── index.ts │ │ │ ├── index.vue │ │ │ ├── style │ │ │ │ └── uni.scss │ │ │ ├── toolbar-item-container │ │ │ │ ├── index.vue │ │ │ │ └── style │ │ │ │ │ ├── color.scss │ │ │ │ │ ├── h5.scss │ │ │ │ │ ├── index.scss │ │ │ │ │ ├── uni.scss │ │ │ │ │ └── web.scss │ │ │ ├── user-selector │ │ │ │ ├── index.ts │ │ │ │ └── index.vue │ │ │ ├── video-upload │ │ │ │ ├── index.ts │ │ │ │ └── index.vue │ │ │ └── words │ │ │ │ ├── index.ts │ │ │ │ ├── index.vue │ │ │ │ └── style │ │ │ │ ├── color.scss │ │ │ │ ├── h5.scss │ │ │ │ ├── index.scss │ │ │ │ └── web.scss │ │ ├── message-input │ │ │ ├── index.ts │ │ │ ├── index.vue │ │ │ ├── message-input-at │ │ │ │ ├── index.ts │ │ │ │ └── index.vue │ │ │ ├── message-input-button.vue │ │ │ ├── message-input-editor.vue │ │ │ ├── message-input-file.ts │ │ │ └── message-input-quote │ │ │ │ └── index.vue │ │ ├── message-list │ │ │ ├── index.vue │ │ │ ├── link │ │ │ │ └── index.ts │ │ │ ├── message-elements │ │ │ │ ├── message-audio.vue │ │ │ │ ├── message-bubble.vue │ │ │ │ ├── message-convert │ │ │ │ │ ├── convert-content.vue │ │ │ │ │ └── index.vue │ │ │ │ ├── message-custom.vue │ │ │ │ ├── message-face.vue │ │ │ │ ├── message-file.vue │ │ │ │ ├── message-image.vue │ │ │ │ ├── message-location.vue │ │ │ │ ├── message-quote │ │ │ │ │ ├── index.vue │ │ │ │ │ └── interface.ts │ │ │ │ ├── message-record │ │ │ │ │ └── index.vue │ │ │ │ ├── message-stream-markdown │ │ │ │ │ ├── index.scss │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── index.vue │ │ │ │ │ ├── marked.ts │ │ │ │ │ ├── operation │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ └── type.ts │ │ │ │ │ └── type-writer.ts │ │ │ │ ├── message-text.vue │ │ │ │ ├── message-timestamp.vue │ │ │ │ ├── message-tip.vue │ │ │ │ ├── message-translate │ │ │ │ │ ├── index.vue │ │ │ │ │ └── translation-content.vue │ │ │ │ ├── message-video.vue │ │ │ │ ├── read-status │ │ │ │ │ └── index.vue │ │ │ │ └── simple-message-list │ │ │ │ │ ├── index.vue │ │ │ │ │ └── message-container.vue │ │ │ ├── message-group-application │ │ │ │ └── index.vue │ │ │ ├── message-tool │ │ │ │ ├── index.vue │ │ │ │ └── message-revoked.vue │ │ │ ├── read-receipt-panel │ │ │ │ ├── index.vue │ │ │ │ └── interface.ts │ │ │ ├── scroll-button │ │ │ │ └── index.vue │ │ │ └── style │ │ │ │ ├── color.scss │ │ │ │ ├── h5.scss │ │ │ │ ├── index.scss │ │ │ │ └── web.scss │ │ ├── mulitple-select-panel │ │ │ └── index.vue │ │ ├── offlinePushInfoManager │ │ │ ├── const.ts │ │ │ ├── index.ts │ │ │ ├── info.ts │ │ │ ├── interface.ts │ │ │ └── offlinePushInfoManager.ts │ │ ├── server.ts │ │ ├── style │ │ │ ├── h5.scss │ │ │ ├── index.scss │ │ │ ├── uni.scss │ │ │ ├── web.scss │ │ │ └── wx.scss │ │ └── utils │ │ │ ├── chatStorage.ts │ │ │ ├── conversationDraft.ts │ │ │ ├── convertVoiceToText.ts │ │ │ ├── copy.ts │ │ │ ├── sendMessage.ts │ │ │ ├── translation.ts │ │ │ ├── utils.ts │ │ │ └── wordsList.ts │ ├── TUIContact │ │ ├── contact-info │ │ │ ├── contact-info-config.ts │ │ │ ├── index.ts │ │ │ ├── index.vue │ │ │ └── style │ │ │ │ ├── h5.scss │ │ │ │ ├── index.scss │ │ │ │ └── web.scss │ │ ├── contact-list │ │ │ ├── contact-list-item │ │ │ │ └── index.vue │ │ │ ├── index.ts │ │ │ ├── index.vue │ │ │ └── style │ │ │ │ ├── h5.scss │ │ │ │ ├── index.scss │ │ │ │ └── web.scss │ │ ├── contact-search │ │ │ ├── index.ts │ │ │ └── index.vue │ │ ├── index.ts │ │ ├── index.vue │ │ ├── select-friend │ │ │ ├── index.ts │ │ │ └── index.vue │ │ ├── server.ts │ │ └── utils │ │ │ └── index.ts │ ├── TUIConversation │ │ ├── actions-menu │ │ │ └── index.vue │ │ ├── conversation-header │ │ │ ├── index.ts │ │ │ ├── index.vue │ │ │ └── server.ts │ │ ├── conversation-list │ │ │ ├── index.vue │ │ │ └── style │ │ │ │ ├── color.scss │ │ │ │ ├── h5.scss │ │ │ │ ├── index.scss │ │ │ │ └── web.scss │ │ ├── conversation-network │ │ │ ├── index.ts │ │ │ └── index.vue │ │ ├── index.ts │ │ ├── index.vue │ │ ├── server.ts │ │ └── style │ │ │ ├── color.scss │ │ │ ├── index.scss │ │ │ └── web.scss │ ├── TUIGroup │ │ ├── create-group │ │ │ ├── group-introduction │ │ │ │ ├── config.ts │ │ │ │ └── index.vue │ │ │ ├── index.ts │ │ │ ├── index.vue │ │ │ └── style │ │ │ │ ├── color.scss │ │ │ │ ├── h5.scss │ │ │ │ ├── index.scss │ │ │ │ └── web.scss │ │ ├── index.ts │ │ ├── index.vue │ │ ├── manage-group │ │ │ ├── index.ts │ │ │ ├── index.vue │ │ │ ├── manage-admin.vue │ │ │ ├── manage-member.vue │ │ │ ├── manage-name.vue │ │ │ ├── manage-notification.vue │ │ │ ├── manage-profile.vue │ │ │ └── style │ │ │ │ ├── color.scss │ │ │ │ ├── h5.scss │ │ │ │ ├── index.scss │ │ │ │ └── web.scss │ │ ├── select-member │ │ │ ├── index.ts │ │ │ └── index.vue │ │ └── server.ts │ ├── TUINotification │ │ ├── index.ts │ │ ├── interface.ts │ │ └── utils.ts │ ├── TUISearch │ │ ├── index.ts │ │ ├── index.vue │ │ ├── search-container │ │ │ ├── index.ts │ │ │ ├── index.vue │ │ │ └── style │ │ │ │ ├── h5.scss │ │ │ │ ├── index.scss │ │ │ │ └── web.scss │ │ ├── search-input │ │ │ ├── index.ts │ │ │ └── index.vue │ │ ├── search-more │ │ │ ├── index.ts │ │ │ └── index.vue │ │ ├── search-result │ │ │ ├── index.ts │ │ │ ├── index.vue │ │ │ ├── search-result-default │ │ │ │ ├── index.ts │ │ │ │ └── index.vue │ │ │ ├── search-result-item │ │ │ │ ├── index.vue │ │ │ │ ├── message-abstract │ │ │ │ │ ├── message-abstract-custom.vue │ │ │ │ │ ├── message-abstract-file.vue │ │ │ │ │ ├── message-abstract-image.vue │ │ │ │ │ ├── message-abstract-text.vue │ │ │ │ │ └── message-abstract-video.vue │ │ │ │ └── style │ │ │ │ │ ├── h5.scss │ │ │ │ │ ├── index.scss │ │ │ │ │ └── web.scss │ │ │ ├── search-result-loading │ │ │ │ ├── index.ts │ │ │ │ └── index.vue │ │ │ └── style │ │ │ │ ├── h5.scss │ │ │ │ ├── index.scss │ │ │ │ └── web.scss │ │ ├── search-time-list.ts │ │ ├── search-type-list.ts │ │ ├── server.ts │ │ ├── style │ │ │ ├── h5.scss │ │ │ ├── index.scss │ │ │ └── web.scss │ │ ├── type.ts │ │ └── utils.ts │ ├── common │ │ ├── Avatar │ │ │ └── index.vue │ │ ├── BottomPopup │ │ │ ├── index.ts │ │ │ ├── index.vue │ │ │ └── style │ │ │ │ ├── h5.scss │ │ │ │ ├── index.scss │ │ │ │ └── modal.scss │ │ ├── DatePicker │ │ │ ├── date-picker-panel.vue │ │ │ ├── date-picker.ts │ │ │ ├── date-table.vue │ │ │ ├── index.ts │ │ │ └── index.vue │ │ ├── Dialog │ │ │ ├── index.ts │ │ │ ├── index.vue │ │ │ └── style │ │ │ │ ├── color.scss │ │ │ │ ├── dialog.scss │ │ │ │ ├── h5.scss │ │ │ │ └── web.scss │ │ ├── Drag │ │ │ ├── index.ts │ │ │ └── index.vue │ │ ├── Drawer │ │ │ └── index.vue │ │ ├── FetchMore │ │ │ └── index.vue │ │ ├── Icon.vue │ │ ├── ImagePreviewer │ │ │ ├── image-item.vue │ │ │ ├── index.ts │ │ │ └── index.vue │ │ ├── Loading │ │ │ ├── index.ts │ │ │ └── index.vue │ │ ├── MaskLayer │ │ │ └── index.vue │ │ ├── Overlay │ │ │ └── index.vue │ │ ├── Popconfirm │ │ │ └── index.vue │ │ ├── ProgressMessage │ │ │ └── index.vue │ │ ├── RadioSelect │ │ │ └── index.vue │ │ ├── SelectUser │ │ │ ├── index.ts │ │ │ └── index.vue │ │ ├── Slider │ │ │ └── index.vue │ │ ├── SwitchBar │ │ │ ├── index.ts │ │ │ └── index.vue │ │ ├── Toast │ │ │ ├── index.ts │ │ │ ├── index.vue │ │ │ └── type.ts │ │ └── Transfer │ │ │ ├── index.ts │ │ │ ├── index.vue │ │ │ └── style │ │ │ ├── color.scss │ │ │ ├── h5.scss │ │ │ ├── transfer.scss │ │ │ └── web.scss │ └── index.ts │ ├── constant.ts │ ├── debug │ ├── GenerateTestUserSig.js │ ├── index.d.ts │ ├── index.js │ └── lib-generate-test-usersig-es.min.js │ ├── excluded-list.txt │ ├── index.ts │ ├── index.vue │ ├── interface.ts │ ├── locales │ ├── en │ │ ├── TUIChat.ts │ │ ├── TUIContact.ts │ │ ├── TUIConversation.ts │ │ ├── TUIGroup.ts │ │ ├── TUISearch.ts │ │ ├── component.ts │ │ ├── emoji.ts │ │ ├── evaluate.ts │ │ ├── index.ts │ │ ├── message.ts │ │ ├── time.ts │ │ └── words.ts │ ├── index.ts │ ├── zh_cn │ │ ├── TUIChat.ts │ │ ├── TUIContact.ts │ │ ├── TUIConversation.ts │ │ ├── TUIGroup.ts │ │ ├── TUISearch.ts │ │ ├── component.ts │ │ ├── emoji.ts │ │ ├── evaluate.ts │ │ ├── index.ts │ │ ├── message.ts │ │ ├── time.ts │ │ ├── translate.ts │ │ └── words.ts │ └── zh_tw │ │ ├── TUIChat.ts │ │ ├── TUIContact.ts │ │ ├── TUIConversation.ts │ │ ├── TUIGroup.ts │ │ ├── TUISearch.ts │ │ ├── component.ts │ │ ├── emoji.ts │ │ ├── evaluate.ts │ │ ├── index.ts │ │ ├── message.ts │ │ ├── time.ts │ │ ├── translate.ts │ │ └── words.ts │ ├── package.json │ ├── plugins │ ├── extension-server │ │ └── callkit.ts │ └── plugin-components │ │ ├── index.ts │ │ ├── message-call │ │ ├── message-call-c2c.vue │ │ └── message-call-group.vue │ │ ├── message-customer │ │ ├── index.ts │ │ └── message-customer-service.vue │ │ ├── message-plugin-layout.vue │ │ ├── message-plugin.vue │ │ └── message-room │ │ ├── message-room-default.vue │ │ └── message-room.vue │ ├── server.ts │ ├── shims-vue.d.ts │ └── utils │ ├── documentLink.ts │ ├── enableSampleTaskStatus.ts │ ├── env.ts │ ├── index.ts │ ├── lodash.ts │ ├── riseInput.ts │ └── type-check.ts └── Vue3 ├── Demo ├── .eslintignore ├── .gitignore ├── README.md ├── README_ZH.md ├── auto-imports.d.ts ├── components.d.ts ├── env.d.ts ├── index.html ├── package.json ├── public │ └── favicon.png ├── src │ ├── App.vue │ ├── TUIKit │ │ ├── .npmignore │ │ ├── .npmrc │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── adapter-vue.ts │ │ ├── assets │ │ │ ├── icon │ │ │ │ ├── add-circle.svg │ │ │ │ ├── add.svg │ │ │ │ ├── at.svg │ │ │ │ ├── audio.svg │ │ │ │ ├── back.svg │ │ │ │ ├── call-video.svg │ │ │ │ ├── call-voice.svg │ │ │ │ ├── call.png │ │ │ │ ├── camera-uni.png │ │ │ │ ├── cancel.svg │ │ │ │ ├── check-sm.svg │ │ │ │ ├── close-dark.svg │ │ │ │ ├── close-image.png │ │ │ │ ├── convertText_en.svg │ │ │ │ ├── convertText_zh.svg │ │ │ │ ├── d-left-arrow.svg │ │ │ │ ├── d-right-arrow.svg │ │ │ │ ├── del-icon.svg │ │ │ │ ├── double-arrow.svg │ │ │ │ ├── down-icon.svg │ │ │ │ ├── downaload-image.png │ │ │ │ ├── download.svg │ │ │ │ ├── edit.svg │ │ │ │ ├── evalute-dark.svg │ │ │ │ ├── evalute-light.svg │ │ │ │ ├── face-dark.svg │ │ │ │ ├── face-light.svg │ │ │ │ ├── face-uni.png │ │ │ │ ├── file-dark.svg │ │ │ │ ├── file-light.svg │ │ │ │ ├── forward-each.svg │ │ │ │ ├── forward-merge.svg │ │ │ │ ├── icon-arrow-left.svg │ │ │ │ ├── icon-c2c.svg │ │ │ │ ├── icon-close.svg │ │ │ │ ├── image-dark.svg │ │ │ │ ├── image-light.svg │ │ │ │ ├── image-uni.png │ │ │ │ ├── input-close.svg │ │ │ │ ├── left-arrow.svg │ │ │ │ ├── loading.gif │ │ │ │ ├── loading.png │ │ │ │ ├── minus.svg │ │ │ │ ├── more-uni.png │ │ │ │ ├── more.png │ │ │ │ ├── msg-audio.svg │ │ │ │ ├── msg-copy.svg │ │ │ │ ├── msg-del.svg │ │ │ │ ├── msg-forward.svg │ │ │ │ ├── msg-quote.svg │ │ │ │ ├── msg-revoke.svg │ │ │ │ ├── multiple-select.svg │ │ │ │ ├── mute.svg │ │ │ │ ├── plus.svg │ │ │ │ ├── radio.svg │ │ │ │ ├── right-arrow.svg │ │ │ │ ├── right-icon.svg │ │ │ │ ├── rotate-left.svg │ │ │ │ ├── rotate-right.svg │ │ │ │ ├── search-default.svg │ │ │ │ ├── search-more.svg │ │ │ │ ├── search.svg │ │ │ │ ├── selected.svg │ │ │ │ ├── setting.svg │ │ │ │ ├── star-light.png │ │ │ │ ├── star.png │ │ │ │ ├── start-group.svg │ │ │ │ ├── translate.svg │ │ │ │ ├── video-dark.svg │ │ │ │ ├── video-light.svg │ │ │ │ ├── video-play.png │ │ │ │ ├── video-uni.png │ │ │ │ ├── words-dark.svg │ │ │ │ ├── words-light.svg │ │ │ │ ├── zoom-in.svg │ │ │ │ └── zoom-out.svg │ │ │ └── styles │ │ │ │ ├── common.scss │ │ │ │ └── sample.scss │ │ ├── components │ │ │ ├── TUIChat │ │ │ │ ├── chat-header │ │ │ │ │ └── index.vue │ │ │ │ ├── config.ts │ │ │ │ ├── emoji-config │ │ │ │ │ ├── custom-emoji.ts │ │ │ │ │ ├── default-emoji.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── locales │ │ │ │ │ │ ├── en.ts │ │ │ │ │ │ ├── zh_cn.ts │ │ │ │ │ │ └── zh_tw.ts │ │ │ │ ├── forward │ │ │ │ │ └── index.vue │ │ │ │ ├── index.ts │ │ │ │ ├── index.vue │ │ │ │ ├── message-input-toolbar │ │ │ │ │ ├── emoji-picker │ │ │ │ │ │ ├── emoji-picker-dialog.vue │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ └── style │ │ │ │ │ │ │ ├── h5.scss │ │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ │ └── web.scss │ │ │ │ │ ├── evaluate │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ └── style │ │ │ │ │ │ │ ├── color.scss │ │ │ │ │ │ │ ├── h5.scss │ │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ │ └── web.scss │ │ │ │ │ ├── file-upload │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── image-upload │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── index.vue │ │ │ │ │ ├── style │ │ │ │ │ │ └── uni.scss │ │ │ │ │ ├── toolbar-item-container │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ └── style │ │ │ │ │ │ │ ├── color.scss │ │ │ │ │ │ │ ├── h5.scss │ │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ │ ├── uni.scss │ │ │ │ │ │ │ └── web.scss │ │ │ │ │ ├── user-selector │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── video-upload │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── index.vue │ │ │ │ │ └── words │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ └── style │ │ │ │ │ │ ├── color.scss │ │ │ │ │ │ ├── h5.scss │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ └── web.scss │ │ │ │ ├── message-input │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── index.vue │ │ │ │ │ ├── message-input-at │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── message-input-button.vue │ │ │ │ │ ├── message-input-editor.vue │ │ │ │ │ ├── message-input-file.ts │ │ │ │ │ └── message-input-quote │ │ │ │ │ │ └── index.vue │ │ │ │ ├── message-list │ │ │ │ │ ├── index.vue │ │ │ │ │ ├── link │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── message-elements │ │ │ │ │ │ ├── message-audio.vue │ │ │ │ │ │ ├── message-bubble.vue │ │ │ │ │ │ ├── message-convert │ │ │ │ │ │ │ ├── convert-content.vue │ │ │ │ │ │ │ └── index.vue │ │ │ │ │ │ ├── message-custom.vue │ │ │ │ │ │ ├── message-face.vue │ │ │ │ │ │ ├── message-file.vue │ │ │ │ │ │ ├── message-image.vue │ │ │ │ │ │ ├── message-location.vue │ │ │ │ │ │ ├── message-quote │ │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ │ └── interface.ts │ │ │ │ │ │ ├── message-record │ │ │ │ │ │ │ └── index.vue │ │ │ │ │ │ ├── message-stream-markdown │ │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ │ ├── marked.ts │ │ │ │ │ │ │ ├── operation │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ │ │ └── type.ts │ │ │ │ │ │ │ └── type-writer.ts │ │ │ │ │ │ ├── message-text.vue │ │ │ │ │ │ ├── message-timestamp.vue │ │ │ │ │ │ ├── message-tip.vue │ │ │ │ │ │ ├── message-translate │ │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ │ └── translation-content.vue │ │ │ │ │ │ ├── message-video.vue │ │ │ │ │ │ ├── read-status │ │ │ │ │ │ │ └── index.vue │ │ │ │ │ │ └── simple-message-list │ │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ │ └── message-container.vue │ │ │ │ │ ├── message-group-application │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── message-tool │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ └── message-revoked.vue │ │ │ │ │ ├── read-receipt-panel │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ └── interface.ts │ │ │ │ │ ├── scroll-button │ │ │ │ │ │ └── index.vue │ │ │ │ │ └── style │ │ │ │ │ │ ├── color.scss │ │ │ │ │ │ ├── h5.scss │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ └── web.scss │ │ │ │ ├── mulitple-select-panel │ │ │ │ │ └── index.vue │ │ │ │ ├── offlinePushInfoManager │ │ │ │ │ ├── const.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── info.ts │ │ │ │ │ ├── interface.ts │ │ │ │ │ └── offlinePushInfoManager.ts │ │ │ │ ├── server.ts │ │ │ │ ├── style │ │ │ │ │ ├── h5.scss │ │ │ │ │ ├── index.scss │ │ │ │ │ ├── uni.scss │ │ │ │ │ ├── web.scss │ │ │ │ │ └── wx.scss │ │ │ │ └── utils │ │ │ │ │ ├── chatStorage.ts │ │ │ │ │ ├── conversationDraft.ts │ │ │ │ │ ├── convertVoiceToText.ts │ │ │ │ │ ├── copy.ts │ │ │ │ │ ├── sendMessage.ts │ │ │ │ │ ├── translation.ts │ │ │ │ │ ├── utils.ts │ │ │ │ │ └── wordsList.ts │ │ │ ├── TUIContact │ │ │ │ ├── contact-info │ │ │ │ │ ├── contact-info-config.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── index.vue │ │ │ │ │ └── style │ │ │ │ │ │ ├── h5.scss │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ └── web.scss │ │ │ │ ├── contact-list │ │ │ │ │ ├── contact-list-item │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── index.vue │ │ │ │ │ └── style │ │ │ │ │ │ ├── h5.scss │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ └── web.scss │ │ │ │ ├── contact-search │ │ │ │ │ ├── index.ts │ │ │ │ │ └── index.vue │ │ │ │ ├── index.ts │ │ │ │ ├── index.vue │ │ │ │ ├── select-friend │ │ │ │ │ ├── index.ts │ │ │ │ │ └── index.vue │ │ │ │ ├── server.ts │ │ │ │ └── utils │ │ │ │ │ └── index.ts │ │ │ ├── TUIConversation │ │ │ │ ├── actions-menu │ │ │ │ │ └── index.vue │ │ │ │ ├── conversation-header │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── index.vue │ │ │ │ │ └── server.ts │ │ │ │ ├── conversation-list │ │ │ │ │ ├── index.vue │ │ │ │ │ └── style │ │ │ │ │ │ ├── color.scss │ │ │ │ │ │ ├── h5.scss │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ └── web.scss │ │ │ │ ├── conversation-network │ │ │ │ │ ├── index.ts │ │ │ │ │ └── index.vue │ │ │ │ ├── index.ts │ │ │ │ ├── index.vue │ │ │ │ ├── server.ts │ │ │ │ └── style │ │ │ │ │ ├── color.scss │ │ │ │ │ ├── index.scss │ │ │ │ │ └── web.scss │ │ │ ├── TUIGroup │ │ │ │ ├── create-group │ │ │ │ │ ├── group-introduction │ │ │ │ │ │ ├── config.ts │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── index.vue │ │ │ │ │ └── style │ │ │ │ │ │ ├── color.scss │ │ │ │ │ │ ├── h5.scss │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ └── web.scss │ │ │ │ ├── index.ts │ │ │ │ ├── index.vue │ │ │ │ ├── manage-group │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── index.vue │ │ │ │ │ ├── manage-admin.vue │ │ │ │ │ ├── manage-member.vue │ │ │ │ │ ├── manage-name.vue │ │ │ │ │ ├── manage-notification.vue │ │ │ │ │ ├── manage-profile.vue │ │ │ │ │ └── style │ │ │ │ │ │ ├── color.scss │ │ │ │ │ │ ├── h5.scss │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ └── web.scss │ │ │ │ ├── select-member │ │ │ │ │ ├── index.ts │ │ │ │ │ └── index.vue │ │ │ │ └── server.ts │ │ │ ├── TUINotification │ │ │ │ ├── index.ts │ │ │ │ ├── interface.ts │ │ │ │ └── utils.ts │ │ │ ├── TUISearch │ │ │ │ ├── index.ts │ │ │ │ ├── index.vue │ │ │ │ ├── search-container │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── index.vue │ │ │ │ │ └── style │ │ │ │ │ │ ├── h5.scss │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ └── web.scss │ │ │ │ ├── search-input │ │ │ │ │ ├── index.ts │ │ │ │ │ └── index.vue │ │ │ │ ├── search-more │ │ │ │ │ ├── index.ts │ │ │ │ │ └── index.vue │ │ │ │ ├── search-result │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── index.vue │ │ │ │ │ ├── search-result-default │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── search-result-item │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ ├── message-abstract │ │ │ │ │ │ │ ├── message-abstract-custom.vue │ │ │ │ │ │ │ ├── message-abstract-file.vue │ │ │ │ │ │ │ ├── message-abstract-image.vue │ │ │ │ │ │ │ ├── message-abstract-text.vue │ │ │ │ │ │ │ └── message-abstract-video.vue │ │ │ │ │ │ └── style │ │ │ │ │ │ │ ├── h5.scss │ │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ │ └── web.scss │ │ │ │ │ ├── search-result-loading │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── index.vue │ │ │ │ │ └── style │ │ │ │ │ │ ├── h5.scss │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ └── web.scss │ │ │ │ ├── search-time-list.ts │ │ │ │ ├── search-type-list.ts │ │ │ │ ├── server.ts │ │ │ │ ├── style │ │ │ │ │ ├── h5.scss │ │ │ │ │ ├── index.scss │ │ │ │ │ └── web.scss │ │ │ │ ├── type.ts │ │ │ │ └── utils.ts │ │ │ ├── common │ │ │ │ ├── Avatar │ │ │ │ │ └── index.vue │ │ │ │ ├── BottomPopup │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── index.vue │ │ │ │ │ └── style │ │ │ │ │ │ ├── h5.scss │ │ │ │ │ │ ├── index.scss │ │ │ │ │ │ └── modal.scss │ │ │ │ ├── DatePicker │ │ │ │ │ ├── date-picker-panel.vue │ │ │ │ │ ├── date-picker.ts │ │ │ │ │ ├── date-table.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ └── index.vue │ │ │ │ ├── Dialog │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── index.vue │ │ │ │ │ └── style │ │ │ │ │ │ ├── color.scss │ │ │ │ │ │ ├── dialog.scss │ │ │ │ │ │ ├── h5.scss │ │ │ │ │ │ └── web.scss │ │ │ │ ├── Drag │ │ │ │ │ ├── index.ts │ │ │ │ │ └── index.vue │ │ │ │ ├── Drawer │ │ │ │ │ └── index.vue │ │ │ │ ├── FetchMore │ │ │ │ │ └── index.vue │ │ │ │ ├── Icon.vue │ │ │ │ ├── ImagePreviewer │ │ │ │ │ ├── image-item.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ └── index.vue │ │ │ │ ├── Loading │ │ │ │ │ ├── index.ts │ │ │ │ │ └── index.vue │ │ │ │ ├── MaskLayer │ │ │ │ │ └── index.vue │ │ │ │ ├── Overlay │ │ │ │ │ └── index.vue │ │ │ │ ├── Popconfirm │ │ │ │ │ └── index.vue │ │ │ │ ├── ProgressMessage │ │ │ │ │ └── index.vue │ │ │ │ ├── RadioSelect │ │ │ │ │ └── index.vue │ │ │ │ ├── SelectUser │ │ │ │ │ ├── index.ts │ │ │ │ │ └── index.vue │ │ │ │ ├── Slider │ │ │ │ │ └── index.vue │ │ │ │ ├── SwitchBar │ │ │ │ │ ├── index.ts │ │ │ │ │ └── index.vue │ │ │ │ ├── Toast │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── index.vue │ │ │ │ │ └── type.ts │ │ │ │ └── Transfer │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── index.vue │ │ │ │ │ └── style │ │ │ │ │ ├── color.scss │ │ │ │ │ ├── h5.scss │ │ │ │ │ ├── transfer.scss │ │ │ │ │ └── web.scss │ │ │ └── index.ts │ │ ├── constant.ts │ │ ├── debug │ │ │ ├── GenerateTestUserSig.js │ │ │ ├── index.d.ts │ │ │ ├── index.js │ │ │ └── lib-generate-test-usersig-es.min.js │ │ ├── index.ts │ │ ├── index.vue │ │ ├── interface.ts │ │ ├── locales │ │ │ ├── en │ │ │ │ ├── TUIChat.ts │ │ │ │ ├── TUIContact.ts │ │ │ │ ├── TUIConversation.ts │ │ │ │ ├── TUIGroup.ts │ │ │ │ ├── TUISearch.ts │ │ │ │ ├── component.ts │ │ │ │ ├── emoji.ts │ │ │ │ ├── evaluate.ts │ │ │ │ ├── index.ts │ │ │ │ ├── message.ts │ │ │ │ ├── time.ts │ │ │ │ └── words.ts │ │ │ ├── index.ts │ │ │ ├── zh_cn │ │ │ │ ├── TUIChat.ts │ │ │ │ ├── TUIContact.ts │ │ │ │ ├── TUIConversation.ts │ │ │ │ ├── TUIGroup.ts │ │ │ │ ├── TUISearch.ts │ │ │ │ ├── component.ts │ │ │ │ ├── emoji.ts │ │ │ │ ├── evaluate.ts │ │ │ │ ├── index.ts │ │ │ │ ├── message.ts │ │ │ │ ├── time.ts │ │ │ │ ├── translate.ts │ │ │ │ └── words.ts │ │ │ └── zh_tw │ │ │ │ ├── TUIChat.ts │ │ │ │ ├── TUIContact.ts │ │ │ │ ├── TUIConversation.ts │ │ │ │ ├── TUIGroup.ts │ │ │ │ ├── TUISearch.ts │ │ │ │ ├── component.ts │ │ │ │ ├── emoji.ts │ │ │ │ ├── evaluate.ts │ │ │ │ ├── index.ts │ │ │ │ ├── message.ts │ │ │ │ ├── time.ts │ │ │ │ ├── translate.ts │ │ │ │ └── words.ts │ │ ├── plugins │ │ │ ├── extension-server │ │ │ │ └── callkit.ts │ │ │ └── plugin-components │ │ │ │ ├── index.ts │ │ │ │ ├── message-call │ │ │ │ ├── message-call-c2c.vue │ │ │ │ └── message-call-group.vue │ │ │ │ ├── message-customer │ │ │ │ ├── index.ts │ │ │ │ └── message-customer-service.vue │ │ │ │ ├── message-plugin-layout.vue │ │ │ │ ├── message-plugin.vue │ │ │ │ └── message-room │ │ │ │ ├── message-room-default.vue │ │ │ │ └── message-room.vue │ │ ├── server.ts │ │ ├── shims-vue.d.ts │ │ └── utils │ │ │ ├── documentLink.ts │ │ │ ├── enableSampleTaskStatus.ts │ │ │ ├── env.ts │ │ │ ├── index.ts │ │ │ ├── lodash.ts │ │ │ ├── riseInput.ts │ │ │ └── type-check.ts │ ├── api │ │ └── index.ts │ ├── assets │ │ ├── icon │ │ │ ├── adv-arrow.svg │ │ │ ├── arrow-down-line.png │ │ │ ├── arrow-down.png │ │ │ ├── calendar.svg │ │ │ ├── global.png │ │ │ ├── menu.png │ │ │ ├── message-real.svg │ │ │ ├── message-selected.svg │ │ │ ├── message.svg │ │ │ ├── profile-selected.svg │ │ │ ├── profile.svg │ │ │ ├── relation-real.svg │ │ │ ├── relation-selected.svg │ │ │ ├── relation.svg │ │ │ └── setting.png │ │ └── image │ │ │ ├── adv-background.svg │ │ │ ├── adv-bg.svg │ │ │ ├── create-group.png │ │ │ ├── h5 │ │ │ ├── adv-im.svg │ │ │ ├── adv-more.svg │ │ │ └── login-bg.png │ │ │ ├── login-background.png │ │ │ ├── logo.svg │ │ │ ├── txc-logo.svg │ │ │ └── warn.svg │ ├── components │ │ ├── About.vue │ │ ├── AdvList.vue │ │ ├── AdvListItem.vue │ │ ├── ChatDefaultContent.vue │ │ ├── EditProfile.vue │ │ ├── EditProfilePopup.vue │ │ ├── Header.vue │ │ ├── Menu.vue │ │ └── NavBar.vue │ ├── locales │ │ ├── en │ │ │ ├── home.json │ │ │ ├── index.ts │ │ │ ├── login.json │ │ │ └── profile.json │ │ ├── index.ts │ │ ├── zh_cn │ │ │ ├── home.json │ │ │ ├── index.ts │ │ │ ├── login.json │ │ │ └── profile.json │ │ └── zh_tw │ │ │ ├── home.json │ │ │ ├── index.ts │ │ │ ├── login.json │ │ │ └── profile.json │ ├── main.ts │ ├── router │ │ └── index.ts │ ├── shims-vue.d.ts │ ├── styles │ │ ├── common.scss │ │ ├── h5 │ │ │ ├── home.scss │ │ │ ├── login.scss │ │ │ └── profile.scss │ │ ├── home.scss │ │ ├── login.scss │ │ ├── profile.scss │ │ └── web │ │ │ ├── home.scss │ │ │ ├── login.scss │ │ │ └── profile.scss │ ├── utils │ │ └── link.ts │ └── views │ │ ├── Home.vue │ │ ├── Login.vue │ │ └── Profile.vue ├── tsconfig.json ├── tsconfig.node.json └── vite.config.ts └── TUIKit ├── .eslintignore ├── .eslintrc.js ├── .github └── README.md ├── .gitignore ├── .npmignore ├── CHANGELOG.md ├── README.md ├── adapter-vue.ts ├── assets ├── icon │ ├── add-circle.svg │ ├── add.svg │ ├── at.svg │ ├── audio.svg │ ├── back.svg │ ├── call-video.svg │ ├── call-voice.svg │ ├── call.png │ ├── camera-uni.png │ ├── cancel.svg │ ├── check-sm.svg │ ├── close-dark.svg │ ├── close-image.png │ ├── convertText_en.svg │ ├── convertText_zh.svg │ ├── d-left-arrow.svg │ ├── d-right-arrow.svg │ ├── del-icon.svg │ ├── double-arrow.svg │ ├── down-icon.svg │ ├── downaload-image.png │ ├── download.svg │ ├── edit.svg │ ├── evalute-dark.svg │ ├── evalute-light.svg │ ├── face-dark.svg │ ├── face-light.svg │ ├── face-uni.png │ ├── file-dark.svg │ ├── file-light.svg │ ├── forward-each.svg │ ├── forward-merge.svg │ ├── icon-arrow-left.svg │ ├── icon-c2c.svg │ ├── icon-close.svg │ ├── image-dark.svg │ ├── image-light.svg │ ├── image-uni.png │ ├── input-close.svg │ ├── left-arrow.svg │ ├── loading.gif │ ├── loading.png │ ├── minus.svg │ ├── more-uni.png │ ├── more.png │ ├── msg-audio.svg │ ├── msg-copy.svg │ ├── msg-del.svg │ ├── msg-forward.svg │ ├── msg-quote.svg │ ├── msg-revoke.svg │ ├── multiple-select.svg │ ├── mute.svg │ ├── plus.svg │ ├── radio.svg │ ├── right-arrow.svg │ ├── right-icon.svg │ ├── rotate-left.svg │ ├── rotate-right.svg │ ├── search-default.svg │ ├── search-more.svg │ ├── search.svg │ ├── selected.svg │ ├── setting.svg │ ├── star-light.png │ ├── star.png │ ├── start-group.svg │ ├── translate.svg │ ├── video-dark.svg │ ├── video-light.svg │ ├── video-play.png │ ├── video-uni.png │ ├── words-dark.svg │ ├── words-light.svg │ ├── zoom-in.svg │ └── zoom-out.svg └── styles │ ├── common.scss │ └── sample.scss ├── components ├── TUIChat │ ├── chat-header │ │ └── index.vue │ ├── config.ts │ ├── emoji-config │ │ ├── custom-emoji.ts │ │ ├── default-emoji.ts │ │ ├── index.ts │ │ └── locales │ │ │ ├── en.ts │ │ │ ├── zh_cn.ts │ │ │ └── zh_tw.ts │ ├── forward │ │ └── index.vue │ ├── index.ts │ ├── index.vue │ ├── message-input-toolbar │ │ ├── emoji-picker │ │ │ ├── emoji-picker-dialog.vue │ │ │ ├── index.ts │ │ │ ├── index.vue │ │ │ └── style │ │ │ │ ├── h5.scss │ │ │ │ ├── index.scss │ │ │ │ └── web.scss │ │ ├── evaluate │ │ │ ├── index.ts │ │ │ ├── index.vue │ │ │ └── style │ │ │ │ ├── color.scss │ │ │ │ ├── h5.scss │ │ │ │ ├── index.scss │ │ │ │ └── web.scss │ │ ├── file-upload │ │ │ ├── index.ts │ │ │ └── index.vue │ │ ├── image-upload │ │ │ ├── index.ts │ │ │ └── index.vue │ │ ├── index.ts │ │ ├── index.vue │ │ ├── style │ │ │ └── uni.scss │ │ ├── toolbar-item-container │ │ │ ├── index.vue │ │ │ └── style │ │ │ │ ├── color.scss │ │ │ │ ├── h5.scss │ │ │ │ ├── index.scss │ │ │ │ ├── uni.scss │ │ │ │ └── web.scss │ │ ├── user-selector │ │ │ ├── index.ts │ │ │ └── index.vue │ │ ├── video-upload │ │ │ ├── index.ts │ │ │ └── index.vue │ │ └── words │ │ │ ├── index.ts │ │ │ ├── index.vue │ │ │ └── style │ │ │ ├── color.scss │ │ │ ├── h5.scss │ │ │ ├── index.scss │ │ │ └── web.scss │ ├── message-input │ │ ├── index.ts │ │ ├── index.vue │ │ ├── message-input-at │ │ │ ├── index.ts │ │ │ └── index.vue │ │ ├── message-input-button.vue │ │ ├── message-input-editor.vue │ │ ├── message-input-file.ts │ │ └── message-input-quote │ │ │ └── index.vue │ ├── message-list │ │ ├── index.vue │ │ ├── link │ │ │ └── index.ts │ │ ├── message-elements │ │ │ ├── message-audio.vue │ │ │ ├── message-bubble.vue │ │ │ ├── message-convert │ │ │ │ ├── convert-content.vue │ │ │ │ └── index.vue │ │ │ ├── message-custom.vue │ │ │ ├── message-face.vue │ │ │ ├── message-file.vue │ │ │ ├── message-image.vue │ │ │ ├── message-location.vue │ │ │ ├── message-quote │ │ │ │ ├── index.vue │ │ │ │ └── interface.ts │ │ │ ├── message-record │ │ │ │ └── index.vue │ │ │ ├── message-stream-markdown │ │ │ │ ├── index.scss │ │ │ │ ├── index.ts │ │ │ │ ├── index.vue │ │ │ │ ├── marked.ts │ │ │ │ ├── operation │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── index.vue │ │ │ │ │ └── type.ts │ │ │ │ └── type-writer.ts │ │ │ ├── message-text.vue │ │ │ ├── message-timestamp.vue │ │ │ ├── message-tip.vue │ │ │ ├── message-translate │ │ │ │ ├── index.vue │ │ │ │ └── translation-content.vue │ │ │ ├── message-video.vue │ │ │ ├── read-status │ │ │ │ └── index.vue │ │ │ └── simple-message-list │ │ │ │ ├── index.vue │ │ │ │ └── message-container.vue │ │ ├── message-group-application │ │ │ └── index.vue │ │ ├── message-tool │ │ │ ├── index.vue │ │ │ └── message-revoked.vue │ │ ├── read-receipt-panel │ │ │ ├── index.vue │ │ │ └── interface.ts │ │ ├── scroll-button │ │ │ └── index.vue │ │ └── style │ │ │ ├── color.scss │ │ │ ├── h5.scss │ │ │ ├── index.scss │ │ │ └── web.scss │ ├── mulitple-select-panel │ │ └── index.vue │ ├── offlinePushInfoManager │ │ ├── const.ts │ │ ├── index.ts │ │ ├── info.ts │ │ ├── interface.ts │ │ └── offlinePushInfoManager.ts │ ├── server.ts │ ├── style │ │ ├── h5.scss │ │ ├── index.scss │ │ ├── uni.scss │ │ ├── web.scss │ │ └── wx.scss │ └── utils │ │ ├── chatStorage.ts │ │ ├── conversationDraft.ts │ │ ├── convertVoiceToText.ts │ │ ├── copy.ts │ │ ├── sendMessage.ts │ │ ├── translation.ts │ │ ├── utils.ts │ │ └── wordsList.ts ├── TUIContact │ ├── contact-info │ │ ├── contact-info-config.ts │ │ ├── index.ts │ │ ├── index.vue │ │ └── style │ │ │ ├── h5.scss │ │ │ ├── index.scss │ │ │ └── web.scss │ ├── contact-list │ │ ├── contact-list-item │ │ │ └── index.vue │ │ ├── index.ts │ │ ├── index.vue │ │ └── style │ │ │ ├── h5.scss │ │ │ ├── index.scss │ │ │ └── web.scss │ ├── contact-search │ │ ├── index.ts │ │ └── index.vue │ ├── index.ts │ ├── index.vue │ ├── select-friend │ │ ├── index.ts │ │ └── index.vue │ ├── server.ts │ └── utils │ │ └── index.ts ├── TUIConversation │ ├── actions-menu │ │ └── index.vue │ ├── conversation-header │ │ ├── index.ts │ │ ├── index.vue │ │ └── server.ts │ ├── conversation-list │ │ ├── index.vue │ │ └── style │ │ │ ├── color.scss │ │ │ ├── h5.scss │ │ │ ├── index.scss │ │ │ └── web.scss │ ├── conversation-network │ │ ├── index.ts │ │ └── index.vue │ ├── index.ts │ ├── index.vue │ ├── server.ts │ └── style │ │ ├── color.scss │ │ ├── index.scss │ │ └── web.scss ├── TUIGroup │ ├── create-group │ │ ├── group-introduction │ │ │ ├── config.ts │ │ │ └── index.vue │ │ ├── index.ts │ │ ├── index.vue │ │ └── style │ │ │ ├── color.scss │ │ │ ├── h5.scss │ │ │ ├── index.scss │ │ │ └── web.scss │ ├── index.ts │ ├── index.vue │ ├── manage-group │ │ ├── index.ts │ │ ├── index.vue │ │ ├── manage-admin.vue │ │ ├── manage-member.vue │ │ ├── manage-name.vue │ │ ├── manage-notification.vue │ │ ├── manage-profile.vue │ │ └── style │ │ │ ├── color.scss │ │ │ ├── h5.scss │ │ │ ├── index.scss │ │ │ └── web.scss │ ├── select-member │ │ ├── index.ts │ │ └── index.vue │ └── server.ts ├── TUINotification │ ├── index.ts │ ├── interface.ts │ └── utils.ts ├── TUISearch │ ├── index.ts │ ├── index.vue │ ├── search-container │ │ ├── index.ts │ │ ├── index.vue │ │ └── style │ │ │ ├── h5.scss │ │ │ ├── index.scss │ │ │ └── web.scss │ ├── search-input │ │ ├── index.ts │ │ └── index.vue │ ├── search-more │ │ ├── index.ts │ │ └── index.vue │ ├── search-result │ │ ├── index.ts │ │ ├── index.vue │ │ ├── search-result-default │ │ │ ├── index.ts │ │ │ └── index.vue │ │ ├── search-result-item │ │ │ ├── index.vue │ │ │ ├── message-abstract │ │ │ │ ├── message-abstract-custom.vue │ │ │ │ ├── message-abstract-file.vue │ │ │ │ ├── message-abstract-image.vue │ │ │ │ ├── message-abstract-text.vue │ │ │ │ └── message-abstract-video.vue │ │ │ └── style │ │ │ │ ├── h5.scss │ │ │ │ ├── index.scss │ │ │ │ └── web.scss │ │ ├── search-result-loading │ │ │ ├── index.ts │ │ │ └── index.vue │ │ └── style │ │ │ ├── h5.scss │ │ │ ├── index.scss │ │ │ └── web.scss │ ├── search-time-list.ts │ ├── search-type-list.ts │ ├── server.ts │ ├── style │ │ ├── h5.scss │ │ ├── index.scss │ │ └── web.scss │ ├── type.ts │ └── utils.ts ├── common │ ├── Avatar │ │ └── index.vue │ ├── BottomPopup │ │ ├── index.ts │ │ ├── index.vue │ │ └── style │ │ │ ├── h5.scss │ │ │ ├── index.scss │ │ │ └── modal.scss │ ├── DatePicker │ │ ├── date-picker-panel.vue │ │ ├── date-picker.ts │ │ ├── date-table.vue │ │ ├── index.ts │ │ └── index.vue │ ├── Dialog │ │ ├── index.ts │ │ ├── index.vue │ │ └── style │ │ │ ├── color.scss │ │ │ ├── dialog.scss │ │ │ ├── h5.scss │ │ │ └── web.scss │ ├── Drag │ │ ├── index.ts │ │ └── index.vue │ ├── Drawer │ │ └── index.vue │ ├── FetchMore │ │ └── index.vue │ ├── Icon.vue │ ├── ImagePreviewer │ │ ├── image-item.vue │ │ ├── index.ts │ │ └── index.vue │ ├── Loading │ │ ├── index.ts │ │ └── index.vue │ ├── MaskLayer │ │ └── index.vue │ ├── Overlay │ │ └── index.vue │ ├── Popconfirm │ │ └── index.vue │ ├── ProgressMessage │ │ └── index.vue │ ├── RadioSelect │ │ └── index.vue │ ├── SelectUser │ │ ├── index.ts │ │ └── index.vue │ ├── Slider │ │ └── index.vue │ ├── SwitchBar │ │ ├── index.ts │ │ └── index.vue │ ├── Toast │ │ ├── index.ts │ │ ├── index.vue │ │ └── type.ts │ └── Transfer │ │ ├── index.ts │ │ ├── index.vue │ │ └── style │ │ ├── color.scss │ │ ├── h5.scss │ │ ├── transfer.scss │ │ └── web.scss └── index.ts ├── constant.ts ├── debug ├── GenerateTestUserSig.js ├── index.d.ts ├── index.js └── lib-generate-test-usersig-es.min.js ├── excluded-list.txt ├── index.ts ├── index.vue ├── interface.ts ├── locales ├── en │ ├── TUIChat.ts │ ├── TUIContact.ts │ ├── TUIConversation.ts │ ├── TUIGroup.ts │ ├── TUISearch.ts │ ├── component.ts │ ├── emoji.ts │ ├── evaluate.ts │ ├── index.ts │ ├── message.ts │ ├── time.ts │ └── words.ts ├── index.ts ├── zh_cn │ ├── TUIChat.ts │ ├── TUIContact.ts │ ├── TUIConversation.ts │ ├── TUIGroup.ts │ ├── TUISearch.ts │ ├── component.ts │ ├── emoji.ts │ ├── evaluate.ts │ ├── index.ts │ ├── message.ts │ ├── time.ts │ ├── translate.ts │ └── words.ts └── zh_tw │ ├── TUIChat.ts │ ├── TUIContact.ts │ ├── TUIConversation.ts │ ├── TUIGroup.ts │ ├── TUISearch.ts │ ├── component.ts │ ├── emoji.ts │ ├── evaluate.ts │ ├── index.ts │ ├── message.ts │ ├── time.ts │ ├── translate.ts │ └── words.ts ├── package.json ├── plugins ├── extension-server │ └── callkit.ts └── plugin-components │ ├── index.ts │ ├── message-call │ ├── message-call-c2c.vue │ └── message-call-group.vue │ ├── message-customer │ ├── index.ts │ └── message-customer-service.vue │ ├── message-plugin-layout.vue │ ├── message-plugin.vue │ └── message-room │ ├── message-room-default.vue │ └── message-room.vue ├── server.ts ├── shims-vue.d.ts └── utils ├── documentLink.ts ├── enableSampleTaskStatus.ts ├── env.ts ├── index.ts ├── lodash.ts ├── riseInput.ts └── type-check.ts /Vue2/Demo/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | 5 | 6 | # local env files 7 | .env.local 8 | .env.*.local 9 | 10 | # Log files 11 | npm-debug.log* 12 | yarn-debug.log* 13 | yarn-error.log* 14 | pnpm-debug.log* 15 | 16 | # Editor directories and files 17 | .idea 18 | .vscode 19 | *.suo 20 | *.ntvs* 21 | *.njsproj 22 | *.sln 23 | *.sw? 24 | -------------------------------------------------------------------------------- /Vue2/Demo/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | '@vue/cli-plugin-babel/preset' 4 | ], 5 | "plugins": [ 6 | [ 7 | "component", 8 | { 9 | "libraryName": "element-ui", 10 | "styleLibraryName": "theme-chalk" 11 | } 12 | ] 13 | ] 14 | } 15 | 16 | -------------------------------------------------------------------------------- /Vue2/Demo/public/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue2/Demo/public/favicon.png -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/.npmignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | package-lock.json 3 | pnpm-lock.yaml 4 | dist 5 | **/dist/ -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/.npmrc: -------------------------------------------------------------------------------- 1 | auto-install-peers=true 2 | strict-peer-dependencies=false 3 | # shamefully-hoist=true -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/assets/icon/call.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue2/Demo/src/TUIKit/assets/icon/call.png -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/assets/icon/camera-uni.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue2/Demo/src/TUIKit/assets/icon/camera-uni.png -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/assets/icon/close-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue2/Demo/src/TUIKit/assets/icon/close-image.png -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/assets/icon/convertText_en.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/assets/icon/d-right-arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 5 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/assets/icon/down-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/assets/icon/downaload-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue2/Demo/src/TUIKit/assets/icon/downaload-image.png -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/assets/icon/face-uni.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue2/Demo/src/TUIKit/assets/icon/face-uni.png -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/assets/icon/image-uni.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue2/Demo/src/TUIKit/assets/icon/image-uni.png -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/assets/icon/input-close.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/assets/icon/left-arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 6 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/assets/icon/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue2/Demo/src/TUIKit/assets/icon/loading.gif -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/assets/icon/loading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue2/Demo/src/TUIKit/assets/icon/loading.png -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/assets/icon/minus.svg: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/assets/icon/more-uni.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue2/Demo/src/TUIKit/assets/icon/more-uni.png -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/assets/icon/more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue2/Demo/src/TUIKit/assets/icon/more.png -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/assets/icon/plus.svg: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/assets/icon/right-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/assets/icon/star-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue2/Demo/src/TUIKit/assets/icon/star-light.png -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/assets/icon/star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue2/Demo/src/TUIKit/assets/icon/star.png -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/assets/icon/video-play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue2/Demo/src/TUIKit/assets/icon/video-play.png -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/assets/icon/video-uni.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue2/Demo/src/TUIKit/assets/icon/video-uni.png -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIChat/emoji-config/custom-emoji.ts: -------------------------------------------------------------------------------- 1 | import { IEmojiGroupList } from '../../../interface'; 2 | 3 | /** 4 | * Custom big emoji 5 | */ 6 | export const CUSTOM_BIG_EMOJI_URL: string = ''; 7 | 8 | export const CUSTOM_BIG_EMOJI_GROUP_LIST: IEmojiGroupList = []; 9 | 10 | /** 11 | * Custom basic emoji 12 | */ 13 | export const CUSTOM_BASIC_EMOJI_URL: string = ''; 14 | 15 | export const CUSTOM_BASIC_EMOJI_URL_MAPPING: Record = {}; 16 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIChat/index.ts: -------------------------------------------------------------------------------- 1 | import TUIChat from './index.vue'; 2 | import Server from './server'; 3 | 4 | new Server(); 5 | 6 | export default TUIChat; 7 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIChat/message-input-toolbar/emoji-picker/index.ts: -------------------------------------------------------------------------------- 1 | import EmojiPicker from './index.vue'; 2 | export default EmojiPicker; 3 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIChat/message-input-toolbar/emoji-picker/style/h5.scss: -------------------------------------------------------------------------------- 1 | .emoji-picker-h5 { 2 | width: 100%; 3 | 4 | &-list { 5 | justify-content: space-between; 6 | } 7 | 8 | &-list::after { 9 | content: ""; 10 | display: block; 11 | flex: 1 1 auto; 12 | } 13 | 14 | .send-btn { 15 | width: 50px; 16 | height: 30px; 17 | background-color: #55C06A; 18 | position: absolute; 19 | right: 10px; 20 | font-size: 16px; 21 | color: #fff; 22 | text-align: center; 23 | line-height: 30px; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIChat/message-input-toolbar/emoji-picker/style/index.scss: -------------------------------------------------------------------------------- 1 | @import "../../../../../assets/styles/common"; 2 | @import "./web"; 3 | @import "./h5"; 4 | 5 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIChat/message-input-toolbar/evaluate/index.ts: -------------------------------------------------------------------------------- 1 | import Evaluate from './index.vue'; 2 | export default Evaluate; 3 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIChat/message-input-toolbar/evaluate/style/index.scss: -------------------------------------------------------------------------------- 1 | @import "./color"; 2 | @import "./web"; 3 | @import "./h5"; 4 | @import "../../../../../assets/styles/common"; 5 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIChat/message-input-toolbar/file-upload/index.ts: -------------------------------------------------------------------------------- 1 | import ImageUpload from './index.vue'; 2 | export default ImageUpload; 3 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIChat/message-input-toolbar/image-upload/index.ts: -------------------------------------------------------------------------------- 1 | import ImageUpload from './index.vue'; 2 | export default ImageUpload; 3 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIChat/message-input-toolbar/index.ts: -------------------------------------------------------------------------------- 1 | import MessageInputToolbar from './index.vue'; 2 | export default MessageInputToolbar; 3 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIChat/message-input-toolbar/toolbar-item-container/style/color.scss: -------------------------------------------------------------------------------- 1 | .toolbar-item-container { 2 | &-dialog { 3 | background: #fff; 4 | box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIChat/message-input-toolbar/toolbar-item-container/style/h5.scss: -------------------------------------------------------------------------------- 1 | .toolbar-item-container-h5 { 2 | &-dialog { 3 | position: static !important; 4 | width: 100%; 5 | box-shadow: none; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIChat/message-input-toolbar/toolbar-item-container/style/index.scss: -------------------------------------------------------------------------------- 1 | @import "../../../../../assets/styles/common"; 2 | @import "./color"; 3 | @import "./web"; 4 | @import "./h5"; 5 | @import "./uni"; 6 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIChat/message-input-toolbar/user-selector/index.ts: -------------------------------------------------------------------------------- 1 | import UserSelector from './index.vue'; 2 | export default UserSelector; 3 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIChat/message-input-toolbar/video-upload/index.ts: -------------------------------------------------------------------------------- 1 | import ImageUpload from './index.vue'; 2 | export default ImageUpload; 3 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIChat/message-input-toolbar/words/index.ts: -------------------------------------------------------------------------------- 1 | import Words from "./index.vue"; 2 | export default Words; 3 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIChat/message-input-toolbar/words/style/color.scss: -------------------------------------------------------------------------------- 1 | .words { 2 | background-color: #ffffff; 3 | &-header { 4 | &-close { 5 | color: #3370ff; 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIChat/message-input-toolbar/words/style/index.scss: -------------------------------------------------------------------------------- 1 | @import url("../../../../../assets/styles/common.scss"); 2 | @import "./color.scss"; 3 | @import "./web.scss"; 4 | @import "./h5.scss"; 5 | 6 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIChat/message-input/index.ts: -------------------------------------------------------------------------------- 1 | import MessageInput from './index.vue'; 2 | export default MessageInput; 3 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIChat/message-list/message-elements/message-stream-markdown/index.ts: -------------------------------------------------------------------------------- 1 | import { IMessageModel } from '@tencentcloud/chat-uikit-engine'; 2 | 3 | export function isBotMessage(message: IMessageModel): boolean { 4 | if (!message || !message.ID || !message.from) { 5 | return false; 6 | } 7 | 8 | if (message.from.startsWith('@RBT#') && !message.to.startsWith('@RBT#')) { 9 | return true; 10 | } 11 | 12 | return false; 13 | } 14 | 15 | export * from './index.vue'; 16 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIChat/message-list/message-elements/message-stream-markdown/operation/index.ts: -------------------------------------------------------------------------------- 1 | export * from './index.vue'; 2 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIChat/message-list/message-elements/message-stream-markdown/operation/type.ts: -------------------------------------------------------------------------------- 1 | /** type & interface */ 2 | export enum IOperationType { 3 | Copy = 'copy', 4 | // Retry is not supported now 5 | // Retry = 'retry', 6 | } 7 | export interface IOperation { 8 | key: IOperationType; 9 | name: string; 10 | icon: string; 11 | isDisabled: boolean; 12 | onClick: (e: Event, key: IOperationType) => void; 13 | } 14 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIChat/message-list/style/color.scss: -------------------------------------------------------------------------------- 1 | .tui-chat { 2 | .tui-message-list { 3 | .message-more { 4 | color: #999; 5 | cursor: pointer; 6 | } 7 | } 8 | 9 | .image-dialog { 10 | background: rgba(0, 0, 0, 0.6); 11 | 12 | header { 13 | background: rgba(0,0,0,0.49); 14 | } 15 | } 16 | } 17 | 18 | .tui-chat-h5 { 19 | .tui-chat-header { 20 | background: #FFF; 21 | } 22 | 23 | .tui-chat-footer { 24 | background: #FFF; 25 | 26 | .input { 27 | input { 28 | background: #F4F5F9; 29 | } 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIChat/message-list/style/h5.scss: -------------------------------------------------------------------------------- 1 | .tui-chat-h5 { 2 | flex: 1; 3 | position: static; 4 | 5 | .tui-chat-main { 6 | .tui-message-list { 7 | height: 100%; 8 | } 9 | 10 | .message-more { 11 | color: #999; 12 | cursor: pointer; 13 | font-size: 14px; 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIChat/message-list/style/index.scss: -------------------------------------------------------------------------------- 1 | @import "../../../../assets/styles/common"; 2 | @import "./color"; 3 | @import "./web"; 4 | @import "./h5"; 5 | 6 | :not(not) { 7 | display: flex; 8 | flex-direction: column; 9 | box-sizing: border-box; 10 | min-width: 0; 11 | } 12 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIChat/offlinePushInfoManager/index.ts: -------------------------------------------------------------------------------- 1 | import OfflinePushInfoManager from './offlinePushInfoManager'; 2 | 3 | export * from './const'; 4 | export * from './interface'; 5 | 6 | export default OfflinePushInfoManager.getInstance(); 7 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIChat/offlinePushInfoManager/info.ts: -------------------------------------------------------------------------------- 1 | import { IChatOfflinePushInfo, ICallOfflinePushInfo } from './interface'; 2 | 3 | export const chatOfflinePushInfo: IChatOfflinePushInfo = { 4 | androidInfo: {}, 5 | apnsInfo: {}, 6 | }; 7 | 8 | export const callOfflinePushInfo: ICallOfflinePushInfo = {}; 9 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIChat/style/index.scss: -------------------------------------------------------------------------------- 1 | @import '../../../assets/styles/common'; 2 | @import './web'; 3 | @import './h5'; 4 | @import './uni'; 5 | @import './wx'; 6 | 7 | :not(not) { 8 | display: flex; 9 | flex-direction: column; 10 | box-sizing: border-box; 11 | min-width: 0; 12 | } 13 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIChat/style/uni.scss: -------------------------------------------------------------------------------- 1 | .tui-chat-uni { 2 | &-message-input { 3 | max-height: 370px; 4 | padding: 10px; 5 | } 6 | 7 | &-message-input-toolbar { 8 | z-index: 100; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIChat/style/wx.scss: -------------------------------------------------------------------------------- 1 | .tui-chat-wx { 2 | &-message-input { 3 | padding: 0; 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIChat/utils/wordsList.ts: -------------------------------------------------------------------------------- 1 | export const wordsList = [ 2 | { 3 | value: '在吗?在吗?在吗?重要的话说三遍。', 4 | }, 5 | { 6 | value: '好久没聊天了,快来和我说说话~', 7 | }, 8 | { 9 | value: '好的,就这么说定了。', 10 | }, 11 | { 12 | value: '感恩的心,感谢有你。', 13 | }, 14 | { 15 | value: '糟糕!是心动的感觉!', 16 | }, 17 | { 18 | value: '心疼地抱抱自己,我太难了!', 19 | }, 20 | { 21 | value: '没关系,别在意,事情过去就过去了。', 22 | }, 23 | { 24 | value: '早上好,今天也是让人期待的一天呢!', 25 | }, 26 | { 27 | value: '熬夜有什么用,又没人陪你聊天,早点休息吧。', 28 | }, 29 | ]; 30 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIContact/contact-info/index.ts: -------------------------------------------------------------------------------- 1 | import ContactInfo from './index.vue'; 2 | 3 | export default ContactInfo; 4 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIContact/contact-info/style/index.scss: -------------------------------------------------------------------------------- 1 | @import "./web"; 2 | @import "./h5"; 3 | @import "../../../../assets/styles/common"; 4 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIContact/contact-list/index.ts: -------------------------------------------------------------------------------- 1 | import ContactList from './index.vue'; 2 | 3 | export default ContactList; 4 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIContact/contact-list/style/h5.scss: -------------------------------------------------------------------------------- 1 | .tui-contact-list-h5 { 2 | .tui-contact-list-item { 3 | .tui-contact-list-item-header { 4 | cursor: none; 5 | } 6 | 7 | .tui-contact-list-item-header:active, 8 | .tui-contact-list-item-main-item:active { 9 | background-color: #eef0f3; 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIContact/contact-list/style/index.scss: -------------------------------------------------------------------------------- 1 | @import './web'; 2 | @import './h5'; 3 | @import '../../../../assets/styles/common'; 4 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIContact/contact-search/index.ts: -------------------------------------------------------------------------------- 1 | import ContactHeader from './index.vue'; 2 | export default ContactHeader; 3 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIContact/index.ts: -------------------------------------------------------------------------------- 1 | import TUIContact from './index.vue'; 2 | import Server from './server'; 3 | Server.getInstance(); 4 | 5 | export default TUIContact; 6 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIContact/select-friend/index.ts: -------------------------------------------------------------------------------- 1 | import SelectFriend from './index.vue'; 2 | 3 | export default SelectFriend; 4 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIConversation/conversation-header/index.ts: -------------------------------------------------------------------------------- 1 | import ConversationHeader from './index.vue'; 2 | 3 | export default ConversationHeader; 4 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIConversation/conversation-list/style/index.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../assets/styles/common'; 2 | @import './color'; 3 | @import './web'; 4 | @import './h5'; 5 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIConversation/conversation-network/index.ts: -------------------------------------------------------------------------------- 1 | import ConversationNetwork from './index.vue'; 2 | 3 | export default ConversationNetwork; 4 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIConversation/index.ts: -------------------------------------------------------------------------------- 1 | import TUIConversation from "./index.vue"; 2 | import TUIConversationServer from "./server"; 3 | new TUIConversationServer(); 4 | 5 | export default TUIConversation; 6 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIConversation/style/color.scss: -------------------------------------------------------------------------------- 1 | .tui-conversation { 2 | background: #fff; 3 | } 4 | 5 | .network { 6 | &-content { 7 | font-family: PingFangSC-Regular; 8 | font-weight: 400; 9 | color: #e54545; 10 | letter-spacing: 0; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIConversation/style/index.scss: -------------------------------------------------------------------------------- 1 | @import '../../../assets/styles/common'; 2 | @import './web'; 3 | @import './color'; 4 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIGroup/create-group/index.ts: -------------------------------------------------------------------------------- 1 | import CreateGroup from './index.vue'; 2 | 3 | export default CreateGroup; 4 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIGroup/create-group/style/index.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../assets/styles/common'; 2 | @import './color'; 3 | @import './web'; 4 | @import './h5'; 5 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIGroup/index.ts: -------------------------------------------------------------------------------- 1 | import TUIGroup from './index.vue'; 2 | import Server from './server'; 3 | 4 | Server.getInstance(); 5 | 6 | export default TUIGroup; 7 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIGroup/manage-group/index.ts: -------------------------------------------------------------------------------- 1 | import ManageGroup from './index.vue'; 2 | 3 | export default ManageGroup; 4 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIGroup/manage-group/style/h5.scss: -------------------------------------------------------------------------------- 1 | .deleted-dialog { 2 | padding: 20%; 3 | } 4 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUIGroup/select-member/index.ts: -------------------------------------------------------------------------------- 1 | import SelectMember from './index.vue'; 2 | 3 | export default SelectMember; 4 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUINotification/interface.ts: -------------------------------------------------------------------------------- 1 | export interface ITUINotification { 2 | showPreviews: boolean; 3 | allowNotifications: boolean; 4 | notificationTitle: string; 5 | notificationIcon: string; 6 | } 7 | 8 | export interface INotificationConstructorParams { 9 | showPreviews?: boolean; 10 | allowNotifications?: boolean; 11 | notificationTitle?: string; 12 | notificationIcon?: string; 13 | } 14 | 15 | export type NotificationType = 'chat' | 'call'; 16 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUISearch/index.ts: -------------------------------------------------------------------------------- 1 | import TUISearch from './index.vue'; 2 | import Server from './server'; 3 | new Server(); 4 | 5 | export default TUISearch; 6 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUISearch/search-container/index.ts: -------------------------------------------------------------------------------- 1 | import SearchContainer from './index.vue'; 2 | export default SearchContainer; 3 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUISearch/search-container/style/index.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../assets/styles/common'; 2 | @import './web'; 3 | @import './h5'; 4 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUISearch/search-input/index.ts: -------------------------------------------------------------------------------- 1 | import SearchInput from './index.vue'; 2 | export default SearchInput; 3 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUISearch/search-more/index.ts: -------------------------------------------------------------------------------- 1 | import SearchMore from './index.vue'; 2 | 3 | export default SearchMore; 4 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUISearch/search-result/index.ts: -------------------------------------------------------------------------------- 1 | import SearchResult from './index.vue'; 2 | export default SearchResult; 3 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUISearch/search-result/search-result-default/index.ts: -------------------------------------------------------------------------------- 1 | import SearchResultDefault from './index.vue'; 2 | export default SearchResultDefault; 3 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUISearch/search-result/search-result-item/style/h5.scss: -------------------------------------------------------------------------------- 1 | .search-result-list-item-h5 { 2 | padding: 10px 0; 3 | border-radius: 0; 4 | 5 | .bubble { 6 | .bubble-left { 7 | .bubble-left-avatar { 8 | width: 48px; 9 | height: 48px; 10 | } 11 | 12 | .bubble-main { 13 | .bubble-main-name { 14 | color: #333; 15 | font-family: "PingFang SC", sans-serif; 16 | font-size: 14px; 17 | font-weight: 400; 18 | letter-spacing: 0; 19 | text-align: left; 20 | } 21 | } 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUISearch/search-result/search-result-item/style/index.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../../assets/styles/common'; 2 | @import './web'; 3 | @import './h5'; 4 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUISearch/search-result/search-result-loading/index.ts: -------------------------------------------------------------------------------- 1 | import SearchResultLoading from './index.vue'; 2 | export default SearchResultLoading; 3 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUISearch/search-result/style/index.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../assets/styles/common'; 2 | @import './web'; 3 | @import './h5'; 4 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUISearch/style/index.scss: -------------------------------------------------------------------------------- 1 | @import '../../../assets/styles/common'; 2 | @import './web'; 3 | @import './h5'; 4 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/TUISearch/style/web.scss: -------------------------------------------------------------------------------- 1 | .tui-search { 2 | &-main-global { 3 | width: 100%; 4 | height: fit-content; 5 | } 6 | 7 | &-main-conversation { 8 | width: 100%; 9 | height: 100%; 10 | background: #fff; 11 | box-shadow: 0 1px 10px 0 rgba(2,16,43,0.15); 12 | } 13 | 14 | .tui-search-global { 15 | &-header { 16 | display: flex; 17 | flex-direction: row; 18 | justify-content: center; 19 | align-items: center; 20 | } 21 | } 22 | 23 | .tui-search-conversation { 24 | width: 100%; 25 | height: 100%; 26 | overflow: hidden; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/common/BottomPopup/index.ts: -------------------------------------------------------------------------------- 1 | import BottomPopup from './index.vue'; 2 | 3 | export default BottomPopup; 4 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/common/BottomPopup/style/index.scss: -------------------------------------------------------------------------------- 1 | @import "../../../../assets/styles/common"; 2 | @import "./h5"; 3 | @import "./modal"; 4 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/common/BottomPopup/style/modal.scss: -------------------------------------------------------------------------------- 1 | .bottom-popup-modal { 2 | background: rgba(0, 0, 0, 0.5); 3 | } 4 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/common/DatePicker/date-picker.ts: -------------------------------------------------------------------------------- 1 | import { Dayjs } from 'dayjs'; 2 | 3 | export type DateCellType = 4 | | 'normal' 5 | | 'today' 6 | | 'week' 7 | | 'next-month' 8 | | 'prev-month'; 9 | export interface DateCell { 10 | text?: number; 11 | disabled?: boolean; 12 | isSelected?: boolean; 13 | isSelectedStart?: boolean; 14 | isSelectedEnd?: boolean; 15 | isInRange?: boolean; 16 | isCurrent?: boolean; 17 | date: typeof Dayjs; 18 | type?: DateCellType; 19 | } 20 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/common/DatePicker/index.ts: -------------------------------------------------------------------------------- 1 | import DatePicker from './index.vue'; 2 | export default DatePicker; 3 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/common/Dialog/index.ts: -------------------------------------------------------------------------------- 1 | import Dialog from './index.vue'; 2 | 3 | export default Dialog; 4 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/common/Dialog/style/dialog.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../assets/styles/common'; 2 | @import "./color"; 3 | @import "./web"; 4 | @import "./h5"; 5 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/common/Drag/index.ts: -------------------------------------------------------------------------------- 1 | import Drag from './index.vue'; 2 | export default Drag; 3 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/common/ImagePreviewer/index.ts: -------------------------------------------------------------------------------- 1 | import ImagePreviewer from './index.vue'; 2 | 3 | export default ImagePreviewer; 4 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/common/Loading/index.ts: -------------------------------------------------------------------------------- 1 | import Loading from './index.vue'; 2 | export default Loading; 3 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/common/SelectUser/index.ts: -------------------------------------------------------------------------------- 1 | import SelectUser from './index.vue'; 2 | 3 | export default SelectUser; 4 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/common/SwitchBar/index.ts: -------------------------------------------------------------------------------- 1 | import SwitchBar from './index.vue'; 2 | export default SwitchBar; 3 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/common/Toast/type.ts: -------------------------------------------------------------------------------- 1 | const TOAST_TYPE = { 2 | SUCCESS: 'success', 3 | WARNING: 'warning', 4 | ERROR: 'error', 5 | NORMAL: 'normal', 6 | }; 7 | 8 | export default TOAST_TYPE; 9 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/common/Transfer/index.ts: -------------------------------------------------------------------------------- 1 | import Transfer from './index.vue'; 2 | export default Transfer; 3 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/common/Transfer/style/transfer.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../assets/styles/common'; 2 | @import "./color"; 3 | @import "./web"; 4 | @import "./h5"; 5 | 6 | .icon-unselected { 7 | width: 18px; 8 | height: 18px; 9 | background: #FFF; 10 | border: 1px solid #DDD; 11 | border-radius: 11px; 12 | box-sizing: border-box; 13 | } 14 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/components/index.ts: -------------------------------------------------------------------------------- 1 | import TUIChat from "./TUIChat"; 2 | import TUIConversation from "./TUIConversation"; 3 | import TUISearch from "./TUISearch"; 4 | import TUIContact from "./TUIContact"; 5 | import TUIGroup from "./TUIGroup"; 6 | 7 | const TUIComponents = { 8 | TUIChat, 9 | TUIConversation, 10 | TUIContact, 11 | TUISearch, 12 | TUIGroup 13 | }; 14 | 15 | export default TUIComponents; 16 | 17 | export { 18 | TUIChat, 19 | TUIConversation, 20 | TUIContact, 21 | TUISearch, 22 | TUIGroup, 23 | }; 24 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/debug/index.d.ts: -------------------------------------------------------------------------------- 1 | export function genTestUserSig({ SDKAppID: number, secretKey: string, userID: string }): any; 2 | export const EXPIRETIME: number; 3 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/debug/index.js: -------------------------------------------------------------------------------- 1 | export * from "./GenerateTestUserSig"; 2 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/index.ts: -------------------------------------------------------------------------------- 1 | import { genTestUserSig } from './debug'; 2 | import Server from './server'; 3 | import TUIComponents, { 4 | TUIChat, 5 | TUIConversation, 6 | TUIContact, 7 | TUISearch, 8 | TUIGroup, 9 | } from './components'; 10 | import TUIKit from './index.vue'; 11 | import { hideTUIChatFeatures } from './components/TUIChat/config'; 12 | 13 | const TUIChatKit = new Server(); 14 | TUIChatKit.init(); 15 | 16 | export { 17 | TUIKit, 18 | TUIChatKit, 19 | TUIComponents, 20 | TUIChat, 21 | TUIConversation, 22 | TUIContact, 23 | TUISearch, 24 | TUIGroup, 25 | hideTUIChatFeatures, 26 | genTestUserSig, 27 | }; 28 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/locales/en/component.ts: -------------------------------------------------------------------------------- 1 | const component = { 2 | "取消": "Cancel", 3 | "完成": "Done", 4 | "已选中": "Selected", 5 | "人": "", 6 | "保存": "Save", 7 | "请输入userID": "Enter a userID", 8 | "请输入groupID": "Enter a groupID", 9 | "确定": "submit", 10 | "全选": "All", 11 | "已在群聊中": "exists", 12 | "查看更多": "More", 13 | "图片 url 不存在": "Image url does not exist", 14 | "已取消": "Cancelled", 15 | "获取权限失败": "Failed to obtain permission", 16 | "已保存至相册": "Saved to album", 17 | "图片下载失败": "Image download failed", 18 | "暂不支持下载此类型图片": "Downloading this type of pictures is not supported yet", 19 | } 20 | 21 | export default component; 22 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/locales/en/emoji.ts: -------------------------------------------------------------------------------- 1 | import { default as Emoji } from '../../components/TUIChat/emoji-config/locales/en'; 2 | export default Emoji; 3 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/locales/en/evaluate.ts: -------------------------------------------------------------------------------- 1 | const Evaluate = { 2 | "请对本次服务进行评价": "Please rate this service", 3 | "提交评价": "Feedback", 4 | "服务评价工具": "Service rate tool", 5 | "使用": "Build with", 6 | "自定义消息": "Custom message", 7 | "搭建": "", 8 | "星": "Star" 9 | } 10 | 11 | export default Evaluate; 12 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/locales/index.ts: -------------------------------------------------------------------------------- 1 | 2 | import en from './en'; 3 | import zh_cn from './zh_cn'; 4 | import zh_tw from './zh_tw'; 5 | 6 | export interface ILanguageResources { 7 | [key: string]: string | ILanguageResources; 8 | } 9 | 10 | const messages: Record = { 11 | ...en, 12 | ...zh_cn, 13 | ...zh_tw, 14 | }; 15 | 16 | export default messages; 17 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/locales/zh_cn/TUIConversation.ts: -------------------------------------------------------------------------------- 1 | const TUIConversation = { 2 | "发起会话": "发起会话", 3 | "发起单聊": "发起单聊", 4 | "发起群聊": "发起群聊", 5 | "请输入userID": "请输入userID", 6 | "删除会话": "删除会话", 7 | "删除后,将清空该聊天的消息记录": "删除后,将清空该聊天的消息记录", 8 | "删除后,将清空该群聊的消息记录": "删除后,将清空该群聊的消息记录", 9 | "置顶会话": "置顶会话", 10 | "取消置顶": "取消置顶", 11 | "消息免打扰": "消息免打扰", 12 | "取消免打扰": "取消免打扰", 13 | "系统通知": "系统通知", 14 | "有人@我": "有人@我", 15 | "@所有人": "@所有人", 16 | "条": "条", 17 | "我": "我", 18 | "网络异常,请您检查网络设置": "网络异常,请您检查网络设置", 19 | "您已被群管理员移出群聊": "您已被群管理员移出群聊", 20 | "该群聊已被解散": "该群聊已被解散", 21 | "您已退出该群聊": "您已退出该群聊", 22 | } 23 | 24 | export default TUIConversation; 25 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/locales/zh_cn/component.ts: -------------------------------------------------------------------------------- 1 | const components = { 2 | "取消": "取消", 3 | "完成": "完成", 4 | "已选中": "已选中", 5 | "人": "人", 6 | "保存": "保存", 7 | "请输入userID": "请输入userID", 8 | "请输入groupID": "请输入groupID", 9 | "确定": "确定", 10 | "全选": "全选", 11 | "已在群聊中": "已在群聊中", 12 | "查看更多": "查看更多", 13 | "图片 url 不存在": "图片 url 不存在", 14 | "已取消": "已取消", 15 | "获取权限失败": "获取权限失败", 16 | "已保存至相册": "已保存至相册", 17 | "图片下载失败": "图片下载失败", 18 | "暂不支持下载此类型图片": "暂不支持下载此类型图片", 19 | } 20 | 21 | export default components; 22 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/locales/zh_cn/emoji.ts: -------------------------------------------------------------------------------- 1 | import { default as Emoji } from '../../components/TUIChat/emoji-config/locales/zh_cn'; 2 | export default Emoji; 3 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/locales/zh_cn/evaluate.ts: -------------------------------------------------------------------------------- 1 | const Evaluate = { 2 | "请对本次服务进行评价": "请对本次服务进行评价", 3 | "提交评价": "提交评价", 4 | "服务评价工具": "服务评价工具", 5 | "使用": "使用", 6 | "自定义消息": "自定义消息", 7 | "搭建": "搭建", 8 | "星": "星" 9 | } 10 | 11 | export default Evaluate; 12 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/locales/zh_cn/words.ts: -------------------------------------------------------------------------------- 1 | const Words = { 2 | "常用语-快捷回复工具": "常用语-快捷回复工具", 3 | "在吗?在吗?在吗?重要的话说三遍。": "在吗?在吗?在吗?重要的话说三遍。", 4 | "好久没聊天了,快来和我说说话~": "好久没聊天了,快来和我说说话~", 5 | "好的,就这么说定了。": "好的,就这么说定了。", 6 | "感恩的心,感谢有你。": "感恩的心,感谢有你。", 7 | "糟糕!是心动的感觉!": "糟糕!是心动的感觉!", 8 | "心疼地抱抱自己,我太难了!": "心疼地抱抱自己,我太难了!", 9 | "没关系,别在意,事情过去就过去了。": "没关系,别在意,事情过去就过去了。", 10 | "早上好,今天也是让人期待的一天呢!": "早上好,今天也是让人期待的一天呢!", 11 | "熬夜有什么用,又没人陪你聊天,早点休息吧。": "熬夜有什么用,又没人陪你聊天,早点休息吧。" 12 | } 13 | 14 | export default Words; 15 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/locales/zh_tw/TUIConversation.ts: -------------------------------------------------------------------------------- 1 | const TUIConversation = { 2 | "发起会话": "發起會話", 3 | "发起单聊": "發起單聊", 4 | "发起群聊": "發起群聊", 5 | "请输入userID": "請輸入userID", 6 | "删除会话": "刪除會話", 7 | "删除后,将清空该聊天的消息记录": "刪除後,將清空該聊天的消息記錄", 8 | "删除后,将清空该群聊的消息记录": "刪除後,將清空該群聊的消息記錄", 9 | "置顶会话": "置頂會話", 10 | "取消置顶": "取消置頂", 11 | "消息免打扰": "消息免打擾", 12 | "取消免打扰": "取消免打擾", 13 | "系统通知": "系統通知", 14 | "有人@我": "有人@我", 15 | "@所有人": "@所有人", 16 | "条": "條", 17 | "我": "我", 18 | "网络异常,请您检查网络设置": "網絡異常,請您檢查網絡設置", 19 | "您已被群管理员移出群聊": "您已被群管理員移出群聊", 20 | "该群聊已被解散": "該群聊已被解散", 21 | "您已退出该群聊": "您已退出該群聊", 22 | } 23 | 24 | export default TUIConversation; 25 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/locales/zh_tw/component.ts: -------------------------------------------------------------------------------- 1 | const components = { 2 | "取消": "取消", 3 | "完成": "完成", 4 | "已选中": "已選中", 5 | "人": "人", 6 | "保存": "保存", 7 | "请输入userID": "請輸入userID", 8 | "请输入groupID": "請輸入groupID", 9 | "确定": "確定", 10 | "全选": "全選", 11 | "已在群聊中": "已在群聊中", 12 | "查看更多": "查看更多", 13 | "图片 url 不存在": "圖片 url 不存在", 14 | "已取消": "已取消", 15 | "获取权限失败": "獲取權限失敗", 16 | "已保存至相册": "已保存至相冊", 17 | "图片下载失败": "圖片下載失敗", 18 | "暂不支持下载此类型图片": "暫不支持下載此類型圖片", 19 | }; 20 | 21 | export default components; 22 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/locales/zh_tw/emoji.ts: -------------------------------------------------------------------------------- 1 | import { default as Emoji } from '../../components/TUIChat/emoji-config/locales/zh_tw'; 2 | export default Emoji; 3 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/locales/zh_tw/evaluate.ts: -------------------------------------------------------------------------------- 1 | const Evaluate = { 2 | "请对本次服务进行评价": "請對本次服務進行評價", 3 | "提交评价": "提交評價", 4 | "服务评价工具": "服務評價工具", 5 | "使用": "使用", 6 | "自定义消息": "自定義消息", 7 | "搭建": "搭建", 8 | "星": "星" 9 | } 10 | 11 | export default Evaluate; 12 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/locales/zh_tw/words.ts: -------------------------------------------------------------------------------- 1 | const Words = { 2 | "常用语-快捷回复工具": "常用語-快捷回覆工具", 3 | "在吗?在吗?在吗?重要的话说三遍。": "在嗎?在嗎?在嗎?重要的話說三遍。", 4 | "好久没聊天了,快来和我说说话~": "好久沒聊天了,快來和我說說話~", 5 | "好的,就这么说定了。": "好的,就這麼說定了。", 6 | "感恩的心,感谢有你。": "感恩的心,感謝有你。", 7 | "糟糕!是心动的感觉!": "糟糕!是心動的感覺!", 8 | "心疼地抱抱自己,我太难了!": "心疼地抱抱自己,我太難了!", 9 | "没关系,别在意,事情过去就过去了。": "沒關係,別在意,事情過去就過去了。", 10 | "早上好,今天也是让人期待的一天呢!": "早上好,今天也是讓人期待的一天呢!", 11 | "熬夜有什么用,又没人陪你聊天,早点休息吧。": "熬夜有什麼用,又沒人陪你聊天,早點休息吧。" 12 | } 13 | 14 | export default Words; 15 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/plugins/extension-server/callkit.ts: -------------------------------------------------------------------------------- 1 | export default class CallkitPluginServer {} 2 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/plugins/plugin-components/message-customer/index.ts: -------------------------------------------------------------------------------- 1 | import { 2 | isCustomerServicePluginMessage, 3 | isMessageInvisible as isCustomServiceMessageInvisible, 4 | } from '@tencentcloud/tui-customer-service-plugin'; 5 | export { isCustomerServicePluginMessage, isCustomServiceMessageInvisible }; 6 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/plugins/plugin-components/message-customer/message-customer-service.vue: -------------------------------------------------------------------------------- 1 | 4 | 14 | 17 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/utils/enableSampleTaskStatus.ts: -------------------------------------------------------------------------------- 1 | import { TUIStore, StoreName } from "@tencentcloud/chat-uikit-engine"; 2 | export function enableSampleTaskStatus(taskKey: string) { 3 | const tasks = TUIStore.getData(StoreName.APP, "tasks"); 4 | if (taskKey in tasks && !tasks[taskKey]) { 5 | tasks[taskKey] = true; 6 | TUIStore.update(StoreName.APP, "tasks", tasks); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/utils/env.ts: -------------------------------------------------------------------------------- 1 | import { getPlatform } from '@tencentcloud/universal-api'; 2 | 3 | declare const uni: any; 4 | 5 | export const isPC = getPlatform() === 'pc'; 6 | 7 | export const isH5 = getPlatform() === 'h5'; 8 | 9 | export const isWeChat = getPlatform() === 'wechat'; 10 | 11 | export const isApp = getPlatform() === 'app'; 12 | 13 | export const isUniFrameWork = typeof uni !== 'undefined'; 14 | 15 | // H5, mini programs, and apps are all considered mobile. 16 | // If you need to unify the mobile UI style, you can directly use isMobile to control 17 | export const isMobile = isH5 || isWeChat || isApp; 18 | -------------------------------------------------------------------------------- /Vue2/Demo/src/TUIKit/utils/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./type-check"; 2 | -------------------------------------------------------------------------------- /Vue2/Demo/src/assets/icon/arrow-down-line.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue2/Demo/src/assets/icon/arrow-down-line.png -------------------------------------------------------------------------------- /Vue2/Demo/src/assets/icon/arrow-down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue2/Demo/src/assets/icon/arrow-down.png -------------------------------------------------------------------------------- /Vue2/Demo/src/assets/icon/calendar.svg: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | -------------------------------------------------------------------------------- /Vue2/Demo/src/assets/icon/global.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue2/Demo/src/assets/icon/global.png -------------------------------------------------------------------------------- /Vue2/Demo/src/assets/icon/menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue2/Demo/src/assets/icon/menu.png -------------------------------------------------------------------------------- /Vue2/Demo/src/assets/icon/setting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue2/Demo/src/assets/icon/setting.png -------------------------------------------------------------------------------- /Vue2/Demo/src/assets/image/create-group.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue2/Demo/src/assets/image/create-group.png -------------------------------------------------------------------------------- /Vue2/Demo/src/assets/image/h5/login-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue2/Demo/src/assets/image/h5/login-bg.png -------------------------------------------------------------------------------- /Vue2/Demo/src/assets/image/login-background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue2/Demo/src/assets/image/login-background.png -------------------------------------------------------------------------------- /Vue2/Demo/src/locales/en/index.ts: -------------------------------------------------------------------------------- 1 | import Login from './login.json' 2 | import Home from './home.json' 3 | import Profile from './profile.json' 4 | 5 | const messages = { 6 | en: { 7 | 当前语言: 'English', 8 | 即时通信: 'Chat', 9 | 即时通信IM: 'Chat', 10 | 社交娱乐: 'Entertaining & Socializing', 11 | 腾讯云: 'Tencent Cloud', 12 | 使用指引: 'User Guide', 13 | Login, 14 | Home, 15 | Profile 16 | } 17 | } 18 | 19 | export default messages 20 | -------------------------------------------------------------------------------- /Vue2/Demo/src/locales/zh_cn/index.ts: -------------------------------------------------------------------------------- 1 | import Login from './login.json'; 2 | import Home from './home.json'; 3 | import Profile from './profile.json'; 4 | 5 | const messages = { 6 | zh_cn: { 7 | 当前语言: '简体中文', 8 | 即时通信: '即时通信', 9 | 即时通信IM: '即时通信IM', 10 | 社交娱乐: '社交娱乐', 11 | 腾讯云: '腾讯云', 12 | 使用指引: '使用指引', 13 | Login, 14 | Home, 15 | Profile 16 | }, 17 | }; 18 | 19 | export default messages; 20 | -------------------------------------------------------------------------------- /Vue2/Demo/src/locales/zh_tw/index.ts: -------------------------------------------------------------------------------- 1 | import Login from './login.json'; 2 | import Home from './home.json'; 3 | import Profile from './profile.json'; 4 | 5 | const messages = { 6 | zh_tw: { 7 | 当前语言: '繁體中文', 8 | 即时通信: '即時通信', 9 | 即时通信IM: '即時通信IM', 10 | 社交娱乐: '社交娛樂', 11 | 腾讯云: '騰訊雲', 12 | 使用指引: '使用指引', 13 | Login, 14 | Home, 15 | Profile, 16 | }, 17 | }; 18 | 19 | export default messages; 20 | -------------------------------------------------------------------------------- /Vue2/Demo/src/shims-tsx.d.ts: -------------------------------------------------------------------------------- 1 | import Vue, { VNode } from 'vue' 2 | 3 | declare global { 4 | namespace JSX { 5 | interface Element extends VNode {} 6 | interface ElementClass extends Vue {} 7 | interface IntrinsicElements { 8 | [elem: string]: any 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Vue2/Demo/src/shims-vue.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.vue' { 2 | import Vue from 'vue' 3 | export default Vue 4 | } 5 | 6 | declare module '*.svg' { 7 | const content: any; 8 | export default content; 9 | } -------------------------------------------------------------------------------- /Vue2/Demo/src/store/index.ts: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Vuex from 'vuex' 3 | 4 | Vue.use(Vuex) 5 | 6 | export default new Vuex.Store({ 7 | state: { 8 | }, 9 | getters: { 10 | }, 11 | mutations: { 12 | }, 13 | actions: { 14 | }, 15 | modules: { 16 | } 17 | }) 18 | -------------------------------------------------------------------------------- /Vue2/Demo/src/styles/home.scss: -------------------------------------------------------------------------------- 1 | @import './web/home.scss'; 2 | @import './h5/home.scss'; 3 | @import "./common.scss"; 4 | -------------------------------------------------------------------------------- /Vue2/Demo/src/styles/login.scss: -------------------------------------------------------------------------------- 1 | @import "./web/login.scss"; 2 | @import "./h5/login.scss"; 3 | @import "./common.scss"; 4 | -------------------------------------------------------------------------------- /Vue2/Demo/src/styles/profile.scss: -------------------------------------------------------------------------------- 1 | @import "./web/profile.scss"; 2 | @import "./h5/profile.scss"; 3 | @import "./common.scss"; -------------------------------------------------------------------------------- /Vue2/Demo/vue.config.js: -------------------------------------------------------------------------------- 1 | const { defineConfig } = require("@vue/cli-service"); 2 | module.exports = defineConfig({ 3 | lintOnSave: false, 4 | publicPath: "./", 5 | chainWebpack: (config) => { 6 | config.plugin("html").tap((args) => { 7 | args[0].title = "腾讯云即时通信 Web-IM"; 8 | return args; 9 | }); 10 | }, 11 | transpileDependencies: true, 12 | devServer: { 13 | client: { 14 | overlay: false, 15 | }, 16 | }, 17 | }); 18 | -------------------------------------------------------------------------------- /Vue2/TUIKit/.eslintignore: -------------------------------------------------------------------------------- 1 | * 2 | -------------------------------------------------------------------------------- /Vue2/TUIKit/.npmignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | package-lock.json 3 | pnpm-lock.yaml 4 | dist 5 | **/dist/ -------------------------------------------------------------------------------- /Vue2/TUIKit/.npmrc: -------------------------------------------------------------------------------- 1 | auto-install-peers=true 2 | strict-peer-dependencies=false 3 | # shamefully-hoist=true -------------------------------------------------------------------------------- /Vue2/TUIKit/assets/icon/call.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue2/TUIKit/assets/icon/call.png -------------------------------------------------------------------------------- /Vue2/TUIKit/assets/icon/camera-uni.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue2/TUIKit/assets/icon/camera-uni.png -------------------------------------------------------------------------------- /Vue2/TUIKit/assets/icon/close-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue2/TUIKit/assets/icon/close-image.png -------------------------------------------------------------------------------- /Vue2/TUIKit/assets/icon/convertText_en.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Vue2/TUIKit/assets/icon/d-right-arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 5 | -------------------------------------------------------------------------------- /Vue2/TUIKit/assets/icon/down-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /Vue2/TUIKit/assets/icon/downaload-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue2/TUIKit/assets/icon/downaload-image.png -------------------------------------------------------------------------------- /Vue2/TUIKit/assets/icon/face-dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Vue2/TUIKit/assets/icon/face-uni.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue2/TUIKit/assets/icon/face-uni.png -------------------------------------------------------------------------------- /Vue2/TUIKit/assets/icon/image-uni.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue2/TUIKit/assets/icon/image-uni.png -------------------------------------------------------------------------------- /Vue2/TUIKit/assets/icon/input-close.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Vue2/TUIKit/assets/icon/left-arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 6 | -------------------------------------------------------------------------------- /Vue2/TUIKit/assets/icon/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue2/TUIKit/assets/icon/loading.gif -------------------------------------------------------------------------------- /Vue2/TUIKit/assets/icon/loading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue2/TUIKit/assets/icon/loading.png -------------------------------------------------------------------------------- /Vue2/TUIKit/assets/icon/minus.svg: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /Vue2/TUIKit/assets/icon/more-uni.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue2/TUIKit/assets/icon/more-uni.png -------------------------------------------------------------------------------- /Vue2/TUIKit/assets/icon/more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue2/TUIKit/assets/icon/more.png -------------------------------------------------------------------------------- /Vue2/TUIKit/assets/icon/plus.svg: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | -------------------------------------------------------------------------------- /Vue2/TUIKit/assets/icon/right-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /Vue2/TUIKit/assets/icon/star-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue2/TUIKit/assets/icon/star-light.png -------------------------------------------------------------------------------- /Vue2/TUIKit/assets/icon/star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue2/TUIKit/assets/icon/star.png -------------------------------------------------------------------------------- /Vue2/TUIKit/assets/icon/video-dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /Vue2/TUIKit/assets/icon/video-play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue2/TUIKit/assets/icon/video-play.png -------------------------------------------------------------------------------- /Vue2/TUIKit/assets/icon/video-uni.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue2/TUIKit/assets/icon/video-uni.png -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIChat/emoji-config/custom-emoji.ts: -------------------------------------------------------------------------------- 1 | import { IEmojiGroupList } from '../../../interface'; 2 | 3 | /** 4 | * Custom big emoji 5 | */ 6 | export const CUSTOM_BIG_EMOJI_URL: string = ''; 7 | 8 | export const CUSTOM_BIG_EMOJI_GROUP_LIST: IEmojiGroupList = []; 9 | 10 | /** 11 | * Custom basic emoji 12 | */ 13 | export const CUSTOM_BASIC_EMOJI_URL: string = ''; 14 | 15 | export const CUSTOM_BASIC_EMOJI_URL_MAPPING: Record = {}; 16 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIChat/index.ts: -------------------------------------------------------------------------------- 1 | import TUIChat from './index.vue'; 2 | import Server from './server'; 3 | 4 | new Server(); 5 | 6 | export default TUIChat; 7 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIChat/message-input-toolbar/emoji-picker/index.ts: -------------------------------------------------------------------------------- 1 | import EmojiPicker from './index.vue'; 2 | export default EmojiPicker; 3 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIChat/message-input-toolbar/emoji-picker/style/h5.scss: -------------------------------------------------------------------------------- 1 | .emoji-picker-h5 { 2 | width: 100%; 3 | 4 | &-list { 5 | justify-content: space-between; 6 | } 7 | 8 | &-list::after { 9 | content: ""; 10 | display: block; 11 | flex: 1 1 auto; 12 | } 13 | 14 | .send-btn { 15 | width: 50px; 16 | height: 30px; 17 | background-color: #55C06A; 18 | position: absolute; 19 | right: 10px; 20 | font-size: 16px; 21 | color: #fff; 22 | text-align: center; 23 | line-height: 30px; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIChat/message-input-toolbar/emoji-picker/style/index.scss: -------------------------------------------------------------------------------- 1 | @import "../../../../../assets/styles/common"; 2 | @import "./web"; 3 | @import "./h5"; 4 | 5 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIChat/message-input-toolbar/evaluate/index.ts: -------------------------------------------------------------------------------- 1 | import Evaluate from './index.vue'; 2 | export default Evaluate; 3 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIChat/message-input-toolbar/evaluate/style/index.scss: -------------------------------------------------------------------------------- 1 | @import "./color"; 2 | @import "./web"; 3 | @import "./h5"; 4 | @import "../../../../../assets/styles/common"; 5 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIChat/message-input-toolbar/file-upload/index.ts: -------------------------------------------------------------------------------- 1 | import ImageUpload from './index.vue'; 2 | export default ImageUpload; 3 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIChat/message-input-toolbar/image-upload/index.ts: -------------------------------------------------------------------------------- 1 | import ImageUpload from './index.vue'; 2 | export default ImageUpload; 3 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIChat/message-input-toolbar/index.ts: -------------------------------------------------------------------------------- 1 | import MessageInputToolbar from './index.vue'; 2 | export default MessageInputToolbar; 3 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIChat/message-input-toolbar/toolbar-item-container/style/color.scss: -------------------------------------------------------------------------------- 1 | .toolbar-item-container { 2 | &-dialog { 3 | background: #fff; 4 | box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIChat/message-input-toolbar/toolbar-item-container/style/h5.scss: -------------------------------------------------------------------------------- 1 | .toolbar-item-container-h5 { 2 | &-dialog { 3 | position: static !important; 4 | width: 100%; 5 | box-shadow: none; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIChat/message-input-toolbar/toolbar-item-container/style/index.scss: -------------------------------------------------------------------------------- 1 | @import "../../../../../assets/styles/common"; 2 | @import "./color"; 3 | @import "./web"; 4 | @import "./h5"; 5 | @import "./uni"; 6 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIChat/message-input-toolbar/user-selector/index.ts: -------------------------------------------------------------------------------- 1 | import UserSelector from './index.vue'; 2 | export default UserSelector; 3 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIChat/message-input-toolbar/video-upload/index.ts: -------------------------------------------------------------------------------- 1 | import ImageUpload from './index.vue'; 2 | export default ImageUpload; 3 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIChat/message-input-toolbar/words/index.ts: -------------------------------------------------------------------------------- 1 | import Words from "./index.vue"; 2 | export default Words; 3 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIChat/message-input-toolbar/words/style/color.scss: -------------------------------------------------------------------------------- 1 | .words { 2 | background-color: #ffffff; 3 | &-header { 4 | &-close { 5 | color: #3370ff; 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIChat/message-input-toolbar/words/style/index.scss: -------------------------------------------------------------------------------- 1 | @import url("../../../../../assets/styles/common.scss"); 2 | @import "./color.scss"; 3 | @import "./web.scss"; 4 | @import "./h5.scss"; 5 | 6 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIChat/message-input/index.ts: -------------------------------------------------------------------------------- 1 | import MessageInput from './index.vue'; 2 | export default MessageInput; 3 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIChat/message-list/message-elements/message-stream-markdown/index.ts: -------------------------------------------------------------------------------- 1 | import { IMessageModel } from '@tencentcloud/chat-uikit-engine'; 2 | 3 | export function isBotMessage(message: IMessageModel): boolean { 4 | if (!message || !message.ID || !message.from) { 5 | return false; 6 | } 7 | 8 | if (message.from.startsWith('@RBT#') && !message.to.startsWith('@RBT#')) { 9 | return true; 10 | } 11 | 12 | return false; 13 | } 14 | 15 | export * from './index.vue'; 16 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIChat/message-list/message-elements/message-stream-markdown/operation/index.ts: -------------------------------------------------------------------------------- 1 | export * from './index.vue'; 2 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIChat/message-list/message-elements/message-stream-markdown/operation/type.ts: -------------------------------------------------------------------------------- 1 | /** type & interface */ 2 | export enum IOperationType { 3 | Copy = 'copy', 4 | // Retry is not supported now 5 | // Retry = 'retry', 6 | } 7 | export interface IOperation { 8 | key: IOperationType; 9 | name: string; 10 | icon: string; 11 | isDisabled: boolean; 12 | onClick: (e: Event, key: IOperationType) => void; 13 | } 14 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIChat/message-list/style/color.scss: -------------------------------------------------------------------------------- 1 | .tui-chat { 2 | .tui-message-list { 3 | .message-more { 4 | color: #999; 5 | cursor: pointer; 6 | } 7 | } 8 | 9 | .image-dialog { 10 | background: rgba(0, 0, 0, 0.6); 11 | 12 | header { 13 | background: rgba(0,0,0,0.49); 14 | } 15 | } 16 | } 17 | 18 | .tui-chat-h5 { 19 | .tui-chat-header { 20 | background: #FFF; 21 | } 22 | 23 | .tui-chat-footer { 24 | background: #FFF; 25 | 26 | .input { 27 | input { 28 | background: #F4F5F9; 29 | } 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIChat/message-list/style/h5.scss: -------------------------------------------------------------------------------- 1 | .tui-chat-h5 { 2 | flex: 1; 3 | position: static; 4 | 5 | .tui-chat-main { 6 | .tui-message-list { 7 | height: 100%; 8 | } 9 | 10 | .message-more { 11 | color: #999; 12 | cursor: pointer; 13 | font-size: 14px; 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIChat/message-list/style/index.scss: -------------------------------------------------------------------------------- 1 | @import "../../../../assets/styles/common"; 2 | @import "./color"; 3 | @import "./web"; 4 | @import "./h5"; 5 | 6 | :not(not) { 7 | display: flex; 8 | flex-direction: column; 9 | box-sizing: border-box; 10 | min-width: 0; 11 | } 12 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIChat/offlinePushInfoManager/index.ts: -------------------------------------------------------------------------------- 1 | import OfflinePushInfoManager from './offlinePushInfoManager'; 2 | 3 | export * from './const'; 4 | export * from './interface'; 5 | 6 | export default OfflinePushInfoManager.getInstance(); 7 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIChat/offlinePushInfoManager/info.ts: -------------------------------------------------------------------------------- 1 | import { IChatOfflinePushInfo, ICallOfflinePushInfo } from './interface'; 2 | 3 | export const chatOfflinePushInfo: IChatOfflinePushInfo = { 4 | androidInfo: {}, 5 | apnsInfo: {}, 6 | }; 7 | 8 | export const callOfflinePushInfo: ICallOfflinePushInfo = {}; 9 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIChat/style/index.scss: -------------------------------------------------------------------------------- 1 | @import '../../../assets/styles/common'; 2 | @import './web'; 3 | @import './h5'; 4 | @import './uni'; 5 | @import './wx'; 6 | 7 | :not(not) { 8 | display: flex; 9 | flex-direction: column; 10 | box-sizing: border-box; 11 | min-width: 0; 12 | } 13 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIChat/style/uni.scss: -------------------------------------------------------------------------------- 1 | .tui-chat-uni { 2 | &-message-input { 3 | max-height: 370px; 4 | padding: 10px; 5 | } 6 | 7 | &-message-input-toolbar { 8 | z-index: 100; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIChat/style/wx.scss: -------------------------------------------------------------------------------- 1 | .tui-chat-wx { 2 | &-message-input { 3 | padding: 0; 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIChat/utils/wordsList.ts: -------------------------------------------------------------------------------- 1 | export const wordsList = [ 2 | { 3 | value: '在吗?在吗?在吗?重要的话说三遍。', 4 | }, 5 | { 6 | value: '好久没聊天了,快来和我说说话~', 7 | }, 8 | { 9 | value: '好的,就这么说定了。', 10 | }, 11 | { 12 | value: '感恩的心,感谢有你。', 13 | }, 14 | { 15 | value: '糟糕!是心动的感觉!', 16 | }, 17 | { 18 | value: '心疼地抱抱自己,我太难了!', 19 | }, 20 | { 21 | value: '没关系,别在意,事情过去就过去了。', 22 | }, 23 | { 24 | value: '早上好,今天也是让人期待的一天呢!', 25 | }, 26 | { 27 | value: '熬夜有什么用,又没人陪你聊天,早点休息吧。', 28 | }, 29 | ]; 30 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIContact/contact-info/index.ts: -------------------------------------------------------------------------------- 1 | import ContactInfo from './index.vue'; 2 | 3 | export default ContactInfo; 4 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIContact/contact-info/style/index.scss: -------------------------------------------------------------------------------- 1 | @import "./web"; 2 | @import "./h5"; 3 | @import "../../../../assets/styles/common"; 4 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIContact/contact-list/index.ts: -------------------------------------------------------------------------------- 1 | import ContactList from './index.vue'; 2 | 3 | export default ContactList; 4 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIContact/contact-list/style/h5.scss: -------------------------------------------------------------------------------- 1 | .tui-contact-list-h5 { 2 | .tui-contact-list-item { 3 | .tui-contact-list-item-header { 4 | cursor: none; 5 | } 6 | 7 | .tui-contact-list-item-header:active, 8 | .tui-contact-list-item-main-item:active { 9 | background-color: #eef0f3; 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIContact/contact-list/style/index.scss: -------------------------------------------------------------------------------- 1 | @import './web'; 2 | @import './h5'; 3 | @import '../../../../assets/styles/common'; 4 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIContact/contact-search/index.ts: -------------------------------------------------------------------------------- 1 | import ContactHeader from './index.vue'; 2 | export default ContactHeader; 3 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIContact/index.ts: -------------------------------------------------------------------------------- 1 | import TUIContact from './index.vue'; 2 | import Server from './server'; 3 | Server.getInstance(); 4 | 5 | export default TUIContact; 6 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIContact/select-friend/index.ts: -------------------------------------------------------------------------------- 1 | import SelectFriend from './index.vue'; 2 | 3 | export default SelectFriend; 4 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIConversation/conversation-header/index.ts: -------------------------------------------------------------------------------- 1 | import ConversationHeader from './index.vue'; 2 | 3 | export default ConversationHeader; 4 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIConversation/conversation-list/style/index.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../assets/styles/common'; 2 | @import './color'; 3 | @import './web'; 4 | @import './h5'; 5 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIConversation/conversation-network/index.ts: -------------------------------------------------------------------------------- 1 | import ConversationNetwork from './index.vue'; 2 | 3 | export default ConversationNetwork; 4 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIConversation/index.ts: -------------------------------------------------------------------------------- 1 | import TUIConversation from "./index.vue"; 2 | import TUIConversationServer from "./server"; 3 | new TUIConversationServer(); 4 | 5 | export default TUIConversation; 6 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIConversation/style/color.scss: -------------------------------------------------------------------------------- 1 | .tui-conversation { 2 | background: #fff; 3 | } 4 | 5 | .network { 6 | &-content { 7 | font-family: PingFangSC-Regular; 8 | font-weight: 400; 9 | color: #e54545; 10 | letter-spacing: 0; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIConversation/style/index.scss: -------------------------------------------------------------------------------- 1 | @import '../../../assets/styles/common'; 2 | @import './web'; 3 | @import './color'; 4 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIGroup/create-group/index.ts: -------------------------------------------------------------------------------- 1 | import CreateGroup from './index.vue'; 2 | 3 | export default CreateGroup; 4 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIGroup/create-group/style/index.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../assets/styles/common'; 2 | @import './color'; 3 | @import './web'; 4 | @import './h5'; 5 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIGroup/index.ts: -------------------------------------------------------------------------------- 1 | import TUIGroup from './index.vue'; 2 | import Server from './server'; 3 | 4 | Server.getInstance(); 5 | 6 | export default TUIGroup; 7 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIGroup/manage-group/index.ts: -------------------------------------------------------------------------------- 1 | import ManageGroup from './index.vue'; 2 | 3 | export default ManageGroup; 4 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIGroup/manage-group/style/h5.scss: -------------------------------------------------------------------------------- 1 | .deleted-dialog { 2 | padding: 20%; 3 | } 4 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUIGroup/select-member/index.ts: -------------------------------------------------------------------------------- 1 | import SelectMember from './index.vue'; 2 | 3 | export default SelectMember; 4 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUINotification/interface.ts: -------------------------------------------------------------------------------- 1 | export interface ITUINotification { 2 | showPreviews: boolean; 3 | allowNotifications: boolean; 4 | notificationTitle: string; 5 | notificationIcon: string; 6 | } 7 | 8 | export interface INotificationConstructorParams { 9 | showPreviews?: boolean; 10 | allowNotifications?: boolean; 11 | notificationTitle?: string; 12 | notificationIcon?: string; 13 | } 14 | 15 | export type NotificationType = 'chat' | 'call'; 16 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUISearch/index.ts: -------------------------------------------------------------------------------- 1 | import TUISearch from './index.vue'; 2 | import Server from './server'; 3 | new Server(); 4 | 5 | export default TUISearch; 6 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUISearch/search-container/index.ts: -------------------------------------------------------------------------------- 1 | import SearchContainer from './index.vue'; 2 | export default SearchContainer; 3 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUISearch/search-container/style/index.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../assets/styles/common'; 2 | @import './web'; 3 | @import './h5'; 4 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUISearch/search-input/index.ts: -------------------------------------------------------------------------------- 1 | import SearchInput from './index.vue'; 2 | export default SearchInput; 3 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUISearch/search-more/index.ts: -------------------------------------------------------------------------------- 1 | import SearchMore from './index.vue'; 2 | 3 | export default SearchMore; 4 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUISearch/search-result/index.ts: -------------------------------------------------------------------------------- 1 | import SearchResult from './index.vue'; 2 | export default SearchResult; 3 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUISearch/search-result/search-result-default/index.ts: -------------------------------------------------------------------------------- 1 | import SearchResultDefault from './index.vue'; 2 | export default SearchResultDefault; 3 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUISearch/search-result/search-result-item/style/h5.scss: -------------------------------------------------------------------------------- 1 | .search-result-list-item-h5 { 2 | padding: 10px 0; 3 | border-radius: 0; 4 | 5 | .bubble { 6 | .bubble-left { 7 | .bubble-left-avatar { 8 | width: 48px; 9 | height: 48px; 10 | } 11 | 12 | .bubble-main { 13 | .bubble-main-name { 14 | color: #333; 15 | font-family: "PingFang SC", sans-serif; 16 | font-size: 14px; 17 | font-weight: 400; 18 | letter-spacing: 0; 19 | text-align: left; 20 | } 21 | } 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUISearch/search-result/search-result-item/style/index.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../../assets/styles/common'; 2 | @import './web'; 3 | @import './h5'; 4 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUISearch/search-result/search-result-loading/index.ts: -------------------------------------------------------------------------------- 1 | import SearchResultLoading from './index.vue'; 2 | export default SearchResultLoading; 3 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUISearch/search-result/style/index.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../assets/styles/common'; 2 | @import './web'; 3 | @import './h5'; 4 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUISearch/style/index.scss: -------------------------------------------------------------------------------- 1 | @import '../../../assets/styles/common'; 2 | @import './web'; 3 | @import './h5'; 4 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/TUISearch/style/web.scss: -------------------------------------------------------------------------------- 1 | .tui-search { 2 | &-main-global { 3 | width: 100%; 4 | height: fit-content; 5 | } 6 | 7 | &-main-conversation { 8 | width: 100%; 9 | height: 100%; 10 | background: #fff; 11 | box-shadow: 0 1px 10px 0 rgba(2,16,43,0.15); 12 | } 13 | 14 | .tui-search-global { 15 | &-header { 16 | display: flex; 17 | flex-direction: row; 18 | justify-content: center; 19 | align-items: center; 20 | } 21 | } 22 | 23 | .tui-search-conversation { 24 | width: 100%; 25 | height: 100%; 26 | overflow: hidden; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/common/BottomPopup/index.ts: -------------------------------------------------------------------------------- 1 | import BottomPopup from './index.vue'; 2 | 3 | export default BottomPopup; 4 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/common/BottomPopup/style/index.scss: -------------------------------------------------------------------------------- 1 | @import "../../../../assets/styles/common"; 2 | @import "./h5"; 3 | @import "./modal"; 4 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/common/BottomPopup/style/modal.scss: -------------------------------------------------------------------------------- 1 | .bottom-popup-modal { 2 | background: rgba(0, 0, 0, 0.5); 3 | } 4 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/common/DatePicker/date-picker.ts: -------------------------------------------------------------------------------- 1 | import { Dayjs } from 'dayjs'; 2 | 3 | export type DateCellType = 4 | | 'normal' 5 | | 'today' 6 | | 'week' 7 | | 'next-month' 8 | | 'prev-month'; 9 | export interface DateCell { 10 | text?: number; 11 | disabled?: boolean; 12 | isSelected?: boolean; 13 | isSelectedStart?: boolean; 14 | isSelectedEnd?: boolean; 15 | isInRange?: boolean; 16 | isCurrent?: boolean; 17 | date: typeof Dayjs; 18 | type?: DateCellType; 19 | } 20 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/common/DatePicker/index.ts: -------------------------------------------------------------------------------- 1 | import DatePicker from './index.vue'; 2 | export default DatePicker; 3 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/common/Dialog/index.ts: -------------------------------------------------------------------------------- 1 | import Dialog from './index.vue'; 2 | 3 | export default Dialog; 4 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/common/Dialog/style/dialog.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../assets/styles/common'; 2 | @import "./color"; 3 | @import "./web"; 4 | @import "./h5"; 5 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/common/Drag/index.ts: -------------------------------------------------------------------------------- 1 | import Drag from './index.vue'; 2 | export default Drag; 3 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/common/ImagePreviewer/index.ts: -------------------------------------------------------------------------------- 1 | import ImagePreviewer from './index.vue'; 2 | 3 | export default ImagePreviewer; 4 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/common/Loading/index.ts: -------------------------------------------------------------------------------- 1 | import Loading from './index.vue'; 2 | export default Loading; 3 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/common/SelectUser/index.ts: -------------------------------------------------------------------------------- 1 | import SelectUser from './index.vue'; 2 | 3 | export default SelectUser; 4 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/common/SwitchBar/index.ts: -------------------------------------------------------------------------------- 1 | import SwitchBar from './index.vue'; 2 | export default SwitchBar; 3 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/common/Toast/type.ts: -------------------------------------------------------------------------------- 1 | const TOAST_TYPE = { 2 | SUCCESS: 'success', 3 | WARNING: 'warning', 4 | ERROR: 'error', 5 | NORMAL: 'normal', 6 | }; 7 | 8 | export default TOAST_TYPE; 9 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/common/Transfer/index.ts: -------------------------------------------------------------------------------- 1 | import Transfer from './index.vue'; 2 | export default Transfer; 3 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/common/Transfer/style/transfer.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../assets/styles/common'; 2 | @import "./color"; 3 | @import "./web"; 4 | @import "./h5"; 5 | 6 | .icon-unselected { 7 | width: 18px; 8 | height: 18px; 9 | background: #FFF; 10 | border: 1px solid #DDD; 11 | border-radius: 11px; 12 | box-sizing: border-box; 13 | } 14 | -------------------------------------------------------------------------------- /Vue2/TUIKit/components/index.ts: -------------------------------------------------------------------------------- 1 | import TUIChat from "./TUIChat"; 2 | import TUIConversation from "./TUIConversation"; 3 | import TUISearch from "./TUISearch"; 4 | import TUIContact from "./TUIContact"; 5 | import TUIGroup from "./TUIGroup"; 6 | 7 | const TUIComponents = { 8 | TUIChat, 9 | TUIConversation, 10 | TUIContact, 11 | TUISearch, 12 | TUIGroup 13 | }; 14 | 15 | export default TUIComponents; 16 | 17 | export { 18 | TUIChat, 19 | TUIConversation, 20 | TUIContact, 21 | TUISearch, 22 | TUIGroup, 23 | }; 24 | -------------------------------------------------------------------------------- /Vue2/TUIKit/debug/index.d.ts: -------------------------------------------------------------------------------- 1 | export function genTestUserSig({ SDKAppID: number, secretKey: string, userID: string }): any; 2 | export const EXPIRETIME: number; 3 | -------------------------------------------------------------------------------- /Vue2/TUIKit/debug/index.js: -------------------------------------------------------------------------------- 1 | export * from "./GenerateTestUserSig"; 2 | -------------------------------------------------------------------------------- /Vue2/TUIKit/index.ts: -------------------------------------------------------------------------------- 1 | import { genTestUserSig } from './debug'; 2 | import Server from './server'; 3 | import TUIComponents, { 4 | TUIChat, 5 | TUIConversation, 6 | TUIContact, 7 | TUISearch, 8 | TUIGroup, 9 | } from './components'; 10 | import TUIKit from './index.vue'; 11 | import { hideTUIChatFeatures } from './components/TUIChat/config'; 12 | 13 | const TUIChatKit = new Server(); 14 | TUIChatKit.init(); 15 | 16 | export { 17 | TUIKit, 18 | TUIChatKit, 19 | TUIComponents, 20 | TUIChat, 21 | TUIConversation, 22 | TUIContact, 23 | TUISearch, 24 | TUIGroup, 25 | hideTUIChatFeatures, 26 | genTestUserSig, 27 | }; 28 | -------------------------------------------------------------------------------- /Vue2/TUIKit/locales/en/component.ts: -------------------------------------------------------------------------------- 1 | const component = { 2 | "取消": "Cancel", 3 | "完成": "Done", 4 | "已选中": "Selected", 5 | "人": "", 6 | "保存": "Save", 7 | "请输入userID": "Enter a userID", 8 | "请输入groupID": "Enter a groupID", 9 | "确定": "submit", 10 | "全选": "All", 11 | "已在群聊中": "exists", 12 | "查看更多": "More", 13 | "图片 url 不存在": "Image url does not exist", 14 | "已取消": "Cancelled", 15 | "获取权限失败": "Failed to obtain permission", 16 | "已保存至相册": "Saved to album", 17 | "图片下载失败": "Image download failed", 18 | "暂不支持下载此类型图片": "Downloading this type of pictures is not supported yet", 19 | } 20 | 21 | export default component; 22 | -------------------------------------------------------------------------------- /Vue2/TUIKit/locales/en/emoji.ts: -------------------------------------------------------------------------------- 1 | import { default as Emoji } from '../../components/TUIChat/emoji-config/locales/en'; 2 | export default Emoji; 3 | -------------------------------------------------------------------------------- /Vue2/TUIKit/locales/en/evaluate.ts: -------------------------------------------------------------------------------- 1 | const Evaluate = { 2 | "请对本次服务进行评价": "Please rate this service", 3 | "提交评价": "Feedback", 4 | "服务评价工具": "Service rate tool", 5 | "使用": "Build with", 6 | "自定义消息": "Custom message", 7 | "搭建": "", 8 | "星": "Star" 9 | } 10 | 11 | export default Evaluate; 12 | -------------------------------------------------------------------------------- /Vue2/TUIKit/locales/index.ts: -------------------------------------------------------------------------------- 1 | 2 | import en from './en'; 3 | import zh_cn from './zh_cn'; 4 | import zh_tw from './zh_tw'; 5 | 6 | export interface ILanguageResources { 7 | [key: string]: string | ILanguageResources; 8 | } 9 | 10 | const messages: Record = { 11 | ...en, 12 | ...zh_cn, 13 | ...zh_tw, 14 | }; 15 | 16 | export default messages; 17 | -------------------------------------------------------------------------------- /Vue2/TUIKit/locales/zh_cn/TUIConversation.ts: -------------------------------------------------------------------------------- 1 | const TUIConversation = { 2 | "发起会话": "发起会话", 3 | "发起单聊": "发起单聊", 4 | "发起群聊": "发起群聊", 5 | "请输入userID": "请输入userID", 6 | "删除会话": "删除会话", 7 | "删除后,将清空该聊天的消息记录": "删除后,将清空该聊天的消息记录", 8 | "删除后,将清空该群聊的消息记录": "删除后,将清空该群聊的消息记录", 9 | "置顶会话": "置顶会话", 10 | "取消置顶": "取消置顶", 11 | "消息免打扰": "消息免打扰", 12 | "取消免打扰": "取消免打扰", 13 | "系统通知": "系统通知", 14 | "有人@我": "有人@我", 15 | "@所有人": "@所有人", 16 | "条": "条", 17 | "我": "我", 18 | "网络异常,请您检查网络设置": "网络异常,请您检查网络设置", 19 | "您已被群管理员移出群聊": "您已被群管理员移出群聊", 20 | "该群聊已被解散": "该群聊已被解散", 21 | "您已退出该群聊": "您已退出该群聊", 22 | } 23 | 24 | export default TUIConversation; 25 | -------------------------------------------------------------------------------- /Vue2/TUIKit/locales/zh_cn/component.ts: -------------------------------------------------------------------------------- 1 | const components = { 2 | "取消": "取消", 3 | "完成": "完成", 4 | "已选中": "已选中", 5 | "人": "人", 6 | "保存": "保存", 7 | "请输入userID": "请输入userID", 8 | "请输入groupID": "请输入groupID", 9 | "确定": "确定", 10 | "全选": "全选", 11 | "已在群聊中": "已在群聊中", 12 | "查看更多": "查看更多", 13 | "图片 url 不存在": "图片 url 不存在", 14 | "已取消": "已取消", 15 | "获取权限失败": "获取权限失败", 16 | "已保存至相册": "已保存至相册", 17 | "图片下载失败": "图片下载失败", 18 | "暂不支持下载此类型图片": "暂不支持下载此类型图片", 19 | } 20 | 21 | export default components; 22 | -------------------------------------------------------------------------------- /Vue2/TUIKit/locales/zh_cn/emoji.ts: -------------------------------------------------------------------------------- 1 | import { default as Emoji } from '../../components/TUIChat/emoji-config/locales/zh_cn'; 2 | export default Emoji; 3 | -------------------------------------------------------------------------------- /Vue2/TUIKit/locales/zh_cn/evaluate.ts: -------------------------------------------------------------------------------- 1 | const Evaluate = { 2 | "请对本次服务进行评价": "请对本次服务进行评价", 3 | "提交评价": "提交评价", 4 | "服务评价工具": "服务评价工具", 5 | "使用": "使用", 6 | "自定义消息": "自定义消息", 7 | "搭建": "搭建", 8 | "星": "星" 9 | } 10 | 11 | export default Evaluate; 12 | -------------------------------------------------------------------------------- /Vue2/TUIKit/locales/zh_cn/words.ts: -------------------------------------------------------------------------------- 1 | const Words = { 2 | "常用语-快捷回复工具": "常用语-快捷回复工具", 3 | "在吗?在吗?在吗?重要的话说三遍。": "在吗?在吗?在吗?重要的话说三遍。", 4 | "好久没聊天了,快来和我说说话~": "好久没聊天了,快来和我说说话~", 5 | "好的,就这么说定了。": "好的,就这么说定了。", 6 | "感恩的心,感谢有你。": "感恩的心,感谢有你。", 7 | "糟糕!是心动的感觉!": "糟糕!是心动的感觉!", 8 | "心疼地抱抱自己,我太难了!": "心疼地抱抱自己,我太难了!", 9 | "没关系,别在意,事情过去就过去了。": "没关系,别在意,事情过去就过去了。", 10 | "早上好,今天也是让人期待的一天呢!": "早上好,今天也是让人期待的一天呢!", 11 | "熬夜有什么用,又没人陪你聊天,早点休息吧。": "熬夜有什么用,又没人陪你聊天,早点休息吧。" 12 | } 13 | 14 | export default Words; 15 | -------------------------------------------------------------------------------- /Vue2/TUIKit/locales/zh_tw/TUIConversation.ts: -------------------------------------------------------------------------------- 1 | const TUIConversation = { 2 | "发起会话": "發起會話", 3 | "发起单聊": "發起單聊", 4 | "发起群聊": "發起群聊", 5 | "请输入userID": "請輸入userID", 6 | "删除会话": "刪除會話", 7 | "删除后,将清空该聊天的消息记录": "刪除後,將清空該聊天的消息記錄", 8 | "删除后,将清空该群聊的消息记录": "刪除後,將清空該群聊的消息記錄", 9 | "置顶会话": "置頂會話", 10 | "取消置顶": "取消置頂", 11 | "消息免打扰": "消息免打擾", 12 | "取消免打扰": "取消免打擾", 13 | "系统通知": "系統通知", 14 | "有人@我": "有人@我", 15 | "@所有人": "@所有人", 16 | "条": "條", 17 | "我": "我", 18 | "网络异常,请您检查网络设置": "網絡異常,請您檢查網絡設置", 19 | "您已被群管理员移出群聊": "您已被群管理員移出群聊", 20 | "该群聊已被解散": "該群聊已被解散", 21 | "您已退出该群聊": "您已退出該群聊", 22 | } 23 | 24 | export default TUIConversation; 25 | -------------------------------------------------------------------------------- /Vue2/TUIKit/locales/zh_tw/component.ts: -------------------------------------------------------------------------------- 1 | const components = { 2 | "取消": "取消", 3 | "完成": "完成", 4 | "已选中": "已選中", 5 | "人": "人", 6 | "保存": "保存", 7 | "请输入userID": "請輸入userID", 8 | "请输入groupID": "請輸入groupID", 9 | "确定": "確定", 10 | "全选": "全選", 11 | "已在群聊中": "已在群聊中", 12 | "查看更多": "查看更多", 13 | "图片 url 不存在": "圖片 url 不存在", 14 | "已取消": "已取消", 15 | "获取权限失败": "獲取權限失敗", 16 | "已保存至相册": "已保存至相冊", 17 | "图片下载失败": "圖片下載失敗", 18 | "暂不支持下载此类型图片": "暫不支持下載此類型圖片", 19 | }; 20 | 21 | export default components; 22 | -------------------------------------------------------------------------------- /Vue2/TUIKit/locales/zh_tw/emoji.ts: -------------------------------------------------------------------------------- 1 | import { default as Emoji } from '../../components/TUIChat/emoji-config/locales/zh_tw'; 2 | export default Emoji; 3 | -------------------------------------------------------------------------------- /Vue2/TUIKit/locales/zh_tw/evaluate.ts: -------------------------------------------------------------------------------- 1 | const Evaluate = { 2 | "请对本次服务进行评价": "請對本次服務進行評價", 3 | "提交评价": "提交評價", 4 | "服务评价工具": "服務評價工具", 5 | "使用": "使用", 6 | "自定义消息": "自定義消息", 7 | "搭建": "搭建", 8 | "星": "星" 9 | } 10 | 11 | export default Evaluate; 12 | -------------------------------------------------------------------------------- /Vue2/TUIKit/locales/zh_tw/words.ts: -------------------------------------------------------------------------------- 1 | const Words = { 2 | "常用语-快捷回复工具": "常用語-快捷回覆工具", 3 | "在吗?在吗?在吗?重要的话说三遍。": "在嗎?在嗎?在嗎?重要的話說三遍。", 4 | "好久没聊天了,快来和我说说话~": "好久沒聊天了,快來和我說說話~", 5 | "好的,就这么说定了。": "好的,就這麼說定了。", 6 | "感恩的心,感谢有你。": "感恩的心,感謝有你。", 7 | "糟糕!是心动的感觉!": "糟糕!是心動的感覺!", 8 | "心疼地抱抱自己,我太难了!": "心疼地抱抱自己,我太難了!", 9 | "没关系,别在意,事情过去就过去了。": "沒關係,別在意,事情過去就過去了。", 10 | "早上好,今天也是让人期待的一天呢!": "早上好,今天也是讓人期待的一天呢!", 11 | "熬夜有什么用,又没人陪你聊天,早点休息吧。": "熬夜有什麼用,又沒人陪你聊天,早點休息吧。" 12 | } 13 | 14 | export default Words; 15 | -------------------------------------------------------------------------------- /Vue2/TUIKit/plugins/extension-server/callkit.ts: -------------------------------------------------------------------------------- 1 | export default class CallkitPluginServer {} 2 | -------------------------------------------------------------------------------- /Vue2/TUIKit/plugins/plugin-components/message-customer/index.ts: -------------------------------------------------------------------------------- 1 | import { 2 | isCustomerServicePluginMessage, 3 | isMessageInvisible as isCustomServiceMessageInvisible, 4 | } from '@tencentcloud/tui-customer-service-plugin'; 5 | export { isCustomerServicePluginMessage, isCustomServiceMessageInvisible }; 6 | -------------------------------------------------------------------------------- /Vue2/TUIKit/plugins/plugin-components/message-customer/message-customer-service.vue: -------------------------------------------------------------------------------- 1 | 4 | 14 | 17 | -------------------------------------------------------------------------------- /Vue2/TUIKit/utils/enableSampleTaskStatus.ts: -------------------------------------------------------------------------------- 1 | import { TUIStore, StoreName } from "@tencentcloud/chat-uikit-engine"; 2 | export function enableSampleTaskStatus(taskKey: string) { 3 | const tasks = TUIStore.getData(StoreName.APP, "tasks"); 4 | if (taskKey in tasks && !tasks[taskKey]) { 5 | tasks[taskKey] = true; 6 | TUIStore.update(StoreName.APP, "tasks", tasks); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Vue2/TUIKit/utils/env.ts: -------------------------------------------------------------------------------- 1 | import { getPlatform } from '@tencentcloud/universal-api'; 2 | 3 | declare const uni: any; 4 | 5 | export const isPC = getPlatform() === 'pc'; 6 | 7 | export const isH5 = getPlatform() === 'h5'; 8 | 9 | export const isWeChat = getPlatform() === 'wechat'; 10 | 11 | export const isApp = getPlatform() === 'app'; 12 | 13 | export const isUniFrameWork = typeof uni !== 'undefined'; 14 | 15 | // H5, mini programs, and apps are all considered mobile. 16 | // If you need to unify the mobile UI style, you can directly use isMobile to control 17 | export const isMobile = isH5 || isWeChat || isApp; 18 | -------------------------------------------------------------------------------- /Vue2/TUIKit/utils/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./type-check"; 2 | -------------------------------------------------------------------------------- /Vue3/Demo/.eslintignore: -------------------------------------------------------------------------------- 1 | src/TUIKit/TUIPlugin/TUICallKit/* 2 | -------------------------------------------------------------------------------- /Vue3/Demo/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | package-lock.json 3 | pnpm-lock.yaml 4 | 5 | lerna-debug.log 6 | pnpm-debug.log 7 | npm-debug.log* 8 | yarn-debug.log* 9 | yarn-error.log* 10 | 11 | .DS_Store 12 | .idea 13 | .vscode 14 | 15 | dist 16 | 17 | # production 18 | esm 19 | lib 20 | .docz 21 | .pnp 22 | .pnp.js 23 | 24 | .prettierrc.json 25 | -------------------------------------------------------------------------------- /Vue3/Demo/auto-imports.d.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | /* prettier-ignore */ 3 | // @ts-nocheck 4 | // noinspection JSUnusedGlobalSymbols 5 | // Generated by unplugin-auto-import 6 | export {} 7 | declare global { 8 | 9 | } 10 | -------------------------------------------------------------------------------- /Vue3/Demo/env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | declare module 'qs' 3 | -------------------------------------------------------------------------------- /Vue3/Demo/public/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue3/Demo/public/favicon.png -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/.npmignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | package-lock.json 3 | pnpm-lock.yaml 4 | dist 5 | **/dist/ -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/.npmrc: -------------------------------------------------------------------------------- 1 | auto-install-peers=true 2 | strict-peer-dependencies=false 3 | # shamefully-hoist=true -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/assets/icon/call.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue3/Demo/src/TUIKit/assets/icon/call.png -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/assets/icon/camera-uni.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue3/Demo/src/TUIKit/assets/icon/camera-uni.png -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/assets/icon/close-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue3/Demo/src/TUIKit/assets/icon/close-image.png -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/assets/icon/convertText_en.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/assets/icon/d-right-arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 5 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/assets/icon/down-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/assets/icon/downaload-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue3/Demo/src/TUIKit/assets/icon/downaload-image.png -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/assets/icon/face-uni.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue3/Demo/src/TUIKit/assets/icon/face-uni.png -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/assets/icon/image-uni.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue3/Demo/src/TUIKit/assets/icon/image-uni.png -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/assets/icon/input-close.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/assets/icon/left-arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 6 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/assets/icon/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue3/Demo/src/TUIKit/assets/icon/loading.gif -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/assets/icon/loading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue3/Demo/src/TUIKit/assets/icon/loading.png -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/assets/icon/minus.svg: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/assets/icon/more-uni.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue3/Demo/src/TUIKit/assets/icon/more-uni.png -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/assets/icon/more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue3/Demo/src/TUIKit/assets/icon/more.png -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/assets/icon/plus.svg: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/assets/icon/right-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/assets/icon/star-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue3/Demo/src/TUIKit/assets/icon/star-light.png -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/assets/icon/star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue3/Demo/src/TUIKit/assets/icon/star.png -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/assets/icon/video-play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue3/Demo/src/TUIKit/assets/icon/video-play.png -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/assets/icon/video-uni.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue3/Demo/src/TUIKit/assets/icon/video-uni.png -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIChat/emoji-config/custom-emoji.ts: -------------------------------------------------------------------------------- 1 | import { IEmojiGroupList } from '../../../interface'; 2 | 3 | /** 4 | * Custom big emoji 5 | */ 6 | export const CUSTOM_BIG_EMOJI_URL: string = ''; 7 | 8 | export const CUSTOM_BIG_EMOJI_GROUP_LIST: IEmojiGroupList = []; 9 | 10 | /** 11 | * Custom basic emoji 12 | */ 13 | export const CUSTOM_BASIC_EMOJI_URL: string = ''; 14 | 15 | export const CUSTOM_BASIC_EMOJI_URL_MAPPING: Record = {}; 16 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIChat/index.ts: -------------------------------------------------------------------------------- 1 | import TUIChat from './index.vue'; 2 | import Server from './server'; 3 | 4 | new Server(); 5 | 6 | export default TUIChat; 7 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIChat/message-input-toolbar/emoji-picker/index.ts: -------------------------------------------------------------------------------- 1 | import EmojiPicker from './index.vue'; 2 | export default EmojiPicker; 3 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIChat/message-input-toolbar/emoji-picker/style/h5.scss: -------------------------------------------------------------------------------- 1 | .emoji-picker-h5 { 2 | width: 100%; 3 | 4 | &-list { 5 | justify-content: space-between; 6 | } 7 | 8 | &-list::after { 9 | content: ""; 10 | display: block; 11 | flex: 1 1 auto; 12 | } 13 | 14 | .send-btn { 15 | width: 50px; 16 | height: 30px; 17 | background-color: #55C06A; 18 | position: absolute; 19 | right: 10px; 20 | font-size: 16px; 21 | color: #fff; 22 | text-align: center; 23 | line-height: 30px; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIChat/message-input-toolbar/emoji-picker/style/index.scss: -------------------------------------------------------------------------------- 1 | @import "../../../../../assets/styles/common"; 2 | @import "./web"; 3 | @import "./h5"; 4 | 5 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIChat/message-input-toolbar/evaluate/index.ts: -------------------------------------------------------------------------------- 1 | import Evaluate from './index.vue'; 2 | export default Evaluate; 3 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIChat/message-input-toolbar/evaluate/style/index.scss: -------------------------------------------------------------------------------- 1 | @import "./color"; 2 | @import "./web"; 3 | @import "./h5"; 4 | @import "../../../../../assets/styles/common"; 5 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIChat/message-input-toolbar/file-upload/index.ts: -------------------------------------------------------------------------------- 1 | import ImageUpload from './index.vue'; 2 | export default ImageUpload; 3 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIChat/message-input-toolbar/image-upload/index.ts: -------------------------------------------------------------------------------- 1 | import ImageUpload from './index.vue'; 2 | export default ImageUpload; 3 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIChat/message-input-toolbar/index.ts: -------------------------------------------------------------------------------- 1 | import MessageInputToolbar from './index.vue'; 2 | export default MessageInputToolbar; 3 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIChat/message-input-toolbar/toolbar-item-container/style/color.scss: -------------------------------------------------------------------------------- 1 | .toolbar-item-container { 2 | &-dialog { 3 | background: #fff; 4 | box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIChat/message-input-toolbar/toolbar-item-container/style/h5.scss: -------------------------------------------------------------------------------- 1 | .toolbar-item-container-h5 { 2 | &-dialog { 3 | position: static !important; 4 | width: 100%; 5 | box-shadow: none; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIChat/message-input-toolbar/toolbar-item-container/style/index.scss: -------------------------------------------------------------------------------- 1 | @import "../../../../../assets/styles/common"; 2 | @import "./color"; 3 | @import "./web"; 4 | @import "./h5"; 5 | @import "./uni"; 6 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIChat/message-input-toolbar/user-selector/index.ts: -------------------------------------------------------------------------------- 1 | import UserSelector from './index.vue'; 2 | export default UserSelector; 3 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIChat/message-input-toolbar/video-upload/index.ts: -------------------------------------------------------------------------------- 1 | import ImageUpload from './index.vue'; 2 | export default ImageUpload; 3 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIChat/message-input-toolbar/words/index.ts: -------------------------------------------------------------------------------- 1 | import Words from "./index.vue"; 2 | export default Words; 3 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIChat/message-input-toolbar/words/style/color.scss: -------------------------------------------------------------------------------- 1 | .words { 2 | background-color: #ffffff; 3 | &-header { 4 | &-close { 5 | color: #3370ff; 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIChat/message-input-toolbar/words/style/index.scss: -------------------------------------------------------------------------------- 1 | @import url("../../../../../assets/styles/common.scss"); 2 | @import "./color.scss"; 3 | @import "./web.scss"; 4 | @import "./h5.scss"; 5 | 6 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIChat/message-input/index.ts: -------------------------------------------------------------------------------- 1 | import MessageInput from './index.vue'; 2 | export default MessageInput; 3 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIChat/message-list/message-elements/message-stream-markdown/index.ts: -------------------------------------------------------------------------------- 1 | import { IMessageModel } from '@tencentcloud/chat-uikit-engine'; 2 | 3 | export function isBotMessage(message: IMessageModel): boolean { 4 | if (!message || !message.ID || !message.from) { 5 | return false; 6 | } 7 | 8 | if (message.from.startsWith('@RBT#') && !message.to.startsWith('@RBT#')) { 9 | return true; 10 | } 11 | 12 | return false; 13 | } 14 | 15 | export * from './index.vue'; 16 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIChat/message-list/message-elements/message-stream-markdown/operation/index.ts: -------------------------------------------------------------------------------- 1 | export * from './index.vue'; 2 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIChat/message-list/message-elements/message-stream-markdown/operation/type.ts: -------------------------------------------------------------------------------- 1 | /** type & interface */ 2 | export enum IOperationType { 3 | Copy = 'copy', 4 | // Retry is not supported now 5 | // Retry = 'retry', 6 | } 7 | export interface IOperation { 8 | key: IOperationType; 9 | name: string; 10 | icon: string; 11 | isDisabled: boolean; 12 | onClick: (e: Event, key: IOperationType) => void; 13 | } 14 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIChat/message-list/style/color.scss: -------------------------------------------------------------------------------- 1 | .tui-chat { 2 | .tui-message-list { 3 | .message-more { 4 | color: #999; 5 | cursor: pointer; 6 | } 7 | } 8 | 9 | .image-dialog { 10 | background: rgba(0, 0, 0, 0.6); 11 | 12 | header { 13 | background: rgba(0,0,0,0.49); 14 | } 15 | } 16 | } 17 | 18 | .tui-chat-h5 { 19 | .tui-chat-header { 20 | background: #FFF; 21 | } 22 | 23 | .tui-chat-footer { 24 | background: #FFF; 25 | 26 | .input { 27 | input { 28 | background: #F4F5F9; 29 | } 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIChat/message-list/style/h5.scss: -------------------------------------------------------------------------------- 1 | .tui-chat-h5 { 2 | flex: 1; 3 | position: static; 4 | 5 | .tui-chat-main { 6 | .tui-message-list { 7 | height: 100%; 8 | } 9 | 10 | .message-more { 11 | color: #999; 12 | cursor: pointer; 13 | font-size: 14px; 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIChat/message-list/style/index.scss: -------------------------------------------------------------------------------- 1 | @import "../../../../assets/styles/common"; 2 | @import "./color"; 3 | @import "./web"; 4 | @import "./h5"; 5 | 6 | :not(not) { 7 | display: flex; 8 | flex-direction: column; 9 | box-sizing: border-box; 10 | min-width: 0; 11 | } 12 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIChat/offlinePushInfoManager/index.ts: -------------------------------------------------------------------------------- 1 | import OfflinePushInfoManager from './offlinePushInfoManager'; 2 | 3 | export * from './const'; 4 | export * from './interface'; 5 | 6 | export default OfflinePushInfoManager.getInstance(); 7 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIChat/offlinePushInfoManager/info.ts: -------------------------------------------------------------------------------- 1 | import { IChatOfflinePushInfo, ICallOfflinePushInfo } from './interface'; 2 | 3 | export const chatOfflinePushInfo: IChatOfflinePushInfo = { 4 | androidInfo: {}, 5 | apnsInfo: {}, 6 | }; 7 | 8 | export const callOfflinePushInfo: ICallOfflinePushInfo = {}; 9 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIChat/style/index.scss: -------------------------------------------------------------------------------- 1 | @import '../../../assets/styles/common'; 2 | @import './web'; 3 | @import './h5'; 4 | @import './uni'; 5 | @import './wx'; 6 | 7 | :not(not) { 8 | display: flex; 9 | flex-direction: column; 10 | box-sizing: border-box; 11 | min-width: 0; 12 | } 13 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIChat/style/uni.scss: -------------------------------------------------------------------------------- 1 | .tui-chat-uni { 2 | &-message-input { 3 | max-height: 370px; 4 | padding: 10px; 5 | } 6 | 7 | &-message-input-toolbar { 8 | z-index: 100; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIChat/style/wx.scss: -------------------------------------------------------------------------------- 1 | .tui-chat-wx { 2 | &-message-input { 3 | padding: 0; 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIChat/utils/wordsList.ts: -------------------------------------------------------------------------------- 1 | export const wordsList = [ 2 | { 3 | value: '在吗?在吗?在吗?重要的话说三遍。', 4 | }, 5 | { 6 | value: '好久没聊天了,快来和我说说话~', 7 | }, 8 | { 9 | value: '好的,就这么说定了。', 10 | }, 11 | { 12 | value: '感恩的心,感谢有你。', 13 | }, 14 | { 15 | value: '糟糕!是心动的感觉!', 16 | }, 17 | { 18 | value: '心疼地抱抱自己,我太难了!', 19 | }, 20 | { 21 | value: '没关系,别在意,事情过去就过去了。', 22 | }, 23 | { 24 | value: '早上好,今天也是让人期待的一天呢!', 25 | }, 26 | { 27 | value: '熬夜有什么用,又没人陪你聊天,早点休息吧。', 28 | }, 29 | ]; 30 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIContact/contact-info/index.ts: -------------------------------------------------------------------------------- 1 | import ContactInfo from './index.vue'; 2 | 3 | export default ContactInfo; 4 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIContact/contact-info/style/index.scss: -------------------------------------------------------------------------------- 1 | @import "./web"; 2 | @import "./h5"; 3 | @import "../../../../assets/styles/common"; 4 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIContact/contact-list/index.ts: -------------------------------------------------------------------------------- 1 | import ContactList from './index.vue'; 2 | 3 | export default ContactList; 4 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIContact/contact-list/style/h5.scss: -------------------------------------------------------------------------------- 1 | .tui-contact-list-h5 { 2 | .tui-contact-list-item { 3 | .tui-contact-list-item-header { 4 | cursor: none; 5 | } 6 | 7 | .tui-contact-list-item-header:active, 8 | .tui-contact-list-item-main-item:active { 9 | background-color: #eef0f3; 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIContact/contact-list/style/index.scss: -------------------------------------------------------------------------------- 1 | @import './web'; 2 | @import './h5'; 3 | @import '../../../../assets/styles/common'; 4 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIContact/contact-search/index.ts: -------------------------------------------------------------------------------- 1 | import ContactHeader from './index.vue'; 2 | export default ContactHeader; 3 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIContact/index.ts: -------------------------------------------------------------------------------- 1 | import TUIContact from './index.vue'; 2 | import Server from './server'; 3 | Server.getInstance(); 4 | 5 | export default TUIContact; 6 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIContact/select-friend/index.ts: -------------------------------------------------------------------------------- 1 | import SelectFriend from './index.vue'; 2 | 3 | export default SelectFriend; 4 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIConversation/conversation-header/index.ts: -------------------------------------------------------------------------------- 1 | import ConversationHeader from './index.vue'; 2 | 3 | export default ConversationHeader; 4 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIConversation/conversation-list/style/index.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../assets/styles/common'; 2 | @import './color'; 3 | @import './web'; 4 | @import './h5'; 5 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIConversation/conversation-network/index.ts: -------------------------------------------------------------------------------- 1 | import ConversationNetwork from './index.vue'; 2 | 3 | export default ConversationNetwork; 4 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIConversation/index.ts: -------------------------------------------------------------------------------- 1 | import TUIConversation from "./index.vue"; 2 | import TUIConversationServer from "./server"; 3 | new TUIConversationServer(); 4 | 5 | export default TUIConversation; 6 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIConversation/style/color.scss: -------------------------------------------------------------------------------- 1 | .tui-conversation { 2 | background: #fff; 3 | } 4 | 5 | .network { 6 | &-content { 7 | font-family: PingFangSC-Regular; 8 | font-weight: 400; 9 | color: #e54545; 10 | letter-spacing: 0; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIConversation/style/index.scss: -------------------------------------------------------------------------------- 1 | @import '../../../assets/styles/common'; 2 | @import './web'; 3 | @import './color'; 4 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIGroup/create-group/index.ts: -------------------------------------------------------------------------------- 1 | import CreateGroup from './index.vue'; 2 | 3 | export default CreateGroup; 4 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIGroup/create-group/style/index.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../assets/styles/common'; 2 | @import './color'; 3 | @import './web'; 4 | @import './h5'; 5 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIGroup/index.ts: -------------------------------------------------------------------------------- 1 | import TUIGroup from './index.vue'; 2 | import Server from './server'; 3 | 4 | Server.getInstance(); 5 | 6 | export default TUIGroup; 7 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIGroup/manage-group/index.ts: -------------------------------------------------------------------------------- 1 | import ManageGroup from './index.vue'; 2 | 3 | export default ManageGroup; 4 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIGroup/manage-group/style/h5.scss: -------------------------------------------------------------------------------- 1 | .deleted-dialog { 2 | padding: 20%; 3 | } 4 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUIGroup/select-member/index.ts: -------------------------------------------------------------------------------- 1 | import SelectMember from './index.vue'; 2 | 3 | export default SelectMember; 4 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUINotification/interface.ts: -------------------------------------------------------------------------------- 1 | export interface ITUINotification { 2 | showPreviews: boolean; 3 | allowNotifications: boolean; 4 | notificationTitle: string; 5 | notificationIcon: string; 6 | } 7 | 8 | export interface INotificationConstructorParams { 9 | showPreviews?: boolean; 10 | allowNotifications?: boolean; 11 | notificationTitle?: string; 12 | notificationIcon?: string; 13 | } 14 | 15 | export type NotificationType = 'chat' | 'call'; 16 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUISearch/index.ts: -------------------------------------------------------------------------------- 1 | import TUISearch from './index.vue'; 2 | import Server from './server'; 3 | new Server(); 4 | 5 | export default TUISearch; 6 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUISearch/search-container/index.ts: -------------------------------------------------------------------------------- 1 | import SearchContainer from './index.vue'; 2 | export default SearchContainer; 3 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUISearch/search-container/style/index.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../assets/styles/common'; 2 | @import './web'; 3 | @import './h5'; 4 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUISearch/search-input/index.ts: -------------------------------------------------------------------------------- 1 | import SearchInput from './index.vue'; 2 | export default SearchInput; 3 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUISearch/search-more/index.ts: -------------------------------------------------------------------------------- 1 | import SearchMore from './index.vue'; 2 | 3 | export default SearchMore; 4 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUISearch/search-result/index.ts: -------------------------------------------------------------------------------- 1 | import SearchResult from './index.vue'; 2 | export default SearchResult; 3 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUISearch/search-result/search-result-default/index.ts: -------------------------------------------------------------------------------- 1 | import SearchResultDefault from './index.vue'; 2 | export default SearchResultDefault; 3 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUISearch/search-result/search-result-item/style/h5.scss: -------------------------------------------------------------------------------- 1 | .search-result-list-item-h5 { 2 | padding: 10px 0; 3 | border-radius: 0; 4 | 5 | .bubble { 6 | .bubble-left { 7 | .bubble-left-avatar { 8 | width: 48px; 9 | height: 48px; 10 | } 11 | 12 | .bubble-main { 13 | .bubble-main-name { 14 | color: #333; 15 | font-family: "PingFang SC", sans-serif; 16 | font-size: 14px; 17 | font-weight: 400; 18 | letter-spacing: 0; 19 | text-align: left; 20 | } 21 | } 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUISearch/search-result/search-result-item/style/index.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../../assets/styles/common'; 2 | @import './web'; 3 | @import './h5'; 4 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUISearch/search-result/search-result-loading/index.ts: -------------------------------------------------------------------------------- 1 | import SearchResultLoading from './index.vue'; 2 | export default SearchResultLoading; 3 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUISearch/search-result/style/index.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../assets/styles/common'; 2 | @import './web'; 3 | @import './h5'; 4 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUISearch/style/index.scss: -------------------------------------------------------------------------------- 1 | @import '../../../assets/styles/common'; 2 | @import './web'; 3 | @import './h5'; 4 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/TUISearch/style/web.scss: -------------------------------------------------------------------------------- 1 | .tui-search { 2 | &-main-global { 3 | width: 100%; 4 | height: fit-content; 5 | } 6 | 7 | &-main-conversation { 8 | width: 100%; 9 | height: 100%; 10 | background: #fff; 11 | box-shadow: 0 1px 10px 0 rgba(2,16,43,0.15); 12 | } 13 | 14 | .tui-search-global { 15 | &-header { 16 | display: flex; 17 | flex-direction: row; 18 | justify-content: center; 19 | align-items: center; 20 | } 21 | } 22 | 23 | .tui-search-conversation { 24 | width: 100%; 25 | height: 100%; 26 | overflow: hidden; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/common/BottomPopup/index.ts: -------------------------------------------------------------------------------- 1 | import BottomPopup from './index.vue'; 2 | 3 | export default BottomPopup; 4 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/common/BottomPopup/style/index.scss: -------------------------------------------------------------------------------- 1 | @import "../../../../assets/styles/common"; 2 | @import "./h5"; 3 | @import "./modal"; 4 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/common/BottomPopup/style/modal.scss: -------------------------------------------------------------------------------- 1 | .bottom-popup-modal { 2 | background: rgba(0, 0, 0, 0.5); 3 | } 4 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/common/DatePicker/date-picker.ts: -------------------------------------------------------------------------------- 1 | import { Dayjs } from 'dayjs'; 2 | 3 | export type DateCellType = 4 | | 'normal' 5 | | 'today' 6 | | 'week' 7 | | 'next-month' 8 | | 'prev-month'; 9 | export interface DateCell { 10 | text?: number; 11 | disabled?: boolean; 12 | isSelected?: boolean; 13 | isSelectedStart?: boolean; 14 | isSelectedEnd?: boolean; 15 | isInRange?: boolean; 16 | isCurrent?: boolean; 17 | date: typeof Dayjs; 18 | type?: DateCellType; 19 | } 20 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/common/DatePicker/index.ts: -------------------------------------------------------------------------------- 1 | import DatePicker from './index.vue'; 2 | export default DatePicker; 3 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/common/Dialog/index.ts: -------------------------------------------------------------------------------- 1 | import Dialog from './index.vue'; 2 | 3 | export default Dialog; 4 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/common/Dialog/style/dialog.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../assets/styles/common'; 2 | @import "./color"; 3 | @import "./web"; 4 | @import "./h5"; 5 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/common/Drag/index.ts: -------------------------------------------------------------------------------- 1 | import Drag from './index.vue'; 2 | export default Drag; 3 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/common/ImagePreviewer/index.ts: -------------------------------------------------------------------------------- 1 | import ImagePreviewer from './index.vue'; 2 | 3 | export default ImagePreviewer; 4 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/common/Loading/index.ts: -------------------------------------------------------------------------------- 1 | import Loading from './index.vue'; 2 | export default Loading; 3 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/common/SelectUser/index.ts: -------------------------------------------------------------------------------- 1 | import SelectUser from './index.vue'; 2 | 3 | export default SelectUser; 4 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/common/SwitchBar/index.ts: -------------------------------------------------------------------------------- 1 | import SwitchBar from './index.vue'; 2 | export default SwitchBar; 3 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/common/Toast/type.ts: -------------------------------------------------------------------------------- 1 | const TOAST_TYPE = { 2 | SUCCESS: 'success', 3 | WARNING: 'warning', 4 | ERROR: 'error', 5 | NORMAL: 'normal', 6 | }; 7 | 8 | export default TOAST_TYPE; 9 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/common/Transfer/index.ts: -------------------------------------------------------------------------------- 1 | import Transfer from './index.vue'; 2 | export default Transfer; 3 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/common/Transfer/style/transfer.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../assets/styles/common'; 2 | @import "./color"; 3 | @import "./web"; 4 | @import "./h5"; 5 | 6 | .icon-unselected { 7 | width: 18px; 8 | height: 18px; 9 | background: #FFF; 10 | border: 1px solid #DDD; 11 | border-radius: 11px; 12 | box-sizing: border-box; 13 | } 14 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/components/index.ts: -------------------------------------------------------------------------------- 1 | import TUIChat from "./TUIChat"; 2 | import TUIConversation from "./TUIConversation"; 3 | import TUISearch from "./TUISearch"; 4 | import TUIContact from "./TUIContact"; 5 | import TUIGroup from "./TUIGroup"; 6 | 7 | const TUIComponents = { 8 | TUIChat, 9 | TUIConversation, 10 | TUIContact, 11 | TUISearch, 12 | TUIGroup 13 | }; 14 | 15 | export default TUIComponents; 16 | 17 | export { 18 | TUIChat, 19 | TUIConversation, 20 | TUIContact, 21 | TUISearch, 22 | TUIGroup, 23 | }; 24 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/debug/index.d.ts: -------------------------------------------------------------------------------- 1 | export function genTestUserSig({ SDKAppID: number, secretKey: string, userID: string }): any; 2 | export const EXPIRETIME: number; 3 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/debug/index.js: -------------------------------------------------------------------------------- 1 | export * from "./GenerateTestUserSig"; 2 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/index.ts: -------------------------------------------------------------------------------- 1 | import { genTestUserSig } from './debug'; 2 | import Server from './server'; 3 | import TUIComponents, { 4 | TUIChat, 5 | TUIConversation, 6 | TUIContact, 7 | TUISearch, 8 | TUIGroup, 9 | } from './components'; 10 | import TUIKit from './index.vue'; 11 | import { hideTUIChatFeatures } from './components/TUIChat/config'; 12 | 13 | const TUIChatKit = new Server(); 14 | TUIChatKit.init(); 15 | 16 | export { 17 | TUIKit, 18 | TUIChatKit, 19 | TUIComponents, 20 | TUIChat, 21 | TUIConversation, 22 | TUIContact, 23 | TUISearch, 24 | TUIGroup, 25 | hideTUIChatFeatures, 26 | genTestUserSig, 27 | }; 28 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/locales/en/component.ts: -------------------------------------------------------------------------------- 1 | const component = { 2 | "取消": "Cancel", 3 | "完成": "Done", 4 | "已选中": "Selected", 5 | "人": "", 6 | "保存": "Save", 7 | "请输入userID": "Enter a userID", 8 | "请输入groupID": "Enter a groupID", 9 | "确定": "submit", 10 | "全选": "All", 11 | "已在群聊中": "exists", 12 | "查看更多": "More", 13 | "图片 url 不存在": "Image url does not exist", 14 | "已取消": "Cancelled", 15 | "获取权限失败": "Failed to obtain permission", 16 | "已保存至相册": "Saved to album", 17 | "图片下载失败": "Image download failed", 18 | "暂不支持下载此类型图片": "Downloading this type of pictures is not supported yet", 19 | } 20 | 21 | export default component; 22 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/locales/en/emoji.ts: -------------------------------------------------------------------------------- 1 | import { default as Emoji } from '../../components/TUIChat/emoji-config/locales/en'; 2 | export default Emoji; 3 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/locales/en/evaluate.ts: -------------------------------------------------------------------------------- 1 | const Evaluate = { 2 | "请对本次服务进行评价": "Please rate this service", 3 | "提交评价": "Feedback", 4 | "服务评价工具": "Service rate tool", 5 | "使用": "Build with", 6 | "自定义消息": "Custom message", 7 | "搭建": "", 8 | "星": "Star" 9 | } 10 | 11 | export default Evaluate; 12 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/locales/index.ts: -------------------------------------------------------------------------------- 1 | 2 | import en from './en'; 3 | import zh_cn from './zh_cn'; 4 | import zh_tw from './zh_tw'; 5 | 6 | export interface ILanguageResources { 7 | [key: string]: string | ILanguageResources; 8 | } 9 | 10 | const messages: Record = { 11 | ...en, 12 | ...zh_cn, 13 | ...zh_tw, 14 | }; 15 | 16 | export default messages; 17 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/locales/zh_cn/TUIConversation.ts: -------------------------------------------------------------------------------- 1 | const TUIConversation = { 2 | "发起会话": "发起会话", 3 | "发起单聊": "发起单聊", 4 | "发起群聊": "发起群聊", 5 | "请输入userID": "请输入userID", 6 | "删除会话": "删除会话", 7 | "删除后,将清空该聊天的消息记录": "删除后,将清空该聊天的消息记录", 8 | "删除后,将清空该群聊的消息记录": "删除后,将清空该群聊的消息记录", 9 | "置顶会话": "置顶会话", 10 | "取消置顶": "取消置顶", 11 | "消息免打扰": "消息免打扰", 12 | "取消免打扰": "取消免打扰", 13 | "系统通知": "系统通知", 14 | "有人@我": "有人@我", 15 | "@所有人": "@所有人", 16 | "条": "条", 17 | "我": "我", 18 | "网络异常,请您检查网络设置": "网络异常,请您检查网络设置", 19 | "您已被群管理员移出群聊": "您已被群管理员移出群聊", 20 | "该群聊已被解散": "该群聊已被解散", 21 | "您已退出该群聊": "您已退出该群聊", 22 | } 23 | 24 | export default TUIConversation; 25 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/locales/zh_cn/component.ts: -------------------------------------------------------------------------------- 1 | const components = { 2 | "取消": "取消", 3 | "完成": "完成", 4 | "已选中": "已选中", 5 | "人": "人", 6 | "保存": "保存", 7 | "请输入userID": "请输入userID", 8 | "请输入groupID": "请输入groupID", 9 | "确定": "确定", 10 | "全选": "全选", 11 | "已在群聊中": "已在群聊中", 12 | "查看更多": "查看更多", 13 | "图片 url 不存在": "图片 url 不存在", 14 | "已取消": "已取消", 15 | "获取权限失败": "获取权限失败", 16 | "已保存至相册": "已保存至相册", 17 | "图片下载失败": "图片下载失败", 18 | "暂不支持下载此类型图片": "暂不支持下载此类型图片", 19 | } 20 | 21 | export default components; 22 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/locales/zh_cn/emoji.ts: -------------------------------------------------------------------------------- 1 | import { default as Emoji } from '../../components/TUIChat/emoji-config/locales/zh_cn'; 2 | export default Emoji; 3 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/locales/zh_cn/evaluate.ts: -------------------------------------------------------------------------------- 1 | const Evaluate = { 2 | "请对本次服务进行评价": "请对本次服务进行评价", 3 | "提交评价": "提交评价", 4 | "服务评价工具": "服务评价工具", 5 | "使用": "使用", 6 | "自定义消息": "自定义消息", 7 | "搭建": "搭建", 8 | "星": "星" 9 | } 10 | 11 | export default Evaluate; 12 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/locales/zh_cn/words.ts: -------------------------------------------------------------------------------- 1 | const Words = { 2 | "常用语-快捷回复工具": "常用语-快捷回复工具", 3 | "在吗?在吗?在吗?重要的话说三遍。": "在吗?在吗?在吗?重要的话说三遍。", 4 | "好久没聊天了,快来和我说说话~": "好久没聊天了,快来和我说说话~", 5 | "好的,就这么说定了。": "好的,就这么说定了。", 6 | "感恩的心,感谢有你。": "感恩的心,感谢有你。", 7 | "糟糕!是心动的感觉!": "糟糕!是心动的感觉!", 8 | "心疼地抱抱自己,我太难了!": "心疼地抱抱自己,我太难了!", 9 | "没关系,别在意,事情过去就过去了。": "没关系,别在意,事情过去就过去了。", 10 | "早上好,今天也是让人期待的一天呢!": "早上好,今天也是让人期待的一天呢!", 11 | "熬夜有什么用,又没人陪你聊天,早点休息吧。": "熬夜有什么用,又没人陪你聊天,早点休息吧。" 12 | } 13 | 14 | export default Words; 15 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/locales/zh_tw/TUIConversation.ts: -------------------------------------------------------------------------------- 1 | const TUIConversation = { 2 | "发起会话": "發起會話", 3 | "发起单聊": "發起單聊", 4 | "发起群聊": "發起群聊", 5 | "请输入userID": "請輸入userID", 6 | "删除会话": "刪除會話", 7 | "删除后,将清空该聊天的消息记录": "刪除後,將清空該聊天的消息記錄", 8 | "删除后,将清空该群聊的消息记录": "刪除後,將清空該群聊的消息記錄", 9 | "置顶会话": "置頂會話", 10 | "取消置顶": "取消置頂", 11 | "消息免打扰": "消息免打擾", 12 | "取消免打扰": "取消免打擾", 13 | "系统通知": "系統通知", 14 | "有人@我": "有人@我", 15 | "@所有人": "@所有人", 16 | "条": "條", 17 | "我": "我", 18 | "网络异常,请您检查网络设置": "網絡異常,請您檢查網絡設置", 19 | "您已被群管理员移出群聊": "您已被群管理員移出群聊", 20 | "该群聊已被解散": "該群聊已被解散", 21 | "您已退出该群聊": "您已退出該群聊", 22 | } 23 | 24 | export default TUIConversation; 25 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/locales/zh_tw/component.ts: -------------------------------------------------------------------------------- 1 | const components = { 2 | "取消": "取消", 3 | "完成": "完成", 4 | "已选中": "已選中", 5 | "人": "人", 6 | "保存": "保存", 7 | "请输入userID": "請輸入userID", 8 | "请输入groupID": "請輸入groupID", 9 | "确定": "確定", 10 | "全选": "全選", 11 | "已在群聊中": "已在群聊中", 12 | "查看更多": "查看更多", 13 | "图片 url 不存在": "圖片 url 不存在", 14 | "已取消": "已取消", 15 | "获取权限失败": "獲取權限失敗", 16 | "已保存至相册": "已保存至相冊", 17 | "图片下载失败": "圖片下載失敗", 18 | "暂不支持下载此类型图片": "暫不支持下載此類型圖片", 19 | }; 20 | 21 | export default components; 22 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/locales/zh_tw/emoji.ts: -------------------------------------------------------------------------------- 1 | import { default as Emoji } from '../../components/TUIChat/emoji-config/locales/zh_tw'; 2 | export default Emoji; 3 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/locales/zh_tw/evaluate.ts: -------------------------------------------------------------------------------- 1 | const Evaluate = { 2 | "请对本次服务进行评价": "請對本次服務進行評價", 3 | "提交评价": "提交評價", 4 | "服务评价工具": "服務評價工具", 5 | "使用": "使用", 6 | "自定义消息": "自定義消息", 7 | "搭建": "搭建", 8 | "星": "星" 9 | } 10 | 11 | export default Evaluate; 12 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/locales/zh_tw/words.ts: -------------------------------------------------------------------------------- 1 | const Words = { 2 | "常用语-快捷回复工具": "常用語-快捷回覆工具", 3 | "在吗?在吗?在吗?重要的话说三遍。": "在嗎?在嗎?在嗎?重要的話說三遍。", 4 | "好久没聊天了,快来和我说说话~": "好久沒聊天了,快來和我說說話~", 5 | "好的,就这么说定了。": "好的,就這麼說定了。", 6 | "感恩的心,感谢有你。": "感恩的心,感謝有你。", 7 | "糟糕!是心动的感觉!": "糟糕!是心動的感覺!", 8 | "心疼地抱抱自己,我太难了!": "心疼地抱抱自己,我太難了!", 9 | "没关系,别在意,事情过去就过去了。": "沒關係,別在意,事情過去就過去了。", 10 | "早上好,今天也是让人期待的一天呢!": "早上好,今天也是讓人期待的一天呢!", 11 | "熬夜有什么用,又没人陪你聊天,早点休息吧。": "熬夜有什麼用,又沒人陪你聊天,早點休息吧。" 12 | } 13 | 14 | export default Words; 15 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/plugins/extension-server/callkit.ts: -------------------------------------------------------------------------------- 1 | export default class CallkitPluginServer {} 2 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/plugins/plugin-components/message-customer/index.ts: -------------------------------------------------------------------------------- 1 | import { 2 | isCustomerServicePluginMessage, 3 | isMessageInvisible as isCustomServiceMessageInvisible, 4 | } from '@tencentcloud/tui-customer-service-plugin'; 5 | export { isCustomerServicePluginMessage, isCustomServiceMessageInvisible }; 6 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/plugins/plugin-components/message-customer/message-customer-service.vue: -------------------------------------------------------------------------------- 1 | 4 | 14 | 17 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/utils/enableSampleTaskStatus.ts: -------------------------------------------------------------------------------- 1 | import { TUIStore, StoreName } from "@tencentcloud/chat-uikit-engine"; 2 | export function enableSampleTaskStatus(taskKey: string) { 3 | const tasks = TUIStore.getData(StoreName.APP, "tasks"); 4 | if (taskKey in tasks && !tasks[taskKey]) { 5 | tasks[taskKey] = true; 6 | TUIStore.update(StoreName.APP, "tasks", tasks); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/utils/env.ts: -------------------------------------------------------------------------------- 1 | import { getPlatform } from '@tencentcloud/universal-api'; 2 | 3 | declare const uni: any; 4 | 5 | export const isPC = getPlatform() === 'pc'; 6 | 7 | export const isH5 = getPlatform() === 'h5'; 8 | 9 | export const isWeChat = getPlatform() === 'wechat'; 10 | 11 | export const isApp = getPlatform() === 'app'; 12 | 13 | export const isUniFrameWork = typeof uni !== 'undefined'; 14 | 15 | // H5, mini programs, and apps are all considered mobile. 16 | // If you need to unify the mobile UI style, you can directly use isMobile to control 17 | export const isMobile = isH5 || isWeChat || isApp; 18 | -------------------------------------------------------------------------------- /Vue3/Demo/src/TUIKit/utils/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./type-check"; 2 | -------------------------------------------------------------------------------- /Vue3/Demo/src/assets/icon/arrow-down-line.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue3/Demo/src/assets/icon/arrow-down-line.png -------------------------------------------------------------------------------- /Vue3/Demo/src/assets/icon/arrow-down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue3/Demo/src/assets/icon/arrow-down.png -------------------------------------------------------------------------------- /Vue3/Demo/src/assets/icon/calendar.svg: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | -------------------------------------------------------------------------------- /Vue3/Demo/src/assets/icon/global.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue3/Demo/src/assets/icon/global.png -------------------------------------------------------------------------------- /Vue3/Demo/src/assets/icon/menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue3/Demo/src/assets/icon/menu.png -------------------------------------------------------------------------------- /Vue3/Demo/src/assets/icon/setting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue3/Demo/src/assets/icon/setting.png -------------------------------------------------------------------------------- /Vue3/Demo/src/assets/image/create-group.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue3/Demo/src/assets/image/create-group.png -------------------------------------------------------------------------------- /Vue3/Demo/src/assets/image/h5/login-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue3/Demo/src/assets/image/h5/login-bg.png -------------------------------------------------------------------------------- /Vue3/Demo/src/assets/image/login-background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue3/Demo/src/assets/image/login-background.png -------------------------------------------------------------------------------- /Vue3/Demo/src/locales/en/index.ts: -------------------------------------------------------------------------------- 1 | import Login from './login.json' 2 | import Home from './home.json' 3 | import Profile from './profile.json' 4 | 5 | const messages = { 6 | en: { 7 | 当前语言: 'English', 8 | 即时通信: 'Chat', 9 | 即时通信IM: 'Chat', 10 | 社交娱乐: 'Entertaining & Socializing', 11 | 腾讯云: 'Tencent Cloud', 12 | 使用指引: 'User Guide', 13 | Login, 14 | Home, 15 | Profile 16 | } 17 | } 18 | 19 | export default messages 20 | -------------------------------------------------------------------------------- /Vue3/Demo/src/locales/zh_cn/index.ts: -------------------------------------------------------------------------------- 1 | import Login from './login.json'; 2 | import Home from './home.json'; 3 | import Profile from './profile.json'; 4 | 5 | const messages = { 6 | zh_cn: { 7 | 当前语言: '简体中文', 8 | 即时通信: '即时通信', 9 | 即时通信IM: '即时通信IM', 10 | 社交娱乐: '社交娱乐', 11 | 腾讯云: '腾讯云', 12 | 使用指引: '使用指引', 13 | Login, 14 | Home, 15 | Profile 16 | }, 17 | }; 18 | 19 | export default messages; 20 | -------------------------------------------------------------------------------- /Vue3/Demo/src/locales/zh_tw/index.ts: -------------------------------------------------------------------------------- 1 | import Login from './login.json'; 2 | import Home from './home.json'; 3 | import Profile from './profile.json'; 4 | 5 | const messages = { 6 | zh_tw: { 7 | 当前语言: '繁體中文', 8 | 即时通信: '即時通信', 9 | 即时通信IM: '即時通信IM', 10 | 社交娱乐: '社交娛樂', 11 | 腾讯云: '騰訊雲', 12 | 使用指引: '使用指引', 13 | Login, 14 | Home, 15 | Profile, 16 | }, 17 | }; 18 | 19 | export default messages; 20 | -------------------------------------------------------------------------------- /Vue3/Demo/src/shims-vue.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.vue' { 2 | import Vue from 'vue' 3 | export default Vue 4 | } 5 | 6 | declare module "@vue/composition-api"; 7 | 8 | declare module '*.svg' { 9 | const content: any; 10 | export default content; 11 | } -------------------------------------------------------------------------------- /Vue3/Demo/src/styles/home.scss: -------------------------------------------------------------------------------- 1 | @import './web/home.scss'; 2 | @import './h5/home.scss'; 3 | @import "./common.scss"; 4 | -------------------------------------------------------------------------------- /Vue3/Demo/src/styles/login.scss: -------------------------------------------------------------------------------- 1 | @import "./web/login.scss"; 2 | @import "./h5/login.scss"; 3 | @import "./common.scss"; 4 | -------------------------------------------------------------------------------- /Vue3/Demo/src/styles/profile.scss: -------------------------------------------------------------------------------- 1 | @import "./web/profile.scss"; 2 | @import "./h5/profile.scss"; 3 | @import "./common.scss"; -------------------------------------------------------------------------------- /Vue3/Demo/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@vue/tsconfig/tsconfig.web.json", 3 | "include": ["env.d.ts", "src/**/*", "src/**/*.vue"], 4 | "exclude": ["node_modules"], 5 | "compilerOptions": { 6 | "baseUrl": ".", 7 | "paths": { 8 | "@/*": ["./src/*"] 9 | }, 10 | "preserveValueImports": false, 11 | "importsNotUsedAsValues": "preserve" 12 | }, 13 | 14 | "references": [ 15 | { 16 | "path": "./tsconfig.node.json" 17 | } 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /Vue3/Demo/tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@vue/tsconfig/tsconfig.node.json", 3 | "include": ["vite.config.*", "vitest.config.*", "cypress.config.*", "playwright.config.*"], 4 | "compilerOptions": { 5 | "composite": true, 6 | "types": ["node"] 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Vue3/TUIKit/.eslintignore: -------------------------------------------------------------------------------- 1 | TUIPlugin/TUICallKit/* 2 | -------------------------------------------------------------------------------- /Vue3/TUIKit/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | env: { 4 | node: true, 5 | }, 6 | extends: ['plugin:vue/vue3-essential', 'eslint:recommended', '@vue/typescript/recommended'], 7 | parserOptions: { 8 | ecmaVersion: 2020, 9 | }, 10 | rules: { 11 | 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', 12 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off', 13 | '@typescript-eslint/no-var-requires': 0, 14 | 'prefer-const': 0, 15 | 'vue/multi-word-component-names': 0, 16 | }, 17 | }; 18 | -------------------------------------------------------------------------------- /Vue3/TUIKit/.gitignore: -------------------------------------------------------------------------------- 1 | TUIPlugin/TUICallKit 2 | node_modules 3 | package-lock.json 4 | pnpm-lock.yaml -------------------------------------------------------------------------------- /Vue3/TUIKit/.npmignore: -------------------------------------------------------------------------------- 1 | TUIPlugin/TUICallKit 2 | node_modules 3 | package-lock.json 4 | pnpm-lock.yaml -------------------------------------------------------------------------------- /Vue3/TUIKit/assets/icon/call.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue3/TUIKit/assets/icon/call.png -------------------------------------------------------------------------------- /Vue3/TUIKit/assets/icon/camera-uni.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue3/TUIKit/assets/icon/camera-uni.png -------------------------------------------------------------------------------- /Vue3/TUIKit/assets/icon/close-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue3/TUIKit/assets/icon/close-image.png -------------------------------------------------------------------------------- /Vue3/TUIKit/assets/icon/convertText_en.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Vue3/TUIKit/assets/icon/d-right-arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 5 | -------------------------------------------------------------------------------- /Vue3/TUIKit/assets/icon/down-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /Vue3/TUIKit/assets/icon/downaload-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue3/TUIKit/assets/icon/downaload-image.png -------------------------------------------------------------------------------- /Vue3/TUIKit/assets/icon/face-dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Vue3/TUIKit/assets/icon/face-uni.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue3/TUIKit/assets/icon/face-uni.png -------------------------------------------------------------------------------- /Vue3/TUIKit/assets/icon/image-uni.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue3/TUIKit/assets/icon/image-uni.png -------------------------------------------------------------------------------- /Vue3/TUIKit/assets/icon/input-close.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Vue3/TUIKit/assets/icon/left-arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 6 | -------------------------------------------------------------------------------- /Vue3/TUIKit/assets/icon/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue3/TUIKit/assets/icon/loading.gif -------------------------------------------------------------------------------- /Vue3/TUIKit/assets/icon/loading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue3/TUIKit/assets/icon/loading.png -------------------------------------------------------------------------------- /Vue3/TUIKit/assets/icon/minus.svg: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /Vue3/TUIKit/assets/icon/more-uni.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue3/TUIKit/assets/icon/more-uni.png -------------------------------------------------------------------------------- /Vue3/TUIKit/assets/icon/more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue3/TUIKit/assets/icon/more.png -------------------------------------------------------------------------------- /Vue3/TUIKit/assets/icon/plus.svg: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | -------------------------------------------------------------------------------- /Vue3/TUIKit/assets/icon/right-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /Vue3/TUIKit/assets/icon/star-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue3/TUIKit/assets/icon/star-light.png -------------------------------------------------------------------------------- /Vue3/TUIKit/assets/icon/star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue3/TUIKit/assets/icon/star.png -------------------------------------------------------------------------------- /Vue3/TUIKit/assets/icon/video-dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /Vue3/TUIKit/assets/icon/video-play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue3/TUIKit/assets/icon/video-play.png -------------------------------------------------------------------------------- /Vue3/TUIKit/assets/icon/video-uni.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TencentCloud/chat-uikit-vue/eec7fb8c0eb274005a250a432fb95ec568a57cbf/Vue3/TUIKit/assets/icon/video-uni.png -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIChat/emoji-config/custom-emoji.ts: -------------------------------------------------------------------------------- 1 | import { IEmojiGroupList } from '../../../interface'; 2 | 3 | /** 4 | * Custom big emoji 5 | */ 6 | export const CUSTOM_BIG_EMOJI_URL: string = ''; 7 | 8 | export const CUSTOM_BIG_EMOJI_GROUP_LIST: IEmojiGroupList = []; 9 | 10 | /** 11 | * Custom basic emoji 12 | */ 13 | export const CUSTOM_BASIC_EMOJI_URL: string = ''; 14 | 15 | export const CUSTOM_BASIC_EMOJI_URL_MAPPING: Record = {}; 16 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIChat/index.ts: -------------------------------------------------------------------------------- 1 | import TUIChat from './index.vue'; 2 | import Server from './server'; 3 | 4 | new Server(); 5 | 6 | export default TUIChat; 7 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIChat/message-input-toolbar/emoji-picker/index.ts: -------------------------------------------------------------------------------- 1 | import EmojiPicker from './index.vue'; 2 | export default EmojiPicker; 3 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIChat/message-input-toolbar/emoji-picker/style/h5.scss: -------------------------------------------------------------------------------- 1 | .emoji-picker-h5 { 2 | width: 100%; 3 | 4 | &-list { 5 | justify-content: space-between; 6 | } 7 | 8 | &-list::after { 9 | content: ""; 10 | display: block; 11 | flex: 1 1 auto; 12 | } 13 | 14 | .send-btn { 15 | width: 50px; 16 | height: 30px; 17 | background-color: #55C06A; 18 | position: absolute; 19 | right: 10px; 20 | font-size: 16px; 21 | color: #fff; 22 | text-align: center; 23 | line-height: 30px; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIChat/message-input-toolbar/emoji-picker/style/index.scss: -------------------------------------------------------------------------------- 1 | @import "../../../../../assets/styles/common"; 2 | @import "./web"; 3 | @import "./h5"; 4 | 5 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIChat/message-input-toolbar/evaluate/index.ts: -------------------------------------------------------------------------------- 1 | import Evaluate from './index.vue'; 2 | export default Evaluate; 3 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIChat/message-input-toolbar/evaluate/style/index.scss: -------------------------------------------------------------------------------- 1 | @import "./color"; 2 | @import "./web"; 3 | @import "./h5"; 4 | @import "../../../../../assets/styles/common"; 5 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIChat/message-input-toolbar/file-upload/index.ts: -------------------------------------------------------------------------------- 1 | import ImageUpload from './index.vue'; 2 | export default ImageUpload; 3 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIChat/message-input-toolbar/image-upload/index.ts: -------------------------------------------------------------------------------- 1 | import ImageUpload from './index.vue'; 2 | export default ImageUpload; 3 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIChat/message-input-toolbar/index.ts: -------------------------------------------------------------------------------- 1 | import MessageInputToolbar from './index.vue'; 2 | export default MessageInputToolbar; 3 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIChat/message-input-toolbar/toolbar-item-container/style/color.scss: -------------------------------------------------------------------------------- 1 | .toolbar-item-container { 2 | &-dialog { 3 | background: #fff; 4 | box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIChat/message-input-toolbar/toolbar-item-container/style/h5.scss: -------------------------------------------------------------------------------- 1 | .toolbar-item-container-h5 { 2 | &-dialog { 3 | position: static !important; 4 | width: 100%; 5 | box-shadow: none; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIChat/message-input-toolbar/toolbar-item-container/style/index.scss: -------------------------------------------------------------------------------- 1 | @import "../../../../../assets/styles/common"; 2 | @import "./color"; 3 | @import "./web"; 4 | @import "./h5"; 5 | @import "./uni"; 6 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIChat/message-input-toolbar/user-selector/index.ts: -------------------------------------------------------------------------------- 1 | import UserSelector from './index.vue'; 2 | export default UserSelector; 3 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIChat/message-input-toolbar/video-upload/index.ts: -------------------------------------------------------------------------------- 1 | import ImageUpload from './index.vue'; 2 | export default ImageUpload; 3 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIChat/message-input-toolbar/words/index.ts: -------------------------------------------------------------------------------- 1 | import Words from "./index.vue"; 2 | export default Words; 3 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIChat/message-input-toolbar/words/style/color.scss: -------------------------------------------------------------------------------- 1 | .words { 2 | background-color: #ffffff; 3 | &-header { 4 | &-close { 5 | color: #3370ff; 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIChat/message-input-toolbar/words/style/index.scss: -------------------------------------------------------------------------------- 1 | @import url("../../../../../assets/styles/common.scss"); 2 | @import "./color.scss"; 3 | @import "./web.scss"; 4 | @import "./h5.scss"; 5 | 6 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIChat/message-input/index.ts: -------------------------------------------------------------------------------- 1 | import MessageInput from './index.vue'; 2 | export default MessageInput; 3 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIChat/message-list/message-elements/message-stream-markdown/index.ts: -------------------------------------------------------------------------------- 1 | import { IMessageModel } from '@tencentcloud/chat-uikit-engine'; 2 | 3 | export function isBotMessage(message: IMessageModel): boolean { 4 | if (!message || !message.ID || !message.from) { 5 | return false; 6 | } 7 | 8 | if (message.from.startsWith('@RBT#') && !message.to.startsWith('@RBT#')) { 9 | return true; 10 | } 11 | 12 | return false; 13 | } 14 | 15 | export * from './index.vue'; 16 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIChat/message-list/message-elements/message-stream-markdown/operation/index.ts: -------------------------------------------------------------------------------- 1 | export * from './index.vue'; 2 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIChat/message-list/message-elements/message-stream-markdown/operation/type.ts: -------------------------------------------------------------------------------- 1 | /** type & interface */ 2 | export enum IOperationType { 3 | Copy = 'copy', 4 | // Retry is not supported now 5 | // Retry = 'retry', 6 | } 7 | export interface IOperation { 8 | key: IOperationType; 9 | name: string; 10 | icon: string; 11 | isDisabled: boolean; 12 | onClick: (e: Event, key: IOperationType) => void; 13 | } 14 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIChat/message-list/style/color.scss: -------------------------------------------------------------------------------- 1 | .tui-chat { 2 | .tui-message-list { 3 | .message-more { 4 | color: #999; 5 | cursor: pointer; 6 | } 7 | } 8 | 9 | .image-dialog { 10 | background: rgba(0, 0, 0, 0.6); 11 | 12 | header { 13 | background: rgba(0,0,0,0.49); 14 | } 15 | } 16 | } 17 | 18 | .tui-chat-h5 { 19 | .tui-chat-header { 20 | background: #FFF; 21 | } 22 | 23 | .tui-chat-footer { 24 | background: #FFF; 25 | 26 | .input { 27 | input { 28 | background: #F4F5F9; 29 | } 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIChat/message-list/style/h5.scss: -------------------------------------------------------------------------------- 1 | .tui-chat-h5 { 2 | flex: 1; 3 | position: static; 4 | 5 | .tui-chat-main { 6 | .tui-message-list { 7 | height: 100%; 8 | } 9 | 10 | .message-more { 11 | color: #999; 12 | cursor: pointer; 13 | font-size: 14px; 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIChat/message-list/style/index.scss: -------------------------------------------------------------------------------- 1 | @import "../../../../assets/styles/common"; 2 | @import "./color"; 3 | @import "./web"; 4 | @import "./h5"; 5 | 6 | :not(not) { 7 | display: flex; 8 | flex-direction: column; 9 | box-sizing: border-box; 10 | min-width: 0; 11 | } 12 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIChat/offlinePushInfoManager/index.ts: -------------------------------------------------------------------------------- 1 | import OfflinePushInfoManager from './offlinePushInfoManager'; 2 | 3 | export * from './const'; 4 | export * from './interface'; 5 | 6 | export default OfflinePushInfoManager.getInstance(); 7 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIChat/offlinePushInfoManager/info.ts: -------------------------------------------------------------------------------- 1 | import { IChatOfflinePushInfo, ICallOfflinePushInfo } from './interface'; 2 | 3 | export const chatOfflinePushInfo: IChatOfflinePushInfo = { 4 | androidInfo: {}, 5 | apnsInfo: {}, 6 | }; 7 | 8 | export const callOfflinePushInfo: ICallOfflinePushInfo = {}; 9 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIChat/style/index.scss: -------------------------------------------------------------------------------- 1 | @import '../../../assets/styles/common'; 2 | @import './web'; 3 | @import './h5'; 4 | @import './uni'; 5 | @import './wx'; 6 | 7 | :not(not) { 8 | display: flex; 9 | flex-direction: column; 10 | box-sizing: border-box; 11 | min-width: 0; 12 | } 13 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIChat/style/uni.scss: -------------------------------------------------------------------------------- 1 | .tui-chat-uni { 2 | &-message-input { 3 | max-height: 370px; 4 | padding: 10px; 5 | } 6 | 7 | &-message-input-toolbar { 8 | z-index: 100; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIChat/style/wx.scss: -------------------------------------------------------------------------------- 1 | .tui-chat-wx { 2 | &-message-input { 3 | padding: 0; 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIChat/utils/wordsList.ts: -------------------------------------------------------------------------------- 1 | export const wordsList = [ 2 | { 3 | value: '在吗?在吗?在吗?重要的话说三遍。', 4 | }, 5 | { 6 | value: '好久没聊天了,快来和我说说话~', 7 | }, 8 | { 9 | value: '好的,就这么说定了。', 10 | }, 11 | { 12 | value: '感恩的心,感谢有你。', 13 | }, 14 | { 15 | value: '糟糕!是心动的感觉!', 16 | }, 17 | { 18 | value: '心疼地抱抱自己,我太难了!', 19 | }, 20 | { 21 | value: '没关系,别在意,事情过去就过去了。', 22 | }, 23 | { 24 | value: '早上好,今天也是让人期待的一天呢!', 25 | }, 26 | { 27 | value: '熬夜有什么用,又没人陪你聊天,早点休息吧。', 28 | }, 29 | ]; 30 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIContact/contact-info/index.ts: -------------------------------------------------------------------------------- 1 | import ContactInfo from './index.vue'; 2 | 3 | export default ContactInfo; 4 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIContact/contact-info/style/index.scss: -------------------------------------------------------------------------------- 1 | @import "./web"; 2 | @import "./h5"; 3 | @import "../../../../assets/styles/common"; 4 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIContact/contact-list/index.ts: -------------------------------------------------------------------------------- 1 | import ContactList from './index.vue'; 2 | 3 | export default ContactList; 4 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIContact/contact-list/style/h5.scss: -------------------------------------------------------------------------------- 1 | .tui-contact-list-h5 { 2 | .tui-contact-list-item { 3 | .tui-contact-list-item-header { 4 | cursor: none; 5 | } 6 | 7 | .tui-contact-list-item-header:active, 8 | .tui-contact-list-item-main-item:active { 9 | background-color: #eef0f3; 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIContact/contact-list/style/index.scss: -------------------------------------------------------------------------------- 1 | @import './web'; 2 | @import './h5'; 3 | @import '../../../../assets/styles/common'; 4 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIContact/contact-search/index.ts: -------------------------------------------------------------------------------- 1 | import ContactHeader from './index.vue'; 2 | export default ContactHeader; 3 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIContact/index.ts: -------------------------------------------------------------------------------- 1 | import TUIContact from './index.vue'; 2 | import Server from './server'; 3 | Server.getInstance(); 4 | 5 | export default TUIContact; 6 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIContact/select-friend/index.ts: -------------------------------------------------------------------------------- 1 | import SelectFriend from './index.vue'; 2 | 3 | export default SelectFriend; 4 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIConversation/conversation-header/index.ts: -------------------------------------------------------------------------------- 1 | import ConversationHeader from './index.vue'; 2 | 3 | export default ConversationHeader; 4 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIConversation/conversation-list/style/index.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../assets/styles/common'; 2 | @import './color'; 3 | @import './web'; 4 | @import './h5'; 5 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIConversation/conversation-network/index.ts: -------------------------------------------------------------------------------- 1 | import ConversationNetwork from './index.vue'; 2 | 3 | export default ConversationNetwork; 4 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIConversation/index.ts: -------------------------------------------------------------------------------- 1 | import TUIConversation from "./index.vue"; 2 | import TUIConversationServer from "./server"; 3 | new TUIConversationServer(); 4 | 5 | export default TUIConversation; 6 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIConversation/style/color.scss: -------------------------------------------------------------------------------- 1 | .tui-conversation { 2 | background: #fff; 3 | } 4 | 5 | .network { 6 | &-content { 7 | font-family: PingFangSC-Regular; 8 | font-weight: 400; 9 | color: #e54545; 10 | letter-spacing: 0; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIConversation/style/index.scss: -------------------------------------------------------------------------------- 1 | @import '../../../assets/styles/common'; 2 | @import './web'; 3 | @import './color'; 4 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIGroup/create-group/index.ts: -------------------------------------------------------------------------------- 1 | import CreateGroup from './index.vue'; 2 | 3 | export default CreateGroup; 4 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIGroup/create-group/style/index.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../assets/styles/common'; 2 | @import './color'; 3 | @import './web'; 4 | @import './h5'; 5 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIGroup/index.ts: -------------------------------------------------------------------------------- 1 | import TUIGroup from './index.vue'; 2 | import Server from './server'; 3 | 4 | Server.getInstance(); 5 | 6 | export default TUIGroup; 7 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIGroup/manage-group/index.ts: -------------------------------------------------------------------------------- 1 | import ManageGroup from './index.vue'; 2 | 3 | export default ManageGroup; 4 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIGroup/manage-group/style/h5.scss: -------------------------------------------------------------------------------- 1 | .deleted-dialog { 2 | padding: 20%; 3 | } 4 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUIGroup/select-member/index.ts: -------------------------------------------------------------------------------- 1 | import SelectMember from './index.vue'; 2 | 3 | export default SelectMember; 4 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUINotification/interface.ts: -------------------------------------------------------------------------------- 1 | export interface ITUINotification { 2 | showPreviews: boolean; 3 | allowNotifications: boolean; 4 | notificationTitle: string; 5 | notificationIcon: string; 6 | } 7 | 8 | export interface INotificationConstructorParams { 9 | showPreviews?: boolean; 10 | allowNotifications?: boolean; 11 | notificationTitle?: string; 12 | notificationIcon?: string; 13 | } 14 | 15 | export type NotificationType = 'chat' | 'call'; 16 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUISearch/index.ts: -------------------------------------------------------------------------------- 1 | import TUISearch from './index.vue'; 2 | import Server from './server'; 3 | new Server(); 4 | 5 | export default TUISearch; 6 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUISearch/search-container/index.ts: -------------------------------------------------------------------------------- 1 | import SearchContainer from './index.vue'; 2 | export default SearchContainer; 3 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUISearch/search-container/style/index.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../assets/styles/common'; 2 | @import './web'; 3 | @import './h5'; 4 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUISearch/search-input/index.ts: -------------------------------------------------------------------------------- 1 | import SearchInput from './index.vue'; 2 | export default SearchInput; 3 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUISearch/search-more/index.ts: -------------------------------------------------------------------------------- 1 | import SearchMore from './index.vue'; 2 | 3 | export default SearchMore; 4 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUISearch/search-result/index.ts: -------------------------------------------------------------------------------- 1 | import SearchResult from './index.vue'; 2 | export default SearchResult; 3 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUISearch/search-result/search-result-default/index.ts: -------------------------------------------------------------------------------- 1 | import SearchResultDefault from './index.vue'; 2 | export default SearchResultDefault; 3 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUISearch/search-result/search-result-item/style/h5.scss: -------------------------------------------------------------------------------- 1 | .search-result-list-item-h5 { 2 | padding: 10px 0; 3 | border-radius: 0; 4 | 5 | .bubble { 6 | .bubble-left { 7 | .bubble-left-avatar { 8 | width: 48px; 9 | height: 48px; 10 | } 11 | 12 | .bubble-main { 13 | .bubble-main-name { 14 | color: #333; 15 | font-family: "PingFang SC", sans-serif; 16 | font-size: 14px; 17 | font-weight: 400; 18 | letter-spacing: 0; 19 | text-align: left; 20 | } 21 | } 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUISearch/search-result/search-result-item/style/index.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../../assets/styles/common'; 2 | @import './web'; 3 | @import './h5'; 4 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUISearch/search-result/search-result-loading/index.ts: -------------------------------------------------------------------------------- 1 | import SearchResultLoading from './index.vue'; 2 | export default SearchResultLoading; 3 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUISearch/search-result/style/index.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../assets/styles/common'; 2 | @import './web'; 3 | @import './h5'; 4 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUISearch/style/index.scss: -------------------------------------------------------------------------------- 1 | @import '../../../assets/styles/common'; 2 | @import './web'; 3 | @import './h5'; 4 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/TUISearch/style/web.scss: -------------------------------------------------------------------------------- 1 | .tui-search { 2 | &-main-global { 3 | width: 100%; 4 | height: fit-content; 5 | } 6 | 7 | &-main-conversation { 8 | width: 100%; 9 | height: 100%; 10 | background: #fff; 11 | box-shadow: 0 1px 10px 0 rgba(2,16,43,0.15); 12 | } 13 | 14 | .tui-search-global { 15 | &-header { 16 | display: flex; 17 | flex-direction: row; 18 | justify-content: center; 19 | align-items: center; 20 | } 21 | } 22 | 23 | .tui-search-conversation { 24 | width: 100%; 25 | height: 100%; 26 | overflow: hidden; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/common/BottomPopup/index.ts: -------------------------------------------------------------------------------- 1 | import BottomPopup from './index.vue'; 2 | 3 | export default BottomPopup; 4 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/common/BottomPopup/style/index.scss: -------------------------------------------------------------------------------- 1 | @import "../../../../assets/styles/common"; 2 | @import "./h5"; 3 | @import "./modal"; 4 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/common/BottomPopup/style/modal.scss: -------------------------------------------------------------------------------- 1 | .bottom-popup-modal { 2 | background: rgba(0, 0, 0, 0.5); 3 | } 4 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/common/DatePicker/date-picker.ts: -------------------------------------------------------------------------------- 1 | import { Dayjs } from 'dayjs'; 2 | 3 | export type DateCellType = 4 | | 'normal' 5 | | 'today' 6 | | 'week' 7 | | 'next-month' 8 | | 'prev-month'; 9 | export interface DateCell { 10 | text?: number; 11 | disabled?: boolean; 12 | isSelected?: boolean; 13 | isSelectedStart?: boolean; 14 | isSelectedEnd?: boolean; 15 | isInRange?: boolean; 16 | isCurrent?: boolean; 17 | date: typeof Dayjs; 18 | type?: DateCellType; 19 | } 20 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/common/DatePicker/index.ts: -------------------------------------------------------------------------------- 1 | import DatePicker from './index.vue'; 2 | export default DatePicker; 3 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/common/Dialog/index.ts: -------------------------------------------------------------------------------- 1 | import Dialog from './index.vue'; 2 | 3 | export default Dialog; 4 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/common/Dialog/style/dialog.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../assets/styles/common'; 2 | @import "./color"; 3 | @import "./web"; 4 | @import "./h5"; 5 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/common/Drag/index.ts: -------------------------------------------------------------------------------- 1 | import Drag from './index.vue'; 2 | export default Drag; 3 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/common/ImagePreviewer/index.ts: -------------------------------------------------------------------------------- 1 | import ImagePreviewer from './index.vue'; 2 | 3 | export default ImagePreviewer; 4 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/common/Loading/index.ts: -------------------------------------------------------------------------------- 1 | import Loading from './index.vue'; 2 | export default Loading; 3 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/common/SelectUser/index.ts: -------------------------------------------------------------------------------- 1 | import SelectUser from './index.vue'; 2 | 3 | export default SelectUser; 4 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/common/SwitchBar/index.ts: -------------------------------------------------------------------------------- 1 | import SwitchBar from './index.vue'; 2 | export default SwitchBar; 3 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/common/Toast/type.ts: -------------------------------------------------------------------------------- 1 | const TOAST_TYPE = { 2 | SUCCESS: 'success', 3 | WARNING: 'warning', 4 | ERROR: 'error', 5 | NORMAL: 'normal', 6 | }; 7 | 8 | export default TOAST_TYPE; 9 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/common/Transfer/index.ts: -------------------------------------------------------------------------------- 1 | import Transfer from './index.vue'; 2 | export default Transfer; 3 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/common/Transfer/style/transfer.scss: -------------------------------------------------------------------------------- 1 | @import '../../../../assets/styles/common'; 2 | @import "./color"; 3 | @import "./web"; 4 | @import "./h5"; 5 | 6 | .icon-unselected { 7 | width: 18px; 8 | height: 18px; 9 | background: #FFF; 10 | border: 1px solid #DDD; 11 | border-radius: 11px; 12 | box-sizing: border-box; 13 | } 14 | -------------------------------------------------------------------------------- /Vue3/TUIKit/components/index.ts: -------------------------------------------------------------------------------- 1 | import TUIChat from "./TUIChat"; 2 | import TUIConversation from "./TUIConversation"; 3 | import TUISearch from "./TUISearch"; 4 | import TUIContact from "./TUIContact"; 5 | import TUIGroup from "./TUIGroup"; 6 | 7 | const TUIComponents = { 8 | TUIChat, 9 | TUIConversation, 10 | TUIContact, 11 | TUISearch, 12 | TUIGroup 13 | }; 14 | 15 | export default TUIComponents; 16 | 17 | export { 18 | TUIChat, 19 | TUIConversation, 20 | TUIContact, 21 | TUISearch, 22 | TUIGroup, 23 | }; 24 | -------------------------------------------------------------------------------- /Vue3/TUIKit/debug/index.d.ts: -------------------------------------------------------------------------------- 1 | export function genTestUserSig({ SDKAppID: number, secretKey: string, userID: string }): any; 2 | export const EXPIRETIME: number; 3 | -------------------------------------------------------------------------------- /Vue3/TUIKit/debug/index.js: -------------------------------------------------------------------------------- 1 | export * from "./GenerateTestUserSig"; 2 | -------------------------------------------------------------------------------- /Vue3/TUIKit/index.ts: -------------------------------------------------------------------------------- 1 | import { genTestUserSig } from './debug'; 2 | import Server from './server'; 3 | import TUIComponents, { 4 | TUIChat, 5 | TUIConversation, 6 | TUIContact, 7 | TUISearch, 8 | TUIGroup, 9 | } from './components'; 10 | import TUIKit from './index.vue'; 11 | import { hideTUIChatFeatures } from './components/TUIChat/config'; 12 | 13 | const TUIChatKit = new Server(); 14 | TUIChatKit.init(); 15 | 16 | export { 17 | TUIKit, 18 | TUIChatKit, 19 | TUIComponents, 20 | TUIChat, 21 | TUIConversation, 22 | TUIContact, 23 | TUISearch, 24 | TUIGroup, 25 | hideTUIChatFeatures, 26 | genTestUserSig, 27 | }; 28 | -------------------------------------------------------------------------------- /Vue3/TUIKit/locales/en/component.ts: -------------------------------------------------------------------------------- 1 | const component = { 2 | "取消": "Cancel", 3 | "完成": "Done", 4 | "已选中": "Selected", 5 | "人": "", 6 | "保存": "Save", 7 | "请输入userID": "Enter a userID", 8 | "请输入groupID": "Enter a groupID", 9 | "确定": "submit", 10 | "全选": "All", 11 | "已在群聊中": "exists", 12 | "查看更多": "More", 13 | "图片 url 不存在": "Image url does not exist", 14 | "已取消": "Cancelled", 15 | "获取权限失败": "Failed to obtain permission", 16 | "已保存至相册": "Saved to album", 17 | "图片下载失败": "Image download failed", 18 | "暂不支持下载此类型图片": "Downloading this type of pictures is not supported yet", 19 | } 20 | 21 | export default component; 22 | -------------------------------------------------------------------------------- /Vue3/TUIKit/locales/en/emoji.ts: -------------------------------------------------------------------------------- 1 | import { default as Emoji } from '../../components/TUIChat/emoji-config/locales/en'; 2 | export default Emoji; 3 | -------------------------------------------------------------------------------- /Vue3/TUIKit/locales/en/evaluate.ts: -------------------------------------------------------------------------------- 1 | const Evaluate = { 2 | "请对本次服务进行评价": "Please rate this service", 3 | "提交评价": "Feedback", 4 | "服务评价工具": "Service rate tool", 5 | "使用": "Build with", 6 | "自定义消息": "Custom message", 7 | "搭建": "", 8 | "星": "Star" 9 | } 10 | 11 | export default Evaluate; 12 | -------------------------------------------------------------------------------- /Vue3/TUIKit/locales/index.ts: -------------------------------------------------------------------------------- 1 | 2 | import en from './en'; 3 | import zh_cn from './zh_cn'; 4 | import zh_tw from './zh_tw'; 5 | 6 | export interface ILanguageResources { 7 | [key: string]: string | ILanguageResources; 8 | } 9 | 10 | const messages: Record = { 11 | ...en, 12 | ...zh_cn, 13 | ...zh_tw, 14 | }; 15 | 16 | export default messages; 17 | -------------------------------------------------------------------------------- /Vue3/TUIKit/locales/zh_cn/TUIConversation.ts: -------------------------------------------------------------------------------- 1 | const TUIConversation = { 2 | "发起会话": "发起会话", 3 | "发起单聊": "发起单聊", 4 | "发起群聊": "发起群聊", 5 | "请输入userID": "请输入userID", 6 | "删除会话": "删除会话", 7 | "删除后,将清空该聊天的消息记录": "删除后,将清空该聊天的消息记录", 8 | "删除后,将清空该群聊的消息记录": "删除后,将清空该群聊的消息记录", 9 | "置顶会话": "置顶会话", 10 | "取消置顶": "取消置顶", 11 | "消息免打扰": "消息免打扰", 12 | "取消免打扰": "取消免打扰", 13 | "系统通知": "系统通知", 14 | "有人@我": "有人@我", 15 | "@所有人": "@所有人", 16 | "条": "条", 17 | "我": "我", 18 | "网络异常,请您检查网络设置": "网络异常,请您检查网络设置", 19 | "您已被群管理员移出群聊": "您已被群管理员移出群聊", 20 | "该群聊已被解散": "该群聊已被解散", 21 | "您已退出该群聊": "您已退出该群聊", 22 | } 23 | 24 | export default TUIConversation; 25 | -------------------------------------------------------------------------------- /Vue3/TUIKit/locales/zh_cn/component.ts: -------------------------------------------------------------------------------- 1 | const components = { 2 | "取消": "取消", 3 | "完成": "完成", 4 | "已选中": "已选中", 5 | "人": "人", 6 | "保存": "保存", 7 | "请输入userID": "请输入userID", 8 | "请输入groupID": "请输入groupID", 9 | "确定": "确定", 10 | "全选": "全选", 11 | "已在群聊中": "已在群聊中", 12 | "查看更多": "查看更多", 13 | "图片 url 不存在": "图片 url 不存在", 14 | "已取消": "已取消", 15 | "获取权限失败": "获取权限失败", 16 | "已保存至相册": "已保存至相册", 17 | "图片下载失败": "图片下载失败", 18 | "暂不支持下载此类型图片": "暂不支持下载此类型图片", 19 | } 20 | 21 | export default components; 22 | -------------------------------------------------------------------------------- /Vue3/TUIKit/locales/zh_cn/emoji.ts: -------------------------------------------------------------------------------- 1 | import { default as Emoji } from '../../components/TUIChat/emoji-config/locales/zh_cn'; 2 | export default Emoji; 3 | -------------------------------------------------------------------------------- /Vue3/TUIKit/locales/zh_cn/evaluate.ts: -------------------------------------------------------------------------------- 1 | const Evaluate = { 2 | "请对本次服务进行评价": "请对本次服务进行评价", 3 | "提交评价": "提交评价", 4 | "服务评价工具": "服务评价工具", 5 | "使用": "使用", 6 | "自定义消息": "自定义消息", 7 | "搭建": "搭建", 8 | "星": "星" 9 | } 10 | 11 | export default Evaluate; 12 | -------------------------------------------------------------------------------- /Vue3/TUIKit/locales/zh_cn/words.ts: -------------------------------------------------------------------------------- 1 | const Words = { 2 | "常用语-快捷回复工具": "常用语-快捷回复工具", 3 | "在吗?在吗?在吗?重要的话说三遍。": "在吗?在吗?在吗?重要的话说三遍。", 4 | "好久没聊天了,快来和我说说话~": "好久没聊天了,快来和我说说话~", 5 | "好的,就这么说定了。": "好的,就这么说定了。", 6 | "感恩的心,感谢有你。": "感恩的心,感谢有你。", 7 | "糟糕!是心动的感觉!": "糟糕!是心动的感觉!", 8 | "心疼地抱抱自己,我太难了!": "心疼地抱抱自己,我太难了!", 9 | "没关系,别在意,事情过去就过去了。": "没关系,别在意,事情过去就过去了。", 10 | "早上好,今天也是让人期待的一天呢!": "早上好,今天也是让人期待的一天呢!", 11 | "熬夜有什么用,又没人陪你聊天,早点休息吧。": "熬夜有什么用,又没人陪你聊天,早点休息吧。" 12 | } 13 | 14 | export default Words; 15 | -------------------------------------------------------------------------------- /Vue3/TUIKit/locales/zh_tw/TUIConversation.ts: -------------------------------------------------------------------------------- 1 | const TUIConversation = { 2 | "发起会话": "發起會話", 3 | "发起单聊": "發起單聊", 4 | "发起群聊": "發起群聊", 5 | "请输入userID": "請輸入userID", 6 | "删除会话": "刪除會話", 7 | "删除后,将清空该聊天的消息记录": "刪除後,將清空該聊天的消息記錄", 8 | "删除后,将清空该群聊的消息记录": "刪除後,將清空該群聊的消息記錄", 9 | "置顶会话": "置頂會話", 10 | "取消置顶": "取消置頂", 11 | "消息免打扰": "消息免打擾", 12 | "取消免打扰": "取消免打擾", 13 | "系统通知": "系統通知", 14 | "有人@我": "有人@我", 15 | "@所有人": "@所有人", 16 | "条": "條", 17 | "我": "我", 18 | "网络异常,请您检查网络设置": "網絡異常,請您檢查網絡設置", 19 | "您已被群管理员移出群聊": "您已被群管理員移出群聊", 20 | "该群聊已被解散": "該群聊已被解散", 21 | "您已退出该群聊": "您已退出該群聊", 22 | } 23 | 24 | export default TUIConversation; 25 | -------------------------------------------------------------------------------- /Vue3/TUIKit/locales/zh_tw/component.ts: -------------------------------------------------------------------------------- 1 | const components = { 2 | "取消": "取消", 3 | "完成": "完成", 4 | "已选中": "已選中", 5 | "人": "人", 6 | "保存": "保存", 7 | "请输入userID": "請輸入userID", 8 | "请输入groupID": "請輸入groupID", 9 | "确定": "確定", 10 | "全选": "全選", 11 | "已在群聊中": "已在群聊中", 12 | "查看更多": "查看更多", 13 | "图片 url 不存在": "圖片 url 不存在", 14 | "已取消": "已取消", 15 | "获取权限失败": "獲取權限失敗", 16 | "已保存至相册": "已保存至相冊", 17 | "图片下载失败": "圖片下載失敗", 18 | "暂不支持下载此类型图片": "暫不支持下載此類型圖片", 19 | }; 20 | 21 | export default components; 22 | -------------------------------------------------------------------------------- /Vue3/TUIKit/locales/zh_tw/emoji.ts: -------------------------------------------------------------------------------- 1 | import { default as Emoji } from '../../components/TUIChat/emoji-config/locales/zh_tw'; 2 | export default Emoji; 3 | -------------------------------------------------------------------------------- /Vue3/TUIKit/locales/zh_tw/evaluate.ts: -------------------------------------------------------------------------------- 1 | const Evaluate = { 2 | "请对本次服务进行评价": "請對本次服務進行評價", 3 | "提交评价": "提交評價", 4 | "服务评价工具": "服務評價工具", 5 | "使用": "使用", 6 | "自定义消息": "自定義消息", 7 | "搭建": "搭建", 8 | "星": "星" 9 | } 10 | 11 | export default Evaluate; 12 | -------------------------------------------------------------------------------- /Vue3/TUIKit/locales/zh_tw/words.ts: -------------------------------------------------------------------------------- 1 | const Words = { 2 | "常用语-快捷回复工具": "常用語-快捷回覆工具", 3 | "在吗?在吗?在吗?重要的话说三遍。": "在嗎?在嗎?在嗎?重要的話說三遍。", 4 | "好久没聊天了,快来和我说说话~": "好久沒聊天了,快來和我說說話~", 5 | "好的,就这么说定了。": "好的,就這麼說定了。", 6 | "感恩的心,感谢有你。": "感恩的心,感謝有你。", 7 | "糟糕!是心动的感觉!": "糟糕!是心動的感覺!", 8 | "心疼地抱抱自己,我太难了!": "心疼地抱抱自己,我太難了!", 9 | "没关系,别在意,事情过去就过去了。": "沒關係,別在意,事情過去就過去了。", 10 | "早上好,今天也是让人期待的一天呢!": "早上好,今天也是讓人期待的一天呢!", 11 | "熬夜有什么用,又没人陪你聊天,早点休息吧。": "熬夜有什麼用,又沒人陪你聊天,早點休息吧。" 12 | } 13 | 14 | export default Words; 15 | -------------------------------------------------------------------------------- /Vue3/TUIKit/plugins/extension-server/callkit.ts: -------------------------------------------------------------------------------- 1 | export default class CallkitPluginServer {} 2 | -------------------------------------------------------------------------------- /Vue3/TUIKit/plugins/plugin-components/message-customer/index.ts: -------------------------------------------------------------------------------- 1 | import { 2 | isCustomerServicePluginMessage, 3 | isMessageInvisible as isCustomServiceMessageInvisible, 4 | } from '@tencentcloud/tui-customer-service-plugin'; 5 | export { isCustomerServicePluginMessage, isCustomServiceMessageInvisible }; 6 | -------------------------------------------------------------------------------- /Vue3/TUIKit/plugins/plugin-components/message-customer/message-customer-service.vue: -------------------------------------------------------------------------------- 1 | 4 | 14 | 17 | -------------------------------------------------------------------------------- /Vue3/TUIKit/utils/enableSampleTaskStatus.ts: -------------------------------------------------------------------------------- 1 | import { TUIStore, StoreName } from "@tencentcloud/chat-uikit-engine"; 2 | export function enableSampleTaskStatus(taskKey: string) { 3 | const tasks = TUIStore.getData(StoreName.APP, "tasks"); 4 | if (taskKey in tasks && !tasks[taskKey]) { 5 | tasks[taskKey] = true; 6 | TUIStore.update(StoreName.APP, "tasks", tasks); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Vue3/TUIKit/utils/env.ts: -------------------------------------------------------------------------------- 1 | import { getPlatform } from '@tencentcloud/universal-api'; 2 | 3 | declare const uni: any; 4 | 5 | export const isPC = getPlatform() === 'pc'; 6 | 7 | export const isH5 = getPlatform() === 'h5'; 8 | 9 | export const isWeChat = getPlatform() === 'wechat'; 10 | 11 | export const isApp = getPlatform() === 'app'; 12 | 13 | export const isUniFrameWork = typeof uni !== 'undefined'; 14 | 15 | // H5, mini programs, and apps are all considered mobile. 16 | // If you need to unify the mobile UI style, you can directly use isMobile to control 17 | export const isMobile = isH5 || isWeChat || isApp; 18 | -------------------------------------------------------------------------------- /Vue3/TUIKit/utils/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./type-check"; 2 | --------------------------------------------------------------------------------