feat: 增加频道头部右侧的注入电

This commit is contained in:
tangtaoit 2023-09-01 22:13:29 +08:00
parent dd4fc57a58
commit ea17df855a
19 changed files with 288 additions and 179 deletions

View File

@ -3,7 +3,7 @@
"version": "1.0.0",
"main": "src/index.tsx",
"dependencies": {
"@douyinfe/semi-ui": "^2.23.5",
"@douyinfe/semi-ui": "^2.24.2",
"@lottiefiles/lottie-player": "^1.5.5",
"@types/qrcode.react": "^1.0.2",
"@types/react-color": "^3.0.6",
@ -14,7 +14,7 @@
"benz-amr-recorder": "^1.1.3",
"classnames": "^2.3.1",
"hotkeys-js": "^3.8.7",
"wukongimjssdk": "^1.1.1",
"wukongimjssdk": "^1.1.2",
"moment": "^2.29.3",
"qrcode.react": "^1.0.1",
"react": "^17.0.2",

View File

@ -69,6 +69,8 @@ html {
text-rendering: optimizeLegibility;
background: var( --background-color);
color: rgba(9,30,66,.87) ;
--semi-color-primary: #E46342;
}
div {

View File

@ -19,7 +19,6 @@ import RouteContext from "./Service/Context";
import { ConnectStatus } from "wukongimjssdk";
import { WKBaseContext } from "./Components/WKBase";
import StorageService from "./Service/StorageService";
import axios from "axios";
export enum ThemeMode {
light,

View File

@ -93,11 +93,4 @@ export default interface ConversationContext {
* @param tip
*/
locateMessage(messageSeq:number):any
/**
* id
*/
getMessageContainerId():string
getMessageContainer():Element|undefined
}

View File

@ -1,4 +1,4 @@
import { Channel, ChannelTypeGroup, ChannelTypePerson, ConversationAction, WKSDK, Mention, Message, MessageContent, Reminder, ReminderType, Reply, MessageText } from "wukongimjssdk";
import { Channel, ChannelTypeGroup, ChannelTypePerson, ConversationAction, WKSDK, Mention, Message, MessageContent, Reminder, ReminderType, Reply,MessageText } from "wukongimjssdk";
import React, { Component, HTMLProps } from "react";
import Provider from "../../Service/Provider";
import ConversationVM from "./vm";
@ -34,7 +34,6 @@ export class Conversation extends Component<ConversationProps> implements Conver
scrollTimer?: NodeJS.Timer
updateBrowseToMessageSeqAndReminderDoneing: boolean = false
private _dragFileCallback?: (file: File) => void
private _self = this;
constructor(props: any) {
super(props)
@ -161,18 +160,6 @@ export class Conversation extends Component<ConversationProps> implements Conver
messageInputContext(): MessageInputContext {
return this._messageInputContext
}
getMessageContainerId(): string {
return this.vm.messageContainerId
}
getMessageContainer(): Element|undefined {
const el = document.getElementById(this.vm.messageContainerId)
console.log("getMessageContainer--->",el)
if (!el) {
return undefined
}
return el
}
componentDidMount() {
@ -253,7 +240,7 @@ export class Conversation extends Component<ConversationProps> implements Conver
this.setState({})
}} key={message.clientMsgNo} id={`${message.contentType === MessageContentTypeConst.time ? "time-" : ""}${message.clientMsgNo}`} className={classNames("wk-message-item", last ? "wk-message-item-last" : undefined, message.locateRemind ? 'wk-message-item-reminder' : undefined)} >
{
MessageCell ? <MessageCell key={message.clientMsgNo} message={message} context={this}/> : null
MessageCell ? <MessageCell key={message.clientMsgNo} message={message} context={this} /> : null
}
</div>
@ -263,19 +250,12 @@ export class Conversation extends Component<ConversationProps> implements Conver
if (this.scrollTimer) {
clearTimeout(this.scrollTimer)
}
const scrollTop = e.target.scrollTop;
const scrollHeight = e.target.scrollHeight;
const clientHeight = e.clientHeight;
this.scrollTimer = setTimeout(() => {
this.handleScrollEnd()
}, 500)
if (this.contextMenusContext) {
this.contextMenusContext.hide()
}
const targetScrollTop = scrollTop;
const scrollOffsetTop = scrollHeight - (targetScrollTop + clientHeight);
// console.log("targetScrollTop---->",targetScrollTop,scrollOffsetTop,this.vm.loading,this.vm.pullupHasMore)
this.contextMenusContext.hide()
const targetScrollTop = e.target.scrollTop;
const scrollOffsetTop = e.target.scrollHeight - (targetScrollTop + e.target.clientHeight);
if (targetScrollTop <= 250 && !this.vm.loading && !this.vm.pulldownFinished) { // 下拉
this.vm.pulldownMessages()
} else if (scrollOffsetTop <= 500 && !this.vm.loading && this.vm.pullupHasMore) { // 上拉
@ -299,7 +279,6 @@ export class Conversation extends Component<ConversationProps> implements Conver
}
handleScrollEnd() {
console.log("handleScrollEnd---->")
this.uploadReadedIfNeed()
}
@ -481,7 +460,6 @@ export class Conversation extends Component<ConversationProps> implements Conver
this.vm.notifyListener()
}
render() {
const { chatBg, channel } = this.props
@ -501,7 +479,6 @@ export class Conversation extends Component<ConversationProps> implements Conver
this.dragStart()
}} className={classNames("wk-conversation-content")}>
<div className="wk-conversation-messages" id={vm.messageContainerId} onScroll={this.handleScroll.bind(this)}>
{
vm.messages.map((message, i) => {

View File

@ -247,6 +247,9 @@ export default class ConversationVM extends ProviderListener {
if (!message.channel.isEqual(this.channel)) {
return
}
if(message.contentType == MessageContentTypeConst.rtcData) {
return
}
if(message.header.noPersist) { // 不存储的消息不显示
return
}
@ -618,7 +621,6 @@ export default class ConversationVM extends ProviderListener {
}
if (change) {
this.refreshNewMsgCount()
console.log("refreshNewMsgCount---->")
}
}

View File

@ -17,6 +17,19 @@ export interface WKBaseState {
alertTitle?: string
onAlertOk?: () => void
conversationSelectFinished?: (channel: Channel[]) => void
showGlobalModal?: boolean // 显示全局弹窗
globalModalOptions?:GlobalModalOptions
}
export class GlobalModalOptions {
width?: string
height?: string
body?: ReactNode
footer?: ReactNode
className?: string
closable?: boolean
}
export interface WKBaseProps{
@ -34,6 +47,10 @@ export interface WKBaseContext {
hideUserInfo(): void
// 弹出提示框
showAlert(conf:{content:string,title?:string,onOk?:()=>void}): void
showGlobalModal(options:GlobalModalOptions):void
hideGlobalModal():void
}
export default class WKBase extends Component<WKBaseProps, WKBaseState> implements WKBaseContext {
@ -76,6 +93,18 @@ export default class WKBase extends Component<WKBaseProps, WKBaseState> implemen
})
}
showGlobalModal(options:GlobalModalOptions) {
this.setState({
showGlobalModal: true,
globalModalOptions: options,
})
}
hideGlobalModal() {
this.setState({
showGlobalModal: false
})
}
componentDidMount() {
const { onContext } = this.props
if (onContext) {
@ -143,6 +172,9 @@ export default class WKBase extends Component<WKBaseProps, WKBaseState> implemen
maskClosable={false}>
{alertContent}
</Modal>
<Modal closable={this.state.globalModalOptions?.closable} className={this.state.globalModalOptions?.className} visible={this.state.showGlobalModal} width={this.state.globalModalOptions?.width} footer={this.state.globalModalOptions?.footer}>
{this.state.globalModalOptions?.body}
</Modal>
</div>
}
}

View File

@ -7,8 +7,8 @@ import { EndpointManager } from "./Service/Module";
import ConversationContext from "./Components/Conversation/context";
export class MessageContextMenus {
title!:string
onClick?:()=>void
title!: string
onClick?: () => void
}
export class EndpointCommon {
@ -55,49 +55,62 @@ export class EndpointCommon {
const channel = param.channel as Channel
const conversation = WKSDK.shared().conversationManager.findConversation(channel)
let initLocateMessageSeq = 0
if(conversation && conversation.lastMessage && conversation.unread>0 && conversation.lastMessage.messageSeq > conversation.unread) {
if (conversation && conversation.lastMessage && conversation.unread > 0 && conversation.lastMessage.messageSeq > conversation.unread) {
initLocateMessageSeq = conversation.lastMessage.messageSeq - conversation.unread
}
}
WKApp.routeRight.replaceToRoot(<ChatContentPage key={channel.getChannelKey()} channel={channel} initLocateMessageSeq={initLocateMessageSeq}></ChatContentPage>)
}, {})
}
registerMessageContextMenus(sid: string, handle: (message: Message,context:ConversationContext) => MessageContextMenus|null,sort?:number) {
registerMessageContextMenus(sid: string, handle: (message: Message, context: ConversationContext) => MessageContextMenus | null, sort?: number) {
EndpointManager.shared.setMethod(sid, (param: any) => {
return handle(param.message,param.context)
return handle(param.message, param.context)
}, {
category: EndpointCategory.messageContextMenus,
sort: sort,
})
}
messageContextMenus(message: Message,ctx:ConversationContext): MessageContextMenus[] {
return EndpointManager.shared.invokes(EndpointCategory.messageContextMenus, {message:message,context:ctx})
messageContextMenus(message: Message, ctx: ConversationContext): MessageContextMenus[] {
return EndpointManager.shared.invokes(EndpointCategory.messageContextMenus, { message: message, context: ctx })
}
registerChatToolbar(sid:string,handle:(ctx:ConversationContext)=>React.ReactNode|undefined) {
EndpointManager.shared.setMethod(sid,(param)=>{
return handle(param)
},{
category: EndpointCategory.chatToolbars
})
registerChatToolbar(sid: string, handle: (ctx: ConversationContext) => React.ReactNode | undefined) {
EndpointManager.shared.setMethod(sid, (param) => {
return handle(param)
}, {
category: EndpointCategory.chatToolbars
})
}
chatToolbars(ctx:ConversationContext) :React.ReactNode[] {
return EndpointManager.shared.invokes(EndpointCategory.chatToolbars,ctx)
chatToolbars(ctx: ConversationContext): React.ReactNode[] {
return EndpointManager.shared.invokes(EndpointCategory.chatToolbars, ctx)
}
registerChannelHeaderRightItem(id: string, callback: (param: any) => JSX.Element|undefined, sort?: number) {
EndpointManager.shared.setMethod(id, (param) => {
return callback(param)
}, {
category: EndpointCategory.channelHeaderRightItems,
sort: sort,
})
}
callOnLogin() {
const len = this._onLogins.length;
for (var i = 0; i < len; i++) {
this._onLogins[i]()
}
channelHeaderRightItems(channel:Channel): JSX.Element[] {
return EndpointManager.shared.invokes(EndpointCategory.channelHeaderRightItems,{channel:channel})
}
callOnLogin() {
const len = this._onLogins.length;
for (var i = 0; i < len; i++) {
this._onLogins[i]()
}
}
}
export class ChatToolbar {
icon!:string
onClick?:()=>void
icon!: string
onClick?: () => void
}

View File

@ -5,7 +5,6 @@ import { MessageContentTypeConst } from "../../Service/Const"
import MessageBase from "../Base"
import { MessageCell } from "../MessageCell"
import "@lottiefiles/lottie-player/dist/tgs-player";
import LazyLoad from 'react-lazyload';

View File

@ -14,15 +14,12 @@ class MessageBaseCellPropsImp implements MessageBaseCellProps {
}
export class MessageBaseCell<P extends MessageBaseCellProps = MessageBaseCellPropsImp, S = {}> extends Component<P, S> {
}
export class MessageCell<P extends MessageBaseCellProps = MessageBaseCellPropsImp, S = {}> extends MessageBaseCell<P, S> {
componentDidMount(): void {
}
render() {
return <div>MessageCell</div>
}

View File

@ -8,6 +8,7 @@ import MessageTrail from "../Base/tail"
import MessageBase from "../Base"
import WKApp from "../../App"
import { MessageContentTypeConst } from "../../Service/Const"
import { MessageWrap } from "../../Service/Model"
var BenzAMRRecorder = require('benz-amr-recorder');

View File

@ -210,6 +210,19 @@ body[theme-mode=dark] .wk-chat-conversation-header-channel-info-name {
align-items: center;
}
.wk-chat-conversation-header-right div {
margin-right: 10px;
display: flex;
align-items: center;
justify-content: center;
width: 40px;
height: 40px;
}
.wk-chat-conversation-header-right div:last-child {
margin-right: 0px;
}
.wk-chat-conversation-header-setting {
display: flex;
align-items: center;
@ -293,4 +306,21 @@ body[theme-mode=dark] .wk-chat-popover {
.wk-chatmenuspopover-title {
margin-left: 10px;
font-size: 14px;
}
.wk-chat-conversation-header-right-item {
position: relative;
}
.wk-conversation-header-mask {
background-color: rgb(0,0,0,0.0);
position: absolute;
width: 100%;
height: 100%;
top: 0px;
border-radius: 100%;
}
.wk-conversation-header-mask:hover {
background-color: rgb(0,0,0,0.1);
}

View File

@ -19,7 +19,7 @@ import ConversationContext from "../../Components/Conversation/context";
export interface ChatContentPageProps {
channel: Channel
initLocateMessageSeq?:number
initLocateMessageSeq?: number
}
export interface ChatContentPageState {
@ -27,7 +27,7 @@ export interface ChatContentPageState {
}
export class ChatContentPage extends Component<ChatContentPageProps, ChatContentPageState> {
channelInfoListener!: ChannelInfoListener
conversationContext!:ConversationContext
conversationContext!: ConversationContext
constructor(props: any) {
super(props)
this.state = {
@ -51,7 +51,7 @@ export class ChatContentPage extends Component<ChatContentPageProps, ChatContent
}
render(): React.ReactNode {
const { channel,initLocateMessageSeq } = this.props
const { channel, initLocateMessageSeq } = this.props
const { showChannelSetting } = this.state
const channelInfo = WKSDK.shared().channelManager.getChannelInfo(channel)
if (!channelInfo) {
@ -89,17 +89,28 @@ export class ChatContentPage extends Component<ChatContentPageProps, ChatContent
</div>
</div>
<div className="wk-chat-conversation-header-right">
<div className="wk-chat-conversation-header-setting">
<svg className="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2166" width="24" height="24"><path d="M512 298.6496a85.3504 85.3504 0 1 0 0-170.6496 85.3504 85.3504 0 0 0 0 170.6496z" p-id="2167"></path><path d="M512 512m-85.3504 0a85.3504 85.3504 0 1 0 170.7008 0 85.3504 85.3504 0 1 0-170.7008 0Z" p-id="2168"></path><path d="M512 896a85.3504 85.3504 0 1 0 0-170.7008 85.3504 85.3504 0 0 0 0 170.7008z" p-id="2169"></path></svg>
{
WKApp.endpoints.channelHeaderRightItems(channel).map((item:any,i:number) => {
return <div key={i} className="wk-chat-conversation-header-right-item">
{
item
}
</div>
})
}
<div className="wk-chat-conversation-header-right-item">
<svg fill={WKApp.config.themeColor} height="28px" role="presentation" viewBox="0 0 36 36" width="28px"><path clipRule="evenodd" d="M18 29C24.0751 29 29 24.0751 29 18C29 11.9249 24.0751 7 18 7C11.9249 7 7 11.9249 7 18C7 24.0751 11.9249 29 18 29ZM19.5 18C19.5 18.8284 18.8284 19.5 18 19.5C17.1716 19.5 16.5 18.8284 16.5 18C16.5 17.1716 17.1716 16.5 18 16.5C18.8284 16.5 19.5 17.1716 19.5 18ZM23 19.5C23.8284 19.5 24.5 18.8284 24.5 18C24.5 17.1716 23.8284 16.5 23 16.5C22.1716 16.5 21.5 17.1716 21.5 18C21.5 18.8284 22.1716 19.5 23 19.5ZM14.5 18C14.5 18.8284 13.8284 19.5 13 19.5C12.1716 19.5 11.5 18.8284 11.5 18C11.5 17.1716 12.1716 16.5 13 16.5C13.8284 16.5 14.5 17.1716 14.5 18Z" fillRule="evenodd"></path></svg>
<div className="wk-conversation-header-mask">
</div>
</div>
</div>
</div>
</div>
<div className="wk-chat-conversation">
<Conversation initLocateMessageSeq={initLocateMessageSeq} shouldShowHistorySplit={true} onContext={(ctx)=>{
<Conversation initLocateMessageSeq={initLocateMessageSeq} shouldShowHistorySplit={true} onContext={(ctx) => {
this.conversationContext = ctx
this.setState({})
}} key={channel.getChannelKey()} chatBg={WKApp.config.themeMode === ThemeMode.dark?undefined:require("./assets/chat_bg.svg").default} channel={channel}></Conversation>
}} key={channel.getChannelKey()} chatBg={WKApp.config.themeMode === ThemeMode.dark ? undefined : require("./assets/chat_bg.svg").default} channel={channel}></Conversation>
</div>
</div>
@ -140,15 +151,15 @@ export default class ChatPage extends Component<any> {
<div className="wk-chat-title">
{vm.connectTitle}
</div>
<Popover onClickOutSide={()=>{
vm.showAddPopover = false
}} className="wk-chat-popover" position="bottomRight" visible={vm.showAddPopover} showArrow={false} trigger="custom" content={<ChatMenusPopover onItem={()=>{
vm.showAddPopover = false
<Popover onClickOutSide={() => {
vm.showAddPopover = false
}} className="wk-chat-popover" position="bottomRight" visible={vm.showAddPopover} showArrow={false} trigger="custom" content={<ChatMenusPopover onItem={() => {
vm.showAddPopover = false
}}></ChatMenusPopover>}>
<div className="wk-chat-search-add" onClick={()=>{
<div className="wk-chat-search-add" onClick={() => {
vm.showAddPopover = !vm.showAddPopover
}}>
<IconPlus size="large"></IconPlus>
<IconPlus size="large"></IconPlus>
</div>
{/* <Button icon={<IconPlus></IconPlus>} onClick={() => {
vm.showAddPopover = true
@ -180,7 +191,7 @@ interface ChatMenusPopoverState {
}
interface ChatMenusPopoverProps {
onItem?:(menus:ChatMenus)=>void
onItem?: (menus: ChatMenus) => void
}
class ChatMenusPopover extends Component<ChatMenusPopoverProps, ChatMenusPopoverState> {
constructor(props: any) {
@ -201,17 +212,17 @@ class ChatMenusPopover extends Component<ChatMenusPopoverProps, ChatMenusPopover
return <div className="wk-chatmenuspopover">
<ul>
{
chatMenus.map((c,i) => {
return <li key={i} onClick={()=>{
if(c.onClick) {
chatMenus.map((c, i) => {
return <li key={i} onClick={() => {
if (c.onClick) {
c.onClick()
}
if(onItem) {
if (onItem) {
onItem(c)
}
}}>
<div className="wk-chatmenuspopover-avatar">
<img src={c.icon}></img>
<img src={c.icon}></img>
</div>
<div className="wk-chatmenuspopover-title">
{c.title}

View File

@ -153,7 +153,6 @@ export class ChatVM extends ProviderListener {
}
currentConversationListY() {
const conversationElem = document.getElementById(this.conversationListID)
console.log("conversationElem---->", conversationElem)
if (!conversationElem) {
return
}

View File

@ -21,6 +21,7 @@ export class EndpointCategory {
static friendApplyDataChange:string = "friendApplyDataChange" // 好友申请数据改变
static chatMenusPopover:string = "chatMenusPopover" // 聊天菜单气泡
static chatToolbars = "chatToolbars" // 聊天工具栏
static channelHeaderRightItems = "channelHeaderRightItems" // 频道头部右侧items
}
@ -57,6 +58,19 @@ export class MessageContentTypeConst {
static channelUpdate: number = 1005 // 频道更新
static newGroupOwner: number = 1008 // 成为新群主
static screenshot:number = 1014 // 截屏消息
// 音频通话消息号段 9900 - 9999
static rtcResult:number = 9989 // 音视频通话结果
static rtcSwitchToVideo = 9990 // 切换到视频通话
static rtcSwitchToVideoReply = 9991 // 切换到视频回复
static rtcCancel:number = 9992 // 取消通话
static rtcSwitchToAudio = 9993 // 音视频切换(未接通时)
static rtcData:number = 9994 // rtc信令数据类型
static rtcMissed:number =9995 // 未接听
static rtcReceived:number = 9996 // 收到通话
static rtcRefue:number = 9997; // 拒绝通话
static rtcAccept:number = 9998; // 接受通话
static rtcHangup:number = 9999; // 挂断通话
}

View File

@ -1,4 +1,4 @@
import { Channel, ChannelTypePerson, WKSDK, Message, MessageContentType, ConversationAction, ChannelTypeGroup, ChannelInfo,CMDContent, MessageText } from "wukongimjssdk";
import { Channel, ChannelTypePerson, WKSDK, Message, MessageContentType, ConversationAction, ChannelTypeGroup, ChannelInfo, CMDContent, MessageText } from "wukongimjssdk";
import React, { ElementType } from "react";
import WKApp, { FriendApply, FriendApplyState, ThemeMode } from "./App";
import ChannelQRCode from "./Components/ChannelQRCode";
@ -287,6 +287,9 @@ export default class BaseModule implements IModule {
if (channelInfo && channelInfo.mute) {
return
}
if (!message.header.reddot) { // 不显示红点的消息不发通知
return
}
if (window.Notification && Notification.permission !== "denied") {
@ -295,7 +298,7 @@ export default class BaseModule implements IModule {
icon: WKApp.shared.avatarChannel(message.channel),
lang: 'zh-CN',
tag: "tag",
renotify: true,
renotify: true
});
notify.onclick = () => {
@ -309,6 +312,9 @@ export default class BaseModule implements IModule {
notify.close();
}, 5000);
}
notify.onclose = () => {
console.log("通知关闭")
}
}
}

View File

@ -47,6 +47,12 @@ export default class ContactsList extends Component<any, ContactsState> {
}
}
componentWillUnmount() {
ContactsListManager.shared.setRefreshList = undefined
WKApp.dataSource.removeContactsChangeListener(this.contactsChangeListener)
}
rebuildIndex() {
console.log("rebuildIndex---->")
this.buildIndex(this.contactsList())
@ -75,11 +81,7 @@ export default class ContactsList extends Component<any, ContactsState> {
})
}
componentWillUnmount() {
WKApp.dataSource.removeContactsChangeListener(this.contactsChangeListener)
}
buildIndex(contacts: Contacts[]) {
const indexItemMap = new Map<string, Contacts[]>()
let indexList = []

View File

@ -5,8 +5,10 @@ export class ContactsListManager {
}
public static shared = new ContactsListManager()
setRefreshList!:()=>void
setRefreshList?:()=>void
refreshList() {
this.setRefreshList()
if(this.setRefreshList) {
this.setRefreshList()
}
}
}

196
yarn.lock
View File

@ -1041,7 +1041,7 @@
"@babel/helper-validator-option" "^7.18.6"
"@babel/plugin-transform-typescript" "^7.18.6"
"@babel/runtime-corejs3@^7.10.2", "@babel/runtime-corejs3@^7.15.4":
"@babel/runtime-corejs3@^7.10.2":
version "7.19.1"
resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.19.1.tgz#f0cbbe7edda7c4109cd253bb1dee99aba4594ad9"
integrity sha512-j2vJGnkopRzH+ykJ8h68wrHnEUmtK//E723jjixiAl/PPf6FhqY/vYRcMVlNydRKQjQsTsYEjpx+DZMIvnGk/g==
@ -1056,13 +1056,20 @@
dependencies:
regenerator-runtime "^0.13.2"
"@babel/runtime@^7.0.0", "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.18.3", "@babel/runtime@^7.18.9", "@babel/runtime@^7.2.0", "@babel/runtime@^7.3.4", "@babel/runtime@^7.5.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4":
"@babel/runtime@^7.0.0", "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.18.3", "@babel/runtime@^7.18.9", "@babel/runtime@^7.3.4", "@babel/runtime@^7.5.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4":
version "7.19.0"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.19.0.tgz#22b11c037b094d27a8a2504ea4dcff00f50e2259"
integrity sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==
dependencies:
regenerator-runtime "^0.13.4"
"@babel/runtime@^7.21.0":
version "7.22.11"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.11.tgz#7a9ba3bbe406ad6f9e8dd4da2ece453eb23a77a4"
integrity sha512-ee7jVNlWN09+KftVOu9n7S8gQzD/Z6hN/I8VBRXW4P1+Xe7kJGXMwu8vds4aGIMHZnNbdpSWCfZZtinytpcAvA==
dependencies:
regenerator-runtime "^0.14.0"
"@babel/runtime@^7.7.2", "@babel/runtime@^7.8.7":
version "7.22.10"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.10.tgz#ae3e9631fd947cb7e3610d3e9d8fef5f76696682"
@ -1127,88 +1134,113 @@
resolved "https://registry.yarnpkg.com/@csstools/normalize.css/-/normalize.css-10.1.0.tgz#f0950bba18819512d42f7197e56c518aa491cf18"
integrity sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg==
"@douyinfe/semi-animation-react@2.23.5":
version "2.23.5"
resolved "https://registry.yarnpkg.com/@douyinfe/semi-animation-react/-/semi-animation-react-2.23.5.tgz#c106e869ddaa2f2fa4dd34381b601f42e4f83ed4"
integrity sha512-TIIUpcUGCRJDejkQxVMSEiogLM73P3vXZLuAxyxXg+cW5I/TK6ekynDswoE0M/pQf4hymrvuZPVq/MOD+ow6cA==
"@dnd-kit/accessibility@^3.0.0":
version "3.0.1"
resolved "https://registry.yarnpkg.com/@dnd-kit/accessibility/-/accessibility-3.0.1.tgz#3ccbefdfca595b0a23a5dc57d3de96bc6935641c"
integrity sha512-HXRrwS9YUYQO9lFRc/49uO/VICbM+O+ZRpFDe9Pd1rwVv2PCNkRiTZRdxrDgng/UkvdC3Re9r2vwPpXXrWeFzg==
dependencies:
"@douyinfe/semi-animation" "2.12.0"
"@douyinfe/semi-animation-styled" "2.23.2"
tslib "^2.0.0"
"@dnd-kit/core@^6.0.8":
version "6.0.8"
resolved "https://registry.yarnpkg.com/@dnd-kit/core/-/core-6.0.8.tgz#040ae13fea9787ee078e5f0361f3b49b07f3f005"
integrity sha512-lYaoP8yHTQSLlZe6Rr9qogouGUz9oRUj4AHhDQGQzq/hqaJRpFo65X+JKsdHf8oUFBzx5A+SJPUvxAwTF2OabA==
dependencies:
"@dnd-kit/accessibility" "^3.0.0"
"@dnd-kit/utilities" "^3.2.1"
tslib "^2.0.0"
"@dnd-kit/sortable@^7.0.2":
version "7.0.2"
resolved "https://registry.yarnpkg.com/@dnd-kit/sortable/-/sortable-7.0.2.tgz#791d550872457f3f3c843e00d159b640f982011c"
integrity sha512-wDkBHHf9iCi1veM834Gbk1429bd4lHX4RpAwT0y2cHLf246GAvU2sVw/oxWNpPKQNQRQaeGXhAVgrOl1IT+iyA==
dependencies:
"@dnd-kit/utilities" "^3.2.0"
tslib "^2.0.0"
"@dnd-kit/utilities@^3.2.0", "@dnd-kit/utilities@^3.2.1":
version "3.2.1"
resolved "https://registry.yarnpkg.com/@dnd-kit/utilities/-/utilities-3.2.1.tgz#53f9e2016fd2506ec49e404c289392cfff30332a"
integrity sha512-OOXqISfvBw/1REtkSK2N3Fi2EQiLMlWUlqnOK/UpOISqBZPWpE6TqL+jcPtMOkE8TqYGiURvRdPSI9hltNUjEA==
dependencies:
tslib "^2.0.0"
"@douyinfe/semi-animation-react@2.42.3":
version "2.42.3"
resolved "https://registry.yarnpkg.com/@douyinfe/semi-animation-react/-/semi-animation-react-2.42.3.tgz#7fa8c37780f0885198bbf434e36ab68e6bc3ec83"
integrity sha512-nrPebgRBN9Kgdq+EVgwNn2lmd3aSys5vc6i/0yHxcjZfVa37WxsU8BRN2itaW5u9QJ41zKSinPXTnElbgnbtdA==
dependencies:
"@douyinfe/semi-animation" "2.42.3"
"@douyinfe/semi-animation-styled" "2.42.3"
classnames "^2.2.6"
"@douyinfe/semi-animation-styled@2.23.2":
version "2.23.2"
resolved "https://registry.yarnpkg.com/@douyinfe/semi-animation-styled/-/semi-animation-styled-2.23.2.tgz#f18bc074515441c297cc636ed98521e249d093c9"
integrity sha512-cKaA1yGHPF76Rx7EZDZicj+1oX1su2wnqb/UGFOTquAwqWmkTfgQ+EKxCd/N704WH+RtmGf4xbrJKpBvvcEdSQ==
"@douyinfe/semi-animation-styled@2.42.3":
version "2.42.3"
resolved "https://registry.yarnpkg.com/@douyinfe/semi-animation-styled/-/semi-animation-styled-2.42.3.tgz#c03442387200cbb2053e065a2765a1d676784149"
integrity sha512-qmOLJuMRIR8feAZCvJ6h7da0LD4e7im3uGc4a0ZcjT36XPFwngijbC/kXSO2aYLoY3hGlrxMmIJ6HlX3+bGnFQ==
"@douyinfe/semi-animation@2.12.0":
version "2.12.0"
resolved "https://registry.yarnpkg.com/@douyinfe/semi-animation/-/semi-animation-2.12.0.tgz#51fe52d3911c2591a80a6e9fe96e6809c1511f13"
integrity sha512-OAfL9Nk38ZPqfdKm9k4cvVXXzm16ALI4LxGNZ0qfe2RCLLnYGB/hNzTctoTDjYD35dFv0yroh3qsXtZuP2xNdg==
dependencies:
"@babel/runtime-corejs3" "^7.15.4"
bezier-easing "^2.1.0"
"@douyinfe/semi-animation@2.23.5":
version "2.23.5"
resolved "https://registry.yarnpkg.com/@douyinfe/semi-animation/-/semi-animation-2.23.5.tgz#6d5bc3f3d86aecf0e80255c526f5afab95cadb9d"
integrity sha512-EEu4RWPTK1ksUB6SwTxmdgJ3qlDD0GaB9Azay4H93bknR/cV2lpbAhzes6nz3EiLua00MpJPQaLWQxs57nNWnw==
"@douyinfe/semi-animation@2.42.3":
version "2.42.3"
resolved "https://registry.yarnpkg.com/@douyinfe/semi-animation/-/semi-animation-2.42.3.tgz#267386f780e31c202e3f033e3bb6df019b90ed5c"
integrity sha512-RrYjHl6CyQVUX3MVCllZUUVQdBDBNOhEgJox/cc+Y64WW6YKg7zML6f5jWVXt3srwR8ksYWXzvnFT4gYlfn6CQ==
dependencies:
bezier-easing "^2.1.0"
"@douyinfe/semi-foundation@2.23.5":
version "2.23.5"
resolved "https://registry.yarnpkg.com/@douyinfe/semi-foundation/-/semi-foundation-2.23.5.tgz#b3a7cbfc6ce01644e852b19c91025cf03c75e51f"
integrity sha512-gEBhVzRlxedpxuCadX9uIHamOvFrNsyKUtFc/Jcr4WMOaJMrcHh3IgIHxmNK2RSvRLnX4/iUsLDNZGcSlh1mjQ==
"@douyinfe/semi-foundation@2.42.3":
version "2.42.3"
resolved "https://registry.yarnpkg.com/@douyinfe/semi-foundation/-/semi-foundation-2.42.3.tgz#5919a0866b90a56bd916ed01e492c56842abc751"
integrity sha512-jNd6BdTzuioqgmsZcnC5Nl2tP+XOALgxiVc1mffx/oz2MUp7X/4zm8UR2VchgWbpx0nZ0JSmZDfU7XWIdcHQDg==
dependencies:
"@douyinfe/semi-animation" "2.12.0"
"@douyinfe/semi-animation" "2.42.3"
async-validator "^3.5.0"
classnames "^2.2.6"
date-fns "^2.9.0"
date-fns-tz "^1.0.10"
date-fns "^2.29.3"
date-fns-tz "^1.3.8"
lodash "^4.17.21"
memoize-one "^5.2.1"
scroll-into-view-if-needed "^2.2.24"
"@douyinfe/semi-icons@2.23.5":
version "2.23.5"
resolved "https://registry.yarnpkg.com/@douyinfe/semi-icons/-/semi-icons-2.23.5.tgz#856180dd51b20986ac181fe6e849abda581efa6b"
integrity sha512-fknH7iCb9iIp35xWM4+MP/zbRicAp0Z4ijSt9UQAS6Xsza42sAAqKI3rswdmgiE4hPd2syg9fxnR9mb/JaiW+w==
"@douyinfe/semi-icons@2.42.3":
version "2.42.3"
resolved "https://registry.yarnpkg.com/@douyinfe/semi-icons/-/semi-icons-2.42.3.tgz#8a7c08fe2843f45a7c6c8856f3cf44f446bfc44a"
integrity sha512-0LTpJFmpUZPAraquUwwfI8fCQ+7APMSgQlFymajd75Y1shY5I9Tzu8wClQnn0ME0ORGMwA3WQXgs9HOL0nTVXg==
dependencies:
classnames "^2.2.6"
"@douyinfe/semi-illustrations@2.23.5":
version "2.23.5"
resolved "https://registry.yarnpkg.com/@douyinfe/semi-illustrations/-/semi-illustrations-2.23.5.tgz#0336378b114b1be46a19331ab8b163b09055586a"
integrity sha512-hnx+WztfiZaqAR0zOsBreSSE+TRNxA2+fi9eW6dtwjRJDg6thA4VcW4T3bkhBv9il3oSNHV/He3w4I1NbRatsQ==
"@douyinfe/semi-illustrations@2.42.3":
version "2.42.3"
resolved "https://registry.yarnpkg.com/@douyinfe/semi-illustrations/-/semi-illustrations-2.42.3.tgz#410371b856c906dc2990afa24c53fc51172aff95"
integrity sha512-mUImwMivJB35++2leWkzhB1gFChZZKz7dULMfopU11oOC0p6lXu9rToXf6u01bgHnCKt9WuZ9Ic/1Byqi1UVFA==
"@douyinfe/semi-theme-default@2.23.5":
version "2.23.5"
resolved "https://registry.yarnpkg.com/@douyinfe/semi-theme-default/-/semi-theme-default-2.23.5.tgz#54a2f99db79ff7e2fc6137f0d5bf82d3bffdbaca"
integrity sha512-zBTUB6aYMP6C3QctmFdg7ChN6wctgONKHvlbhvowMZ5M/YQrCPIYxu1LwUN+a2dSnbwY+1aKC+5t6firBMNThw==
"@douyinfe/semi-theme-default@2.42.3":
version "2.42.3"
resolved "https://registry.yarnpkg.com/@douyinfe/semi-theme-default/-/semi-theme-default-2.42.3.tgz#45b4d265d983d7c80848977b525063bb7f401913"
integrity sha512-kr+Jead5Hja0w7uIOHMvB+GqiTzCRoAvCHAFf0bhMv6oSxkVplIxuBLgVasIzU0x99fOT2LPclWcOFvaMSuSTg==
dependencies:
glob "^7.1.6"
"@douyinfe/semi-ui@^2.23.5":
version "2.23.5"
resolved "https://registry.yarnpkg.com/@douyinfe/semi-ui/-/semi-ui-2.23.5.tgz#06c5bd1ce868d9966412ed847293aed605292928"
integrity sha512-DOE8OPvX7VHapZ8AnXTr6sssQO9Ct/yHC+Ja56g5lL9hyq+UkSX6ENXocPA2+DDX/2jxL2UiiZtyp7hPtZpJsA==
"@douyinfe/semi-ui@^2.24.2":
version "2.42.3"
resolved "https://registry.yarnpkg.com/@douyinfe/semi-ui/-/semi-ui-2.42.3.tgz#f5b622420891287e6a4c07eefc426df25f3555c6"
integrity sha512-udBLfq36/Mjzr2JEUxnVWAlXokqK0E/2XsRS+h0ZdV6lTM31b1Eg1U8W9hknY5qa6x1+wQ99etYWbS0hm5QiRA==
dependencies:
"@douyinfe/semi-animation" "2.23.5"
"@douyinfe/semi-animation-react" "2.23.5"
"@douyinfe/semi-foundation" "2.23.5"
"@douyinfe/semi-icons" "2.23.5"
"@douyinfe/semi-illustrations" "2.23.5"
"@douyinfe/semi-theme-default" "2.23.5"
"@dnd-kit/core" "^6.0.8"
"@dnd-kit/sortable" "^7.0.2"
"@dnd-kit/utilities" "^3.2.1"
"@douyinfe/semi-animation" "2.42.3"
"@douyinfe/semi-animation-react" "2.42.3"
"@douyinfe/semi-foundation" "2.42.3"
"@douyinfe/semi-icons" "2.42.3"
"@douyinfe/semi-illustrations" "2.42.3"
"@douyinfe/semi-theme-default" "2.42.3"
async-validator "^3.5.0"
classnames "^2.2.6"
copy-text-to-clipboard "^2.1.1"
date-fns "^2.9.0"
date-fns-tz "^1.0.10"
date-fns "^2.29.3"
date-fns-tz "^1.3.8"
lodash "^4.17.21"
prop-types "^15.7.2"
react-resizable "^1.8.0"
react-sortable-hoc "^2.0.0"
react-resizable "^3.0.5"
react-window "^1.8.2"
resize-observer-polyfill "^1.5.1"
scroll-into-view-if-needed "^2.2.24"
@ -4518,15 +4550,17 @@ data-urls@^2.0.0:
whatwg-mimetype "^2.3.0"
whatwg-url "^8.0.0"
date-fns-tz@^1.0.10:
version "1.3.7"
resolved "https://registry.yarnpkg.com/date-fns-tz/-/date-fns-tz-1.3.7.tgz#e8e9d2aaceba5f1cc0e677631563081fdcb0e69a"
integrity sha512-1t1b8zyJo+UI8aR+g3iqr5fkUHWpd58VBx8J/ZSQ+w7YrGlw80Ag4sA86qkfCXRBLmMc4I2US+aPMd4uKvwj5g==
date-fns-tz@^1.3.8:
version "1.3.8"
resolved "https://registry.yarnpkg.com/date-fns-tz/-/date-fns-tz-1.3.8.tgz#083e3a4e1f19b7857fa0c18deea6c2bc46ded7b9"
integrity sha512-qwNXUFtMHTTU6CFSFjoJ80W8Fzzp24LntbjFFBgL/faqds4e5mo9mftoRLgr3Vi1trISsg4awSpYVsOQCRnapQ==
date-fns@^2.9.0:
version "2.29.3"
resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.29.3.tgz#27402d2fc67eb442b511b70bbdf98e6411cd68a8"
integrity sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==
date-fns@^2.29.3:
version "2.30.0"
resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0"
integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==
dependencies:
"@babel/runtime" "^7.21.0"
debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.9:
version "2.6.9"
@ -9679,7 +9713,7 @@ prompts@^2.0.1:
kleur "^3.0.3"
sisteransi "^1.0.5"
prop-types@15.x, prop-types@^15.5.7, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.7.2, prop-types@^15.8.1:
prop-types@15.x, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.7.2, prop-types@^15.8.1:
version "15.8.1"
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
@ -9969,10 +10003,10 @@ react-refresh@^0.8.3:
resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.8.3.tgz#721d4657672d400c5e3c75d063c4a85fb2d5d68f"
integrity sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg==
react-resizable@^1.8.0:
version "1.11.1"
resolved "https://registry.yarnpkg.com/react-resizable/-/react-resizable-1.11.1.tgz#02ca6850afa7a22c1b3e623e64aef71ee252af69"
integrity sha512-S70gbLaAYqjuAd49utRHibtHLrHXInh7GuOR+6OO6RO6uleQfuBnWmZjRABfqNEx3C3Z6VPLg0/0uOYFrkfu9Q==
react-resizable@^3.0.5:
version "3.0.5"
resolved "https://registry.yarnpkg.com/react-resizable/-/react-resizable-3.0.5.tgz#362721f2efbd094976f1780ae13f1ad7739786c1"
integrity sha512-vKpeHhI5OZvYn82kXOs1bC8aOXktGU5AmKAgaZS4F5JPburCtbmDPqE7Pzp+1kN4+Wb81LlF33VpGwWwtXem+w==
dependencies:
prop-types "15.x"
react-draggable "^4.0.3"
@ -10051,15 +10085,6 @@ react-scroll@^1.8.4:
lodash.throttle "^4.1.1"
prop-types "^15.7.2"
react-sortable-hoc@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/react-sortable-hoc/-/react-sortable-hoc-2.0.0.tgz#f6780d8aa4b922a21f3e754af542f032677078b7"
integrity sha512-JZUw7hBsAHXK7PTyErJyI7SopSBFRcFHDjWW5SWjcugY0i6iH7f+eJkY8cJmGMlZ1C9xz1J3Vjz0plFpavVeRg==
dependencies:
"@babel/runtime" "^7.2.0"
invariant "^2.2.4"
prop-types "^15.5.7"
react-spinners@^0.11.0:
version "0.11.0"
resolved "https://registry.yarnpkg.com/react-spinners/-/react-spinners-0.11.0.tgz#186fd150cc9f7ab1436227f70d5d113b47e9e43d"
@ -11587,6 +11612,11 @@ tslib@^1.8.1:
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
tslib@^2.0.0:
version "2.6.2"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae"
integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==
tslib@^2.0.3:
version "2.4.0"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3"
@ -12527,10 +12557,10 @@ ws@^7.3.1, ws@^7.4.6:
resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591"
integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==
wukongimjssdk@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/wukongimjssdk/-/wukongimjssdk-1.1.1.tgz#c0c723016d6198d16a2af0b44b9e806dc1b2378f"
integrity sha512-2CPnKL55V6TWVA/nTK8g3Hs0Z4REqSIxtkEiM1x2SZqDnfgdjv2E6qAU8vatC2K/9d7gL8vXKKZiSNoCo9F3aA==
wukongimjssdk@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/wukongimjssdk/-/wukongimjssdk-1.1.2.tgz#d1f781a1c5d4fb32217bba939b7000e09d04bf22"
integrity sha512-x1xAnn17jHZshZnt53eiccMOffYIaIy+6CHH9NWS6p2aefJibX3LfHODrQWQJkoJ4ppGtfGfuqukkYgwTIqxiw==
dependencies:
"@types/bignumber.js" "^5.0.0"
"@types/crypto-js" "^4.0.2"