Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
94be64311c | ||
|
|
e12f955105 |
|
Before Width: | Height: | Size: 4.4 KiB |
|
Before Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 8.4 KiB |
|
Before Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 10 KiB |
@@ -1,25 +1 @@
|
|||||||
<!DOCTYPE html>
|
<!doctype html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="/favicon.ico"/><script src="/node_modules/ace-builds/src-min-noconflict/ace.js"></script><title>NPCs</title><script type="module" crossorigin src="/assets/index-37491850.js"></script><link rel="modulepreload" crossorigin href="/assets/acebuilds-fbc0ccc6.js"><link rel="modulepreload" crossorigin href="/assets/reactflow-0cf1aa21.js"><link rel="modulepreload" crossorigin href="/assets/reactdrop-d9c7a74b.js"><link rel="modulepreload" crossorigin href="/assets/pdfjs-36654f0a.js"><link rel="stylesheet" href="/assets/index-59c5ed60.css"></head><body id="body" style="width:100%;height:100%"><noscript>You need to enable JavaScript to run this app.</noscript><div style="width:100vw;height:100vh" id="root"></div></body></html>
|
||||||
<html lang="en">
|
|
||||||
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
||||||
<link rel="icon" href="/favicon.ico" />
|
|
||||||
<script src="/node_modules/ace-builds/src-min-noconflict/ace.js" type="text/javascript"></script>
|
|
||||||
<title>NPCs</title>
|
|
||||||
<script type="module" crossorigin src="/assets/index-583c10b3.js"></script>
|
|
||||||
<link rel="modulepreload" crossorigin href="/assets/acebuilds-fbc0ccc6.js">
|
|
||||||
<link rel="modulepreload" crossorigin href="/assets/reactflow-c250d835.js">
|
|
||||||
<link rel="modulepreload" crossorigin href="/assets/reactdrop-be699031.js">
|
|
||||||
<link rel="modulepreload" crossorigin href="/assets/pdfjs-36654f0a.js">
|
|
||||||
<link rel="stylesheet" href="/assets/index-1055532c.css">
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body id='body' style="width: 100%; height:100%">
|
|
||||||
<noscript>You need to enable JavaScript to run this app.</noscript>
|
|
||||||
<div style="width: 100vw; height:100vh" id='root'></div>
|
|
||||||
|
|
||||||
</body>
|
|
||||||
|
|
||||||
</html>
|
|
||||||
@@ -21,25 +21,34 @@
|
|||||||
"pleaseEnterCaptcha": "Please enter captcha"
|
"pleaseEnterCaptcha": "Please enter captcha"
|
||||||
},
|
},
|
||||||
"menu": {
|
"menu": {
|
||||||
"app": "App",
|
"app": "Chat",
|
||||||
"skills": "Skills",
|
"user": "User",
|
||||||
|
"github": "GitHub",
|
||||||
|
"bookopen": "Document",
|
||||||
|
"skills": "Build",
|
||||||
"knowledge": "Knowledge",
|
"knowledge": "Knowledge",
|
||||||
|
"evaluation": "Evaluation",
|
||||||
"models": "Models",
|
"models": "Models",
|
||||||
"system": "System",
|
"system": "System",
|
||||||
|
"log": "Logs",
|
||||||
"themeSwitch": "Theme Switch",
|
"themeSwitch": "Theme Switch",
|
||||||
"document": "Documentation",
|
"document": "Documentation",
|
||||||
"logout": "Logout",
|
"logout": "Logout",
|
||||||
"logoutDescription": "Log out",
|
"logoutDescription": "Log out",
|
||||||
|
"logoutContent": "Are you sure to log out",
|
||||||
"forBestExperience": "For the best experience, please access this website on a PC",
|
"forBestExperience": "For the best experience, please access this website on a PC",
|
||||||
"onlineDocumentation": "Online Documentation"
|
"onlineDocumentation": "Online Documentation",
|
||||||
|
"changePwd": "Password"
|
||||||
},
|
},
|
||||||
"system": {
|
"system": {
|
||||||
"userManagement": "User Management",
|
"userManagement": "User Management",
|
||||||
"roleManagement": "Role Management",
|
"roleManagement": "Role Management",
|
||||||
|
"userGroupsM": "UserGroup Management",
|
||||||
"systemConfiguration": "System Configuration",
|
"systemConfiguration": "System Configuration",
|
||||||
"username": "Username",
|
"username": "Username",
|
||||||
"confirmDisable": "Confirm disabling this user?",
|
"confirmDisable": "Confirm disabling this user?",
|
||||||
"roleSelect": "Select Role",
|
"roleSelect": "Select Roles",
|
||||||
|
"userGroupsSel": "Select UserGroups",
|
||||||
"roleList": "Role List",
|
"roleList": "Role List",
|
||||||
"confirmText": "Are you sure you want to delete",
|
"confirmText": "Are you sure you want to delete",
|
||||||
"roleName": "Role Name",
|
"roleName": "Role Name",
|
||||||
@@ -52,8 +61,41 @@
|
|||||||
"roleNamePrompt": "Role name cannot exceed 50 characters",
|
"roleNamePrompt": "Role name cannot exceed 50 characters",
|
||||||
"roleNameRequired": "Role name is required",
|
"roleNameRequired": "Role name is required",
|
||||||
"roleNameExists": "Role name already exists",
|
"roleNameExists": "Role name already exists",
|
||||||
|
"groupNameExists": "UserGroup name already exists",
|
||||||
|
"groupNamePrompt": "UserGroup name cannot exceed 30 characters",
|
||||||
|
"groupNameRequired": "UserGroup name is required",
|
||||||
"parameterConfig": "Parameter Configuration",
|
"parameterConfig": "Parameter Configuration",
|
||||||
"language": "Language"
|
"language": "Language",
|
||||||
|
"assistantAuthorization": "Assistant Authorization",
|
||||||
|
"assistantName": "Assistant Name",
|
||||||
|
"userList": "User List",
|
||||||
|
"userGroupList": "UserGroup List",
|
||||||
|
"userGroup": "userGroup",
|
||||||
|
"role": "Role",
|
||||||
|
"searchUserGroups": "Search user groups",
|
||||||
|
"searchRoles": "Search roles",
|
||||||
|
"reset": "Reset",
|
||||||
|
"confirm": "Confirm",
|
||||||
|
"userGroupName": "Enter UserGroup Name",
|
||||||
|
"groupName": "UserGroup Name",
|
||||||
|
"admins": "Admin",
|
||||||
|
"flowControl": "Overall UserGroup Flow Control",
|
||||||
|
"AssistantFlowCtrl": "Assistant Flow Control",
|
||||||
|
"SkillFlowCtrl": "Skill Flow Control",
|
||||||
|
"createdBy": "CreatedBy",
|
||||||
|
"flowCtrlStrategy": "Flow control strategy",
|
||||||
|
"limit": "Limit",
|
||||||
|
"unlimited": "Unlimited",
|
||||||
|
"iconHover": "Simultaneously constrained by the overall traffic control strategy of the user group",
|
||||||
|
"maximum": "Up to",
|
||||||
|
"perMinute": "simultaneous online sessions",
|
||||||
|
"changeTime": "Modification Time",
|
||||||
|
"deleteGroup": "After deletion 【{{name}}】 will no longer exist, Do you want to delete it?",
|
||||||
|
"currentGroup": "Current UserGroup",
|
||||||
|
"defaultGroup": "DefaultGroup",
|
||||||
|
"resetPwd": "ResetPassword",
|
||||||
|
"selectGroup": "Please select a user group",
|
||||||
|
"selectRole": "Please select a role"
|
||||||
},
|
},
|
||||||
"skills": {
|
"skills": {
|
||||||
"manageTemplate": "Manage Skill Templates",
|
"manageTemplate": "Manage Skill Templates",
|
||||||
@@ -303,7 +345,40 @@
|
|||||||
"knowledgeImg": "Knowledge Base Avatar",
|
"knowledgeImg": "Knowledge Base Avatar",
|
||||||
"indexModel": "Index model",
|
"indexModel": "Index model",
|
||||||
"dataUp": "Single data upper limit",
|
"dataUp": "Single data upper limit",
|
||||||
"introduce": "Introduce"
|
"introduce": "Introduce",
|
||||||
|
"fileUploadResult": "Out of the {{total}} files uploaded, {{failed}} failed to upload.",
|
||||||
|
"modalTitle": "File Duplicate Prompt",
|
||||||
|
"modalMessage": "The following files already exist in the knowledge base. Continuing the upload will overwrite the original files and processing strategy. Do you want to proceed with overwrite?",
|
||||||
|
"keepOriginal": "Keep Original Files",
|
||||||
|
"override": "Override",
|
||||||
|
"toolName": "ToolName"
|
||||||
|
},
|
||||||
|
"evaluation": {
|
||||||
|
"id": "任务ID",
|
||||||
|
"filename": "测试文件名称",
|
||||||
|
"skillAssistant": "能力NPC",
|
||||||
|
"status": "状态",
|
||||||
|
"score": "评测分数",
|
||||||
|
"createDate": "创建日期",
|
||||||
|
"download": "下载",
|
||||||
|
"confirmDeleteEvaluation": "确认删除该评测任务?",
|
||||||
|
"createTitle": "新建任务",
|
||||||
|
"selectLabel": "选择要评测的能力或者NPC:",
|
||||||
|
"selectPlaceholder": "请选择",
|
||||||
|
"dataLabel": "测试集数据:",
|
||||||
|
"fileExpandName": "支持扩展名:",
|
||||||
|
"downloadTemplate": "下载模板文件",
|
||||||
|
"promptLabel": "评测指令文本:",
|
||||||
|
"enterExecType": "请选择要评测的能力或NPC",
|
||||||
|
"enterUniqueId": "请选择能力或NPCID",
|
||||||
|
"enterVersion": "请选择能力的版本",
|
||||||
|
"enterFile": "请选择测试集数据",
|
||||||
|
"enterPrompt": "评测指令不能为空",
|
||||||
|
"fileSizeLimit": "文件大小限制在10M以内",
|
||||||
|
"evaluationCollection": "评测集合",
|
||||||
|
"tooltip": "该指令文本用于指导大模型对 ground truth 和 answer 提取要点,如无特别需求请勿修改",
|
||||||
|
"create": "创建",
|
||||||
|
"cancel": "取消"
|
||||||
},
|
},
|
||||||
"code": {
|
"code": {
|
||||||
"editPythonCodeDescription": "Edit your Python code here. This code snippet accepts module imports and a function definition. Make sure your function returns a string.",
|
"editPythonCodeDescription": "Edit your Python code here. This code snippet accepts module imports and a function definition. Make sure your function returns a string.",
|
||||||
@@ -576,6 +651,41 @@
|
|||||||
"result": "Test Result",
|
"result": "Test Result",
|
||||||
"outResultPlaceholder": "Click the button to output the result"
|
"outResultPlaceholder": "Click the button to output the result"
|
||||||
},
|
},
|
||||||
|
"resetPassword": {
|
||||||
|
"slogen": "Securely Reset Your Password",
|
||||||
|
"currentPassword": "Current Password",
|
||||||
|
"newPassword": "New Password",
|
||||||
|
"confirmNewPassword": "Confirm New Password",
|
||||||
|
"pleaseEnterCurrentPassword": "Please enter your current password.",
|
||||||
|
"pleaseEnterNewPassword": "Please enter your new password.",
|
||||||
|
"pleaseEnterConfirmPassword": "Please confirm your new password.",
|
||||||
|
"newPasswordTooShort": "New password must be at least 8 characters.",
|
||||||
|
"passwordMismatch": "The new passwords do not match.",
|
||||||
|
"resetButton": "Change Password",
|
||||||
|
"passwordResetSuccess": "Your password has been successfully reset.",
|
||||||
|
"adminResetSuccess": "Password has been successfully reset",
|
||||||
|
"resetFailed": "Pwd Reset Failed",
|
||||||
|
"notEmpty": "The new password cannot be empty"
|
||||||
|
},
|
||||||
|
"log": {
|
||||||
|
"auditManagement": "Audit Management",
|
||||||
|
"searchButton": "Search",
|
||||||
|
"resetButton": "Reset",
|
||||||
|
"auditId": "Audit ID",
|
||||||
|
"username": "Username",
|
||||||
|
"operationTime": "Operation Time",
|
||||||
|
"systemModule": "System Module",
|
||||||
|
"operationAction": "Operation Action",
|
||||||
|
"objectType": "Operation Object Type",
|
||||||
|
"operationObject": "Operation Object",
|
||||||
|
"ipAddress": "IP Address",
|
||||||
|
"remark": "Remark",
|
||||||
|
"selectUser": "Select User",
|
||||||
|
"selectUserGroup": "Select User Group",
|
||||||
|
"startDate": "Start Date",
|
||||||
|
"endDate": "End Date",
|
||||||
|
"actionBehavior": "Action Behavior"
|
||||||
|
},
|
||||||
"agents": {
|
"agents": {
|
||||||
"AgentInitializer":{
|
"AgentInitializer":{
|
||||||
"display_name": "AgentInitializer",
|
"display_name": "AgentInitializer",
|
||||||
|
|||||||
@@ -14,32 +14,42 @@
|
|||||||
"pleaseEnterAccount": "请填写账号",
|
"pleaseEnterAccount": "请填写账号",
|
||||||
"pleaseEnterPassword": "请填写密码",
|
"pleaseEnterPassword": "请填写密码",
|
||||||
"accountTooShort": "账号过短",
|
"accountTooShort": "账号过短",
|
||||||
"passwordTooShort": "请填写密码,至少6位",
|
"passwordTooShort": "请填写密码,至少7位",
|
||||||
"passwordError": "密码必须包含字母、数字!",
|
"passwordError": "密码必须包含字母、数字!",
|
||||||
"passwordMismatch": "两次密码不一致",
|
"passwordMismatch": "两次密码不一致",
|
||||||
"registrationSuccess": "注册成功,请输入密码进行登录"
|
"registrationSuccess": "注册成功,请输入密码进行登录"
|
||||||
},
|
},
|
||||||
"menu": {
|
"menu": {
|
||||||
"app": "聊天",
|
"user": "用户",
|
||||||
|
"bookopen": "帮助文档",
|
||||||
|
"github": "GitHub",
|
||||||
|
"app": "会 话",
|
||||||
"skills": "NPC",
|
"skills": "NPC",
|
||||||
"knowledge": "知识库",
|
"knowledge": "知识库",
|
||||||
"models": "模型",
|
"evaluation": "评 测",
|
||||||
"system": "账号",
|
"models": "模 型",
|
||||||
|
"system": "账 号",
|
||||||
|
"log": "审 计",
|
||||||
"themeSwitch": "主题切换",
|
"themeSwitch": "主题切换",
|
||||||
"document": "文档",
|
"document": "文档",
|
||||||
"logout": "退出",
|
"logout": "退出",
|
||||||
"logoutDescription": "退出登录",
|
"logoutDescription": "退出登录",
|
||||||
|
"logoutContent": "确认退出登录吗",
|
||||||
"forBestExperience": "为了您的良好体验,请在 PC 端访问该网站",
|
"forBestExperience": "为了您的良好体验,请在 PC 端访问该网站",
|
||||||
"onlineDocumentation": "在线文档"
|
"onlineDocumentation": "在线文档",
|
||||||
|
"changePwd": "修改密码"
|
||||||
},
|
},
|
||||||
"system": {
|
"system": {
|
||||||
"userManagement": "用户管理",
|
"userManagement": "用户管理",
|
||||||
|
"userGroupsM": "用户组管理",
|
||||||
"roleManagement": "角色管理",
|
"roleManagement": "角色管理",
|
||||||
"systemConfiguration": "系统配置",
|
"systemConfiguration": "系统配置",
|
||||||
"username": "用户名",
|
"username": "用户名",
|
||||||
"confirmDisable": "确认禁用该用户?",
|
"confirmDisable": "确认禁用该用户?",
|
||||||
"roleSelect": "角色选择",
|
"roleSelect": "角色选择",
|
||||||
|
"userGroupsSel": "用户组选择",
|
||||||
"roleList": "角色列表",
|
"roleList": "角色列表",
|
||||||
|
"userGroupList": "用户组列表",
|
||||||
"confirmText": "是否删除",
|
"confirmText": "是否删除",
|
||||||
"roleName": "角色名称",
|
"roleName": "角色名称",
|
||||||
"skillAuthorization": "能力授权",
|
"skillAuthorization": "能力授权",
|
||||||
@@ -49,10 +59,42 @@
|
|||||||
"usePermission": "使用权限",
|
"usePermission": "使用权限",
|
||||||
"managePermission": "管理权限",
|
"managePermission": "管理权限",
|
||||||
"roleNamePrompt": "角色名称不能超过50字符",
|
"roleNamePrompt": "角色名称不能超过50字符",
|
||||||
"roleNameRequired": "角色名称不能为空",
|
"roleNameRequired": "角色名称不可为空",
|
||||||
|
"groupNameExists": "用户组名称不可重复",
|
||||||
|
"groupNamePrompt": "用户组名称不能超过30字符",
|
||||||
|
"groupNameRequired": "用户组名称不可为空",
|
||||||
"roleNameExists": "角色名称已存在",
|
"roleNameExists": "角色名称已存在",
|
||||||
"parameterConfig": "参数配置",
|
"parameterConfig": "参数配置",
|
||||||
"language": "语言"
|
"language": "语言",
|
||||||
|
"assistantAuthorization": "NPC授权",
|
||||||
|
"assistantName": "NPC名称",
|
||||||
|
"userList": "用户列表",
|
||||||
|
"userGroup": "用户组",
|
||||||
|
"role": "角色",
|
||||||
|
"searchUserGroups": "搜索用户组",
|
||||||
|
"searchRoles": "搜索角色",
|
||||||
|
"reset": "重置",
|
||||||
|
"confirm": "确认",
|
||||||
|
"userGroupName": "输入用户组名称",
|
||||||
|
"groupName": "用户组名称",
|
||||||
|
"admins": "管理员",
|
||||||
|
"flowControl": "用户组整体流量控制",
|
||||||
|
"AssistantFlowCtrl": "NPC流量控制",
|
||||||
|
"SkillFlowCtrl": "能力流量控制",
|
||||||
|
"createdBy": "创建人",
|
||||||
|
"flowCtrlStrategy": "流量控制策略",
|
||||||
|
"limit": "有限制",
|
||||||
|
"unlimited": "无限制",
|
||||||
|
"iconHover": "同时受用户组整体流量控制策略约束",
|
||||||
|
"maximum": "最多",
|
||||||
|
"perMinute": "个同时在线会话",
|
||||||
|
"changeTime": "修改时间",
|
||||||
|
"deleteGroup": "删除后 【{{name}}】 将不再存在,是否删除?",
|
||||||
|
"currentGroup": "当前用户组",
|
||||||
|
"defaultGroup": "默认用户组",
|
||||||
|
"resetPwd": "重置密码",
|
||||||
|
"selectGroup": "请选择用户组",
|
||||||
|
"selectRole": "请选择角色"
|
||||||
},
|
},
|
||||||
"skills": {
|
"skills": {
|
||||||
"manageTemplate": "管理能力模板",
|
"manageTemplate": "管理能力模板",
|
||||||
@@ -144,7 +186,21 @@
|
|||||||
"fileStorageFailure": " 文件地址失效!",
|
"fileStorageFailure": " 文件地址失效!",
|
||||||
"confirmDeleteChat": "确认删除该会话?",
|
"confirmDeleteChat": "确认删除该会话?",
|
||||||
"roundOver": "本轮结束",
|
"roundOver": "本轮结束",
|
||||||
"chatDialogTip": "设置提示模板中定义的输入变量。与代理和链互动"
|
"chatDialogTip": "设置提示模板中定义的输入变量。与代理和链互动",
|
||||||
|
"feedback": "反馈",
|
||||||
|
"feedbackRequired": "反馈信息不能为空",
|
||||||
|
"dialogueSelection": "对话选择",
|
||||||
|
"chooseSkillOrAssistant": "选择一个您想使用的线上能力或NPC",
|
||||||
|
"search": "搜索",
|
||||||
|
"recommendationQuestions": "推荐问题",
|
||||||
|
"historicalMessages": "以上为历史消息",
|
||||||
|
"clickDownload": "点击下载",
|
||||||
|
"searchAssistantOrSkill": "搜索NPC或者能力",
|
||||||
|
"operationTips": "操作提示:在左侧选择要展示的标签,在右侧拖拽进行排序",
|
||||||
|
"selected": "已选",
|
||||||
|
"pleaseSelectAnApp": "请选择一个应用",
|
||||||
|
"allLabels": "全部标签",
|
||||||
|
"searchLabels": "搜索标签"
|
||||||
},
|
},
|
||||||
"model": {
|
"model": {
|
||||||
"modelConfiguration": "模型配置",
|
"modelConfiguration": "模型配置",
|
||||||
@@ -295,7 +351,41 @@
|
|||||||
"knowledgeImg": "知识库头像",
|
"knowledgeImg": "知识库头像",
|
||||||
"indexModel": "索引模型",
|
"indexModel": "索引模型",
|
||||||
"dataUp": "单条数据上限",
|
"dataUp": "单条数据上限",
|
||||||
"introduce": "介绍"
|
"introduce": "介绍",
|
||||||
|
"fileUploadResult": "共上传 {{total}} 份文件,有 {{failed}} 份文件上传失败",
|
||||||
|
"modalTitle": "文件重复提示",
|
||||||
|
"modalMessage": "以下文件在知识库中已存在,继续上传将会覆盖原有文件以及处理策略,是否覆盖?",
|
||||||
|
"keepOriginal": "不覆盖,保留原文件",
|
||||||
|
"override": "覆盖",
|
||||||
|
"toolName": "工具名称"
|
||||||
|
},
|
||||||
|
"evaluation": {
|
||||||
|
"id": "任务ID",
|
||||||
|
"filename": "测试文件名称",
|
||||||
|
"skillAssistant": "能力NPC",
|
||||||
|
"status": "状态",
|
||||||
|
"score": "评测分数",
|
||||||
|
"createDate": "创建日期",
|
||||||
|
"download": "下载",
|
||||||
|
"confirmDeleteEvaluation": "确认删除该评测任务?",
|
||||||
|
"createTitle": "新建任务",
|
||||||
|
"selectLabel": "选择要评测的能力或者NPC:",
|
||||||
|
"selectPlaceholder": "请选择",
|
||||||
|
"selectInputPlaceholder": "请根据名称进行搜索",
|
||||||
|
"dataLabel": "测试集数据:",
|
||||||
|
"fileExpandName": "支持扩展名:",
|
||||||
|
"downloadTemplate": "下载模板文件",
|
||||||
|
"promptLabel": "评测指令文本:",
|
||||||
|
"enterExecType": "请选择要评测的能力或NPC",
|
||||||
|
"enterUniqueId": "请选择能力或NPCID",
|
||||||
|
"enterVersion": "请选择能力的版本",
|
||||||
|
"enterFile": "请选择测试集数据",
|
||||||
|
"enterPrompt": "评测指令不能为空",
|
||||||
|
"fileSizeLimit": "文件大小限制在10M以内",
|
||||||
|
"evaluationCollection": "评测集合",
|
||||||
|
"tooltip": "该指令文本用于指导大模型对 ground truth 和 answer 提取要点,如无特别需求请勿修改",
|
||||||
|
"create": "创建",
|
||||||
|
"cancel": "取消"
|
||||||
},
|
},
|
||||||
"code": {
|
"code": {
|
||||||
"editPythonCodeDescription": "编辑你的 Python 代码此代码片段接受模块导入和一个函数定义。确保您的函数返回一个字符串。",
|
"editPythonCodeDescription": "编辑你的 Python 代码此代码片段接受模块导入和一个函数定义。确保您的函数返回一个字符串。",
|
||||||
@@ -439,6 +529,11 @@
|
|||||||
"cancle": "取消",
|
"cancle": "取消",
|
||||||
"tip": "提示",
|
"tip": "提示",
|
||||||
"deleteAssistant": "确认删除该NPC?",
|
"deleteAssistant": "确认删除该NPC?",
|
||||||
|
"chatTipsTitle": "使用提示",
|
||||||
|
"updateSuccess": "修改成功",
|
||||||
|
"createSuccess": "创建成功",
|
||||||
|
"confirm": "确认",
|
||||||
|
"required": "不可为空",
|
||||||
"build": {
|
"build": {
|
||||||
"create": "创建",
|
"create": "创建",
|
||||||
"assistant": "NPC",
|
"assistant": "NPC",
|
||||||
@@ -568,6 +663,47 @@
|
|||||||
"result": "测试结果",
|
"result": "测试结果",
|
||||||
"outResultPlaceholder": "点击按钮,输出结果"
|
"outResultPlaceholder": "点击按钮,输出结果"
|
||||||
},
|
},
|
||||||
|
"resetPassword": {
|
||||||
|
"slogen": "安全地重置您的密码",
|
||||||
|
"currentPassword": "当前密码",
|
||||||
|
"newPassword": "新密码",
|
||||||
|
"confirmNewPassword": "确认新密码",
|
||||||
|
"pleaseEnterCurrentPassword": "请输入当前密码。",
|
||||||
|
"pleaseEnterNewPassword": "请输入新密码。",
|
||||||
|
"pleaseEnterConfirmPassword": "请确认新密码。",
|
||||||
|
"newPasswordTooShort": "新密码必须至少 7 个字符。",
|
||||||
|
"passwordMismatch": "新密码不匹配。",
|
||||||
|
"resetButton": "修改密码",
|
||||||
|
"passwordResetSuccess": "您的密码已成功修改",
|
||||||
|
"adminResetSuccess": "密码已重置",
|
||||||
|
"resetFailed": "密码重置失败",
|
||||||
|
"notEmpty": "新密码不能为空"
|
||||||
|
},
|
||||||
|
"log": {
|
||||||
|
"auditManagement": "审计管理",
|
||||||
|
"searchButton": "查询",
|
||||||
|
"resetButton": "重置",
|
||||||
|
"auditId": "审计ID",
|
||||||
|
"username": "用户名",
|
||||||
|
"operationTime": "操作时间",
|
||||||
|
"systemModule": "系统模块",
|
||||||
|
"operationAction": "操作行为",
|
||||||
|
"objectType": "操作对象类型",
|
||||||
|
"operationObject": "操作对象",
|
||||||
|
"ipAddress": "IP地址",
|
||||||
|
"remark": "备注",
|
||||||
|
"selectUser": "选择用户",
|
||||||
|
"selectUserGroup": "选择用户组",
|
||||||
|
"startDate": "开始日期",
|
||||||
|
"endDate": "结束日期",
|
||||||
|
"actionBehavior": "操作行为"
|
||||||
|
},
|
||||||
|
"tag": {
|
||||||
|
"labelMaxLength": "标签名不能超过10个字符",
|
||||||
|
"confirmDeleteLabel": "标签【{{label}}】正在使用中,确认删除?",
|
||||||
|
"createNewLabel": "创建“新标签”",
|
||||||
|
"addLabel": "添加标签"
|
||||||
|
},
|
||||||
"agents": {
|
"agents": {
|
||||||
"AgentInitializer": {
|
"AgentInitializer": {
|
||||||
"display_name": "AgentInitializer",
|
"display_name": "AgentInitializer",
|
||||||
|
|||||||
520
package-lock.json
generated
@@ -61,7 +61,9 @@
|
|||||||
"react": "^18.2.0",
|
"react": "^18.2.0",
|
||||||
"react-ace": "^10.1.0",
|
"react-ace": "^10.1.0",
|
||||||
"react-beautiful-dnd": "^13.1.1",
|
"react-beautiful-dnd": "^13.1.1",
|
||||||
|
"react-color": "^2.19.3",
|
||||||
"react-cookie": "^4.1.1",
|
"react-cookie": "^4.1.1",
|
||||||
|
"react-day-picker": "^8.10.1",
|
||||||
"react-dom": "^18.2.0",
|
"react-dom": "^18.2.0",
|
||||||
"react-dropzone": "^14.2.3",
|
"react-dropzone": "^14.2.3",
|
||||||
"react-error-boundary": "^4.0.11",
|
"react-error-boundary": "^4.0.11",
|
||||||
@@ -115,6 +117,7 @@
|
|||||||
"tailwindcss": "^3.3.3",
|
"tailwindcss": "^3.3.3",
|
||||||
"typescript": "^5.2.2",
|
"typescript": "^5.2.2",
|
||||||
"vite": "^4.5.2",
|
"vite": "^4.5.2",
|
||||||
|
"vite-plugin-html": "^3.2.2",
|
||||||
"vite-plugin-static-copy": "^0.17.0"
|
"vite-plugin-static-copy": "^0.17.0"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
@@ -1283,6 +1286,14 @@
|
|||||||
"react": ">= 16"
|
"react": ">= 16"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@icons/material": {
|
||||||
|
"version": "0.2.4",
|
||||||
|
"resolved": "https://registry.npmmirror.com/@icons/material/-/material-0.2.4.tgz",
|
||||||
|
"integrity": "sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw==",
|
||||||
|
"peerDependencies": {
|
||||||
|
"react": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@isaacs/cliui": {
|
"node_modules/@isaacs/cliui": {
|
||||||
"version": "8.0.2",
|
"version": "8.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
|
||||||
@@ -1401,6 +1412,16 @@
|
|||||||
"node": ">=6.0.0"
|
"node": ">=6.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@jridgewell/source-map": {
|
||||||
|
"version": "0.3.6",
|
||||||
|
"resolved": "https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.6.tgz",
|
||||||
|
"integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
|
||||||
|
"devOptional": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@jridgewell/gen-mapping": "^0.3.5",
|
||||||
|
"@jridgewell/trace-mapping": "^0.3.25"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@jridgewell/sourcemap-codec": {
|
"node_modules/@jridgewell/sourcemap-codec": {
|
||||||
"version": "1.4.15",
|
"version": "1.4.15",
|
||||||
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
|
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
|
||||||
@@ -4950,6 +4971,12 @@
|
|||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/async": {
|
||||||
|
"version": "3.2.5",
|
||||||
|
"resolved": "https://registry.npmmirror.com/async/-/async-3.2.5.tgz",
|
||||||
|
"integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"node_modules/async-validator": {
|
"node_modules/async-validator": {
|
||||||
"version": "4.2.5",
|
"version": "4.2.5",
|
||||||
"resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz",
|
"resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz",
|
||||||
@@ -5284,6 +5311,12 @@
|
|||||||
"safe-buffer": "~5.2.0"
|
"safe-buffer": "~5.2.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/boolbase": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"node_modules/brace-expansion": {
|
"node_modules/brace-expansion": {
|
||||||
"version": "2.0.1",
|
"version": "2.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
|
||||||
@@ -5432,6 +5465,16 @@
|
|||||||
"node": ">=6"
|
"node": ">=6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/camel-case": {
|
||||||
|
"version": "4.1.2",
|
||||||
|
"resolved": "https://registry.npmmirror.com/camel-case/-/camel-case-4.1.2.tgz",
|
||||||
|
"integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"pascal-case": "^3.1.2",
|
||||||
|
"tslib": "^2.0.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/camelcase": {
|
"node_modules/camelcase": {
|
||||||
"version": "6.3.0",
|
"version": "6.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
|
||||||
@@ -5615,6 +5658,27 @@
|
|||||||
"resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz",
|
"resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz",
|
||||||
"integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow=="
|
"integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow=="
|
||||||
},
|
},
|
||||||
|
"node_modules/clean-css": {
|
||||||
|
"version": "5.3.3",
|
||||||
|
"resolved": "https://registry.npmmirror.com/clean-css/-/clean-css-5.3.3.tgz",
|
||||||
|
"integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"source-map": "~0.6.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 10.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/clean-css/node_modules/source-map": {
|
||||||
|
"version": "0.6.1",
|
||||||
|
"resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz",
|
||||||
|
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.10.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/cli-cursor": {
|
"node_modules/cli-cursor": {
|
||||||
"version": "4.0.0",
|
"version": "4.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz",
|
||||||
@@ -5975,6 +6039,12 @@
|
|||||||
"resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz",
|
"resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz",
|
||||||
"integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw=="
|
"integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw=="
|
||||||
},
|
},
|
||||||
|
"node_modules/colorette": {
|
||||||
|
"version": "2.0.20",
|
||||||
|
"resolved": "https://registry.npmmirror.com/colorette/-/colorette-2.0.20.tgz",
|
||||||
|
"integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"node_modules/combined-stream": {
|
"node_modules/combined-stream": {
|
||||||
"version": "1.0.8",
|
"version": "1.0.8",
|
||||||
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
||||||
@@ -6014,7 +6084,22 @@
|
|||||||
"version": "0.0.1",
|
"version": "0.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
||||||
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
|
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
|
||||||
"optional": true
|
"devOptional": true
|
||||||
|
},
|
||||||
|
"node_modules/connect-history-api-fallback": {
|
||||||
|
"version": "1.6.0",
|
||||||
|
"resolved": "https://registry.npmmirror.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz",
|
||||||
|
"integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/consola": {
|
||||||
|
"version": "2.15.3",
|
||||||
|
"resolved": "https://registry.npmmirror.com/consola/-/consola-2.15.3.tgz",
|
||||||
|
"integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==",
|
||||||
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/console-control-strings": {
|
"node_modules/console-control-strings": {
|
||||||
"version": "1.1.0",
|
"version": "1.1.0",
|
||||||
@@ -6115,6 +6200,22 @@
|
|||||||
"tiny-invariant": "^1.0.6"
|
"tiny-invariant": "^1.0.6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/css-select": {
|
||||||
|
"version": "4.3.0",
|
||||||
|
"resolved": "https://registry.npmmirror.com/css-select/-/css-select-4.3.0.tgz",
|
||||||
|
"integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"boolbase": "^1.0.0",
|
||||||
|
"css-what": "^6.0.1",
|
||||||
|
"domhandler": "^4.3.1",
|
||||||
|
"domutils": "^2.8.0",
|
||||||
|
"nth-check": "^2.0.1"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/fb55"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/css-selector-tokenizer": {
|
"node_modules/css-selector-tokenizer": {
|
||||||
"version": "0.8.0",
|
"version": "0.8.0",
|
||||||
"resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.8.0.tgz",
|
"resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.8.0.tgz",
|
||||||
@@ -6124,6 +6225,18 @@
|
|||||||
"fastparse": "^1.1.2"
|
"fastparse": "^1.1.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/css-what": {
|
||||||
|
"version": "6.1.0",
|
||||||
|
"resolved": "https://registry.npmmirror.com/css-what/-/css-what-6.1.0.tgz",
|
||||||
|
"integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 6"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/fb55"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/css.escape": {
|
"node_modules/css.escape": {
|
||||||
"version": "1.5.1",
|
"version": "1.5.1",
|
||||||
"resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz",
|
"resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz",
|
||||||
@@ -6401,6 +6514,16 @@
|
|||||||
"node": ">=12"
|
"node": ">=12"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/date-fns": {
|
||||||
|
"version": "3.6.0",
|
||||||
|
"resolved": "https://registry.npmmirror.com/date-fns/-/date-fns-3.6.0.tgz",
|
||||||
|
"integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==",
|
||||||
|
"peer": true,
|
||||||
|
"funding": {
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/kossnocorp"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/dayjs": {
|
"node_modules/dayjs": {
|
||||||
"version": "1.11.10",
|
"version": "1.11.10",
|
||||||
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz",
|
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz",
|
||||||
@@ -6702,6 +6825,32 @@
|
|||||||
"csstype": "^3.0.2"
|
"csstype": "^3.0.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/dom-serializer": {
|
||||||
|
"version": "1.4.1",
|
||||||
|
"resolved": "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-1.4.1.tgz",
|
||||||
|
"integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"domelementtype": "^2.0.1",
|
||||||
|
"domhandler": "^4.2.0",
|
||||||
|
"entities": "^2.0.0"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/domelementtype": {
|
||||||
|
"version": "2.3.0",
|
||||||
|
"resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz",
|
||||||
|
"integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
|
||||||
|
"dev": true,
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/fb55"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
"node_modules/domexception": {
|
"node_modules/domexception": {
|
||||||
"version": "4.0.0",
|
"version": "4.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz",
|
||||||
@@ -6714,11 +6863,40 @@
|
|||||||
"node": ">=12"
|
"node": ">=12"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/domhandler": {
|
||||||
|
"version": "4.3.1",
|
||||||
|
"resolved": "https://registry.npmmirror.com/domhandler/-/domhandler-4.3.1.tgz",
|
||||||
|
"integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"domelementtype": "^2.2.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 4"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/fb55/domhandler?sponsor=1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/dompurify": {
|
"node_modules/dompurify": {
|
||||||
"version": "3.1.1",
|
"version": "3.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.1.tgz",
|
||||||
"integrity": "sha512-tVP8C/GJwnABOn/7cx/ymx/hXpmBfWIPihC1aOEvS8GbMqy3pgeYtJk1HXN3CO7tu+8bpY18f6isjR5Cymj0TQ=="
|
"integrity": "sha512-tVP8C/GJwnABOn/7cx/ymx/hXpmBfWIPihC1aOEvS8GbMqy3pgeYtJk1HXN3CO7tu+8bpY18f6isjR5Cymj0TQ=="
|
||||||
},
|
},
|
||||||
|
"node_modules/domutils": {
|
||||||
|
"version": "2.8.0",
|
||||||
|
"resolved": "https://registry.npmmirror.com/domutils/-/domutils-2.8.0.tgz",
|
||||||
|
"integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"dom-serializer": "^1.0.1",
|
||||||
|
"domelementtype": "^2.2.0",
|
||||||
|
"domhandler": "^4.2.0"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/fb55/domutils?sponsor=1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/dot-case": {
|
"node_modules/dot-case": {
|
||||||
"version": "3.0.4",
|
"version": "3.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz",
|
||||||
@@ -6728,6 +6906,27 @@
|
|||||||
"tslib": "^2.0.3"
|
"tslib": "^2.0.3"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/dotenv": {
|
||||||
|
"version": "16.4.5",
|
||||||
|
"resolved": "https://registry.npmmirror.com/dotenv/-/dotenv-16.4.5.tgz",
|
||||||
|
"integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://dotenvx.com"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/dotenv-expand": {
|
||||||
|
"version": "8.0.3",
|
||||||
|
"resolved": "https://registry.npmmirror.com/dotenv-expand/-/dotenv-expand-8.0.3.tgz",
|
||||||
|
"integrity": "sha512-SErOMvge0ZUyWd5B0NXMQlDkN+8r+HhVUsxgOO7IoPDOdDRD2JjExpN6y3KnFR66jsJMwSn1pqIivhU5rcJiNg==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/duplexer2": {
|
"node_modules/duplexer2": {
|
||||||
"version": "0.1.4",
|
"version": "0.1.4",
|
||||||
"resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
|
||||||
@@ -6778,6 +6977,21 @@
|
|||||||
"resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
|
||||||
"integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
|
"integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
|
||||||
},
|
},
|
||||||
|
"node_modules/ejs": {
|
||||||
|
"version": "3.1.10",
|
||||||
|
"resolved": "https://registry.npmmirror.com/ejs/-/ejs-3.1.10.tgz",
|
||||||
|
"integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"jake": "^10.8.5"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"ejs": "bin/cli.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.10.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/electron-to-chromium": {
|
"node_modules/electron-to-chromium": {
|
||||||
"version": "1.4.750",
|
"version": "1.4.750",
|
||||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.750.tgz",
|
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.750.tgz",
|
||||||
@@ -7177,6 +7391,27 @@
|
|||||||
"url": "https://github.com/sindresorhus/file-type?sponsor=1"
|
"url": "https://github.com/sindresorhus/file-type?sponsor=1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/filelist": {
|
||||||
|
"version": "1.0.4",
|
||||||
|
"resolved": "https://registry.npmmirror.com/filelist/-/filelist-1.0.4.tgz",
|
||||||
|
"integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"minimatch": "^5.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/filelist/node_modules/minimatch": {
|
||||||
|
"version": "5.1.6",
|
||||||
|
"resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-5.1.6.tgz",
|
||||||
|
"integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"brace-expansion": "^2.0.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/filename-reserved-regex": {
|
"node_modules/filename-reserved-regex": {
|
||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-3.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-3.0.0.tgz",
|
||||||
@@ -8168,6 +8403,15 @@
|
|||||||
"node": ">=0.4"
|
"node": ">=0.4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/he": {
|
||||||
|
"version": "1.2.0",
|
||||||
|
"resolved": "https://registry.npmmirror.com/he/-/he-1.2.0.tgz",
|
||||||
|
"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
|
||||||
|
"dev": true,
|
||||||
|
"bin": {
|
||||||
|
"he": "bin/he"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/highlight.js": {
|
"node_modules/highlight.js": {
|
||||||
"version": "10.7.3",
|
"version": "10.7.3",
|
||||||
"resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz",
|
"resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz",
|
||||||
@@ -8200,6 +8444,36 @@
|
|||||||
"node": ">=12"
|
"node": ">=12"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/html-minifier-terser": {
|
||||||
|
"version": "6.1.0",
|
||||||
|
"resolved": "https://registry.npmmirror.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz",
|
||||||
|
"integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"camel-case": "^4.1.2",
|
||||||
|
"clean-css": "^5.2.2",
|
||||||
|
"commander": "^8.3.0",
|
||||||
|
"he": "^1.2.0",
|
||||||
|
"param-case": "^3.0.4",
|
||||||
|
"relateurl": "^0.2.7",
|
||||||
|
"terser": "^5.10.0"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"html-minifier-terser": "cli.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/html-minifier-terser/node_modules/commander": {
|
||||||
|
"version": "8.3.0",
|
||||||
|
"resolved": "https://registry.npmmirror.com/commander/-/commander-8.3.0.tgz",
|
||||||
|
"integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 12"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/html-parse-stringify": {
|
"node_modules/html-parse-stringify": {
|
||||||
"version": "3.0.1",
|
"version": "3.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz",
|
||||||
@@ -8909,6 +9183,46 @@
|
|||||||
"@pkgjs/parseargs": "^0.11.0"
|
"@pkgjs/parseargs": "^0.11.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/jake": {
|
||||||
|
"version": "10.9.2",
|
||||||
|
"resolved": "https://registry.npmmirror.com/jake/-/jake-10.9.2.tgz",
|
||||||
|
"integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"async": "^3.2.3",
|
||||||
|
"chalk": "^4.0.2",
|
||||||
|
"filelist": "^1.0.4",
|
||||||
|
"minimatch": "^3.1.2"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"jake": "bin/cli.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/jake/node_modules/brace-expansion": {
|
||||||
|
"version": "1.1.11",
|
||||||
|
"resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz",
|
||||||
|
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"balanced-match": "^1.0.0",
|
||||||
|
"concat-map": "0.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/jake/node_modules/minimatch": {
|
||||||
|
"version": "3.1.2",
|
||||||
|
"resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz",
|
||||||
|
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"brace-expansion": "^1.1.7"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/jest-diff": {
|
"node_modules/jest-diff": {
|
||||||
"version": "27.5.1",
|
"version": "27.5.1",
|
||||||
"resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz",
|
"resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz",
|
||||||
@@ -9432,6 +9746,11 @@
|
|||||||
"url": "https://github.com/sponsors/wooorm"
|
"url": "https://github.com/sponsors/wooorm"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/material-colors": {
|
||||||
|
"version": "1.2.6",
|
||||||
|
"resolved": "https://registry.npmmirror.com/material-colors/-/material-colors-1.2.6.tgz",
|
||||||
|
"integrity": "sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg=="
|
||||||
|
},
|
||||||
"node_modules/mathjax-full": {
|
"node_modules/mathjax-full": {
|
||||||
"version": "3.2.2",
|
"version": "3.2.2",
|
||||||
"resolved": "https://registry.npmjs.org/mathjax-full/-/mathjax-full-3.2.2.tgz",
|
"resolved": "https://registry.npmjs.org/mathjax-full/-/mathjax-full-3.2.2.tgz",
|
||||||
@@ -11789,6 +12108,16 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/node-html-parser": {
|
||||||
|
"version": "5.4.2",
|
||||||
|
"resolved": "https://registry.npmmirror.com/node-html-parser/-/node-html-parser-5.4.2.tgz",
|
||||||
|
"integrity": "sha512-RaBPP3+51hPne/OolXxcz89iYvQvKOydaqoePpOgXcrOKZhjVIzmpKZz+Hd/RBO2/zN2q6CNJhQzucVz+u3Jyw==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"css-select": "^4.2.1",
|
||||||
|
"he": "1.2.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/node-releases": {
|
"node_modules/node-releases": {
|
||||||
"version": "2.0.14",
|
"version": "2.0.14",
|
||||||
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
|
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
|
||||||
@@ -11862,6 +12191,18 @@
|
|||||||
"set-blocking": "^2.0.0"
|
"set-blocking": "^2.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/nth-check": {
|
||||||
|
"version": "2.1.1",
|
||||||
|
"resolved": "https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz",
|
||||||
|
"integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"boolbase": "^1.0.0"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/fb55/nth-check?sponsor=1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/nwsapi": {
|
"node_modules/nwsapi": {
|
||||||
"version": "2.2.9",
|
"version": "2.2.9",
|
||||||
"resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.9.tgz",
|
"resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.9.tgz",
|
||||||
@@ -12080,6 +12421,16 @@
|
|||||||
"node": ">=4"
|
"node": ">=4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/param-case": {
|
||||||
|
"version": "3.0.4",
|
||||||
|
"resolved": "https://registry.npmmirror.com/param-case/-/param-case-3.0.4.tgz",
|
||||||
|
"integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"dot-case": "^3.0.4",
|
||||||
|
"tslib": "^2.0.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/parent-module": {
|
"node_modules/parent-module": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
|
||||||
@@ -12147,6 +12498,16 @@
|
|||||||
"url": "https://github.com/fb55/entities?sponsor=1"
|
"url": "https://github.com/fb55/entities?sponsor=1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/pascal-case": {
|
||||||
|
"version": "3.1.2",
|
||||||
|
"resolved": "https://registry.npmmirror.com/pascal-case/-/pascal-case-3.1.2.tgz",
|
||||||
|
"integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"no-case": "^3.0.4",
|
||||||
|
"tslib": "^2.0.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/path-browserify": {
|
"node_modules/path-browserify": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
|
||||||
@@ -12215,6 +12576,12 @@
|
|||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/pathe": {
|
||||||
|
"version": "0.2.0",
|
||||||
|
"resolved": "https://registry.npmmirror.com/pathe/-/pathe-0.2.0.tgz",
|
||||||
|
"integrity": "sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"node_modules/pdfjs-dist": {
|
"node_modules/pdfjs-dist": {
|
||||||
"version": "3.10.111",
|
"version": "3.10.111",
|
||||||
"resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-3.10.111.tgz",
|
"resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-3.10.111.tgz",
|
||||||
@@ -13432,6 +13799,23 @@
|
|||||||
"react-dom": "^16.8.5 || ^17.0.0 || ^18.0.0"
|
"react-dom": "^16.8.5 || ^17.0.0 || ^18.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/react-color": {
|
||||||
|
"version": "2.19.3",
|
||||||
|
"resolved": "https://registry.npmmirror.com/react-color/-/react-color-2.19.3.tgz",
|
||||||
|
"integrity": "sha512-LEeGE/ZzNLIsFWa1TMe8y5VYqr7bibneWmvJwm1pCn/eNmrabWDh659JSPn9BuaMpEfU83WTOJfnCcjDZwNQTA==",
|
||||||
|
"dependencies": {
|
||||||
|
"@icons/material": "^0.2.4",
|
||||||
|
"lodash": "^4.17.15",
|
||||||
|
"lodash-es": "^4.17.15",
|
||||||
|
"material-colors": "^1.2.1",
|
||||||
|
"prop-types": "^15.5.10",
|
||||||
|
"reactcss": "^1.2.0",
|
||||||
|
"tinycolor2": "^1.4.1"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"react": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/react-colorful": {
|
"node_modules/react-colorful": {
|
||||||
"version": "5.6.1",
|
"version": "5.6.1",
|
||||||
"resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.6.1.tgz",
|
"resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.6.1.tgz",
|
||||||
@@ -13454,6 +13838,19 @@
|
|||||||
"react": ">= 16.3.0"
|
"react": ">= 16.3.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/react-day-picker": {
|
||||||
|
"version": "8.10.1",
|
||||||
|
"resolved": "https://registry.npmmirror.com/react-day-picker/-/react-day-picker-8.10.1.tgz",
|
||||||
|
"integrity": "sha512-TMx7fNbhLk15eqcMt+7Z7S2KF7mfTId/XJDjKE8f+IUcFn0l08/kI4FiYTL/0yuOLmEcbR4Fwe3GJf/NiiMnPA==",
|
||||||
|
"funding": {
|
||||||
|
"type": "individual",
|
||||||
|
"url": "https://github.com/sponsors/gpbl"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"date-fns": "^2.28.0 || ^3.0.0",
|
||||||
|
"react": "^16.8.0 || ^17.0.0 || ^18.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/react-dom": {
|
"node_modules/react-dom": {
|
||||||
"version": "18.3.1",
|
"version": "18.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
|
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
|
||||||
@@ -13859,6 +14256,14 @@
|
|||||||
"react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0"
|
"react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/reactcss": {
|
||||||
|
"version": "1.2.3",
|
||||||
|
"resolved": "https://registry.npmmirror.com/reactcss/-/reactcss-1.2.3.tgz",
|
||||||
|
"integrity": "sha512-KiwVUcFu1RErkI97ywr8nvx8dNOpT03rbnma0SSalTYjkrPYaEajR4a/MRt6DZ46K6arDRbWMNHF+xH7G7n/8A==",
|
||||||
|
"dependencies": {
|
||||||
|
"lodash": "^4.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/reactflow": {
|
"node_modules/reactflow": {
|
||||||
"version": "11.11.2",
|
"version": "11.11.2",
|
||||||
"resolved": "https://registry.npmjs.org/reactflow/-/reactflow-11.11.2.tgz",
|
"resolved": "https://registry.npmjs.org/reactflow/-/reactflow-11.11.2.tgz",
|
||||||
@@ -14149,6 +14554,15 @@
|
|||||||
"url": "https://opencollective.com/unified"
|
"url": "https://opencollective.com/unified"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/relateurl": {
|
||||||
|
"version": "0.2.7",
|
||||||
|
"resolved": "https://registry.npmmirror.com/relateurl/-/relateurl-0.2.7.tgz",
|
||||||
|
"integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.10"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/remark-breaks": {
|
"node_modules/remark-breaks": {
|
||||||
"version": "4.0.0",
|
"version": "4.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/remark-breaks/-/remark-breaks-4.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/remark-breaks/-/remark-breaks-4.0.0.tgz",
|
||||||
@@ -15308,6 +15722,31 @@
|
|||||||
"node": ">=0.10.0"
|
"node": ">=0.10.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/source-map-support": {
|
||||||
|
"version": "0.5.21",
|
||||||
|
"resolved": "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz",
|
||||||
|
"integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
|
||||||
|
"devOptional": true,
|
||||||
|
"dependencies": {
|
||||||
|
"buffer-from": "^1.0.0",
|
||||||
|
"source-map": "^0.6.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/source-map-support/node_modules/buffer-from": {
|
||||||
|
"version": "1.1.2",
|
||||||
|
"resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz",
|
||||||
|
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
|
||||||
|
"devOptional": true
|
||||||
|
},
|
||||||
|
"node_modules/source-map-support/node_modules/source-map": {
|
||||||
|
"version": "0.6.1",
|
||||||
|
"resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz",
|
||||||
|
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
|
||||||
|
"devOptional": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.10.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/space-separated-tokens": {
|
"node_modules/space-separated-tokens": {
|
||||||
"version": "2.0.2",
|
"version": "2.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz",
|
||||||
@@ -15791,6 +16230,30 @@
|
|||||||
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
|
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
|
"node_modules/terser": {
|
||||||
|
"version": "5.31.3",
|
||||||
|
"resolved": "https://registry.npmmirror.com/terser/-/terser-5.31.3.tgz",
|
||||||
|
"integrity": "sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA==",
|
||||||
|
"devOptional": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@jridgewell/source-map": "^0.3.3",
|
||||||
|
"acorn": "^8.8.2",
|
||||||
|
"commander": "^2.20.0",
|
||||||
|
"source-map-support": "~0.5.20"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"terser": "bin/terser"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/terser/node_modules/commander": {
|
||||||
|
"version": "2.20.3",
|
||||||
|
"resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz",
|
||||||
|
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
|
||||||
|
"devOptional": true
|
||||||
|
},
|
||||||
"node_modules/thenify": {
|
"node_modules/thenify": {
|
||||||
"version": "3.3.1",
|
"version": "3.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
|
"resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
|
||||||
@@ -15845,6 +16308,11 @@
|
|||||||
"resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
|
||||||
"integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="
|
"integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="
|
||||||
},
|
},
|
||||||
|
"node_modules/tinycolor2": {
|
||||||
|
"version": "1.6.0",
|
||||||
|
"resolved": "https://registry.npmmirror.com/tinycolor2/-/tinycolor2-1.6.0.tgz",
|
||||||
|
"integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw=="
|
||||||
|
},
|
||||||
"node_modules/to-fast-properties": {
|
"node_modules/to-fast-properties": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
|
||||||
@@ -16487,6 +16955,56 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/vite-plugin-html": {
|
||||||
|
"version": "3.2.2",
|
||||||
|
"resolved": "https://registry.npmmirror.com/vite-plugin-html/-/vite-plugin-html-3.2.2.tgz",
|
||||||
|
"integrity": "sha512-vb9C9kcdzcIo/Oc3CLZVS03dL5pDlOFuhGlZYDCJ840BhWl/0nGeZWf3Qy7NlOayscY4Cm/QRgULCQkEZige5Q==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@rollup/pluginutils": "^4.2.0",
|
||||||
|
"colorette": "^2.0.16",
|
||||||
|
"connect-history-api-fallback": "^1.6.0",
|
||||||
|
"consola": "^2.15.3",
|
||||||
|
"dotenv": "^16.0.0",
|
||||||
|
"dotenv-expand": "^8.0.2",
|
||||||
|
"ejs": "^3.1.6",
|
||||||
|
"fast-glob": "^3.2.11",
|
||||||
|
"fs-extra": "^10.0.1",
|
||||||
|
"html-minifier-terser": "^6.1.0",
|
||||||
|
"node-html-parser": "^5.3.3",
|
||||||
|
"pathe": "^0.2.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"vite": ">=2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/vite-plugin-html/node_modules/@rollup/pluginutils": {
|
||||||
|
"version": "4.2.1",
|
||||||
|
"resolved": "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-4.2.1.tgz",
|
||||||
|
"integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"estree-walker": "^2.0.1",
|
||||||
|
"picomatch": "^2.2.2"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 8.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/vite-plugin-html/node_modules/fs-extra": {
|
||||||
|
"version": "10.1.0",
|
||||||
|
"resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz",
|
||||||
|
"integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"graceful-fs": "^4.2.0",
|
||||||
|
"jsonfile": "^6.0.1",
|
||||||
|
"universalify": "^2.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/vite-plugin-static-copy": {
|
"node_modules/vite-plugin-static-copy": {
|
||||||
"version": "0.17.1",
|
"version": "0.17.1",
|
||||||
"resolved": "https://registry.npmjs.org/vite-plugin-static-copy/-/vite-plugin-static-copy-0.17.1.tgz",
|
"resolved": "https://registry.npmjs.org/vite-plugin-static-copy/-/vite-plugin-static-copy-0.17.1.tgz",
|
||||||
|
|||||||
@@ -56,7 +56,9 @@
|
|||||||
"react": "^18.2.0",
|
"react": "^18.2.0",
|
||||||
"react-ace": "^10.1.0",
|
"react-ace": "^10.1.0",
|
||||||
"react-beautiful-dnd": "^13.1.1",
|
"react-beautiful-dnd": "^13.1.1",
|
||||||
|
"react-color": "^2.19.3",
|
||||||
"react-cookie": "^4.1.1",
|
"react-cookie": "^4.1.1",
|
||||||
|
"react-day-picker": "^8.10.1",
|
||||||
"react-dom": "^18.2.0",
|
"react-dom": "^18.2.0",
|
||||||
"react-dropzone": "^14.2.3",
|
"react-dropzone": "^14.2.3",
|
||||||
"react-error-boundary": "^4.0.11",
|
"react-error-boundary": "^4.0.11",
|
||||||
@@ -136,6 +138,7 @@
|
|||||||
"tailwindcss": "^3.3.3",
|
"tailwindcss": "^3.3.3",
|
||||||
"typescript": "^5.2.2",
|
"typescript": "^5.2.2",
|
||||||
"vite": "^4.5.2",
|
"vite": "^4.5.2",
|
||||||
|
"vite-plugin-html": "^3.2.2",
|
||||||
"vite-plugin-static-copy": "^0.17.0"
|
"vite-plugin-static-copy": "^0.17.0"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
|
|||||||
@@ -21,25 +21,34 @@
|
|||||||
"pleaseEnterCaptcha": "Please enter captcha"
|
"pleaseEnterCaptcha": "Please enter captcha"
|
||||||
},
|
},
|
||||||
"menu": {
|
"menu": {
|
||||||
"app": "App",
|
"app": "Chat",
|
||||||
"skills": "Skills",
|
"user": "User",
|
||||||
|
"github": "GitHub",
|
||||||
|
"bookopen": "Document",
|
||||||
|
"skills": "Build",
|
||||||
"knowledge": "Knowledge",
|
"knowledge": "Knowledge",
|
||||||
|
"evaluation": "Evaluation",
|
||||||
"models": "Models",
|
"models": "Models",
|
||||||
"system": "System",
|
"system": "System",
|
||||||
|
"log": "Logs",
|
||||||
"themeSwitch": "Theme Switch",
|
"themeSwitch": "Theme Switch",
|
||||||
"document": "Documentation",
|
"document": "Documentation",
|
||||||
"logout": "Logout",
|
"logout": "Logout",
|
||||||
"logoutDescription": "Log out",
|
"logoutDescription": "Log out",
|
||||||
|
"logoutContent": "Are you sure to log out",
|
||||||
"forBestExperience": "For the best experience, please access this website on a PC",
|
"forBestExperience": "For the best experience, please access this website on a PC",
|
||||||
"onlineDocumentation": "Online Documentation"
|
"onlineDocumentation": "Online Documentation",
|
||||||
|
"changePwd": "Password"
|
||||||
},
|
},
|
||||||
"system": {
|
"system": {
|
||||||
"userManagement": "User Management",
|
"userManagement": "User Management",
|
||||||
"roleManagement": "Role Management",
|
"roleManagement": "Role Management",
|
||||||
|
"userGroupsM": "UserGroup Management",
|
||||||
"systemConfiguration": "System Configuration",
|
"systemConfiguration": "System Configuration",
|
||||||
"username": "Username",
|
"username": "Username",
|
||||||
"confirmDisable": "Confirm disabling this user?",
|
"confirmDisable": "Confirm disabling this user?",
|
||||||
"roleSelect": "Select Role",
|
"roleSelect": "Select Roles",
|
||||||
|
"userGroupsSel": "Select UserGroups",
|
||||||
"roleList": "Role List",
|
"roleList": "Role List",
|
||||||
"confirmText": "Are you sure you want to delete",
|
"confirmText": "Are you sure you want to delete",
|
||||||
"roleName": "Role Name",
|
"roleName": "Role Name",
|
||||||
@@ -52,8 +61,41 @@
|
|||||||
"roleNamePrompt": "Role name cannot exceed 50 characters",
|
"roleNamePrompt": "Role name cannot exceed 50 characters",
|
||||||
"roleNameRequired": "Role name is required",
|
"roleNameRequired": "Role name is required",
|
||||||
"roleNameExists": "Role name already exists",
|
"roleNameExists": "Role name already exists",
|
||||||
|
"groupNameExists": "UserGroup name already exists",
|
||||||
|
"groupNamePrompt": "UserGroup name cannot exceed 30 characters",
|
||||||
|
"groupNameRequired": "UserGroup name is required",
|
||||||
"parameterConfig": "Parameter Configuration",
|
"parameterConfig": "Parameter Configuration",
|
||||||
"language": "Language"
|
"language": "Language",
|
||||||
|
"assistantAuthorization": "Assistant Authorization",
|
||||||
|
"assistantName": "Assistant Name",
|
||||||
|
"userList": "User List",
|
||||||
|
"userGroupList": "UserGroup List",
|
||||||
|
"userGroup": "userGroup",
|
||||||
|
"role": "Role",
|
||||||
|
"searchUserGroups": "Search user groups",
|
||||||
|
"searchRoles": "Search roles",
|
||||||
|
"reset": "Reset",
|
||||||
|
"confirm": "Confirm",
|
||||||
|
"userGroupName": "Enter UserGroup Name",
|
||||||
|
"groupName": "UserGroup Name",
|
||||||
|
"admins": "Admin",
|
||||||
|
"flowControl": "Overall UserGroup Flow Control",
|
||||||
|
"AssistantFlowCtrl": "Assistant Flow Control",
|
||||||
|
"SkillFlowCtrl": "Skill Flow Control",
|
||||||
|
"createdBy": "CreatedBy",
|
||||||
|
"flowCtrlStrategy": "Flow control strategy",
|
||||||
|
"limit": "Limit",
|
||||||
|
"unlimited": "Unlimited",
|
||||||
|
"iconHover": "Simultaneously constrained by the overall traffic control strategy of the user group",
|
||||||
|
"maximum": "Up to",
|
||||||
|
"perMinute": "simultaneous online sessions",
|
||||||
|
"changeTime": "Modification Time",
|
||||||
|
"deleteGroup": "After deletion 【{{name}}】 will no longer exist, Do you want to delete it?",
|
||||||
|
"currentGroup": "Current UserGroup",
|
||||||
|
"defaultGroup": "DefaultGroup",
|
||||||
|
"resetPwd": "ResetPassword",
|
||||||
|
"selectGroup": "Please select a user group",
|
||||||
|
"selectRole": "Please select a role"
|
||||||
},
|
},
|
||||||
"skills": {
|
"skills": {
|
||||||
"manageTemplate": "Manage Skill Templates",
|
"manageTemplate": "Manage Skill Templates",
|
||||||
@@ -303,7 +345,40 @@
|
|||||||
"knowledgeImg": "Knowledge Base Avatar",
|
"knowledgeImg": "Knowledge Base Avatar",
|
||||||
"indexModel": "Index model",
|
"indexModel": "Index model",
|
||||||
"dataUp": "Single data upper limit",
|
"dataUp": "Single data upper limit",
|
||||||
"introduce": "Introduce"
|
"introduce": "Introduce",
|
||||||
|
"fileUploadResult": "Out of the {{total}} files uploaded, {{failed}} failed to upload.",
|
||||||
|
"modalTitle": "File Duplicate Prompt",
|
||||||
|
"modalMessage": "The following files already exist in the knowledge base. Continuing the upload will overwrite the original files and processing strategy. Do you want to proceed with overwrite?",
|
||||||
|
"keepOriginal": "Keep Original Files",
|
||||||
|
"override": "Override",
|
||||||
|
"toolName": "ToolName"
|
||||||
|
},
|
||||||
|
"evaluation": {
|
||||||
|
"id": "任务ID",
|
||||||
|
"filename": "测试文件名称",
|
||||||
|
"skillAssistant": "能力NPC",
|
||||||
|
"status": "状态",
|
||||||
|
"score": "评测分数",
|
||||||
|
"createDate": "创建日期",
|
||||||
|
"download": "下载",
|
||||||
|
"confirmDeleteEvaluation": "确认删除该评测任务?",
|
||||||
|
"createTitle": "新建任务",
|
||||||
|
"selectLabel": "选择要评测的能力或者NPC:",
|
||||||
|
"selectPlaceholder": "请选择",
|
||||||
|
"dataLabel": "测试集数据:",
|
||||||
|
"fileExpandName": "支持扩展名:",
|
||||||
|
"downloadTemplate": "下载模板文件",
|
||||||
|
"promptLabel": "评测指令文本:",
|
||||||
|
"enterExecType": "请选择要评测的能力或NPC",
|
||||||
|
"enterUniqueId": "请选择能力或NPCID",
|
||||||
|
"enterVersion": "请选择能力的版本",
|
||||||
|
"enterFile": "请选择测试集数据",
|
||||||
|
"enterPrompt": "评测指令不能为空",
|
||||||
|
"fileSizeLimit": "文件大小限制在10M以内",
|
||||||
|
"evaluationCollection": "评测集合",
|
||||||
|
"tooltip": "该指令文本用于指导大模型对 ground truth 和 answer 提取要点,如无特别需求请勿修改",
|
||||||
|
"create": "创建",
|
||||||
|
"cancel": "取消"
|
||||||
},
|
},
|
||||||
"code": {
|
"code": {
|
||||||
"editPythonCodeDescription": "Edit your Python code here. This code snippet accepts module imports and a function definition. Make sure your function returns a string.",
|
"editPythonCodeDescription": "Edit your Python code here. This code snippet accepts module imports and a function definition. Make sure your function returns a string.",
|
||||||
@@ -576,6 +651,41 @@
|
|||||||
"result": "Test Result",
|
"result": "Test Result",
|
||||||
"outResultPlaceholder": "Click the button to output the result"
|
"outResultPlaceholder": "Click the button to output the result"
|
||||||
},
|
},
|
||||||
|
"resetPassword": {
|
||||||
|
"slogen": "Securely Reset Your Password",
|
||||||
|
"currentPassword": "Current Password",
|
||||||
|
"newPassword": "New Password",
|
||||||
|
"confirmNewPassword": "Confirm New Password",
|
||||||
|
"pleaseEnterCurrentPassword": "Please enter your current password.",
|
||||||
|
"pleaseEnterNewPassword": "Please enter your new password.",
|
||||||
|
"pleaseEnterConfirmPassword": "Please confirm your new password.",
|
||||||
|
"newPasswordTooShort": "New password must be at least 8 characters.",
|
||||||
|
"passwordMismatch": "The new passwords do not match.",
|
||||||
|
"resetButton": "Change Password",
|
||||||
|
"passwordResetSuccess": "Your password has been successfully reset.",
|
||||||
|
"adminResetSuccess": "Password has been successfully reset",
|
||||||
|
"resetFailed": "Pwd Reset Failed",
|
||||||
|
"notEmpty": "The new password cannot be empty"
|
||||||
|
},
|
||||||
|
"log": {
|
||||||
|
"auditManagement": "Audit Management",
|
||||||
|
"searchButton": "Search",
|
||||||
|
"resetButton": "Reset",
|
||||||
|
"auditId": "Audit ID",
|
||||||
|
"username": "Username",
|
||||||
|
"operationTime": "Operation Time",
|
||||||
|
"systemModule": "System Module",
|
||||||
|
"operationAction": "Operation Action",
|
||||||
|
"objectType": "Operation Object Type",
|
||||||
|
"operationObject": "Operation Object",
|
||||||
|
"ipAddress": "IP Address",
|
||||||
|
"remark": "Remark",
|
||||||
|
"selectUser": "Select User",
|
||||||
|
"selectUserGroup": "Select User Group",
|
||||||
|
"startDate": "Start Date",
|
||||||
|
"endDate": "End Date",
|
||||||
|
"actionBehavior": "Action Behavior"
|
||||||
|
},
|
||||||
"agents": {
|
"agents": {
|
||||||
"AgentInitializer":{
|
"AgentInitializer":{
|
||||||
"display_name": "AgentInitializer",
|
"display_name": "AgentInitializer",
|
||||||
|
|||||||
@@ -14,32 +14,42 @@
|
|||||||
"pleaseEnterAccount": "请填写账号",
|
"pleaseEnterAccount": "请填写账号",
|
||||||
"pleaseEnterPassword": "请填写密码",
|
"pleaseEnterPassword": "请填写密码",
|
||||||
"accountTooShort": "账号过短",
|
"accountTooShort": "账号过短",
|
||||||
"passwordTooShort": "请填写密码,至少6位",
|
"passwordTooShort": "请填写密码,至少7位",
|
||||||
"passwordError": "密码必须包含字母、数字!",
|
"passwordError": "密码必须包含字母、数字!",
|
||||||
"passwordMismatch": "两次密码不一致",
|
"passwordMismatch": "两次密码不一致",
|
||||||
"registrationSuccess": "注册成功,请输入密码进行登录"
|
"registrationSuccess": "注册成功,请输入密码进行登录"
|
||||||
},
|
},
|
||||||
"menu": {
|
"menu": {
|
||||||
"app": "聊天",
|
"user": "用户",
|
||||||
|
"bookopen": "帮助文档",
|
||||||
|
"github": "GitHub",
|
||||||
|
"app": "会 话",
|
||||||
"skills": "NPC",
|
"skills": "NPC",
|
||||||
"knowledge": "知识库",
|
"knowledge": "知识库",
|
||||||
"models": "模型",
|
"evaluation": "评 测",
|
||||||
"system": "账号",
|
"models": "模 型",
|
||||||
|
"system": "账 号",
|
||||||
|
"log": "审 计",
|
||||||
"themeSwitch": "主题切换",
|
"themeSwitch": "主题切换",
|
||||||
"document": "文档",
|
"document": "文档",
|
||||||
"logout": "退出",
|
"logout": "退出",
|
||||||
"logoutDescription": "退出登录",
|
"logoutDescription": "退出登录",
|
||||||
|
"logoutContent": "确认退出登录吗",
|
||||||
"forBestExperience": "为了您的良好体验,请在 PC 端访问该网站",
|
"forBestExperience": "为了您的良好体验,请在 PC 端访问该网站",
|
||||||
"onlineDocumentation": "在线文档"
|
"onlineDocumentation": "在线文档",
|
||||||
|
"changePwd": "修改密码"
|
||||||
},
|
},
|
||||||
"system": {
|
"system": {
|
||||||
"userManagement": "用户管理",
|
"userManagement": "用户管理",
|
||||||
|
"userGroupsM": "用户组管理",
|
||||||
"roleManagement": "角色管理",
|
"roleManagement": "角色管理",
|
||||||
"systemConfiguration": "系统配置",
|
"systemConfiguration": "系统配置",
|
||||||
"username": "用户名",
|
"username": "用户名",
|
||||||
"confirmDisable": "确认禁用该用户?",
|
"confirmDisable": "确认禁用该用户?",
|
||||||
"roleSelect": "角色选择",
|
"roleSelect": "角色选择",
|
||||||
|
"userGroupsSel": "用户组选择",
|
||||||
"roleList": "角色列表",
|
"roleList": "角色列表",
|
||||||
|
"userGroupList": "用户组列表",
|
||||||
"confirmText": "是否删除",
|
"confirmText": "是否删除",
|
||||||
"roleName": "角色名称",
|
"roleName": "角色名称",
|
||||||
"skillAuthorization": "能力授权",
|
"skillAuthorization": "能力授权",
|
||||||
@@ -49,10 +59,42 @@
|
|||||||
"usePermission": "使用权限",
|
"usePermission": "使用权限",
|
||||||
"managePermission": "管理权限",
|
"managePermission": "管理权限",
|
||||||
"roleNamePrompt": "角色名称不能超过50字符",
|
"roleNamePrompt": "角色名称不能超过50字符",
|
||||||
"roleNameRequired": "角色名称不能为空",
|
"roleNameRequired": "角色名称不可为空",
|
||||||
|
"groupNameExists": "用户组名称不可重复",
|
||||||
|
"groupNamePrompt": "用户组名称不能超过30字符",
|
||||||
|
"groupNameRequired": "用户组名称不可为空",
|
||||||
"roleNameExists": "角色名称已存在",
|
"roleNameExists": "角色名称已存在",
|
||||||
"parameterConfig": "参数配置",
|
"parameterConfig": "参数配置",
|
||||||
"language": "语言"
|
"language": "语言",
|
||||||
|
"assistantAuthorization": "NPC授权",
|
||||||
|
"assistantName": "NPC名称",
|
||||||
|
"userList": "用户列表",
|
||||||
|
"userGroup": "用户组",
|
||||||
|
"role": "角色",
|
||||||
|
"searchUserGroups": "搜索用户组",
|
||||||
|
"searchRoles": "搜索角色",
|
||||||
|
"reset": "重置",
|
||||||
|
"confirm": "确认",
|
||||||
|
"userGroupName": "输入用户组名称",
|
||||||
|
"groupName": "用户组名称",
|
||||||
|
"admins": "管理员",
|
||||||
|
"flowControl": "用户组整体流量控制",
|
||||||
|
"AssistantFlowCtrl": "NPC流量控制",
|
||||||
|
"SkillFlowCtrl": "能力流量控制",
|
||||||
|
"createdBy": "创建人",
|
||||||
|
"flowCtrlStrategy": "流量控制策略",
|
||||||
|
"limit": "有限制",
|
||||||
|
"unlimited": "无限制",
|
||||||
|
"iconHover": "同时受用户组整体流量控制策略约束",
|
||||||
|
"maximum": "最多",
|
||||||
|
"perMinute": "个同时在线会话",
|
||||||
|
"changeTime": "修改时间",
|
||||||
|
"deleteGroup": "删除后 【{{name}}】 将不再存在,是否删除?",
|
||||||
|
"currentGroup": "当前用户组",
|
||||||
|
"defaultGroup": "默认用户组",
|
||||||
|
"resetPwd": "重置密码",
|
||||||
|
"selectGroup": "请选择用户组",
|
||||||
|
"selectRole": "请选择角色"
|
||||||
},
|
},
|
||||||
"skills": {
|
"skills": {
|
||||||
"manageTemplate": "管理能力模板",
|
"manageTemplate": "管理能力模板",
|
||||||
@@ -144,7 +186,21 @@
|
|||||||
"fileStorageFailure": " 文件地址失效!",
|
"fileStorageFailure": " 文件地址失效!",
|
||||||
"confirmDeleteChat": "确认删除该会话?",
|
"confirmDeleteChat": "确认删除该会话?",
|
||||||
"roundOver": "本轮结束",
|
"roundOver": "本轮结束",
|
||||||
"chatDialogTip": "设置提示模板中定义的输入变量。与代理和链互动"
|
"chatDialogTip": "设置提示模板中定义的输入变量。与代理和链互动",
|
||||||
|
"feedback": "反馈",
|
||||||
|
"feedbackRequired": "反馈信息不能为空",
|
||||||
|
"dialogueSelection": "对话选择",
|
||||||
|
"chooseSkillOrAssistant": "选择一个您想使用的线上能力或NPC",
|
||||||
|
"search": "搜索",
|
||||||
|
"recommendationQuestions": "推荐问题",
|
||||||
|
"historicalMessages": "以上为历史消息",
|
||||||
|
"clickDownload": "点击下载",
|
||||||
|
"searchAssistantOrSkill": "搜索NPC或者能力",
|
||||||
|
"operationTips": "操作提示:在左侧选择要展示的标签,在右侧拖拽进行排序",
|
||||||
|
"selected": "已选",
|
||||||
|
"pleaseSelectAnApp": "请选择一个应用",
|
||||||
|
"allLabels": "全部标签",
|
||||||
|
"searchLabels": "搜索标签"
|
||||||
},
|
},
|
||||||
"model": {
|
"model": {
|
||||||
"modelConfiguration": "模型配置",
|
"modelConfiguration": "模型配置",
|
||||||
@@ -295,7 +351,41 @@
|
|||||||
"knowledgeImg": "知识库头像",
|
"knowledgeImg": "知识库头像",
|
||||||
"indexModel": "索引模型",
|
"indexModel": "索引模型",
|
||||||
"dataUp": "单条数据上限",
|
"dataUp": "单条数据上限",
|
||||||
"introduce": "介绍"
|
"introduce": "介绍",
|
||||||
|
"fileUploadResult": "共上传 {{total}} 份文件,有 {{failed}} 份文件上传失败",
|
||||||
|
"modalTitle": "文件重复提示",
|
||||||
|
"modalMessage": "以下文件在知识库中已存在,继续上传将会覆盖原有文件以及处理策略,是否覆盖?",
|
||||||
|
"keepOriginal": "不覆盖,保留原文件",
|
||||||
|
"override": "覆盖",
|
||||||
|
"toolName": "工具名称"
|
||||||
|
},
|
||||||
|
"evaluation": {
|
||||||
|
"id": "任务ID",
|
||||||
|
"filename": "测试文件名称",
|
||||||
|
"skillAssistant": "能力NPC",
|
||||||
|
"status": "状态",
|
||||||
|
"score": "评测分数",
|
||||||
|
"createDate": "创建日期",
|
||||||
|
"download": "下载",
|
||||||
|
"confirmDeleteEvaluation": "确认删除该评测任务?",
|
||||||
|
"createTitle": "新建任务",
|
||||||
|
"selectLabel": "选择要评测的能力或者NPC:",
|
||||||
|
"selectPlaceholder": "请选择",
|
||||||
|
"selectInputPlaceholder": "请根据名称进行搜索",
|
||||||
|
"dataLabel": "测试集数据:",
|
||||||
|
"fileExpandName": "支持扩展名:",
|
||||||
|
"downloadTemplate": "下载模板文件",
|
||||||
|
"promptLabel": "评测指令文本:",
|
||||||
|
"enterExecType": "请选择要评测的能力或NPC",
|
||||||
|
"enterUniqueId": "请选择能力或NPCID",
|
||||||
|
"enterVersion": "请选择能力的版本",
|
||||||
|
"enterFile": "请选择测试集数据",
|
||||||
|
"enterPrompt": "评测指令不能为空",
|
||||||
|
"fileSizeLimit": "文件大小限制在10M以内",
|
||||||
|
"evaluationCollection": "评测集合",
|
||||||
|
"tooltip": "该指令文本用于指导大模型对 ground truth 和 answer 提取要点,如无特别需求请勿修改",
|
||||||
|
"create": "创建",
|
||||||
|
"cancel": "取消"
|
||||||
},
|
},
|
||||||
"code": {
|
"code": {
|
||||||
"editPythonCodeDescription": "编辑你的 Python 代码此代码片段接受模块导入和一个函数定义。确保您的函数返回一个字符串。",
|
"editPythonCodeDescription": "编辑你的 Python 代码此代码片段接受模块导入和一个函数定义。确保您的函数返回一个字符串。",
|
||||||
@@ -439,6 +529,11 @@
|
|||||||
"cancle": "取消",
|
"cancle": "取消",
|
||||||
"tip": "提示",
|
"tip": "提示",
|
||||||
"deleteAssistant": "确认删除该NPC?",
|
"deleteAssistant": "确认删除该NPC?",
|
||||||
|
"chatTipsTitle": "使用提示",
|
||||||
|
"updateSuccess": "修改成功",
|
||||||
|
"createSuccess": "创建成功",
|
||||||
|
"confirm": "确认",
|
||||||
|
"required": "不可为空",
|
||||||
"build": {
|
"build": {
|
||||||
"create": "创建",
|
"create": "创建",
|
||||||
"assistant": "NPC",
|
"assistant": "NPC",
|
||||||
@@ -568,6 +663,47 @@
|
|||||||
"result": "测试结果",
|
"result": "测试结果",
|
||||||
"outResultPlaceholder": "点击按钮,输出结果"
|
"outResultPlaceholder": "点击按钮,输出结果"
|
||||||
},
|
},
|
||||||
|
"resetPassword": {
|
||||||
|
"slogen": "安全地重置您的密码",
|
||||||
|
"currentPassword": "当前密码",
|
||||||
|
"newPassword": "新密码",
|
||||||
|
"confirmNewPassword": "确认新密码",
|
||||||
|
"pleaseEnterCurrentPassword": "请输入当前密码。",
|
||||||
|
"pleaseEnterNewPassword": "请输入新密码。",
|
||||||
|
"pleaseEnterConfirmPassword": "请确认新密码。",
|
||||||
|
"newPasswordTooShort": "新密码必须至少 7 个字符。",
|
||||||
|
"passwordMismatch": "新密码不匹配。",
|
||||||
|
"resetButton": "修改密码",
|
||||||
|
"passwordResetSuccess": "您的密码已成功修改",
|
||||||
|
"adminResetSuccess": "密码已重置",
|
||||||
|
"resetFailed": "密码重置失败",
|
||||||
|
"notEmpty": "新密码不能为空"
|
||||||
|
},
|
||||||
|
"log": {
|
||||||
|
"auditManagement": "审计管理",
|
||||||
|
"searchButton": "查询",
|
||||||
|
"resetButton": "重置",
|
||||||
|
"auditId": "审计ID",
|
||||||
|
"username": "用户名",
|
||||||
|
"operationTime": "操作时间",
|
||||||
|
"systemModule": "系统模块",
|
||||||
|
"operationAction": "操作行为",
|
||||||
|
"objectType": "操作对象类型",
|
||||||
|
"operationObject": "操作对象",
|
||||||
|
"ipAddress": "IP地址",
|
||||||
|
"remark": "备注",
|
||||||
|
"selectUser": "选择用户",
|
||||||
|
"selectUserGroup": "选择用户组",
|
||||||
|
"startDate": "开始日期",
|
||||||
|
"endDate": "结束日期",
|
||||||
|
"actionBehavior": "操作行为"
|
||||||
|
},
|
||||||
|
"tag": {
|
||||||
|
"labelMaxLength": "标签名不能超过10个字符",
|
||||||
|
"confirmDeleteLabel": "标签【{{label}}】正在使用中,确认删除?",
|
||||||
|
"createNewLabel": "创建“新标签”",
|
||||||
|
"addLabel": "添加标签"
|
||||||
|
},
|
||||||
"agents": {
|
"agents": {
|
||||||
"AgentInitializer": {
|
"AgentInitializer": {
|
||||||
"display_name": "AgentInitializer",
|
"display_name": "AgentInitializer",
|
||||||
|
|||||||
BIN
src/.DS_Store
vendored
@@ -34,7 +34,7 @@ import {
|
|||||||
nodeIconsLucide,
|
nodeIconsLucide,
|
||||||
nodeIMgsLucide
|
nodeIMgsLucide
|
||||||
} from "../../../../utils";
|
} from "../../../../utils";
|
||||||
import { undoRedoContext } from "../../../../contexts/undoRedoContext";
|
import KnowledgeSelect from "@/components/bs-comp/selectComponent/knowledge";
|
||||||
|
|
||||||
export default function ParameterComponent({
|
export default function ParameterComponent({
|
||||||
left,
|
left,
|
||||||
@@ -61,7 +61,7 @@ export default function ParameterComponent({
|
|||||||
const updateNodeInternals = useUpdateNodeInternals();
|
const updateNodeInternals = useUpdateNodeInternals();
|
||||||
const [position, setPosition] = useState(0);
|
const [position, setPosition] = useState(0);
|
||||||
const { closePopUp } = useContext(PopUpContext);
|
const { closePopUp } = useContext(PopUpContext);
|
||||||
const { setTabsState, flow, setFlow } = useContext(TabsContext);
|
const { setTabsState, flow, version } = useContext(TabsContext);
|
||||||
|
|
||||||
const groupedEdge = useRef(null); // 用yu过滤菜单的数据
|
const groupedEdge = useRef(null); // 用yu过滤菜单的数据
|
||||||
|
|
||||||
@@ -91,7 +91,7 @@ export default function ParameterComponent({
|
|||||||
}, [id, data, reactFlowInstance])
|
}, [id, data, reactFlowInstance])
|
||||||
// milvus 组件,知识库不为空是 embbeding取消必填限制
|
// milvus 组件,知识库不为空是 embbeding取消必填限制
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const {embedding, index_name, collection_name, connection_args} = data.node.template
|
const { embedding, index_name, collection_name, connection_args } = data.node.template
|
||||||
if ((index_name || collection_name) && embedding) {
|
if ((index_name || collection_name) && embedding) {
|
||||||
const hidden = disabled ? false : !!(collection_name || index_name).value
|
const hidden = disabled ? false : !!(collection_name || index_name).value
|
||||||
data.node.template.embedding.required = !hidden
|
data.node.template.embedding.required = !hidden
|
||||||
@@ -101,7 +101,7 @@ export default function ParameterComponent({
|
|||||||
}
|
}
|
||||||
}, [data, disabled])
|
}, [data, disabled])
|
||||||
const handleRemoveMilvusEmbeddingEdge = (nodeId) => {
|
const handleRemoveMilvusEmbeddingEdge = (nodeId) => {
|
||||||
const edges = reactFlowInstance.getEdges().filter(edge => edge.targetHandle.indexOf('Embeddings|embedding|'+nodeId) === -1)
|
const edges = reactFlowInstance.getEdges().filter(edge => edge.targetHandle.indexOf('Embeddings|embedding|' + nodeId) === -1)
|
||||||
reactFlowInstance.setEdges(edges)
|
reactFlowInstance.setEdges(edges)
|
||||||
}
|
}
|
||||||
const [myData, setMyData] = useState(useContext(typesContext).data);
|
const [myData, setMyData] = useState(useContext(typesContext).data);
|
||||||
@@ -219,7 +219,6 @@ export default function ParameterComponent({
|
|||||||
}}
|
}}
|
||||||
/> */}
|
/> */}
|
||||||
<img src={Icon} className="w-[14px]" alt="" />
|
<img src={Icon} className="w-[14px]" alt="" />
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<span className="ps-2 text-xs text-foreground w-[400px]">
|
<span className="ps-2 text-xs text-foreground w-[400px]">
|
||||||
{getNodeNames()[item.family] ?? "Other"}{" "}
|
{getNodeNames()[item.family] ?? "Other"}{" "}
|
||||||
@@ -268,34 +267,6 @@ export default function ParameterComponent({
|
|||||||
}
|
}
|
||||||
}, [tooltipTitle]);
|
}, [tooltipTitle]);
|
||||||
|
|
||||||
|
|
||||||
// 记录快照
|
|
||||||
const {takeSnapshot} = useContext(undoRedoContext);
|
|
||||||
const { types, deleteNode } = useContext(typesContext);
|
|
||||||
// const onNodeDragStart: NodeDragHandler = useCallback(() => {
|
|
||||||
// // 👇 make dragging a node undoable
|
|
||||||
// takeSnapshot();
|
|
||||||
// // 👉 you can place your event handlers here
|
|
||||||
// }, [takeSnapshot]);
|
|
||||||
const onMouseDownColor = useCallback(() => {
|
|
||||||
// console.log(nodeColorsP)
|
|
||||||
// console.log(data,color,nodeColorsP,nodeColorsP[types[data.type]]);
|
|
||||||
// const type = types[data.type];
|
|
||||||
// Object.keys(nodeColors).forEach(element => {
|
|
||||||
// if(element != type){
|
|
||||||
// nodeColorsP[element] = "#000000"
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
// console.log(nodeColors);
|
|
||||||
// takeSnapshot();
|
|
||||||
|
|
||||||
// data.node.display_name = "1";
|
|
||||||
// console.log(flow)
|
|
||||||
},[takeSnapshot]);
|
|
||||||
// useEffect(() => {
|
|
||||||
// takeSnapshot();
|
|
||||||
// }, [nodeColors, nodeColorsP]);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
ref={ref}
|
ref={ref}
|
||||||
@@ -330,37 +301,36 @@ export default function ParameterComponent({
|
|||||||
type === "int" ||
|
type === "int" ||
|
||||||
type === "variable" ||
|
type === "variable" ||
|
||||||
type === "button" ||
|
type === "button" ||
|
||||||
|
type === "knowledge_one" ||
|
||||||
|
type === "knowledge_list" ||
|
||||||
type === "NestedDict" ||
|
type === "NestedDict" ||
|
||||||
type === "dict") &&
|
type === "dict") &&
|
||||||
!optionalHandle ? (
|
!optionalHandle ? (<></>)
|
||||||
<></>
|
: (
|
||||||
) : (
|
<ShadTooltip
|
||||||
<ShadTooltip
|
styleClasses={"tooltip-fixed-width custom-scroll nowheel"}
|
||||||
styleClasses={"tooltip-fixed-width custom-scroll nowheel"}
|
delayDuration={0}
|
||||||
delayDuration={0}
|
content={refHtml.current}
|
||||||
content={refHtml.current}
|
side={left ? "left" : "right"}
|
||||||
side={left ? "left" : "right"}
|
>
|
||||||
>
|
<Handle
|
||||||
<Handle
|
type={left ? "target" : "source"}
|
||||||
type={left ? "target" : "source"}
|
position={left ? Position.Left : Position.Right}
|
||||||
position={left ? Position.Left : Position.Right}
|
id={id}
|
||||||
id={id}
|
isValidConnection={(connection) =>
|
||||||
isValidConnection={(connection) =>
|
isValidConnection(connection, reactFlowInstance)
|
||||||
isValidConnection(connection, reactFlowInstance)
|
}
|
||||||
}
|
className={classNames(
|
||||||
onConnect={(params) => console.log('handle onConnect', params)}
|
left ? "-ml-0.5 " : "-mr-0.5 ",
|
||||||
className={classNames(
|
"h-3 w-3 rounded-full border-2 bg-background"
|
||||||
left ? "-ml-0.5 " : "-mr-0.5 ",
|
)}
|
||||||
"h-3 w-3 rounded-full border-2 bg-background"
|
style={{
|
||||||
)}
|
borderColor: color,
|
||||||
onMouseDown={onMouseDownColor}
|
top: position,
|
||||||
style={{
|
}}
|
||||||
borderColor: color,
|
></Handle>
|
||||||
top: position,
|
</ShadTooltip>
|
||||||
}}
|
)}
|
||||||
></Handle>
|
|
||||||
</ShadTooltip>
|
|
||||||
)}
|
|
||||||
|
|
||||||
{/* 左侧input输入项 */}
|
{/* 左侧input输入项 */}
|
||||||
{!data.node.template[name] ? null : left === true &&
|
{!data.node.template[name] ? null : left === true &&
|
||||||
@@ -390,10 +360,6 @@ export default function ParameterComponent({
|
|||||||
) : ['index_name', 'collection_name'].includes(name) ? (
|
) : ['index_name', 'collection_name'].includes(name) ? (
|
||||||
// 知识库选择
|
// 知识库选择
|
||||||
<CollectionNameComponent
|
<CollectionNameComponent
|
||||||
setNodeClass={(nodeClass) => {
|
|
||||||
data.node = nodeClass;
|
|
||||||
}}
|
|
||||||
nodeClass={data.node}
|
|
||||||
disabled={disabled}
|
disabled={disabled}
|
||||||
id={data.node.template[name].collection_id ?? ""}
|
id={data.node.template[name].collection_id ?? ""}
|
||||||
value={data.node.template[name].value ?? ""}
|
value={data.node.template[name].value ?? ""}
|
||||||
@@ -410,6 +376,35 @@ export default function ParameterComponent({
|
|||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
) : left === true && type === "knowledge_one" ? (
|
||||||
|
// 单选知识库
|
||||||
|
<div className="mt-2 w-full">
|
||||||
|
<CollectionNameComponent
|
||||||
|
disabled={disabled}
|
||||||
|
id={data.node.template[name].collection_id ?? ""}
|
||||||
|
value={data.node.template[name].value ?? ""}
|
||||||
|
onSelect={(val, id) => { handleOnNewLibValue(val, id); val && handleRemoveMilvusEmbeddingEdge(data.id) }}
|
||||||
|
onChange={() => { }}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
) : left === true && type === "knowledge_list" ? (
|
||||||
|
// 多选知识库
|
||||||
|
<div className="mt-2 w-full">
|
||||||
|
<KnowledgeSelect
|
||||||
|
multiple
|
||||||
|
disabled={disabled}
|
||||||
|
value={data.node.template[name].value?.map?.((item) => ({
|
||||||
|
label: item.value,
|
||||||
|
value: item.key,
|
||||||
|
})) || []}
|
||||||
|
onChange={(vals) => {
|
||||||
|
handleOnNewValue(vals.map(v => ({
|
||||||
|
key: v.value,
|
||||||
|
value: v.label
|
||||||
|
})))
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
) : left === true && type === "bool" ? (
|
) : left === true && type === "bool" ? (
|
||||||
<div className="mt-2 w-full">
|
<div className="mt-2 w-full">
|
||||||
{/* switch */}
|
{/* switch */}
|
||||||
@@ -480,7 +475,6 @@ export default function ParameterComponent({
|
|||||||
<PromptAreaComponent
|
<PromptAreaComponent
|
||||||
field_name={name}
|
field_name={name}
|
||||||
setNodeClass={(nodeClass, code) => {
|
setNodeClass={(nodeClass, code) => {
|
||||||
console.log(nodeClass)
|
|
||||||
if (reactFlowInstance) {
|
if (reactFlowInstance) {
|
||||||
reactFlowInstance.setNodes((nds) =>
|
reactFlowInstance.setNodes((nds) =>
|
||||||
nds.map((nd) => {
|
nds.map((nd) => {
|
||||||
@@ -548,7 +542,7 @@ export default function ParameterComponent({
|
|||||||
</div>
|
</div>
|
||||||
) : left === true && type === "variable" ? (
|
) : left === true && type === "variable" ? (
|
||||||
<div className="mt-2 w-full">
|
<div className="mt-2 w-full">
|
||||||
<VariablesComponent nodeId={data.id} flowId={flowId} onChange={(newValue) => {
|
<VariablesComponent vid={version?.id} nodeId={data.id} flowId={flowId} onChange={(newValue) => {
|
||||||
data.node!.template[name].value = newValue;
|
data.node!.template[name].value = newValue;
|
||||||
handleOnNewValue(newValue);
|
handleOnNewValue(newValue);
|
||||||
}} />
|
}} />
|
||||||
|
|||||||
BIN
src/assets/.DS_Store
vendored
BIN
src/assets/Login/.DS_Store
vendored
BIN
src/assets/Login/reset.png
Normal file
|
After Width: | Height: | Size: 59 KiB |
BIN
src/assets/chat/.DS_Store
vendored
BIN
src/assets/chat/biaoqian-paixu.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
src/assets/chat/shengQue.png
Normal file
|
After Width: | Height: | Size: 59 KiB |
BIN
src/assets/nav/.DS_Store
vendored
BIN
src/assets/nav/admin.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
src/assets/nav/admin1.png
Normal file
|
After Width: | Height: | Size: 536 B |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 8.5 KiB |
|
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 3.8 KiB |
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 7.3 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 9.9 KiB |
|
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 3.2 KiB |
|
Before Width: | Height: | Size: 8.4 KiB After Width: | Height: | Size: 7.3 KiB |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.5 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.1 KiB |
BIN
src/assets/nav/icon6-active.png
Normal file
|
After Width: | Height: | Size: 7.9 KiB |
BIN
src/assets/nav/icon6.png
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
BIN
src/assets/nav/icon7-active.png
Normal file
|
After Width: | Height: | Size: 9.9 KiB |
BIN
src/assets/nav/icon7.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
src/assets/nav/mima.png
Normal file
|
After Width: | Height: | Size: 783 B |
BIN
src/assets/nav/tuichu.png
Normal file
|
After Width: | Height: | Size: 664 B |
BIN
src/assets/npc/.DS_Store
vendored
BIN
src/assets/npc/biaoqian-bian.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
src/assets/npc/biaoqian-del.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
src/assets/npc/tianjiabiaoqian.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
src/components/.DS_Store
vendored
@@ -17,7 +17,8 @@ import { captureAndAlertRequestErrorHoc } from "../../controllers/request";
|
|||||||
* 通过子组件VarDialog编辑每一项
|
* 通过子组件VarDialog编辑每一项
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export default function VariablesComponent({ nodeId, flowId, onChange }: {
|
export default function VariablesComponent({vid, nodeId, flowId, onChange }: {
|
||||||
|
vid: number
|
||||||
nodeId: string
|
nodeId: string
|
||||||
flowId: string
|
flowId: string
|
||||||
onChange: (val: any) => void
|
onChange: (val: any) => void
|
||||||
@@ -27,11 +28,12 @@ export default function VariablesComponent({ nodeId, flowId, onChange }: {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
// api nodeId -> items
|
// api nodeId -> items
|
||||||
flowId && getVariablesApi({
|
flowId && vid && getVariablesApi({
|
||||||
|
version_id: vid,
|
||||||
flow_id: flowId,
|
flow_id: flowId,
|
||||||
node_id: nodeId
|
node_id: nodeId
|
||||||
}).then(arr => setItems(arr))
|
}).then(arr => setItems(arr))
|
||||||
}, [flowId])
|
}, [flowId, vid])
|
||||||
|
|
||||||
const { openPopUp, closePopUp } = useContext(PopUpContext);
|
const { openPopUp, closePopUp } = useContext(PopUpContext);
|
||||||
const { setErrorData } = useContext(alertContext);
|
const { setErrorData } = useContext(alertContext);
|
||||||
@@ -60,6 +62,7 @@ export default function VariablesComponent({ nodeId, flowId, onChange }: {
|
|||||||
const param: any = {
|
const param: any = {
|
||||||
"flow_id": flowId,
|
"flow_id": flowId,
|
||||||
"node_id": nodeId,
|
"node_id": nodeId,
|
||||||
|
version_id: vid,
|
||||||
"variable_name": _item.name,
|
"variable_name": _item.name,
|
||||||
"value_type": Number(_item.type === VariableType.Select) + 1,
|
"value_type": Number(_item.type === VariableType.Select) + 1,
|
||||||
"value": _item.type === VariableType.Text ? _item.maxLength : _item.options.map(el => el.value).join(',')
|
"value": _item.type === VariableType.Text ? _item.maxLength : _item.options.map(el => el.value).join(',')
|
||||||
@@ -68,7 +71,7 @@ export default function VariablesComponent({ nodeId, flowId, onChange }: {
|
|||||||
param.id = _item.id
|
param.id = _item.id
|
||||||
}
|
}
|
||||||
captureAndAlertRequestErrorHoc(saveVariableApi(param).then(res => {
|
captureAndAlertRequestErrorHoc(saveVariableApi(param).then(res => {
|
||||||
const _items = items.map(item => item.id === _item.id ? { ..._item, id: res.id } : item)
|
const _items = items.map(item => item.id === _item.id ? { ..._item, id: res.id, update: true } : item)
|
||||||
// const hasValue = _items.find(item => item.name)
|
// const hasValue = _items.find(item => item.name)
|
||||||
// 保存时 id传出去保存,用来校验必填项
|
// 保存时 id传出去保存,用来校验必填项
|
||||||
onChange(_items.map(el => el.name))
|
onChange(_items.map(el => el.name))
|
||||||
|
|||||||
BIN
src/components/bs-comp/.DS_Store
vendored
Normal file
110
src/components/bs-comp/cardComponent/LabelShow.tsx
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
import { LabelIcon } from "@/components/bs-icons/label";
|
||||||
|
import LabelSelect from "../selectComponent/LabelSelect";
|
||||||
|
import { UPDATETYPE } from "../selectComponent/LabelSelect";
|
||||||
|
import { useEffect, useState } from "react";
|
||||||
|
import { useTranslation } from "react-i18next";
|
||||||
|
import { BookmarkFilledIcon } from "@radix-ui/react-icons";
|
||||||
|
import tianjiabiaoqian from "../../../assets/npc/tianjiabiaoqian.png";
|
||||||
|
|
||||||
|
export default function LabelShow({ show, isOperator, labels, all, resource, reload, AllLabelsApi }) {
|
||||||
|
const { t } = useTranslation()
|
||||||
|
const [freshData, setFreshData] = useState(labels)
|
||||||
|
const [allData, setAllData] = useState(all)
|
||||||
|
const [isShow, setIsShow] = useState(show)
|
||||||
|
|
||||||
|
const handleUpdate = (obj: { type: string, data: any }) => {
|
||||||
|
console.log(UPDATETYPE,obj)
|
||||||
|
switch (obj.type) {
|
||||||
|
case UPDATETYPE.DELETELINK: {
|
||||||
|
reload();
|
||||||
|
AllLabelsApi();
|
||||||
|
setFreshData(pre => pre.filter(l => l.value !== obj.data.value))
|
||||||
|
break
|
||||||
|
}
|
||||||
|
case UPDATETYPE.CREATELINK: {
|
||||||
|
reload();
|
||||||
|
AllLabelsApi();
|
||||||
|
setFreshData(pre => [obj.data, ...pre])
|
||||||
|
break
|
||||||
|
}
|
||||||
|
case UPDATETYPE.UPDATENAME: {
|
||||||
|
reload();
|
||||||
|
AllLabelsApi();
|
||||||
|
setFreshData(pre => pre.map(d => d.value === obj.data.value ? { ...d, label: obj.data.label } : d))
|
||||||
|
break
|
||||||
|
}
|
||||||
|
case UPDATETYPE.CREATELABEL: {
|
||||||
|
// 什么也不用做
|
||||||
|
break
|
||||||
|
}
|
||||||
|
case UPDATETYPE.DELETELABEL: {
|
||||||
|
reload();
|
||||||
|
AllLabelsApi();
|
||||||
|
setFreshData(pre => pre.filter(d => d.value !== obj.data.value))
|
||||||
|
setAllData(pre => pre.filter(a => a.value !== obj.data.value))
|
||||||
|
break
|
||||||
|
}
|
||||||
|
default: console.log('error:>>事件类型错误!!!')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
setIsShow(freshData.length > 0)
|
||||||
|
}, [freshData])
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="w-full">
|
||||||
|
{isShow ? (
|
||||||
|
isOperator ? (
|
||||||
|
<LabelSelect onUpdate={handleUpdate} labels={labels} resource={resource} all={allData}>
|
||||||
|
<div onClick={(e) => e.stopPropagation()} className="mb-[10px] max-w-[100%] flex place-items-center rounded-sm p-1 border border-transparent group-hover:bg-search-input group-hover:border-input">
|
||||||
|
{/* <BookmarkFilledIcon className="mr-2 text-muted-foreground" />
|
||||||
|
<div className="text-sm text-muted-foreground max-w-[250px] truncate">
|
||||||
|
{freshData.map((l, index) => <span>{l.label}{index !== freshData.length - 1 && ','}</span>)}
|
||||||
|
</div> */}
|
||||||
|
<div className="biaoqian">
|
||||||
|
<img src={tianjiabiaoqian} className="w-[12px] mr-[7px]" alt="" />
|
||||||
|
<div>
|
||||||
|
{freshData.map((l, index) => <div>{l.label}</div>)}
|
||||||
|
{/* <div>知识库</div> */}
|
||||||
|
{/* <div>法律</div> */}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</LabelSelect>
|
||||||
|
) : (
|
||||||
|
<div className="mb-[10px] flex place-items-center max-w-[100%] rounded-sm p-1">
|
||||||
|
{/* <BookmarkFilledIcon className="mr-2 text-muted-foreground" />
|
||||||
|
<div className="text-sm text-muted-foreground max-w-[250px] truncate">
|
||||||
|
{freshData.map((l, index) => <span>{l.label}{index !== freshData.length - 1 && ','}</span>)}
|
||||||
|
</div> */}
|
||||||
|
<div className="biaoqian">
|
||||||
|
{/* <img src={tianjiabiaoqian} className="w-[12px]" alt="" /> */}
|
||||||
|
<div>
|
||||||
|
{freshData.map((l, index) => <div>{l.label}</div>)}
|
||||||
|
{/* <div>知识库</div>
|
||||||
|
<div>法律</div> */}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
) : (
|
||||||
|
isOperator ? (
|
||||||
|
<LabelSelect onUpdate={handleUpdate} labels={labels} resource={resource} all={allData}>
|
||||||
|
<div onClick={(e) => e.stopPropagation()} className="">
|
||||||
|
{/* <BookmarkFilledIcon className="mr-2 text-muted-foreground" />
|
||||||
|
<div className="text-sm text-muted-foreground">
|
||||||
|
<span>{t('tag.addLabel')}</span>
|
||||||
|
</div> */}
|
||||||
|
<div className="biaoqian">
|
||||||
|
<img src={tianjiabiaoqian} className="w-[12px]" alt="" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</LabelSelect>
|
||||||
|
) : (
|
||||||
|
<div></div>
|
||||||
|
)
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
@@ -1,16 +1,18 @@
|
|||||||
|
import { ClearIcon } from "@/components/bs-icons/clear";
|
||||||
import { FormIcon } from "@/components/bs-icons/form";
|
import { FormIcon } from "@/components/bs-icons/form";
|
||||||
import { SendIcon } from "@/components/bs-icons/send";
|
import { SendIcon } from "@/components/bs-icons/send";
|
||||||
|
import { Button } from "@/components/bs-ui/button";
|
||||||
import { Textarea } from "@/components/bs-ui/input";
|
import { Textarea } from "@/components/bs-ui/input";
|
||||||
import { useToast } from "@/components/bs-ui/toast/use-toast";
|
import { useToast } from "@/components/bs-ui/toast/use-toast";
|
||||||
import { locationContext } from "@/contexts/locationContext";
|
import { locationContext } from "@/contexts/locationContext";
|
||||||
|
import { PauseIcon } from "@radix-ui/react-icons";
|
||||||
import { useContext, useEffect, useRef, useState } from "react";
|
import { useContext, useEffect, useRef, useState } from "react";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import { useMessageStore } from "./messageStore";
|
|
||||||
import GuideQuestions from "./GuideQuestions";
|
import GuideQuestions from "./GuideQuestions";
|
||||||
import { ClearIcon } from "@/components/bs-icons/clear";
|
import { useMessageStore } from "./messageStore";
|
||||||
|
import { formatDate } from "@/util/utils";
|
||||||
|
import { StopIcon } from "@radix-ui/react-icons";
|
||||||
import duihua_send from "../../../assets/chat/duihua-send.png";
|
import duihua_send from "../../../assets/chat/duihua-send.png";
|
||||||
import { Button } from "@/components/bs-ui/button";
|
|
||||||
import { StopCircle } from "lucide-react";
|
|
||||||
|
|
||||||
export default function ChatInput({ clear, form, questions, inputForm, wsUrl, onBeforSend }) {
|
export default function ChatInput({ clear, form, questions, inputForm, wsUrl, onBeforSend }) {
|
||||||
const { toast } = useToast()
|
const { toast } = useToast()
|
||||||
@@ -21,11 +23,15 @@ export default function ChatInput({ clear, form, questions, inputForm, wsUrl, on
|
|||||||
const [showWhenLocked, setShowWhenLocked] = useState(false) // 强制开启表单按钮,不限制于input锁定
|
const [showWhenLocked, setShowWhenLocked] = useState(false) // 强制开启表单按钮,不限制于input锁定
|
||||||
const [inputLock, setInputLock] = useState({ locked: false, reason: '' })
|
const [inputLock, setInputLock] = useState({ locked: false, reason: '' })
|
||||||
|
|
||||||
const { messages, chatId, createSendMsg, createWsMsg, updateCurrentMessage, destory, setShowGuideQuestion } = useMessageStore()
|
const { messages, hisMessages, chatId, createSendMsg, createWsMsg, updateCurrentMessage, destory, setShowGuideQuestion } = useMessageStore()
|
||||||
const currentChatIdRef = useRef(null)
|
const currentChatIdRef = useRef(null)
|
||||||
const inputRef = useRef(null)
|
const inputRef = useRef(null)
|
||||||
|
const continueRef = useRef(false)
|
||||||
// 停止状态
|
// 停止状态
|
||||||
const [isStop, setIsStop] = useState(true)
|
const [stop, setStop] = useState({
|
||||||
|
show: false,
|
||||||
|
disable: false
|
||||||
|
})
|
||||||
/**
|
/**
|
||||||
* 记录会话切换状态,等待消息加载完成时,控制表单在新会话自动展开
|
* 记录会话切换状态,等待消息加载完成时,控制表单在新会话自动展开
|
||||||
*/
|
*/
|
||||||
@@ -36,16 +42,17 @@ export default function ChatInput({ clear, form, questions, inputForm, wsUrl, on
|
|||||||
if (changeChatedRef.current) {
|
if (changeChatedRef.current) {
|
||||||
changeChatedRef.current = false
|
changeChatedRef.current = false
|
||||||
// 新建的 form 技能,弹出窗口并锁定 input
|
// 新建的 form 技能,弹出窗口并锁定 input
|
||||||
if (form && messages.length === 0) {
|
if (form && messages.length === 0 && hisMessages.length === 0) {
|
||||||
setInputLock({ locked: true, reason: '' })
|
setInputLock({ locked: true, reason: '' })
|
||||||
setFormShow(true)
|
setFormShow(true)
|
||||||
setShowWhenLocked(true)
|
setShowWhenLocked(true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}, [messages])
|
}, [messages, hisMessages])
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!chatId) return
|
if (!chatId) return
|
||||||
|
continueRef.current = false
|
||||||
setInputLock({ locked: false, reason: '' })
|
setInputLock({ locked: false, reason: '' })
|
||||||
// console.log('message chatid', messages, form, chatId);
|
// console.log('message chatid', messages, form, chatId);
|
||||||
setShowWhenLocked(false)
|
setShowWhenLocked(false)
|
||||||
@@ -85,13 +92,14 @@ export default function ChatInput({ clear, form, questions, inputForm, wsUrl, on
|
|||||||
const event = new Event('input', { bubbles: true, cancelable: true });
|
const event = new Event('input', { bubbles: true, cancelable: true });
|
||||||
inputRef.current.value = ''
|
inputRef.current.value = ''
|
||||||
inputRef.current.dispatchEvent(event); // 触发调节input高度
|
inputRef.current.dispatchEvent(event); // 触发调节input高度
|
||||||
const [wsMsg, inputKey] = onBeforSend('', value)
|
const contunue = continueRef.current ? 'continue' : ''
|
||||||
|
continueRef.current = false
|
||||||
|
const [wsMsg, inputKey] = onBeforSend(contunue, value)
|
||||||
// msg to store
|
// msg to store
|
||||||
createSendMsg(wsMsg.inputs, inputKey)
|
createSendMsg(wsMsg.inputs, inputKey)
|
||||||
// 锁定 input
|
// 锁定 input
|
||||||
setInputLock({ locked: true, reason: '' })
|
setInputLock({ locked: true, reason: '' })
|
||||||
await createWebSocket(chatId)
|
await createWebSocket(chatId)
|
||||||
// console.log(wsMsg,inputKey);
|
|
||||||
sendWsMsg(wsMsg)
|
sendWsMsg(wsMsg)
|
||||||
|
|
||||||
// 滚动聊天到底
|
// 滚动聊天到底
|
||||||
@@ -100,15 +108,13 @@ export default function ChatInput({ clear, form, questions, inputForm, wsUrl, on
|
|||||||
messageDom.scrollTop = messageDom.scrollHeight;
|
messageDom.scrollTop = messageDom.scrollHeight;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const stop = async () => {
|
|
||||||
const [wsMsg] = onBeforSend('', '')
|
const diffRef = useRef(0)
|
||||||
wsMsg.action = "stop"
|
|
||||||
sendWsMsg(wsMsg)
|
|
||||||
// console.log(wsMsg);
|
|
||||||
// sendWsMsg(wsMsg)
|
|
||||||
}
|
|
||||||
const sendWsMsg = async (msg) => {
|
const sendWsMsg = async (msg) => {
|
||||||
try {
|
try {
|
||||||
|
diffRef.current = Date.now()
|
||||||
|
// console.log('WebSocket send: ' + diffRef.current + ' 毫秒');
|
||||||
|
|
||||||
wsRef.current.send(JSON.stringify(msg))
|
wsRef.current.send(JSON.stringify(msg))
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
toast({
|
toast({
|
||||||
@@ -128,14 +134,23 @@ export default function ChatInput({ clear, form, questions, inputForm, wsUrl, on
|
|||||||
|
|
||||||
return new Promise((res, rej) => {
|
return new Promise((res, rej) => {
|
||||||
try {
|
try {
|
||||||
|
let startTime = Date.now();
|
||||||
const ws = new WebSocket(`${webSocketProtocol}://${wsUrl}&chat_id=${chatId}`)
|
const ws = new WebSocket(`${webSocketProtocol}://${wsUrl}&chat_id=${chatId}`)
|
||||||
wsRef.current = ws
|
wsRef.current = ws
|
||||||
// websocket linsen
|
// websocket linsen
|
||||||
ws.onopen = () => {
|
ws.onopen = () => {
|
||||||
|
// 记录连接成功的时间
|
||||||
|
let endTime = Date.now();
|
||||||
|
|
||||||
|
// 计算连接建立所需的时间
|
||||||
|
let connectionTime = endTime - startTime;
|
||||||
|
|
||||||
|
// console.log('WebSocket 连接建立时间: ' + connectionTime + ' 毫秒');
|
||||||
console.log("WebSocket connection established!");
|
console.log("WebSocket connection established!");
|
||||||
res('ok')
|
res('ok')
|
||||||
};
|
};
|
||||||
ws.onmessage = (event) => {
|
ws.onmessage = (event) => {
|
||||||
|
// console.log(`WebSocket get: ${Date.now()} 毫秒;与send差值${Date.now() - diffRef.current}毫秒`);
|
||||||
const data = JSON.parse(event.data);
|
const data = JSON.parse(event.data);
|
||||||
const errorMsg = data.category === 'error' ? data.intermediate_steps : ''
|
const errorMsg = data.category === 'error' ? data.intermediate_steps : ''
|
||||||
// 异常类型处理,提示
|
// 异常类型处理,提示
|
||||||
@@ -145,13 +160,17 @@ export default function ChatInput({ clear, form, questions, inputForm, wsUrl, on
|
|||||||
handleWsMessage(data)
|
handleWsMessage(data)
|
||||||
// 群聊@自己时,开启input
|
// 群聊@自己时,开启input
|
||||||
if (['end', 'end_cover'].includes(data.type) && data.receiver?.is_self) {
|
if (['end', 'end_cover'].includes(data.type) && data.receiver?.is_self) {
|
||||||
setInputLock({ locked: true, reason: '' })
|
setInputLock({ locked: false, reason: '' })
|
||||||
|
setStop({ show: false, disable: false })
|
||||||
|
continueRef.current = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ws.onclose = (event) => {
|
ws.onclose = (event) => {
|
||||||
wsRef.current = null
|
wsRef.current = null
|
||||||
console.error('链接手动断开 event :>> ', event);
|
console.error('链接手动断开 event :>> ', event);
|
||||||
if ([1005, 1008].includes(event.code)) {
|
setStop({ show: false, disable: false })
|
||||||
|
|
||||||
|
if ([1005, 1008, 1009].includes(event.code)) {
|
||||||
console.warn('即将废弃 :>> ');
|
console.warn('即将废弃 :>> ');
|
||||||
setInputLock({ locked: true, reason: event.reason })
|
setInputLock({ locked: true, reason: event.reason })
|
||||||
} else {
|
} else {
|
||||||
@@ -167,8 +186,8 @@ export default function ChatInput({ clear, form, questions, inputForm, wsUrl, on
|
|||||||
};
|
};
|
||||||
ws.onerror = (ev) => {
|
ws.onerror = (ev) => {
|
||||||
wsRef.current = null
|
wsRef.current = null
|
||||||
|
setStop({ show: false, disable: false })
|
||||||
console.error('链接异常error', ev);
|
console.error('链接异常error', ev);
|
||||||
setIsStop(true)
|
|
||||||
toast({
|
toast({
|
||||||
title: `${t('chat.networkError')}:`,
|
title: `${t('chat.networkError')}:`,
|
||||||
variant: 'error',
|
variant: 'error',
|
||||||
@@ -189,15 +208,14 @@ export default function ChatInput({ clear, form, questions, inputForm, wsUrl, on
|
|||||||
|
|
||||||
// 接受 ws 消息
|
// 接受 ws 消息
|
||||||
const handleWsMessage = (data) => {
|
const handleWsMessage = (data) => {
|
||||||
// console.log(data)
|
|
||||||
if (Array.isArray(data) && data.length) return
|
if (Array.isArray(data) && data.length) return
|
||||||
if (data.type === "begin") {
|
if (data.type === 'start') {
|
||||||
setIsStop(false)
|
// 非continue时,展示stop按钮
|
||||||
}else if (data.type === 'start') {
|
!continueRef.current && setStop({ show: true, disable: false })
|
||||||
createWsMsg(data)
|
createWsMsg(data)
|
||||||
} else if (data.type === 'stream') {
|
} else if (data.type === 'stream') {
|
||||||
|
//@ts-ignore
|
||||||
updateCurrentMessage({
|
updateCurrentMessage({
|
||||||
flow_id: data.flow_id,
|
|
||||||
chat_id: data.chat_id,
|
chat_id: data.chat_id,
|
||||||
message: data.message,
|
message: data.message,
|
||||||
thought: data.intermediate_steps
|
thought: data.intermediate_steps
|
||||||
@@ -209,16 +227,16 @@ export default function ChatInput({ clear, form, questions, inputForm, wsUrl, on
|
|||||||
thought: data.intermediate_steps || '',
|
thought: data.intermediate_steps || '',
|
||||||
messageId: data.message_id,
|
messageId: data.message_id,
|
||||||
noAccess: false,
|
noAccess: false,
|
||||||
liked: 0
|
liked: 0,
|
||||||
|
update_time: formatDate(new Date(), 'yyyy-MM-ddTHH:mm:ss')
|
||||||
}, data.type === 'end_cover')
|
}, data.type === 'end_cover')
|
||||||
} else if (data.type === "close") {
|
} else if (data.type === "close") {
|
||||||
setIsStop(true)
|
setStop({ show: false, disable: false })
|
||||||
setInputLock({ locked: false, reason: '' })
|
setInputLock({ locked: false, reason: '' })
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 监听重发消息事件
|
// 触发发送消息事件(重试、表单)
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const handleCustomEvent = (e) => {
|
const handleCustomEvent = (e) => {
|
||||||
if (!showWhenLocked && inputLock.locked) return console.error('弹窗已锁定,消息无法发送')
|
if (!showWhenLocked && inputLock.locked) return console.error('弹窗已锁定,消息无法发送')
|
||||||
@@ -247,12 +265,12 @@ export default function ChatInput({ clear, form, questions, inputForm, wsUrl, on
|
|||||||
// setInputEmpty(textarea.value.trim() === '')
|
// setInputEmpty(textarea.value.trim() === '')
|
||||||
}
|
}
|
||||||
|
|
||||||
return <div className="absolute bottom-0 w-full bg-[#fff] dark:bg-[#000000]">
|
return <div className="absolute bottom-0 w-full pt-1 bg-[#fff] dark:bg-[#000]">
|
||||||
<div className={`relative pt-[10px]`}>
|
<div className={`relative ${clear && 'pl-9'}`}>
|
||||||
{/* form */}
|
{/* form */}
|
||||||
{
|
{
|
||||||
formShow && <div className="relative">
|
formShow && <div className="relative">
|
||||||
<div className="absolute left-0 bottom-2 bg-[#1a1a1a] px-4 py-2 rounded-md w-[50%] min-w-80">
|
<div className="absolute left-0 bottom-2 bg-[#1a1a1a] px-4 py-2 rounded-md w-[50%] min-w-80 z-50">
|
||||||
{inputForm}
|
{inputForm}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -265,34 +283,51 @@ export default function ChatInput({ clear, form, questions, inputForm, wsUrl, on
|
|||||||
onClick={handleClickGuideWord}
|
onClick={handleClickGuideWord}
|
||||||
/>
|
/>
|
||||||
{/* clear */}
|
{/* clear */}
|
||||||
{/* <div className="flex absolute left-0 top-4 z-10">
|
<div className="flex absolute left-0 top-4 z-10">
|
||||||
{
|
{
|
||||||
clear && <div
|
clear && <div
|
||||||
className={`w-6 h-6 rounded-sm hover:bg-gray-200 cursor-pointer flex justify-center items-center `}
|
className={`w-6 h-6 rounded-sm hover:bg-gray-200 cursor-pointer flex justify-center items-center `}
|
||||||
onClick={() => { !inputLock.locked && destory() }}
|
onClick={() => { !inputLock.locked && destory() }}
|
||||||
><ClearIcon className={!showWhenLocked && inputLock.locked ? 'text-gray-400' : 'text-gray-950'} ></ClearIcon></div>
|
><ClearIcon className={`${!showWhenLocked && inputLock.locked ? 'text-gray-400' : 'text-gray-950'} dark:text-slate-50 dark:hover:bg-[#282828]`} ></ClearIcon></div>
|
||||||
}
|
}
|
||||||
</div> */}
|
</div>
|
||||||
{/* form */}
|
{/* form switch */}
|
||||||
<div className="flex absolute left-3 top-4 z-10">
|
<div className="flex absolute left-3 top-4 z-10">
|
||||||
{
|
{
|
||||||
form && <div
|
form && <div
|
||||||
className={`w-6 h-6 rounded-sm hover:bg-gray-200 cursor-pointer flex justify-center items-center `}
|
className={`w-6 h-6 rounded-sm hover:bg-[#ffd025] hover:text-[#333] cursor-pointer flex justify-center items-center `}
|
||||||
onClick={() => (showWhenLocked || !inputLock.locked) && setFormShow(!formShow)}
|
onClick={() => (showWhenLocked || !inputLock.locked) && setFormShow(!formShow)}
|
||||||
><FormIcon className={!showWhenLocked && inputLock.locked ? 'text-gray-400' : 'text-gray-950'}></FormIcon></div>
|
><FormIcon className={!showWhenLocked && inputLock.locked ? 'text-gray-400' : 'text-gray-800'}></FormIcon></div>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
{/* send */}
|
{/* send */}
|
||||||
<div className="flex gap-2 absolute right-[2.5%] z-10">
|
<div className="flex gap-2 absolute right-[2.5%] z-10">
|
||||||
<div
|
{stop.show ?
|
||||||
id="bs-send-btn"
|
<div
|
||||||
className="w-[68px] h-[40px] bg-[#FFD54C] cursor-pointer flex justify-center items-center"
|
id="bs-send-btn"
|
||||||
onClick={() => { !inputLock.locked && handleSendClick() }}
|
className="w-[68px] h-[40px] bg-[#FFD54C] cursor-pointer flex justify-center items-center"
|
||||||
style={{borderRadius:"20px"}}
|
style={{borderRadius:"20px"}} onClick={() => {
|
||||||
>
|
if (stop.disable) return
|
||||||
{/* <SendIcon className={inputLock.locked ? 'text-gray-400' : 'text-gray-950'}></SendIcon> */}
|
setStop({ show: true, disable: true });
|
||||||
<img src={duihua_send} className="w-[20px]" alt="" />
|
sendWsMsg({ "action": "stop" });
|
||||||
</div>
|
}}>
|
||||||
|
{/* <SendIcon className={`${inputLock.locked ? 'text-muted-foreground' : 'text-foreground'}`} /> */}
|
||||||
|
{/* <StopIcon className={`mt-1 rounded-sm bg-[#000000] cursor-pointer ${stop.disable && 'bg-muted-foreground text-muted-foreground'}`}
|
||||||
|
onClick={() => {
|
||||||
|
if (stop.disable) return
|
||||||
|
setStop({ show: true, disable: true });
|
||||||
|
sendWsMsg({ "action": "stop" });
|
||||||
|
}} /> */}
|
||||||
|
<div className="w-[16px] h-[16px] bg-[#000000]" style={{borderRadius:"3px"}}></div>
|
||||||
|
</div>
|
||||||
|
: <div
|
||||||
|
id="bs-send-btn"
|
||||||
|
className="w-[68px] h-[40px] bg-[#FFD54C] cursor-pointer flex justify-center items-center"
|
||||||
|
onClick={() => { !inputLock.locked && handleSendClick() }} style={{borderRadius:"20px"}}>
|
||||||
|
{/* <SendIcon className={`${inputLock.locked ? 'text-muted-foreground' : 'text-foreground'}`} /> */}
|
||||||
|
<img src={duihua_send} className="w-[20px]" alt="" />
|
||||||
|
</div>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
{/* question */}
|
{/* question */}
|
||||||
<textarea
|
<textarea
|
||||||
@@ -303,8 +338,8 @@ export default function ChatInput({ clear, form, questions, inputForm, wsUrl, on
|
|||||||
disabled={inputLock.locked}
|
disabled={inputLock.locked}
|
||||||
onInput={handleTextAreaHeight}
|
onInput={handleTextAreaHeight}
|
||||||
placeholder={inputLock.locked ? inputLock.reason : t('chat.inputPlaceholder')}
|
placeholder={inputLock.locked ? inputLock.reason : t('chat.inputPlaceholder')}
|
||||||
|
className="questionTextarea w-full resize-none border-none bg-transparent outline-none max-h-[160px] pr-[68px]"
|
||||||
// className={"resize-none py-4 pr-10 text-md min-h-6 max-h-[200px] scrollbar-hide dark:bg-[#2A2B2E] text-gray-800" + (form && ' pl-10')}
|
// className={"resize-none py-4 pr-10 text-md min-h-6 max-h-[200px] scrollbar-hide dark:bg-[#2A2B2E] text-gray-800" + (form && ' pl-10')}
|
||||||
className="questionTextarea w-full resize-none border-none bg-transparent outline-none max-h-[160px]"
|
|
||||||
onKeyDown={(event) => {
|
onKeyDown={(event) => {
|
||||||
if (event.key === "Enter" && !event.shiftKey) {
|
if (event.key === "Enter" && !event.shiftKey) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
@@ -312,11 +347,6 @@ export default function ChatInput({ clear, form, questions, inputForm, wsUrl, on
|
|||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
></textarea>
|
></textarea>
|
||||||
{!isStop && <div className=" absolute w-full flex justify-center bottom-32 pointer-events-none">
|
|
||||||
<Button className="rounded-full pointer-events-auto" variant="outline" disabled={isStop} onClick={() => { setIsStop(true); stop(); }}><StopCircle className="mr-2" />Stop</Button>
|
|
||||||
</div>}
|
|
||||||
|
|
||||||
{/* <p className="w-[100%] text-center text-[#666666]">内容由AI生成,仅供参考</p> */}
|
|
||||||
</div>
|
</div>
|
||||||
<p className="text-center text-sm pt-2 pb-4 text-gray-400">{appConfig.dialogTips}</p>
|
<p className="text-center text-sm pt-2 pb-4 text-gray-400">{appConfig.dialogTips}</p>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -36,7 +36,9 @@ export default function FileBs({ data,flow_type }) {
|
|||||||
<div className="w-fit min-h-8 rounded-2xl px-6 py-4 max-w-[90%]">
|
<div className="w-fit min-h-8 rounded-2xl px-6 py-4 max-w-[90%]">
|
||||||
{data.sender && <p className="text-primary text-xs mb-2" style={{ background: avatarColor }}>{data.sender}</p>}
|
{data.sender && <p className="text-primary text-xs mb-2" style={{ background: avatarColor }}>{data.sender}</p>}
|
||||||
<div className="flex gap-2 ">
|
<div className="flex gap-2 ">
|
||||||
{data.flow_id && <TitleIconBg className="w-[40px] h-[40px]" img={data.avatar_img} id={data.avatar_color ? data.avatar_color : data.flow_id} ><img src={data.avatar_img ? data.avatar_img : (flow_type == "assistant" ? npcIcon : nengliIcon)} alt="" /></TitleIconBg>}
|
{/* {data.flow_id && <TitleIconBg className="w-[40px] h-[40px]" img={data.avatar_img} id={data.avatar_color ? data.avatar_color : data.flow_id} ><img src={data.avatar_img ? data.avatar_img : (flow_type == "assistant" ? npcIcon : nengliIcon)} alt="" /></TitleIconBg>} */}
|
||||||
|
{flow_type.id && <TitleIconBg className="w-[40px] h-[40px] mr-[10px]" img={flow_type.avatar_img} id={flow_type.avatar_color ? flow_type.avatar_color : flow_type.id} ><img src={flow_type.avatar_img ? flow_type.avatar_img : (flow_type.type == "assistant" ? npcIcon : nengliIcon)} alt="" /></TitleIconBg>}
|
||||||
|
|
||||||
{/* <div className="w-6 h-6 min-w-6 flex justify-center items-center rounded-full" style={{ background: avatarColor }} ><AvatarIcon /></div> */}
|
{/* <div className="w-6 h-6 min-w-6 flex justify-center items-center rounded-full" style={{ background: avatarColor }} ><AvatarIcon /></div> */}
|
||||||
<div
|
<div
|
||||||
className="flex gap-2 w-52 shadow-sm bg-[#1a1a1a] px-4 py-2 rounded-sm cursor-pointer"
|
className="flex gap-2 w-52 shadow-sm bg-[#1a1a1a] px-4 py-2 rounded-sm cursor-pointer"
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ const colorList = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
export default function MessageBs({ data, onUnlike = () => { }, flow_type, onSource }: { data: ChatMessageType, flow_type: any, onUnlike?: any, onSource?: any }) {
|
export default function MessageBs({ data, onUnlike = () => { }, flow_type, onSource }: { data: ChatMessageType, flow_type: any, onUnlike?: any, onSource?: any }) {
|
||||||
|
// export default function MessageBs({ logo, data, onUnlike = () => { }, flow_type, onSource }: { logo: string, data: ChatMessageType, flow_type: any, onUnlike?: any, onSource?: any }) {
|
||||||
const avatarColor = colorList[
|
const avatarColor = colorList[
|
||||||
(data.sender?.split('').reduce((num, s) => num + s.charCodeAt(), 0) || 0) % colorList.length
|
(data.sender?.split('').reduce((num, s) => num + s.charCodeAt(), 0) || 0) % colorList.length
|
||||||
]
|
]
|
||||||
@@ -85,7 +86,6 @@ export default function MessageBs({ data, onUnlike = () => { }, flow_type, onSou
|
|||||||
const handleCopyMessage = () => {
|
const handleCopyMessage = () => {
|
||||||
copyText(messageRef.current)
|
copyText(messageRef.current)
|
||||||
}
|
}
|
||||||
// console.log(data)
|
|
||||||
const chatId = useMessageStore(state => state.chatId)
|
const chatId = useMessageStore(state => state.chatId)
|
||||||
return <div className="flex w-full py-1">
|
return <div className="flex w-full py-1">
|
||||||
<div className="w-[100%]">
|
<div className="w-[100%]">
|
||||||
@@ -94,7 +94,7 @@ export default function MessageBs({ data, onUnlike = () => { }, flow_type, onSou
|
|||||||
{/* {(data.flow_id == "06b1d374-ba97-46e6-8782-c56dec8dcc17" || data.flow_id == "ed8e21f6-9757-43d0-b076-8c6e81bb0580") && <img src={robot2} className="w-[50px]" alt=""/>}
|
{/* {(data.flow_id == "06b1d374-ba97-46e6-8782-c56dec8dcc17" || data.flow_id == "ed8e21f6-9757-43d0-b076-8c6e81bb0580") && <img src={robot2} className="w-[50px]" alt=""/>}
|
||||||
{data.flow_id == "ca214b41-2b73-4585-b172-bf1e546cf6ec" && <img src={robot3} className="w-[50px]" alt=""/>}
|
{data.flow_id == "ca214b41-2b73-4585-b172-bf1e546cf6ec" && <img src={robot3} className="w-[50px]" alt=""/>}
|
||||||
{(data.flow_id != "06b1d374-ba97-46e6-8782-c56dec8dcc17" && data.flow_id != "ed8e21f6-9757-43d0-b076-8c6e81bb0580" && data.flow_id != "ca214b41-2b73-4585-b172-bf1e546cf6ec") && <img src={robot} className="w-[50px]" alt=""/>} */}
|
{(data.flow_id != "06b1d374-ba97-46e6-8782-c56dec8dcc17" && data.flow_id != "ed8e21f6-9757-43d0-b076-8c6e81bb0580" && data.flow_id != "ca214b41-2b73-4585-b172-bf1e546cf6ec") && <img src={robot} className="w-[50px]" alt=""/>} */}
|
||||||
{data.flow_id && <TitleIconBg className="w-[40px] h-[40px] mr-[10px]" img={flow_type.avatar_img} id={flow_type.avatar_color ? flow_type.avatar_color : data.flow_id} ><img src={flow_type.avatar_img ? flow_type.avatar_img : (flow_type.type == "assistant" ? npcIcon : nengliIcon)} alt="" /></TitleIconBg>}
|
{flow_type && flow_type.id && <TitleIconBg className="w-[40px] h-[40px] mr-[10px]" img={flow_type.avatar_img} id={flow_type.avatar_color ? flow_type.avatar_color : flow_type.id} ><img src={flow_type.avatar_img ? flow_type.avatar_img : (flow_type.type == "assistant" ? npcIcon : nengliIcon)} alt="" /></TitleIconBg>}
|
||||||
|
|
||||||
<div ref={messageRef} className="text-sm max-w-[calc(100%-100px)]">
|
<div ref={messageRef} className="text-sm max-w-[calc(100%-100px)]">
|
||||||
{/* <div className="chat-start-zk relative">
|
{/* <div className="chat-start-zk relative">
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import RunLog from "./RunLog";
|
|||||||
import Separator from "./Separator";
|
import Separator from "./Separator";
|
||||||
import { useMessageStore } from "./messageStore";
|
import { useMessageStore } from "./messageStore";
|
||||||
|
|
||||||
export default function MessagePanne({ useName, guideWord, loadMore, flow_type }) {
|
export default function MessagePanne({logo, useName, guideWord, loadMore, flow_type }) {
|
||||||
const { t } = useTranslation()
|
const { t } = useTranslation()
|
||||||
const { chatId, messages } = useMessageStore()
|
const { chatId, messages } = useMessageStore()
|
||||||
|
|
||||||
@@ -75,7 +75,6 @@ export default function MessagePanne({ useName, guideWord, loadMore, flow_type }
|
|||||||
} else if (msg.thought) {
|
} else if (msg.thought) {
|
||||||
type = 'system'
|
type = 'system'
|
||||||
}
|
}
|
||||||
// console.log(type)
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case 'user':
|
case 'user':
|
||||||
return <MessageUser key={msg.id} useName={useName} data={msg} />;
|
return <MessageUser key={msg.id} useName={useName} data={msg} />;
|
||||||
|
|||||||
@@ -7,7 +7,8 @@ import robotU from "../../../assets/robotU.png";
|
|||||||
import btnEdit from "../../../assets/chat/btn-edit.png";
|
import btnEdit from "../../../assets/chat/btn-edit.png";
|
||||||
import btnReSend from "../../../assets/chat/btn-reSend.png";
|
import btnReSend from "../../../assets/chat/btn-reSend.png";
|
||||||
|
|
||||||
export default function MessageUser({ useName, data }: { data: ChatMessageType }) {
|
export default function MessageUser({ useName = 'xxx', data }: {useName: string, data: ChatMessageType }) {
|
||||||
|
// export default function MessageUser({ useName, data }: { data: ChatMessageType }) {
|
||||||
const msg = data.message[data.chatKey]
|
const msg = data.message[data.chatKey]
|
||||||
|
|
||||||
const { appConfig } = useContext(locationContext)
|
const { appConfig } = useContext(locationContext)
|
||||||
|
|||||||
@@ -1,9 +1,22 @@
|
|||||||
import ChatInput from "./ChatInput";
|
import ChatInput from "./ChatInput";
|
||||||
import MessagePanne from "./MessagePanne";
|
import MessagePanne from "./MessagePanne";
|
||||||
|
|
||||||
export default function ChatComponent({ clear = false, questions = [], form = false, useName, inputForm = null, guideWord, wsUrl, onBeforSend, type, loadMore = () => { } }) {
|
export default function ChatComponent({
|
||||||
|
stop = false,
|
||||||
|
logo = '',
|
||||||
|
clear = false,
|
||||||
|
questions = [],
|
||||||
|
form = false,
|
||||||
|
useName,
|
||||||
|
inputForm = null,
|
||||||
|
guideWord,
|
||||||
|
wsUrl,
|
||||||
|
onBeforSend,
|
||||||
|
type,
|
||||||
|
loadMore = () => { }
|
||||||
|
}) {
|
||||||
return <div className="relative h-full">
|
return <div className="relative h-full">
|
||||||
<MessagePanne useName={useName} guideWord={guideWord} loadMore={loadMore} flow_type={type}></MessagePanne>
|
<MessagePanne logo={logo} useName={useName} guideWord={guideWord} loadMore={loadMore} flow_type={type}></MessagePanne>
|
||||||
<ChatInput clear={clear} questions={questions} form={form} wsUrl={wsUrl} inputForm={inputForm} onBeforSend={onBeforSend} ></ChatInput>
|
<ChatInput clear={clear} questions={questions} form={form} wsUrl={wsUrl} inputForm={inputForm} onBeforSend={onBeforSend} ></ChatInput>
|
||||||
</div>
|
</div>
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import { MessageDB, getChatHistory } from '@/controllers/API'
|
|||||||
import { ChatMessageType } from '@/types/chat'
|
import { ChatMessageType } from '@/types/chat'
|
||||||
import { cloneDeep } from 'lodash'
|
import { cloneDeep } from 'lodash'
|
||||||
import { create } from 'zustand'
|
import { create } from 'zustand'
|
||||||
|
import { formatDate } from '@/util/utils';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 会话消息管理
|
* 会话消息管理
|
||||||
@@ -19,6 +20,8 @@ type State = {
|
|||||||
/** 没有更多历史纪录 */
|
/** 没有更多历史纪录 */
|
||||||
historyEnd: boolean,
|
historyEnd: boolean,
|
||||||
messages: ChatMessageType[]
|
messages: ChatMessageType[]
|
||||||
|
/** 历史回话独立存储 */
|
||||||
|
hisMessages: ChatMessageType[]
|
||||||
/**
|
/**
|
||||||
* 控制引导问题的显示状态
|
* 控制引导问题的显示状态
|
||||||
*/
|
*/
|
||||||
@@ -26,8 +29,8 @@ type State = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type Actions = {
|
type Actions = {
|
||||||
loadHistoryMsg: (flowid: string, chatId: string, flow_type: string) => Promise<void>;
|
loadHistoryMsg: (flowid: string, chatId: string, data: { appendHistory: boolean, lastMsg: string }, flow_type: string) => Promise<void>;
|
||||||
loadMoreHistoryMsg: (flowid: string, flow_type: string) => Promise<void>;
|
loadMoreHistoryMsg: (flowid: string, appendHistory: boolean, flow_type: string) => Promise<void>;
|
||||||
destory: () => void;
|
destory: () => void;
|
||||||
createSendMsg: (inputs: any, inputKey?: string) => void;
|
createSendMsg: (inputs: any, inputKey?: string) => void;
|
||||||
createWsMsg: (data: any) => void;
|
createWsMsg: (data: any) => void;
|
||||||
@@ -38,6 +41,7 @@ type Actions = {
|
|||||||
insetSystemMsg: (text: string) => void;
|
insetSystemMsg: (text: string) => void;
|
||||||
insetBsMsg: (text: string) => void;
|
insetBsMsg: (text: string) => void;
|
||||||
setShowGuideQuestion: (text: boolean) => void;
|
setShowGuideQuestion: (text: boolean) => void;
|
||||||
|
clearMsgs: () => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -76,18 +80,32 @@ export const useMessageStore = create<State & Actions>((set, get) => ({
|
|||||||
running: false,
|
running: false,
|
||||||
chatId: '',
|
chatId: '',
|
||||||
messages: [],
|
messages: [],
|
||||||
|
hisMessages: [],
|
||||||
historyEnd: false,
|
historyEnd: false,
|
||||||
showGuideQuestion: false,
|
showGuideQuestion: false,
|
||||||
setShowGuideQuestion(bln: boolean) {
|
setShowGuideQuestion(bln: boolean) {
|
||||||
set({ showGuideQuestion: bln })
|
set({ showGuideQuestion: bln })
|
||||||
},
|
},
|
||||||
async loadHistoryMsg(flowid, chatId, flow_type) {
|
async loadHistoryMsg(flowid, chatId, { appendHistory, lastMsg }, flow_type) {
|
||||||
const res = await getChatHistory(flowid, chatId, 30, 0, flow_type)
|
const res = await getChatHistory(flowid, chatId, 30, 0, flow_type)
|
||||||
const msgs = handleHistoryMsg(res)
|
const msgs = handleHistoryMsg(res)
|
||||||
currentChatId = chatId
|
currentChatId = chatId
|
||||||
set({ historyEnd: false, messages: msgs.reverse() })
|
const hisMessages = appendHistory ? [] : msgs.reverse()
|
||||||
|
if (hisMessages.length) {
|
||||||
|
hisMessages.push({
|
||||||
|
...bsMsgItem,
|
||||||
|
id: Math.random() * 1000000,
|
||||||
|
category: 'divider',
|
||||||
|
message: lastMsg,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
set({
|
||||||
|
historyEnd: false,
|
||||||
|
messages: appendHistory ? msgs.reverse() : [],
|
||||||
|
hisMessages
|
||||||
|
})
|
||||||
},
|
},
|
||||||
async loadMoreHistoryMsg(flowid, flow_type) {
|
async loadMoreHistoryMsg(flowid, appendHistory, flow_type) {
|
||||||
if (get().running) return // 会话进行中禁止加载more历史
|
if (get().running) return // 会话进行中禁止加载more历史
|
||||||
if (get().historyEnd) return // 没有更多历史纪录
|
if (get().historyEnd) return // 没有更多历史纪录
|
||||||
const chatId = get().chatId
|
const chatId = get().chatId
|
||||||
@@ -101,11 +119,16 @@ export const useMessageStore = create<State & Actions>((set, get) => ({
|
|||||||
}
|
}
|
||||||
const msgs = handleHistoryMsg(res)
|
const msgs = handleHistoryMsg(res)
|
||||||
if (msgs.length) {
|
if (msgs.length) {
|
||||||
set({ messages: [...msgs.reverse(), ...prevMsgs] })
|
set({ [appendHistory ? 'messages' : 'hisMessages']: [...msgs.reverse(), ...prevMsgs] })
|
||||||
} else {
|
} else {
|
||||||
set({ historyEnd: true })
|
set({ historyEnd: true })
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
clearMsgs() {
|
||||||
|
setTimeout(() => {
|
||||||
|
set({ hisMessages: [], messages: [], historyEnd: true })
|
||||||
|
}, 0);
|
||||||
|
},
|
||||||
destory() {
|
destory() {
|
||||||
set({ chatId: '', messages: [] })
|
set({ chatId: '', messages: [] })
|
||||||
},
|
},
|
||||||
@@ -122,7 +145,8 @@ export const useMessageStore = create<State & Actions>((set, get) => ({
|
|||||||
category: '',
|
category: '',
|
||||||
files: [],
|
files: [],
|
||||||
end: false,
|
end: false,
|
||||||
user_name: ""
|
user_name: "",
|
||||||
|
update_time: formatDate(new Date(), 'yyyy-MM-ddTHH:mm:ss')
|
||||||
}]
|
}]
|
||||||
}))
|
}))
|
||||||
},
|
},
|
||||||
@@ -151,13 +175,20 @@ export const useMessageStore = create<State & Actions>((set, get) => ({
|
|||||||
// if (wsdata.end) {
|
// if (wsdata.end) {
|
||||||
// debugger
|
// debugger
|
||||||
// }
|
// }
|
||||||
console.log('change updateCurrentMessage');
|
// console.log('change updateCurrentMessage');
|
||||||
const messages = get().messages
|
const messages = get().messages
|
||||||
const isRunLog = runLogsTypes.includes(wsdata.category);
|
const isRunLog = runLogsTypes.includes(wsdata.category);
|
||||||
// run log类型存在嵌套情况,使用 extra 匹配 currentMessage; 否则取最近
|
// run log类型存在嵌套情况,使用 extra 匹配 currentMessage; 否则取最近
|
||||||
const currentMessageIndex = isRunLog ?
|
let currentMessageIndex = 0
|
||||||
messages.findLastIndex((msg) => msg.extra === wsdata.extra)
|
for (let i = messages.length - 1; i >= 0; i--) {
|
||||||
: messages.findLastIndex((msg) => !runLogsTypes.includes(msg.category))
|
if (isRunLog && messages[i].extra === wsdata.extra) {
|
||||||
|
currentMessageIndex = i;
|
||||||
|
break;
|
||||||
|
} else if (!isRunLog && !runLogsTypes.includes(messages[i].category)) {
|
||||||
|
currentMessageIndex = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
const currentMessage = messages[currentMessageIndex]
|
const currentMessage = messages[currentMessageIndex]
|
||||||
|
|
||||||
const newCurrentMessage = {
|
const newCurrentMessage = {
|
||||||
@@ -166,13 +197,17 @@ export const useMessageStore = create<State & Actions>((set, get) => ({
|
|||||||
id: isRunLog ? wsdata.extra : wsdata.messageId, // 每条消息必唯一
|
id: isRunLog ? wsdata.extra : wsdata.messageId, // 每条消息必唯一
|
||||||
message: isRunLog ? JSON.parse(wsdata.message) : currentMessage.message + wsdata.message,
|
message: isRunLog ? JSON.parse(wsdata.message) : currentMessage.message + wsdata.message,
|
||||||
thought: currentMessage.thought + (wsdata.thought ? `${wsdata.thought}\n` : ''),
|
thought: currentMessage.thought + (wsdata.thought ? `${wsdata.thought}\n` : ''),
|
||||||
files: wsdata.files || null,
|
files: wsdata.files || [],
|
||||||
category: wsdata.category || '',
|
category: wsdata.category || '',
|
||||||
source: wsdata.source
|
source: wsdata.source
|
||||||
}
|
}
|
||||||
|
// 无id补上(如文件解析完成消息,后端无返回messageid)
|
||||||
|
if (!newCurrentMessage.id) {
|
||||||
|
newCurrentMessage.id = Math.random() * 1000000
|
||||||
|
// console.log('msg:', newCurrentMessage);
|
||||||
|
}
|
||||||
|
|
||||||
messages[currentMessageIndex] = newCurrentMessage
|
messages[currentMessageIndex] = newCurrentMessage
|
||||||
// console.log(messages,currentMessageIndex,newCurrentMessage)
|
|
||||||
// 会话特殊处理,兼容后端的缺陷
|
// 会话特殊处理,兼容后端的缺陷
|
||||||
if (!isRunLog) {
|
if (!isRunLog) {
|
||||||
// start - end 之间没有内容删除load
|
// start - end 之间没有内容删除load
|
||||||
|
|||||||
24
src/components/bs-comp/loadMore/index.tsx
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
import { useEffect, useRef } from "react";
|
||||||
|
|
||||||
|
export default function LoadMore({ onScrollLoad }) {
|
||||||
|
// scroll load
|
||||||
|
const footerRef = useRef<HTMLDivElement>(null)
|
||||||
|
useEffect(function () {
|
||||||
|
const observer = new IntersectionObserver((entries) => {
|
||||||
|
entries.forEach(entry => {
|
||||||
|
if (entry.isIntersecting) {
|
||||||
|
onScrollLoad()
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, {
|
||||||
|
// root: null, // 视口
|
||||||
|
rootMargin: '0px', // 视口的边距
|
||||||
|
threshold: 0.1 // 目标元素超过视口的10%即触发回调
|
||||||
|
});
|
||||||
|
|
||||||
|
observer.observe(footerRef.current);
|
||||||
|
return () => footerRef.current && observer.unobserve(footerRef.current);
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
return <div ref={footerRef} style={{ height: 20 }}></div>
|
||||||
|
};
|
||||||
200
src/components/bs-comp/selectComponent/LabelSelect.tsx
Normal file
@@ -0,0 +1,200 @@
|
|||||||
|
import { Popover, PopoverContent, PopoverTrigger } from "@/components/bs-ui/popover";
|
||||||
|
import { useEffect, useMemo, useRef, useState } from "react";
|
||||||
|
import { SearchInput } from "@/components/bs-ui/input";
|
||||||
|
import { Checkbox } from "@/components/bs-ui/checkBox";
|
||||||
|
import { Label } from "@/components/bs-ui/label";
|
||||||
|
import { Pencil2Icon } from "@radix-ui/react-icons";
|
||||||
|
import { Trash2 } from "lucide-react";
|
||||||
|
import { Input } from "@/components/bs-ui/input";
|
||||||
|
import { useToast } from "@/components/bs-ui/toast/use-toast";
|
||||||
|
import { useTranslation } from "react-i18next";
|
||||||
|
import { bsConfirm } from "@/components/bs-ui/alertDialog/useConfirm";
|
||||||
|
import { PlusIcon } from "@radix-ui/react-icons";
|
||||||
|
import { useContext } from "react";
|
||||||
|
import { userContext } from "@/contexts/userContext";
|
||||||
|
import {
|
||||||
|
createLabelApi, updateLabelApi,
|
||||||
|
createLinkApi, deleteLinkApi,
|
||||||
|
deleteLabelApi
|
||||||
|
} from "@/controllers/API/label";
|
||||||
|
import { captureAndAlertRequestErrorHoc } from "@/controllers/request";
|
||||||
|
import biaoqianBian from "../../../assets/npc/biaoqian-bian.png"
|
||||||
|
import biaoqianDel from "../../../assets/npc/biaoqian-del.png"
|
||||||
|
|
||||||
|
export enum UPDATETYPE {
|
||||||
|
DELETELINK = 'deleteLink',
|
||||||
|
CREATELINK = 'createLink',
|
||||||
|
UPDATENAME = 'updateName',
|
||||||
|
CREATELABEL = 'createLabel',
|
||||||
|
DELETELABEL = 'deleteLabel'
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function LabelSelect({ labels, all, children, resource, onUpdate }) {
|
||||||
|
const [open, setOpen] = useState(false)
|
||||||
|
const [data, setData] = useState([])
|
||||||
|
const { user } = useContext(userContext)
|
||||||
|
const dataRef = useRef([])
|
||||||
|
const { message } = useToast()
|
||||||
|
const { t } = useTranslation()
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const newData = all.map(d => {
|
||||||
|
const res = labels.find(l => l.value === d.value)
|
||||||
|
return res ? { ...d, selected: true } : d
|
||||||
|
})
|
||||||
|
dataRef.current = newData
|
||||||
|
setData(newData)
|
||||||
|
}, [all])
|
||||||
|
|
||||||
|
const handleEdit = (id) => {
|
||||||
|
setData(pre => pre.map(d => ({ ...d, edit: d.value === id })))
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleChecked = (id) => {
|
||||||
|
const type = resource.type === 'assist' ? 3 : 2
|
||||||
|
setData(pre => {
|
||||||
|
const newData = pre.map(d => d.value === id ? { ...d, selected: !d.selected } : d)
|
||||||
|
const cur = newData.find(d => d.value === id)
|
||||||
|
captureAndAlertRequestErrorHoc(
|
||||||
|
(cur.selected ? createLinkApi(id, resource.id, type) : deleteLinkApi(id, resource.id, type)).then(() => {
|
||||||
|
onUpdate({
|
||||||
|
type: cur.selected ? UPDATETYPE.CREATELINK : UPDATETYPE.DELETELINK,
|
||||||
|
data: cur
|
||||||
|
})
|
||||||
|
})
|
||||||
|
)
|
||||||
|
return newData
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const nameRef = useRef('')
|
||||||
|
const handleChange = (e, id) => {
|
||||||
|
nameRef.current = id ? dataRef.current.find(d => d.value === id).label : ''
|
||||||
|
setData(pre => pre.map(d => d.value === id ? { ...d, label: e.target.value } : d))
|
||||||
|
}
|
||||||
|
|
||||||
|
const errorRestName = (preName, id) => { //错误发生回退初值
|
||||||
|
preName
|
||||||
|
? setData(pre => pre.map(d => d.value === id ? { ...d, label: nameRef.current } : d))
|
||||||
|
: setData(pre => pre.filter(d => d.value))
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleSave = async (e, id) => {
|
||||||
|
if (e.key === 'Enter') {
|
||||||
|
setData(pre => pre.map(d => d.value === id ? { ...d, edit: false } : d))
|
||||||
|
const label = data.find(d => d.value === id)
|
||||||
|
if (label.label.length > 10) {
|
||||||
|
errorRestName(nameRef.current, id)
|
||||||
|
return message({ title: t('prompt'), variant: 'warning', description: t('tag.labelMaxLength') })
|
||||||
|
}
|
||||||
|
const err = await captureAndAlertRequestErrorHoc(updateLabelApi(id, label.label).then((res: any) => {
|
||||||
|
setData(pre => {
|
||||||
|
const newData = pre.map(d => d.value ? d : { ...d, label: res.name, value: res.id })
|
||||||
|
dataRef.current = newData
|
||||||
|
return newData
|
||||||
|
})
|
||||||
|
onUpdate({
|
||||||
|
type: UPDATETYPE.UPDATENAME,
|
||||||
|
data: label
|
||||||
|
})
|
||||||
|
return message({ title: t('prompt'), variant: 'success', description: id ? t('updateSuccess') : t('createSuccess') })
|
||||||
|
}))
|
||||||
|
if (!err) {
|
||||||
|
errorRestName(nameRef.current, id)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleDelete = (label) => {
|
||||||
|
bsConfirm({
|
||||||
|
title: t('prompt'),
|
||||||
|
desc: t('tag.confirmDeleteLabel', { label: label.label }),
|
||||||
|
okTxt: "确认",
|
||||||
|
onOk(next) {
|
||||||
|
captureAndAlertRequestErrorHoc(deleteLabelApi(label.value).then(() => {
|
||||||
|
onUpdate({
|
||||||
|
type: UPDATETYPE.DELETELABEL,
|
||||||
|
data: label
|
||||||
|
})
|
||||||
|
message({ title: t('prompt'), variant: 'success', description: t('deleteSuccess') })
|
||||||
|
}))
|
||||||
|
next()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleOpenChange = (b) => { // 可用于整体保存
|
||||||
|
setOpen(b)
|
||||||
|
setData(pre => pre.map(d => ({ ...d, edit: false })))
|
||||||
|
}
|
||||||
|
|
||||||
|
const [keyword, setKeyword] = useState('')
|
||||||
|
const handleSearch = (e) => {
|
||||||
|
const key = e.target.value
|
||||||
|
setKeyword(key)
|
||||||
|
const newData = dataRef.current.filter(d => d.label.toUpperCase().includes(key.toUpperCase()))
|
||||||
|
setData(newData)
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleAdd = () => {
|
||||||
|
if (keyword.length > 10) {
|
||||||
|
return message({ title: t('prompt'), variant: 'warning', description: t('tag.labelMaxLength') })
|
||||||
|
}
|
||||||
|
createLabelApi(keyword).then((res: any) => {
|
||||||
|
const addItem = { label: res.name, value: res.id, edit: false, selected: false }
|
||||||
|
dataRef.current = [addItem, ...dataRef.current]
|
||||||
|
setData([addItem])
|
||||||
|
onUpdate({
|
||||||
|
type: UPDATETYPE.CREATELABEL,
|
||||||
|
data: res.name
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const showAdd = useMemo(() => {
|
||||||
|
if (data.length === 1 && data[0].label === keyword) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}, [data])
|
||||||
|
|
||||||
|
return <Popover open={open} onOpenChange={handleOpenChange}>
|
||||||
|
<PopoverTrigger asChild>
|
||||||
|
{children}
|
||||||
|
</PopoverTrigger>
|
||||||
|
<PopoverContent className="z-[20]" onClick={(e) => e.stopPropagation()}>
|
||||||
|
<div>
|
||||||
|
<SearchInput placeholder={t('chat.searchLabels')} value={keyword} onChange={handleSearch} className="w-[240px]"
|
||||||
|
onKeyDown={(e) => {
|
||||||
|
if (e.key === 'Enter') {
|
||||||
|
(!data.length && user.role === 'admin') ? handleAdd() : null
|
||||||
|
}
|
||||||
|
}} />
|
||||||
|
</div>
|
||||||
|
<div className="mt-4 h-[200px] overflow-y-auto relative biaoqianTab">
|
||||||
|
{data.map(d => <div className="flex group justify-between px-[10px] h-8 rounded-sm hover:bg-[#2E2406] ">
|
||||||
|
<div className="flex place-items-center space-x-2">
|
||||||
|
<Checkbox id={d.value} checked={d.selected} onCheckedChange={() => handleChecked(d.value)} />
|
||||||
|
{
|
||||||
|
d.edit
|
||||||
|
? <Input autoFocus className="h-6 bg-[#1a1a1a] text-[#fff]" type="text" value={d.label || ''}
|
||||||
|
onChange={(e) => handleChange(e, d.value)}
|
||||||
|
onKeyDown={(e) => handleSave(e, d.value)} />
|
||||||
|
: <Label htmlFor={d.value} className="cursor-pointer text-[#999999]">{d.label}</Label>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
{user.role === 'admin' && <div className="flex place-items-center space-x-4 opacity-0 group-hover:opacity-100">
|
||||||
|
<img src={biaoqianBian} alt="" onClick={() => handleEdit(d.value)} className="w-[14px] cursor-pointer"/>
|
||||||
|
<img src={biaoqianDel} alt="" onClick={() => handleDelete(d)} className="w-[14px] ml-[14px] cursor-pointer"/>
|
||||||
|
{/* <Pencil2Icon className="cursor-pointer" onClick={() => handleEdit(d.value)} /> */}
|
||||||
|
{/* <Trash2 size={16} onClick={() => handleDelete(d)} className="text-gray-600 cursor-pointer" /> */}
|
||||||
|
</div>}
|
||||||
|
</div>)}
|
||||||
|
{(showAdd && keyword != '' && user.role === 'admin') && <div onClick={handleAdd}
|
||||||
|
className="absolute cursor-pointer w-[68px] h-[20px] border border-[#FFD025] text-[9px] text-[#FFD025] flex items-center justify-center right-0 bottom-0" style={{borderRadius:"3px"}}>
|
||||||
|
创建标签
|
||||||
|
</div>}
|
||||||
|
</div>
|
||||||
|
</PopoverContent>
|
||||||
|
</Popover>
|
||||||
|
}
|
||||||
48
src/components/bs-comp/selectComponent/Users.tsx
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
import MultiSelect from "@/components/bs-ui/select/multi";
|
||||||
|
import { getUsersApi } from "@/controllers/API/user";
|
||||||
|
import { useEffect, useRef, useState } from "react";
|
||||||
|
import { useTranslation } from "react-i18next";
|
||||||
|
|
||||||
|
export default function UsersSelect({ multiple = false, lockedValues = [], value, disabled = false, onChange, children }:
|
||||||
|
{ multiple?: boolean, lockedValues?: any[], value: any, disabled?: boolean, onChange: (a: any) => any, children?: (fun: any) => React.ReactNode }) {
|
||||||
|
|
||||||
|
const { t } = useTranslation()
|
||||||
|
const [options, setOptions] = useState<any>([]);
|
||||||
|
const originOptionsRef = useRef([])
|
||||||
|
|
||||||
|
const pageRef = useRef(1)
|
||||||
|
const reload = (page, name) => {
|
||||||
|
getUsersApi({ page, pageSize: 40, name }).then(res => {
|
||||||
|
pageRef.current = page
|
||||||
|
originOptionsRef.current = res.data
|
||||||
|
const opts = res.data.map(el => ({ label: el.user_name, value: el.user_id }))
|
||||||
|
setOptions(_ops => page > 1 ? [..._ops, ...opts] : opts)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
reload(1, '')
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
// 加载更多
|
||||||
|
const loadMore = (name) => {
|
||||||
|
reload(pageRef.current + 1, name)
|
||||||
|
}
|
||||||
|
|
||||||
|
return <MultiSelect
|
||||||
|
className=" max-w-[630px]"
|
||||||
|
multiple={multiple}
|
||||||
|
value={value}
|
||||||
|
lockedValues={lockedValues}
|
||||||
|
disabled={disabled}
|
||||||
|
options={options}
|
||||||
|
placeholder={'请选择用户'}
|
||||||
|
searchPlaceholder={'搜索用户名称'}
|
||||||
|
onChange={onChange}
|
||||||
|
onLoad={() => reload(1, '')}
|
||||||
|
onSearch={(val) => reload(1, val)}
|
||||||
|
onScrollLoad={(val) => loadMore(val)}
|
||||||
|
>
|
||||||
|
{children?.(reload)}
|
||||||
|
</MultiSelect>
|
||||||
|
};
|
||||||
51
src/components/bs-comp/selectComponent/knowledge.tsx
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
import MultiSelect from "@/components/bs-ui/select/multi";
|
||||||
|
import { readFileLibDatabase } from "@/controllers/API";
|
||||||
|
import { useEffect, useRef, useState } from "react";
|
||||||
|
import { useTranslation } from "react-i18next";
|
||||||
|
|
||||||
|
export default function KnowledgeSelect({ multiple = false, value, disabled = false, onChange, children }:
|
||||||
|
{ multiple?: boolean, value: any, disabled?: boolean, onChange: (a: any) => any, children?: (fun: any) => React.ReactNode }) {
|
||||||
|
|
||||||
|
const { t } = useTranslation()
|
||||||
|
const [options, setOptions] = useState<any>([]);
|
||||||
|
const originOptionsRef = useRef([])
|
||||||
|
|
||||||
|
const pageRef = useRef(1)
|
||||||
|
const reload = (page, name) => {
|
||||||
|
readFileLibDatabase(page, 60, name).then(res => {
|
||||||
|
pageRef.current = page
|
||||||
|
originOptionsRef.current = res.data
|
||||||
|
const opts = res.data.map(el => ({ label: el.name, value: el.id }))
|
||||||
|
setOptions(_ops => page > 1 ? [..._ops, ...opts] : opts)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
reload(1, '')
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
// const handleChange = (res) => {
|
||||||
|
// // id => obj
|
||||||
|
// onChange(res.map(el => originOptionsRef.current.find(el2 => el2.id === el)))
|
||||||
|
// }
|
||||||
|
|
||||||
|
// 加载更多
|
||||||
|
const loadMore = (name) => {
|
||||||
|
reload(pageRef.current + 1, name)
|
||||||
|
}
|
||||||
|
|
||||||
|
return <MultiSelect
|
||||||
|
multiple={multiple}
|
||||||
|
value={value}
|
||||||
|
disabled={disabled}
|
||||||
|
options={options}
|
||||||
|
placeholder={t('build.selectKnowledgeBase')}
|
||||||
|
searchPlaceholder={t('build.searchBaseName')}
|
||||||
|
onChange={onChange}
|
||||||
|
onLoad={() => reload(1, '')}
|
||||||
|
onSearch={(val) => reload(1, val)}
|
||||||
|
onScrollLoad={(val) => loadMore(val)}
|
||||||
|
>
|
||||||
|
{children?.(reload)}
|
||||||
|
</MultiSelect>
|
||||||
|
};
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
import { Badge } from "@/components/bs-ui/badge";
|
import { Badge } from "@/components/bs-ui/badge";
|
||||||
import { Button } from "@/components/bs-ui/button";
|
import { Button } from "@/components/bs-ui/button";
|
||||||
import { getChatOnlineApi } from "@/controllers/API/assistant";
|
import { getChatOnlineApi } from "@/controllers/API/assistant";
|
||||||
import { useEffect, useMemo, useRef, useState } from "react";
|
import { useContext, useEffect, useMemo, useRef, useState } from "react";
|
||||||
import { useNavigate } from "react-router-dom";
|
import { useNavigate } from "react-router-dom";
|
||||||
import { SearchInput } from "../../bs-ui/input";
|
import { SearchInput } from "../../bs-ui/input";
|
||||||
import { Sheet, SheetContent, SheetDescription, SheetTitle, SheetTrigger } from "../../bs-ui/sheet";
|
import { Sheet, SheetContent, SheetDescription, SheetTitle, SheetTrigger } from "../../bs-ui/sheet";
|
||||||
@@ -19,45 +19,92 @@ import zidingyi1 from "../../../assets/npc/zidingyi1.png";
|
|||||||
import zidingyi2 from "../../../assets/npc/zidingyi2.png";
|
import zidingyi2 from "../../../assets/npc/zidingyi2.png";
|
||||||
import npcIcon from "../../../assets/npc/npcIcon.png";
|
import npcIcon from "../../../assets/npc/npcIcon.png";
|
||||||
import nengliIcon from "../../../assets/npc/nengliIcon.png";
|
import nengliIcon from "../../../assets/npc/nengliIcon.png";
|
||||||
|
import biaoqianPaixu from "../../../assets/chat/biaoqian-paixu.png";
|
||||||
|
import { useDebounce } from "@/util/hook";
|
||||||
|
import LoadMore from "../loadMore";
|
||||||
|
import { userContext } from "@/contexts/userContext";
|
||||||
|
import { getHomeLabelApi } from "@/controllers/API/label";
|
||||||
|
import MarkLabel from "@/pages/ChatAppPage/components/MarkLabel";
|
||||||
|
|
||||||
export default function SkillChatSheet({ children, onSelect }) {
|
export default function SkillChatSheet({ children, onSelect }) {
|
||||||
const [open, setOpen] = useState(false)
|
|
||||||
|
|
||||||
const { t } = useTranslation()
|
const { t } = useTranslation()
|
||||||
|
const { user } = useContext(userContext)
|
||||||
|
const chatListRef = useRef([])
|
||||||
const navigate = useNavigate()
|
const navigate = useNavigate()
|
||||||
|
|
||||||
|
const [labels, setLabels] = useState([])
|
||||||
|
const [open, setOpen] = useState(false)
|
||||||
|
const pageRef = useRef(1)
|
||||||
|
const [options, setOptions] = useState<any>([])
|
||||||
|
const searchRef = useRef('')
|
||||||
|
const [flag, setFlag] = useState(null) // 解决筛选之后再次发起请求覆盖筛选数据
|
||||||
|
|
||||||
const [keyword, setKeyword] = useState(' ')
|
const [keyword, setKeyword] = useState(' ')
|
||||||
const allDataRef = useRef([])
|
const allDataRef = useRef([])
|
||||||
|
const [markLabelOpen, setMarkLabelOpen] = useState(false)
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
open && getChatOnlineApi().then(res => {
|
const loadData = (more = false) => {
|
||||||
allDataRef.current = res
|
getChatOnlineApi(pageRef.current, searchRef.current, -1).then((res: any) => {
|
||||||
setKeyword('')
|
setFlag(true)
|
||||||
|
chatListRef.current = res
|
||||||
|
setOptions(more ? [...options, ...res] : res)
|
||||||
})
|
})
|
||||||
// setKeyword(' ')
|
}
|
||||||
}, [open])
|
|
||||||
|
|
||||||
const options = useMemo(() => {
|
// useEffect(() => {
|
||||||
return allDataRef.current.filter(el => el.name.toLowerCase().includes(keyword.toLowerCase()))
|
// // open && getChatOnlineApi().then(res => {
|
||||||
}, [keyword])
|
// // allDataRef.current = res
|
||||||
|
// // setKeyword('')
|
||||||
|
// // })
|
||||||
|
// // setKeyword(' ')
|
||||||
|
// pageRef.current = 1
|
||||||
|
// searchRef.current = ''
|
||||||
|
// loadData()
|
||||||
|
// }, [open])
|
||||||
|
useEffect(() => {
|
||||||
|
debounceLoad()
|
||||||
|
getHomeLabelApi().then((res: any) => {
|
||||||
|
setLabels(res.map(d => ({ label: d.name, value: d.id, selected: true })))
|
||||||
|
})
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
const debounceLoad = useDebounce(loadData, 600, false)
|
||||||
|
|
||||||
|
// const options = useMemo(() => {
|
||||||
|
// return allDataRef.current.filter(el => el.name.toLowerCase().includes(keyword.toLowerCase()))
|
||||||
|
// }, [keyword])
|
||||||
|
|
||||||
|
const handleSearch = (e) => {
|
||||||
|
pageRef.current = 1
|
||||||
|
searchRef.current = e.target.value
|
||||||
|
debounceLoad()
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleClose = async (bool) => {
|
||||||
|
const newHome = await getHomeLabelApi()
|
||||||
|
// @ts-ignore
|
||||||
|
setLabels(newHome.map(d => ({ label: d.name, value: d.id, selected: true })))
|
||||||
|
setMarkLabelOpen(bool)
|
||||||
|
}
|
||||||
|
|
||||||
|
const [chooseId, setChooseId] = useState() // 筛选项样式变化
|
||||||
|
const handleTagSearch = (id) => {
|
||||||
|
setChooseId(id)
|
||||||
|
setFlag(false)
|
||||||
|
pageRef.current = 1
|
||||||
|
getChatOnlineApi(pageRef.current, '', id).then((res: any) => {
|
||||||
|
setOptions(res)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleLoadMore = async () => {
|
||||||
|
pageRef.current++
|
||||||
|
await debounceLoad(true)
|
||||||
|
}
|
||||||
|
|
||||||
const render = (item: any) => (
|
const render = (item: any) => (
|
||||||
<Flexbox align={'flex-start'} className={`selectNpcFlexbox relative`} onClick={() => { onSelect(item); setOpen(false) }}>
|
<Flexbox align={'flex-start'} className={`selectNpcFlexbox relative`} onClick={() => { onSelect(item); setOpen(false) }}>
|
||||||
{/* <Avatar size={24} src={item.favicon} style={{ flex: 'none' }} /> */}
|
|
||||||
{/* <Flexbox>
|
|
||||||
<div style={{ fontSize: 15, fontWeight: 600 }}>{item.name}</div>
|
|
||||||
<div style={{ opacity: 0.6 }}>{item.name}</div>
|
|
||||||
</Flexbox> */}
|
|
||||||
{/* <Card key={item.id} className="w-[300px] overflow-hidden cursor-pointer" onClick={() => onSelect(item)}>
|
|
||||||
<CardHeader>
|
|
||||||
<CardTitle className=" flex items-center gap-2">
|
|
||||||
<div className={"rounded-full w-[30px] h-[30px] " + gradients[parseInt(item.id, 16) % gradients.length]}></div>
|
|
||||||
<span>{item.name}</span>
|
|
||||||
</CardTitle>
|
|
||||||
<CardDescription className="">{item.description}</CardDescription>
|
|
||||||
</CardHeader>
|
|
||||||
</Card> */}
|
|
||||||
<div className="npcInfoItemBg">
|
<div className="npcInfoItemBg">
|
||||||
<span>
|
<span>
|
||||||
<span>
|
<span>
|
||||||
@@ -68,16 +115,11 @@ export default function SkillChatSheet({ children, onSelect }) {
|
|||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
{/* {(item.id == "06b1d374-ba97-46e6-8782-c56dec8dcc17" || item.id == "ed8e21f6-9757-43d0-b076-8c6e81bb0580") && <img src={robot2} className="w-[42px]" alt=""/>}
|
|
||||||
{item.id == "ca214b41-2b73-4585-b172-bf1e546cf6ec" && <img src={robot3} className="w-[42px]" alt=""/>}
|
|
||||||
{(item.id != "06b1d374-ba97-46e6-8782-c56dec8dcc17" && item.id != "ed8e21f6-9757-43d0-b076-8c6e81bb0580" && item.id != "ca214b41-2b73-4585-b172-bf1e546cf6ec") && <img src={robot} className="w-[42px]" alt=""/>} */}
|
|
||||||
{/* <img src={robot} className="w-[42px]" alt=""/> */}
|
|
||||||
<TitleIconBg className="w-[40px] h-[40px] min-w-[40px]" img={item.avatar_img} id={item.avatar_color ? item.avatar_color : item.id} ><img src={item.avatar_img ? item.avatar_img : (item.flow_type == "assistant" ? npcIcon : nengliIcon)} alt="" /></TitleIconBg>
|
<TitleIconBg className="w-[40px] h-[40px] min-w-[40px]" img={item.avatar_img} id={item.avatar_color ? item.avatar_color : item.id} ><img src={item.avatar_img ? item.avatar_img : (item.flow_type == "assistant" ? npcIcon : nengliIcon)} alt="" /></TitleIconBg>
|
||||||
<div>
|
<div>
|
||||||
<p>{item.name}</p>
|
<p>{item.name}</p>
|
||||||
<div>
|
<div>
|
||||||
{/* <div>绘画类</div>
|
|
||||||
<div>绘画类</div> */}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -100,33 +142,32 @@ export default function SkillChatSheet({ children, onSelect }) {
|
|||||||
<div className="w-[280px] p-6">
|
<div className="w-[280px] p-6">
|
||||||
<SheetTitle>选择对话</SheetTitle>
|
<SheetTitle>选择对话</SheetTitle>
|
||||||
<SheetDescription className="text-[#999999]">选择一个您想使用的上线NPC或能力</SheetDescription>
|
<SheetDescription className="text-[#999999]">选择一个您想使用的上线NPC或能力</SheetDescription>
|
||||||
<SearchInput value={keyword} placeholder="搜索" className="my-6" onChange={(e) => setKeyword(e.target.value)} />
|
{/* <SearchInput value={keyword} placeholder="搜索" className="my-6" onChange={(e) => setKeyword(e.target.value)} /> */}
|
||||||
|
<SearchInput placeholder="搜索" className="my-6 npcInput3" onChange={handleSearch} />
|
||||||
|
<div className="flex flex-wrap duihuaTab">
|
||||||
|
{/* @ts-ignore */}
|
||||||
|
{user.role === 'admin' && <img src={biaoqianPaixu} alt="" className="h-[20px] w-[20px] cursor-pointer mr-[13px]" onClick={() => setMarkLabelOpen(true)} />}
|
||||||
|
{/* <Button variant={chooseId ? "outline" : "default"} className="mb-2 mr-5" size="sm"
|
||||||
|
onClick={() => { setChooseId(null); loadData(false) }}>全部</Button> */}
|
||||||
|
<div className={`h-[20px] px-[13px] mr-[13px] text-[9px] flex justify-center items-center border-radius-14 cursor-pointer ${chooseId ? "text-[#999999] bg-[#333333]" : "text-[#333333] bg-[#FFD54C]"}`} onClick={() => { setChooseId(null); loadData(false) }}>全部</div>
|
||||||
|
{
|
||||||
|
labels.map((l, index) => index <= 11 &&
|
||||||
|
// <Button
|
||||||
|
// size="sm"
|
||||||
|
// onClick={() => handleTagSearch(l.value)}
|
||||||
|
// className="mr-4 mb-2" variant={l.value === chooseId ? "default" : "outline"}>{l.label}
|
||||||
|
// </Button>
|
||||||
|
<div className={`h-[20px] px-[13px] mb-[10px] mr-[13px] text-[9px] flex justify-center items-center border-radius-14 cursor-pointer ${l.value === chooseId ? "text-[#333333] bg-[#FFD54C]" : "text-[#999999] bg-[#333333]"}`} onClick={() => handleTagSearch(l.value)}>{l.label}</div>)
|
||||||
|
}
|
||||||
|
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="w-[690px] overflow-y-auto bg-[#000000] scrollbar-hide skillSheet">
|
<div className="w-[690px] overflow-y-auto bg-[#000000] scrollbar-hide skillSheet">
|
||||||
{/* {
|
|
||||||
options.length ? options.map((flow, i) => (
|
|
||||||
<CardComponent key={i}
|
|
||||||
id={i + 1}
|
|
||||||
data={flow}
|
|
||||||
title={flow.name}
|
|
||||||
description={flow.desc}
|
|
||||||
type="sheet"
|
|
||||||
icon={flow.flow_type === 'flow' ? SkillIcon : AssistantIcon}
|
|
||||||
footer={
|
|
||||||
<Badge className={`absolute right-0 bottom-0 rounded-none rounded-br-md ${flow.flow_type === 'flow' && 'bg-gray-950'}`}>
|
|
||||||
{flow.flow_type === 'flow' ? '技能' : 'NPC'}
|
|
||||||
</Badge>
|
|
||||||
}
|
|
||||||
onClick={() => { onSelect(flow); setOpen(false) }}
|
|
||||||
/>
|
|
||||||
)) : <div className="flex flex-col items-center justify-center pt-40 w-full">
|
|
||||||
<p className="text-sm text-muted-foreground mb-3">{t('build.empty')}</p>
|
|
||||||
<Button className="w-[200px]" onClick={() => navigate('/build/assist')}>{t('build.onlineSA')}</Button>
|
|
||||||
</div>
|
|
||||||
} */}
|
|
||||||
<SpotlightCard items={options} renderItem={render} className="mt-[14px] skillSheetSpotlightCard"/>
|
<SpotlightCard items={options} renderItem={render} className="mt-[14px] skillSheetSpotlightCard"/>
|
||||||
|
{flag && <LoadMore onScrollLoad={handleLoadMore} />}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<MarkLabel open={markLabelOpen} home={labels} onClose={handleClose}></MarkLabel>
|
||||||
</SheetContent>
|
</SheetContent>
|
||||||
</Sheet>
|
</Sheet>
|
||||||
};
|
};
|
||||||
|
|||||||
BIN
src/components/bs-icons/.DS_Store
vendored
Normal file
@@ -1,11 +1,11 @@
|
|||||||
<svg width="28" height="28" viewBox="0 0 28 28" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
|
<svg width="28" height="28" viewBox="0 0 28 28" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
|
||||||
<g id="Group 468">
|
<g id="Group 468">
|
||||||
<g id="Group 466">
|
<g id="Group 466">
|
||||||
<rect id="Rectangle 221" x="8" y="9" width="12" height="1.71429" rx="0.857143" fill="#9CA3BA" />
|
<rect id="Rectangle 221" x="8" y="9" width="12" height="1.71429" rx="0.857143" fill="#666" />
|
||||||
<rect id="Rectangle 222" x="11.4285" y="7" width="5.14286" height="1.71429" rx="0.857143" fill="#9CA3BA" />
|
<rect id="Rectangle 222" x="11.4285" y="7" width="5.14286" height="1.71429" rx="0.857143" fill="#666" />
|
||||||
<path id="Subtract" fill-rule="evenodd" clip-rule="evenodd"
|
<path id="Subtract" fill-rule="evenodd" clip-rule="evenodd"
|
||||||
d="M9 12C9 11.4477 9.44772 11 10 11H18C18.5523 11 19 11.4477 19 12V19C19 20.1046 18.1046 21 17 21H11C9.89543 21 9 20.1046 9 19V12ZM12.7143 14C13.1877 14 13.5714 14.3838 13.5714 14.8571V17.1429C13.5714 17.6162 13.1877 18 12.7143 18C12.2409 18 11.8572 17.6162 11.8572 17.1429V14.8571C11.8572 14.3838 12.2409 14 12.7143 14ZM16.1429 14.8571C16.1429 14.3838 15.7591 14 15.2857 14C14.8123 14 14.4286 14.3838 14.4286 14.8571V17.1429C14.4286 17.6162 14.8123 18 15.2857 18C15.7591 18 16.1429 17.6162 16.1429 17.1429V14.8571Z"
|
d="M9 12C9 11.4477 9.44772 11 10 11H18C18.5523 11 19 11.4477 19 12V19C19 20.1046 18.1046 21 17 21H11C9.89543 21 9 20.1046 9 19V12ZM12.7143 14C13.1877 14 13.5714 14.3838 13.5714 14.8571V17.1429C13.5714 17.6162 13.1877 18 12.7143 18C12.2409 18 11.8572 17.6162 11.8572 17.1429V14.8571C11.8572 14.3838 12.2409 14 12.7143 14ZM16.1429 14.8571C16.1429 14.3838 15.7591 14 15.2857 14C14.8123 14 14.4286 14.3838 14.4286 14.8571V17.1429C14.4286 17.6162 14.8123 18 15.2857 18C15.7591 18 16.1429 17.6162 16.1429 17.1429V14.8571Z"
|
||||||
fill="#9CA3BA" />
|
fill="#666" />
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.0 KiB |
@@ -5,5 +5,5 @@ export const DelIcon = forwardRef<
|
|||||||
SVGSVGElement & { className: any },
|
SVGSVGElement & { className: any },
|
||||||
React.PropsWithChildren<{ className?: string }>
|
React.PropsWithChildren<{ className?: string }>
|
||||||
>((props, ref) => {
|
>((props, ref) => {
|
||||||
return <Del ref={ref} {...props} />;
|
return <Del className="text-[red]" ref={ref} {...props} />;
|
||||||
});
|
});
|
||||||
|
|||||||
7
src/components/bs-icons/down/DropDown.svg
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
<svg t="1718350872747" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2516"
|
||||||
|
width="20" height="20">
|
||||||
|
<path
|
||||||
|
d="M511.36 712.32L240.853333 441.813333l30.293334-30.293333 241.493333 241.493333 262.186667-241.92 29.013333 31.146667-292.48 270.08z"
|
||||||
|
p-id="2517">
|
||||||
|
</path>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 342 B |
9
src/components/bs-icons/down/index.tsx
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
import React, { forwardRef } from "react";
|
||||||
|
import { ReactComponent as DropDown } from "./DropDown.svg";
|
||||||
|
|
||||||
|
export const DropDownIcon = forwardRef<
|
||||||
|
SVGSVGElement & { className: any },
|
||||||
|
React.PropsWithChildren<{ className?: string }>
|
||||||
|
>((props, ref) => {
|
||||||
|
return <DropDown ref={ref} {...props} />;
|
||||||
|
});
|
||||||
@@ -1,3 +1,3 @@
|
|||||||
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
<path d="M4.61375 12.536H9.09375V15H2.05375V3.8H9.01375V6.264H4.61375V8.12H8.61375V10.552H4.61375V12.536ZM15.1461 6.776C16.7621 6.776 18.1381 7.928 18.1381 10.088V15H15.7381V10.44C15.7381 9.448 15.1141 8.984 14.3461 8.984C13.4661 8.984 12.8581 9.496 12.8581 10.632V15H10.4581V7H12.8581V7.752C13.2901 7.16 14.0901 6.776 15.1461 6.776Z" fill="black"/>
|
<path d="M4.61375 12.536H9.09375V15H2.05375V3.8H9.01375V6.264H4.61375V8.12H8.61375V10.552H4.61375V12.536ZM15.1461 6.776C16.7621 6.776 18.1381 7.928 18.1381 10.088V15H15.7381V10.44C15.7381 9.448 15.1141 8.984 14.3461 8.984C13.4661 8.984 12.8581 9.496 12.8581 10.632V15H10.4581V7H12.8581V7.752C13.2901 7.16 14.0901 6.776 15.1461 6.776Z" fill="currentColor"/>
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 453 B After Width: | Height: | Size: 460 B |
6
src/components/bs-icons/filter/Filter.svg
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<svg t="1716545040041" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"
|
||||||
|
p-id="2664" width="18" height="18">
|
||||||
|
<path d="M349 838c0 17.7 14.2 32 31.8 32h262.4c17.6 0 31.8-14.3 31.8-32V642H349v196z m531.1-684H143.9c-24.5 0-39.8 26.7-27.5 48l221.3 376h348.8l221.3-376c12.1-21.3-3.2-48-27.7-48z"
|
||||||
|
p-id="2665" fill="currentColor">
|
||||||
|
</path>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 375 B |
9
src/components/bs-icons/filter/index.tsx
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
import React, { forwardRef } from "react";
|
||||||
|
import { ReactComponent as Filter } from "./Filter.svg";
|
||||||
|
|
||||||
|
export const FilterIcon = forwardRef<
|
||||||
|
SVGSVGElement & { className: any },
|
||||||
|
React.PropsWithChildren<{ className?: string }>
|
||||||
|
>((props, ref) => {
|
||||||
|
return <Filter ref={ref} {...props} />;
|
||||||
|
});
|
||||||
40
src/components/bs-icons/index.ts
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
export { AddToIcon } from './addTo';
|
||||||
|
export { ApplicationIcon } from './menu/application';
|
||||||
|
export { AssistantIcon } from './assistant';
|
||||||
|
export { AvatarIcon } from './avatar';
|
||||||
|
export { BookOpenIcon } from './bookOpen';
|
||||||
|
export { ClearIcon } from './clear';
|
||||||
|
export { DelIcon } from './del';
|
||||||
|
export { EnIcon } from './en';
|
||||||
|
export { FilterIcon } from './filter';
|
||||||
|
export { FormIcon } from './form';
|
||||||
|
export { GithubIcon } from './github';
|
||||||
|
export { GoIcon } from './go';
|
||||||
|
export { KnowledgeIcon } from './knowledge';
|
||||||
|
export { LoadIcon } from './loading';
|
||||||
|
export { ModelIcon } from './menu/model';
|
||||||
|
export { MoonIcon } from './moon';
|
||||||
|
export { MoveOneIcon } from './moveOne';
|
||||||
|
export { NewApplicationIcon } from './newApplication';
|
||||||
|
export { WordIcon } from './office';
|
||||||
|
export { PlusIcon } from './plus';
|
||||||
|
export { PlusBoxIcon } from './plusBox';
|
||||||
|
export { QuestionMarkIcon } from './questionMark';
|
||||||
|
export { QuitIcon } from './quit';
|
||||||
|
export { SaveIcon } from './save';
|
||||||
|
export { SearchIcon } from './search';
|
||||||
|
export { SendIcon } from './send';
|
||||||
|
export { SettingIcon } from './setting';
|
||||||
|
export { SkillIcon } from './skill';
|
||||||
|
export { SystemIcon } from './menu/system';
|
||||||
|
export { TabIcon } from './tab';
|
||||||
|
export { TechnologyIcon } from './menu/technology';
|
||||||
|
export { ThunmbIcon } from './thumbs';
|
||||||
|
export { TipIcon } from './tip';
|
||||||
|
export { ToastIcon } from './toast';
|
||||||
|
export { ToolIcon } from './tool';
|
||||||
|
export { UploadIcon } from './upload';
|
||||||
|
export { UserIcon } from './user';
|
||||||
|
export { LogIcon } from './menu/log';
|
||||||
|
export { EvaluatingIcon } from './menu/evaluation';
|
||||||
|
export { DropDownIcon } from './down'
|
||||||
|
Before Width: | Height: | Size: 821 B After Width: | Height: | Size: 821 B |
6
src/components/bs-icons/menu/evaluation/Evaluation.svg
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<svg t="1719471279077" class="icon" viewBox="-160 -160 1344 1344" version="1.1" xmlns="http://www.w3.org/2000/svg" width="24"
|
||||||
|
height="24">
|
||||||
|
<path
|
||||||
|
d="M887.994182 46.545455H146.245818C95.976727 46.545455 46.545455 88.110545 46.545455 138.612364V512h183.761454L298.821818 446.370909c7.68-7.68 18.618182-9.448727 29.230546-7.447273a33.512727 33.512727 0 0 1 23.738181 20.014546l83.409455 196.096 129.117091-389.259637a33.186909 33.186909 0 0 1 30.72-22.202181c15.266909 0.325818 27.508364 6.656 31.464727 20.573091L697.809455 512h92.625454a31.650909 31.650909 0 1 1 0 63.488h-117.201454c-14.522182 0-27.275636-5.585455-31.278546-19.549091l-49.198545-171.054545-118.784 371.712c-4.282182 12.8-25.460364 22.248727-25.460364 22.807272v0.279273c-21.131636 0-30.068364-7.586909-35.281455-19.549091l-100.258909-230.4-45.102545 40.308364c-6.050909 6.097455-15.406545 5.445818-24.064 5.445818H46.545455v309.248C46.545455 935.284364 96.023273 977.454545 146.245818 977.454545h741.748364c50.269091 0 89.460364-42.170182 89.460363-92.718545V138.612364C977.454545 88.110545 938.216727 46.545455 887.994182 46.545455z"
|
||||||
|
fill="currentColor"></path>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.1 KiB |
9
src/components/bs-icons/menu/evaluation/index.tsx
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
import React, { forwardRef } from "react";
|
||||||
|
import { ReactComponent as Icon } from "./Evaluation.svg";
|
||||||
|
|
||||||
|
export const EvaluatingIcon = forwardRef<
|
||||||
|
SVGSVGElement & { className: any },
|
||||||
|
React.PropsWithChildren<{ className?: string }>
|
||||||
|
>(({ className, ...props }, ref) => {
|
||||||
|
return <Icon ref={ref} {...props} className={className || ''} />;
|
||||||
|
});
|
||||||
6
src/components/bs-icons/menu/log/Log.svg
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<svg t="1717680812187" class="icon" viewBox="-100 -100 1224 1224" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7890"
|
||||||
|
width="24" height="24">
|
||||||
|
<path
|
||||||
|
d="M511.999269 0c4.608 0 9.289143 1.755429 13.165714 5.046857 42.422857 36.644571 185.051429 144.237714 405.650286 150.454857 11.117714 0.438857 20.187429 9.508571 20.041142 21.065143V605.622857C950.856411 797.622857 668.232411 1024 511.999269 1024c-160.621714 0-438.857143-226.377143-438.857143-418.377143V176.347429c0-11.483429 9.069714-20.626286 20.187428-20.918858C314.001554 149.284571 456.703269 41.691429 498.833554 4.900571A20.626286 20.626286 0 0 1 511.999269 0z m-24.356572 283.209143l-130.194286 270.336h204.214858L487.496411 712.704l75.044572 34.962286 129.024-277.065143H489.324983l72.996571-151.552-74.678857-35.84z"
|
||||||
|
fill="currentColor"></path>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 846 B |
9
src/components/bs-icons/menu/log/index.tsx
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
import React, { forwardRef } from "react";
|
||||||
|
import { ReactComponent as Log } from "./Log.svg";
|
||||||
|
|
||||||
|
export const LogIcon = forwardRef<
|
||||||
|
SVGSVGElement & { className: any },
|
||||||
|
React.PropsWithChildren<{ className?: string }>
|
||||||
|
>(({ className, ...props }, ref) => {
|
||||||
|
return <Log ref={ref} {...props} className={className || ''} />;
|
||||||
|
});
|
||||||
|
Before Width: | Height: | Size: 750 B After Width: | Height: | Size: 750 B |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 562 B After Width: | Height: | Size: 562 B |
@@ -1,10 +1,13 @@
|
|||||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
<g id="Group 541">
|
<g id="Group 541">
|
||||||
<path id="Rectangle 247" d="M0 4C0 3.44772 0.447715 3 1 3H18C21.3137 3 24 5.68629 24 9V15C24 18.3137 21.3137 21 18 21H6C2.68629 21 0 18.3137 0 15V4Z" fill="#111111"/>
|
<path id="Rectangle 247"
|
||||||
<g id="Group 540">
|
d="M0 4C0 3.44772 0.447715 3 1 3H18C21.3137 3 24 5.68629 24 9V15C24 18.3137 21.3137 21 18 21H6C2.68629 21 0 18.3137 0 15V4Z"
|
||||||
<g id="Group 414">
|
fill="#111111" />
|
||||||
<path id="Union" fill-rule="evenodd" clip-rule="evenodd" d="M13 11V8H11L11 11H8V13H11L11 16H13V13H16V11H13Z" fill="white"/>
|
<g id="Group 540">
|
||||||
</g>
|
<g id="Group 414">
|
||||||
</g>
|
<path id="Union" fill-rule="evenodd" clip-rule="evenodd"
|
||||||
</g>
|
d="M13 11V8H11L11 11H8V13H11L11 16H13V13H16V11H13Z" fill="white" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 466 B After Width: | Height: | Size: 583 B |
2
src/components/bs-icons/prompt/Prompt.svg
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
<svg t="1721124907716" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6119"
|
||||||
|
width="20" height="20"><path d="M366.8992 790.2208c0 22.528 18.432 40.96 40.96 40.96h208.384c22.528 0 40.96-18.432 40.96-40.96v-23.9616H366.8992v23.9616zM512 115.3024c-166.7072 0-301.8752 135.168-301.8752 301.8752 0 114.176 63.3856 213.4016 156.7744 264.8064v43.3152h290.304V681.984c93.3888-51.3024 156.7744-150.6304 156.7744-264.8064-0.1024-166.7072-135.2704-301.8752-301.9776-301.8752zM592.6912 862.3104H431.3088c-11.264 0-20.48 9.216-20.48 20.48v5.4272c0 11.264 9.216 20.48 20.48 20.48h161.28c11.264 0 20.48-9.216 20.48-20.48v-5.4272c0.1024-11.264-9.1136-20.48-20.3776-20.48z" p-id="6120" fill="#8a8a8a"></path></svg>
|
||||||
|
After Width: | Height: | Size: 742 B |
10
src/components/bs-icons/prompt/index.tsx
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
import React, { forwardRef } from "react";
|
||||||
|
import { ReactComponent as Prompt } from "./Prompt.svg";
|
||||||
|
|
||||||
|
export const PromptIcon = forwardRef<
|
||||||
|
SVGSVGElement & { className: any },
|
||||||
|
React.PropsWithChildren<{ className?: string }>
|
||||||
|
>(({ className, ...props }, ref) => {
|
||||||
|
const _className = 'transition text-[#999] ' + (className || '')
|
||||||
|
return <Prompt ref={ref} {...props} className={_className} />;
|
||||||
|
});
|
||||||
@@ -5,6 +5,6 @@ export const QuestionMarkIcon = forwardRef<
|
|||||||
SVGSVGElement & { className: any },
|
SVGSVGElement & { className: any },
|
||||||
React.PropsWithChildren<{ className?: string }>
|
React.PropsWithChildren<{ className?: string }>
|
||||||
>(({ className, ...props }, ref) => {
|
>(({ className, ...props }, ref) => {
|
||||||
const _className = 'transition text-gray-950 ' + (className || '')
|
const _className = 'transition text-[#999] ' + (className || '')
|
||||||
return <QuestionMark ref={ref} {...props} className={_className} />;
|
return <QuestionMark ref={ref} {...props} className={_className} />;
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<g id="Group 542">
|
|
||||||
<g id="Group 417">
|
|
||||||
<path id="Rectangle 186" d="M10 5H7.2C6.0799 5 5.51984 5 5.09202 5.21799C4.71569 5.40973 4.40973 5.71569 4.21799 6.09202C4 6.51984 4 7.07989 4 8.2V15.8C4 16.9201 4 17.4802 4.21799 17.908C4.40973 18.2843 4.71569 18.5903 5.09202 18.782C5.51984 19 6.07989 19 7.2 19H10" stroke="white" stroke-width="2"/>
|
|
||||||
<path id="Vector 1" d="M10 12H17.5M15 8L19 12L15 16" stroke="white" stroke-width="2" stroke-linejoin="round"/>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 563 B |
@@ -1,8 +1,11 @@
|
|||||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
<g id="Group 542">
|
<g id="Group 542">
|
||||||
<g id="Group 417">
|
<g id="Group 417">
|
||||||
<path id="Rectangle 186" d="M10 5H7.2C6.0799 5 5.51984 5 5.09202 5.21799C4.71569 5.40973 4.40973 5.71569 4.21799 6.09202C4 6.51984 4 7.07989 4 8.2V15.8C4 16.9201 4 17.4802 4.21799 17.908C4.40973 18.2843 4.71569 18.5903 5.09202 18.782C5.51984 19 6.07989 19 7.2 19H10" stroke="black" stroke-width="2"/>
|
<path id="Rectangle 186"
|
||||||
<path id="Vector 1" d="M10 12H17.5M15 8L19 12L15 16" stroke="black" stroke-width="2" stroke-linejoin="round"/>
|
d="M10 5H7.2C6.0799 5 5.51984 5 5.09202 5.21799C4.71569 5.40973 4.40973 5.71569 4.21799 6.09202C4 6.51984 4 7.07989 4 8.2V15.8C4 16.9201 4 17.4802 4.21799 17.908C4.40973 18.2843 4.71569 18.5903 5.09202 18.782C5.51984 19 6.07989 19 7.2 19H10"
|
||||||
</g>
|
stroke="currentColor" stroke-width="2" />
|
||||||
</g>
|
<path id="Vector 1" d="M10 12H17.5M15 8L19 12L15 16" stroke="currentColor" stroke-width="2"
|
||||||
|
stroke-linejoin="round" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 563 B After Width: | Height: | Size: 674 B |
@@ -1,17 +1,9 @@
|
|||||||
import React, { forwardRef } from "react";
|
import React, { forwardRef } from "react";
|
||||||
import { ReactComponent as Quit } from "./Quit.svg";
|
import { ReactComponent as Quit } from "./Quit.svg";
|
||||||
import { ReactComponent as QuitDark } from "./Quit-dark.svg";
|
|
||||||
|
|
||||||
export const QuitIcon = forwardRef<
|
export const QuitIcon = forwardRef<
|
||||||
SVGSVGElement & { className: any },
|
SVGSVGElement & { className: any },
|
||||||
React.PropsWithChildren<{ className?: string }>
|
React.PropsWithChildren<{ className?: string }>
|
||||||
>(({className,...props}, ref) => {
|
>(({ className, ...props }, ref) => {
|
||||||
return <Quit ref={ref} {...props} className={className || ''}/>;
|
return <Quit ref={ref} {...props} className={className || ''} />;
|
||||||
});
|
|
||||||
|
|
||||||
export const QuitIconDark = forwardRef<
|
|
||||||
SVGSVGElement & { className: any },
|
|
||||||
React.PropsWithChildren<{ className?: string }>
|
|
||||||
>(({className,...props}, ref) => {
|
|
||||||
return <QuitDark ref={ref} {...props} className={className || ''}/>;
|
|
||||||
});
|
});
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
<g id="Group 459">
|
<g id="Group 459">
|
||||||
<g id="Group 458">
|
<g id="Group 458">
|
||||||
<circle id="Ellipse 10" cx="9" cy="9" r="6" stroke="black" stroke-width="2" />
|
<circle id="Ellipse 10" cx="9" cy="9" r="6" stroke="currentColor" stroke-width="2" />
|
||||||
<path id="Vector 4" d="M13 13L17 17" stroke="black" stroke-width="2" stroke-linejoin="round" />
|
<path id="Vector 4" d="M13 13L17 17" stroke="currentColor" stroke-width="2" stroke-linejoin="round" />
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 373 B After Width: | Height: | Size: 387 B |
@@ -1,8 +1,8 @@
|
|||||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
<g id="Group 488">
|
<g id="Group 488">
|
||||||
<rect id="Rectangle 231" x="5.75" y="5.75" width="12.5" height="13.5" rx="2.25" fill="white"
|
<rect id="Rectangle 231" x="5.75" y="5.75" width="12.5" height="13.5" rx="2.25" fill="transparent"
|
||||||
|
stroke="currentColor" stroke-width="1.5" />
|
||||||
|
<rect id="Rectangle 232" x="8.75" y="4.75" width="6.5" height="3.5" rx="1.25" fill="transparent"
|
||||||
stroke="currentColor" stroke-width="1.5" />
|
stroke="currentColor" stroke-width="1.5" />
|
||||||
<rect id="Rectangle 232" x="8.75" y="4.75" width="6.5" height="3.5" rx="1.25" fill="white" stroke="currentColor"
|
|
||||||
stroke-width="1.5" />
|
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 446 B After Width: | Height: | Size: 458 B |
@@ -1,6 +0,0 @@
|
|||||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<g id="Group 488">
|
|
||||||
<rect id="Rectangle 231" x="5.75" y="5.75" width="12.5" height="13.5" rx="2.25" fill="#1B1B1B" stroke="#898C97" stroke-width="1.5"/>
|
|
||||||
<rect id="Rectangle 232" x="8.75" y="4.75" width="6.5" height="3.5" rx="1.25" fill="#1B1B1B" stroke="#898C97" stroke-width="1.5"/>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 391 B |
@@ -1,11 +1,8 @@
|
|||||||
import React, { forwardRef } from "react";
|
import React, { forwardRef } from "react";
|
||||||
import { ReactComponent as copy } from "./copy.svg";
|
import { ReactComponent as copy } from "./copy.svg";
|
||||||
import { ReactComponent as copyDark } from "./copyDark.svg";
|
|
||||||
import { ReactComponent as like } from "./like.svg";
|
import { ReactComponent as like } from "./like.svg";
|
||||||
import { ReactComponent as likeDark } from "./likeDark.svg";
|
|
||||||
import { ReactComponent as unLike } from "./unLike.svg";
|
import { ReactComponent as unLike } from "./unLike.svg";
|
||||||
import { ReactComponent as unLikeDark } from "./unLikeDark.svg";
|
import { cname } from "@/components/bs-ui/utils";
|
||||||
|
|
||||||
|
|
||||||
type ThunmbIconType = 'copy' | 'like' | 'unLike' | 'copyDark' | 'likeDark' | 'unLikeDark';
|
type ThunmbIconType = 'copy' | 'like' | 'unLike' | 'copyDark' | 'likeDark' | 'unLikeDark';
|
||||||
|
|
||||||
@@ -15,13 +12,10 @@ export const ThunmbIcon = forwardRef<
|
|||||||
>((props, ref) => {
|
>((props, ref) => {
|
||||||
const comps = {
|
const comps = {
|
||||||
'copy': copy,
|
'copy': copy,
|
||||||
'copyDark': copyDark,
|
|
||||||
'like': like,
|
'like': like,
|
||||||
'likeDark': likeDark,
|
|
||||||
'unLike': unLike,
|
'unLike': unLike,
|
||||||
'unLikeDark': unLikeDark,
|
|
||||||
}
|
}
|
||||||
const Comp = comps[props.type];
|
const Comp = comps[props.type];
|
||||||
const _className = 'transition text-gray-400 ' + (props.className || '')
|
const _className = cname('transition text-gray-400 hover:text-gray-500', props.className)
|
||||||
return <Comp ref={ref} {...props} className={_className} />;
|
return <Comp ref={ref} {...props} className={_className} />;
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,15 +1,15 @@
|
|||||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
<g id="Group 489">
|
<g id="Group 489">
|
||||||
<rect id="Rectangle 231" x="4.75" y="9.75" width="3.5" height="8.5" rx="1.75" fill="white" stroke="currentColor"
|
<rect id="Rectangle 231" x="4.75" y="9.75" width="3.5" height="8.5" rx="1.75" fill="transparent"
|
||||||
stroke-width="1.5" />
|
stroke="currentColor" stroke-width="1.5" />
|
||||||
<g id="Union">
|
<g id="Union">
|
||||||
<mask id="path-2-inside-1_399_44" fill="white">
|
<mask id="path-2-inside-1_399_44" fill="#fff">
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||||
d="M13.2231 4C12.1561 4 11.1694 4.56673 10.6318 5.48839L8.89567 8.46456C8.05682 8.99647 7.5 9.93321 7.5 11V16C7.5 17.6569 8.84315 19 10.5 19H14.6983C16.3803 19 17.8826 17.9477 18.4575 16.367L20.2802 11.3544C20.8731 9.7239 19.6657 8 17.9307 8H14.5V5C14.5 4.44772 14.0523 4 13.5 4H13.2231Z" />
|
d="M13.2231 4C12.1561 4 11.1694 4.56673 10.6318 5.48839L8.89567 8.46456C8.05682 8.99647 7.5 9.93321 7.5 11V16C7.5 17.6569 8.84315 19 10.5 19H14.6983C16.3803 19 17.8826 17.9477 18.4575 16.367L20.2802 11.3544C20.8731 9.7239 19.6657 8 17.9307 8H14.5V5C14.5 4.44772 14.0523 4 13.5 4H13.2231Z" />
|
||||||
</mask>
|
</mask>
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||||
d="M13.2231 4C12.1561 4 11.1694 4.56673 10.6318 5.48839L8.89567 8.46456C8.05682 8.99647 7.5 9.93321 7.5 11V16C7.5 17.6569 8.84315 19 10.5 19H14.6983C16.3803 19 17.8826 17.9477 18.4575 16.367L20.2802 11.3544C20.8731 9.7239 19.6657 8 17.9307 8H14.5V5C14.5 4.44772 14.0523 4 13.5 4H13.2231Z"
|
d="M13.2231 4C12.1561 4 11.1694 4.56673 10.6318 5.48839L8.89567 8.46456C8.05682 8.99647 7.5 9.93321 7.5 11V16C7.5 17.6569 8.84315 19 10.5 19H14.6983C16.3803 19 17.8826 17.9477 18.4575 16.367L20.2802 11.3544C20.8731 9.7239 19.6657 8 17.9307 8H14.5V5C14.5 4.44772 14.0523 4 13.5 4H13.2231Z"
|
||||||
fill="white" />
|
fill="transparent" />
|
||||||
<path
|
<path
|
||||||
d="M10.6318 5.48839L9.33611 4.73258V4.73258L10.6318 5.48839ZM8.89567 8.46456L9.69893 9.73136L10.0073 9.5358L10.1913 9.22037L8.89567 8.46456ZM18.4575 16.367L19.8672 16.8796V16.8796L18.4575 16.367ZM20.2802 11.3544L21.6899 11.867L20.2802 11.3544ZM14.5 8H13V9.5H14.5V8ZM11.9274 6.24419C12.1963 5.78337 12.6896 5.5 13.2231 5.5V2.5C11.6226 2.5 10.1426 3.3501 9.33611 4.73258L11.9274 6.24419ZM10.1913 9.22037L11.9274 6.24419L9.33611 4.73258L7.6 7.70876L10.1913 9.22037ZM9 11C9 10.4682 9.27563 9.99977 9.69893 9.73136L8.09241 7.19777C6.83801 7.99317 6 9.3982 6 11H9ZM9 16V11H6V16H9ZM10.5 17.5C9.67157 17.5 9 16.8284 9 16H6C6 18.4853 8.01472 20.5 10.5 20.5V17.5ZM14.6983 17.5H10.5V20.5H14.6983V17.5ZM17.0478 15.8544C16.6885 16.8423 15.7496 17.5 14.6983 17.5V20.5C17.0111 20.5 19.0768 19.0531 19.8672 16.8796L17.0478 15.8544ZM18.8705 10.8417L17.0478 15.8544L19.8672 16.8796L21.6899 11.867L18.8705 10.8417ZM17.9307 9.5C18.6247 9.5 19.1077 10.1896 18.8705 10.8417L21.6899 11.867C22.6386 9.25824 20.7066 6.5 17.9307 6.5V9.5ZM14.5 9.5H17.9307V6.5H14.5V9.5ZM13 5V8H16V5H13ZM13.5 5.5C13.2239 5.5 13 5.27614 13 5H16C16 3.61929 14.8807 2.5 13.5 2.5V5.5ZM13.2231 5.5H13.5V2.5H13.2231V5.5Z"
|
d="M10.6318 5.48839L9.33611 4.73258V4.73258L10.6318 5.48839ZM8.89567 8.46456L9.69893 9.73136L10.0073 9.5358L10.1913 9.22037L8.89567 8.46456ZM18.4575 16.367L19.8672 16.8796V16.8796L18.4575 16.367ZM20.2802 11.3544L21.6899 11.867L20.2802 11.3544ZM14.5 8H13V9.5H14.5V8ZM11.9274 6.24419C12.1963 5.78337 12.6896 5.5 13.2231 5.5V2.5C11.6226 2.5 10.1426 3.3501 9.33611 4.73258L11.9274 6.24419ZM10.1913 9.22037L11.9274 6.24419L9.33611 4.73258L7.6 7.70876L10.1913 9.22037ZM9 11C9 10.4682 9.27563 9.99977 9.69893 9.73136L8.09241 7.19777C6.83801 7.99317 6 9.3982 6 11H9ZM9 16V11H6V16H9ZM10.5 17.5C9.67157 17.5 9 16.8284 9 16H6C6 18.4853 8.01472 20.5 10.5 20.5V17.5ZM14.6983 17.5H10.5V20.5H14.6983V17.5ZM17.0478 15.8544C16.6885 16.8423 15.7496 17.5 14.6983 17.5V20.5C17.0111 20.5 19.0768 19.0531 19.8672 16.8796L17.0478 15.8544ZM18.8705 10.8417L17.0478 15.8544L19.8672 16.8796L21.6899 11.867L18.8705 10.8417ZM17.9307 9.5C18.6247 9.5 19.1077 10.1896 18.8705 10.8417L21.6899 11.867C22.6386 9.25824 20.7066 6.5 17.9307 6.5V9.5ZM14.5 9.5H17.9307V6.5H14.5V9.5ZM13 5V8H16V5H13ZM13.5 5.5C13.2239 5.5 13 5.27614 13 5H16C16 3.61929 14.8807 2.5 13.5 2.5V5.5ZM13.2231 5.5H13.5V2.5H13.2231V5.5Z"
|
||||||
fill="currentColor" mask="url(#path-2-inside-1_399_44)" />
|
fill="currentColor" mask="url(#path-2-inside-1_399_44)" />
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
@@ -1,12 +0,0 @@
|
|||||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<g id="Group 489">
|
|
||||||
<rect id="Rectangle 231" x="4.75" y="9.75" width="3.5" height="8.5" rx="1.75" fill="#1B1B1B" stroke="#898C97" stroke-width="1.5"/>
|
|
||||||
<g id="Union">
|
|
||||||
<mask id="path-2-inside-1_387_497" fill="white">
|
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M13.2231 4C12.1561 4 11.1694 4.56673 10.6318 5.48839L8.89567 8.46456C8.05682 8.99647 7.5 9.93321 7.5 11V16C7.5 17.6569 8.84315 19 10.5 19H14.6983C16.3803 19 17.8826 17.9477 18.4575 16.367L20.2802 11.3544C20.8731 9.7239 19.6657 8 17.9307 8H14.5V5C14.5 4.44772 14.0523 4 13.5 4H13.2231Z"/>
|
|
||||||
</mask>
|
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M13.2231 4C12.1561 4 11.1694 4.56673 10.6318 5.48839L8.89567 8.46456C8.05682 8.99647 7.5 9.93321 7.5 11V16C7.5 17.6569 8.84315 19 10.5 19H14.6983C16.3803 19 17.8826 17.9477 18.4575 16.367L20.2802 11.3544C20.8731 9.7239 19.6657 8 17.9307 8H14.5V5C14.5 4.44772 14.0523 4 13.5 4H13.2231Z" fill="#1B1B1B"/>
|
|
||||||
<path d="M10.6318 5.48839L9.33611 4.73258V4.73258L10.6318 5.48839ZM8.89567 8.46456L9.69893 9.73136L10.0073 9.5358L10.1913 9.22037L8.89567 8.46456ZM18.4575 16.367L19.8672 16.8796V16.8796L18.4575 16.367ZM20.2802 11.3544L21.6899 11.867L20.2802 11.3544ZM14.5 8H13V9.5H14.5V8ZM11.9274 6.24419C12.1963 5.78337 12.6896 5.5 13.2231 5.5V2.5C11.6226 2.5 10.1426 3.3501 9.33611 4.73258L11.9274 6.24419ZM10.1913 9.22037L11.9274 6.24419L9.33611 4.73258L7.6 7.70876L10.1913 9.22037ZM9 11C9 10.4682 9.27563 9.99977 9.69893 9.73136L8.09241 7.19777C6.83801 7.99317 6 9.3982 6 11H9ZM9 16V11H6V16H9ZM10.5 17.5C9.67157 17.5 9 16.8284 9 16H6C6 18.4853 8.01472 20.5 10.5 20.5V17.5ZM14.6983 17.5H10.5V20.5H14.6983V17.5ZM17.0478 15.8544C16.6885 16.8423 15.7496 17.5 14.6983 17.5V20.5C17.0111 20.5 19.0768 19.0531 19.8672 16.8796L17.0478 15.8544ZM18.8705 10.8417L17.0478 15.8544L19.8672 16.8796L21.6899 11.867L18.8705 10.8417ZM17.9307 9.5C18.6247 9.5 19.1077 10.1896 18.8705 10.8417L21.6899 11.867C22.6386 9.25824 20.7066 6.5 17.9307 6.5V9.5ZM14.5 9.5H17.9307V6.5H14.5V9.5ZM13 5V8H16V5H13ZM13.5 5.5C13.2239 5.5 13 5.27614 13 5H16C16 3.61929 14.8807 2.5 13.5 2.5V5.5ZM13.2231 5.5H13.5V2.5H13.2231V5.5Z" fill="#898C97" mask="url(#path-2-inside-1_387_497)"/>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 2.2 KiB |
@@ -2,15 +2,15 @@
|
|||||||
<g id="Group 490">
|
<g id="Group 490">
|
||||||
<g id="Group 491">
|
<g id="Group 491">
|
||||||
<rect id="Rectangle 231" x="19.25" y="14.25" width="3.5" height="8.5" rx="1.75"
|
<rect id="Rectangle 231" x="19.25" y="14.25" width="3.5" height="8.5" rx="1.75"
|
||||||
transform="rotate(-180 19.25 14.25)" fill="white" stroke="currentColor" stroke-width="1.5" />
|
transform="rotate(-180 19.25 14.25)" fill="transparent" stroke="currentColor" stroke-width="1.5" />
|
||||||
<g id="Union">
|
<g id="Union">
|
||||||
<mask id="path-2-inside-1_399_50" fill="white">
|
<mask id="path-2-inside-1_399_50" fill="#fff">
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||||
d="M10.0061 20C10.9504 20 11.8395 19.5554 12.4061 18.8L14.6872 15.7586C15.7568 15.3 16.5061 14.2375 16.5061 13L16.5061 8C16.5061 6.34315 15.163 5 13.5061 5L9.30781 5C7.62579 5 6.12346 6.05227 5.54864 7.63302L3.72587 12.6456C3.13298 14.2761 4.34044 16 6.07535 16L9.17277 16L8.70017 18.8356C8.59858 19.4451 9.06862 20 9.68656 20L10.0061 20Z" />
|
d="M10.0061 20C10.9504 20 11.8395 19.5554 12.4061 18.8L14.6872 15.7586C15.7568 15.3 16.5061 14.2375 16.5061 13L16.5061 8C16.5061 6.34315 15.163 5 13.5061 5L9.30781 5C7.62579 5 6.12346 6.05227 5.54864 7.63302L3.72587 12.6456C3.13298 14.2761 4.34044 16 6.07535 16L9.17277 16L8.70017 18.8356C8.59858 19.4451 9.06862 20 9.68656 20L10.0061 20Z" />
|
||||||
</mask>
|
</mask>
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||||
d="M10.0061 20C10.9504 20 11.8395 19.5554 12.4061 18.8L14.6872 15.7586C15.7568 15.3 16.5061 14.2375 16.5061 13L16.5061 8C16.5061 6.34315 15.163 5 13.5061 5L9.30781 5C7.62579 5 6.12346 6.05227 5.54864 7.63302L3.72587 12.6456C3.13298 14.2761 4.34044 16 6.07535 16L9.17277 16L8.70017 18.8356C8.59858 19.4451 9.06862 20 9.68656 20L10.0061 20Z"
|
d="M10.0061 20C10.9504 20 11.8395 19.5554 12.4061 18.8L14.6872 15.7586C15.7568 15.3 16.5061 14.2375 16.5061 13L16.5061 8C16.5061 6.34315 15.163 5 13.5061 5L9.30781 5C7.62579 5 6.12346 6.05227 5.54864 7.63302L3.72587 12.6456C3.13298 14.2761 4.34044 16 6.07535 16L9.17277 16L8.70017 18.8356C8.59858 19.4451 9.06862 20 9.68656 20L10.0061 20Z"
|
||||||
fill="white" />
|
fill="transparent" />
|
||||||
<path
|
<path
|
||||||
d="M12.4061 18.8L13.6061 19.7L13.6061 19.7L12.4061 18.8ZM14.6872 15.7586L14.0961 14.3799L13.7277 14.5379L13.4872 14.8586L14.6872 15.7586ZM5.54864 7.63302L4.13895 7.12041L4.13895 7.12041L5.54864 7.63302ZM3.72587 12.6456L2.31618 12.133L3.72587 12.6456ZM9.17277 16L10.6524 16.2466L10.9435 14.5L9.17277 14.5L9.17277 16ZM8.70017 18.8356L10.1798 19.0822L10.1798 19.0822L8.70017 18.8356ZM11.2061 17.9C10.9228 18.2777 10.4782 18.5 10.0061 18.5L10.0061 21.5C11.4225 21.5 12.7563 20.8331 13.6061 19.7L11.2061 17.9ZM13.4872 14.8586L11.2061 17.9L13.6061 19.7L15.8872 16.6586L13.4872 14.8586ZM15.0061 13C15.0061 13.6164 14.634 14.1493 14.0961 14.3799L15.2782 17.1372C16.8796 16.4507 18.0061 14.8586 18.0061 13L15.0061 13ZM15.0061 8L15.0061 13L18.0061 13L18.0061 8L15.0061 8ZM13.5061 6.5C14.3345 6.5 15.0061 7.17157 15.0061 8L18.0061 8C18.0061 5.51472 15.9914 3.5 13.5061 3.5L13.5061 6.5ZM9.30781 6.5L13.5061 6.5L13.5061 3.5L9.30781 3.5L9.30781 6.5ZM6.95833 8.14564C7.31759 7.15767 8.25655 6.5 9.30781 6.5L9.30781 3.5C6.99503 3.5 4.92933 4.94687 4.13895 7.12041L6.95833 8.14564ZM5.13556 13.1583L6.95833 8.14564L4.13895 7.12041L2.31618 12.133L5.13556 13.1583ZM6.07535 14.5C5.38139 14.5 4.8984 13.8104 5.13556 13.1583L2.31618 12.133C1.36755 14.7418 3.29949 17.5 6.07535 17.5L6.07535 14.5ZM9.17277 14.5L6.07535 14.5L6.07535 17.5L9.17277 17.5L9.17277 14.5ZM10.1798 19.0822L10.6524 16.2466L7.69318 15.7534L7.22058 18.589L10.1798 19.0822ZM9.68656 18.5C9.99553 18.5 10.2306 18.7774 10.1798 19.0822L7.22058 18.589C6.96661 20.1128 8.14171 21.5 9.68656 21.5L9.68656 18.5ZM10.0061 18.5L9.68656 18.5L9.68656 21.5L10.0061 21.5L10.0061 18.5Z"
|
d="M12.4061 18.8L13.6061 19.7L13.6061 19.7L12.4061 18.8ZM14.6872 15.7586L14.0961 14.3799L13.7277 14.5379L13.4872 14.8586L14.6872 15.7586ZM5.54864 7.63302L4.13895 7.12041L4.13895 7.12041L5.54864 7.63302ZM3.72587 12.6456L2.31618 12.133L3.72587 12.6456ZM9.17277 16L10.6524 16.2466L10.9435 14.5L9.17277 14.5L9.17277 16ZM8.70017 18.8356L10.1798 19.0822L10.1798 19.0822L8.70017 18.8356ZM11.2061 17.9C10.9228 18.2777 10.4782 18.5 10.0061 18.5L10.0061 21.5C11.4225 21.5 12.7563 20.8331 13.6061 19.7L11.2061 17.9ZM13.4872 14.8586L11.2061 17.9L13.6061 19.7L15.8872 16.6586L13.4872 14.8586ZM15.0061 13C15.0061 13.6164 14.634 14.1493 14.0961 14.3799L15.2782 17.1372C16.8796 16.4507 18.0061 14.8586 18.0061 13L15.0061 13ZM15.0061 8L15.0061 13L18.0061 13L18.0061 8L15.0061 8ZM13.5061 6.5C14.3345 6.5 15.0061 7.17157 15.0061 8L18.0061 8C18.0061 5.51472 15.9914 3.5 13.5061 3.5L13.5061 6.5ZM9.30781 6.5L13.5061 6.5L13.5061 3.5L9.30781 3.5L9.30781 6.5ZM6.95833 8.14564C7.31759 7.15767 8.25655 6.5 9.30781 6.5L9.30781 3.5C6.99503 3.5 4.92933 4.94687 4.13895 7.12041L6.95833 8.14564ZM5.13556 13.1583L6.95833 8.14564L4.13895 7.12041L2.31618 12.133L5.13556 13.1583ZM6.07535 14.5C5.38139 14.5 4.8984 13.8104 5.13556 13.1583L2.31618 12.133C1.36755 14.7418 3.29949 17.5 6.07535 17.5L6.07535 14.5ZM9.17277 14.5L6.07535 14.5L6.07535 17.5L9.17277 17.5L9.17277 14.5ZM10.1798 19.0822L10.6524 16.2466L7.69318 15.7534L7.22058 18.589L10.1798 19.0822ZM9.68656 18.5C9.99553 18.5 10.2306 18.7774 10.1798 19.0822L7.22058 18.589C6.96661 20.1128 8.14171 21.5 9.68656 21.5L9.68656 18.5ZM10.0061 18.5L9.68656 18.5L9.68656 21.5L10.0061 21.5L10.0061 18.5Z"
|
||||||
fill="currentColor" mask="url(#path-2-inside-1_399_50)" />
|
fill="currentColor" mask="url(#path-2-inside-1_399_50)" />
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
@@ -1,14 +0,0 @@
|
|||||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<g id="Group 490">
|
|
||||||
<g id="Group 491">
|
|
||||||
<rect id="Rectangle 231" x="19.25" y="14.25" width="3.5" height="8.5" rx="1.75" transform="rotate(-180 19.25 14.25)" fill="#1B1B1B" stroke="#898C97" stroke-width="1.5"/>
|
|
||||||
<g id="Union">
|
|
||||||
<mask id="path-2-inside-1_387_503" fill="white">
|
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M10.0061 20C10.9504 20 11.8395 19.5554 12.4061 18.8L14.6872 15.7586C15.7568 15.3 16.5061 14.2375 16.5061 13L16.5061 8C16.5061 6.34315 15.163 5 13.5061 5L9.30781 5C7.62579 5 6.12346 6.05227 5.54864 7.63302L3.72587 12.6456C3.13298 14.2761 4.34044 16 6.07535 16L9.17277 16L8.70017 18.8356C8.59858 19.4451 9.06862 20 9.68656 20L10.0061 20Z"/>
|
|
||||||
</mask>
|
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M10.0061 20C10.9504 20 11.8395 19.5554 12.4061 18.8L14.6872 15.7586C15.7568 15.3 16.5061 14.2375 16.5061 13L16.5061 8C16.5061 6.34315 15.163 5 13.5061 5L9.30781 5C7.62579 5 6.12346 6.05227 5.54864 7.63302L3.72587 12.6456C3.13298 14.2761 4.34044 16 6.07535 16L9.17277 16L8.70017 18.8356C8.59858 19.4451 9.06862 20 9.68656 20L10.0061 20Z" fill="#1B1B1B"/>
|
|
||||||
<path d="M12.4061 18.8L13.6061 19.7L13.6061 19.7L12.4061 18.8ZM14.6872 15.7586L14.0961 14.3799L13.7277 14.5379L13.4872 14.8586L14.6872 15.7586ZM5.54864 7.63302L4.13895 7.12041L4.13895 7.12041L5.54864 7.63302ZM3.72587 12.6456L2.31618 12.133L3.72587 12.6456ZM9.17277 16L10.6524 16.2466L10.9435 14.5L9.17277 14.5L9.17277 16ZM8.70017 18.8356L10.1798 19.0822L10.1798 19.0822L8.70017 18.8356ZM11.2061 17.9C10.9228 18.2777 10.4782 18.5 10.0061 18.5L10.0061 21.5C11.4225 21.5 12.7563 20.8331 13.6061 19.7L11.2061 17.9ZM13.4872 14.8586L11.2061 17.9L13.6061 19.7L15.8872 16.6586L13.4872 14.8586ZM15.0061 13C15.0061 13.6164 14.634 14.1493 14.0961 14.3799L15.2782 17.1372C16.8796 16.4507 18.0061 14.8586 18.0061 13L15.0061 13ZM15.0061 8L15.0061 13L18.0061 13L18.0061 8L15.0061 8ZM13.5061 6.5C14.3345 6.5 15.0061 7.17157 15.0061 8L18.0061 8C18.0061 5.51472 15.9914 3.5 13.5061 3.5L13.5061 6.5ZM9.30781 6.5L13.5061 6.5L13.5061 3.5L9.30781 3.5L9.30781 6.5ZM6.95833 8.14564C7.31759 7.15767 8.25655 6.5 9.30781 6.5L9.30781 3.5C6.99503 3.5 4.92933 4.94687 4.13895 7.12041L6.95833 8.14564ZM5.13556 13.1583L6.95833 8.14564L4.13895 7.12041L2.31618 12.133L5.13556 13.1583ZM6.07535 14.5C5.38139 14.5 4.8984 13.8104 5.13556 13.1583L2.31618 12.133C1.36755 14.7418 3.29949 17.5 6.07535 17.5L6.07535 14.5ZM9.17277 14.5L6.07535 14.5L6.07535 17.5L9.17277 17.5L9.17277 14.5ZM10.1798 19.0822L10.6524 16.2466L7.69318 15.7534L7.22058 18.589L10.1798 19.0822ZM9.68656 18.5C9.99553 18.5 10.2306 18.7774 10.1798 19.0822L7.22058 18.589C6.96661 20.1128 8.14171 21.5 9.68656 21.5L9.68656 18.5ZM10.0061 18.5L9.68656 18.5L9.68656 21.5L10.0061 21.5L10.0061 18.5Z" fill="#898C97" mask="url(#path-2-inside-1_387_503)"/>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 2.8 KiB |
@@ -5,6 +5,6 @@ export const UploadIcon = forwardRef<
|
|||||||
SVGSVGElement & { className: any },
|
SVGSVGElement & { className: any },
|
||||||
React.PropsWithChildren<{ className?: string }>
|
React.PropsWithChildren<{ className?: string }>
|
||||||
>(({ className, ...props }, ref) => {
|
>(({ className, ...props }, ref) => {
|
||||||
const _className = 'transition text-gray-950 ' + (className || '')
|
const _className = 'transition text-[#ffd025] ' + (className || '')
|
||||||
return <Upload ref={ref} {...props} className={_className} />;
|
return <Upload ref={ref} {...props} className={_className} />;
|
||||||
});
|
});
|
||||||
|
|||||||