mirror of
https://github.com/labring/FastGPT.git
synced 2025-07-23 13:03:50 +00:00
V4.6.6-1 (#656)
This commit is contained in:
@@ -18,15 +18,17 @@ weight: 708
|
||||
|
||||
**使用时,请务必去除注释!**
|
||||
|
||||
以下配置适用于V4.6.6-alpha版本以后
|
||||
|
||||
```json
|
||||
{
|
||||
"SystemParams": {
|
||||
"systemEnv": {
|
||||
"pluginBaseUrl": "", // 商业版接口地址
|
||||
"vectorMaxProcess": 15, // 向量生成最大进程,结合数据库性能和 key 来设置
|
||||
"qaMaxProcess": 15, // QA 生成最大进程,结合数据库性能和 key 来设置
|
||||
"pgHNSWEfSearch": 100 // pg vector 索引参数,越大精度高但速度慢
|
||||
},
|
||||
"ChatModels": [ // 对话模型
|
||||
"chatModels": [ // 对话模型
|
||||
{
|
||||
"model": "gpt-3.5-turbo-1106",
|
||||
"name": "GPT35-1106",
|
||||
@@ -76,7 +78,7 @@ weight: 708
|
||||
"defaultSystemChatPrompt": ""
|
||||
}
|
||||
],
|
||||
"QAModels": [ // QA 生成模型
|
||||
"qaModels": [ // QA 生成模型
|
||||
{
|
||||
"model": "gpt-3.5-turbo-16k",
|
||||
"name": "GPT35-16k",
|
||||
@@ -85,7 +87,7 @@ weight: 708
|
||||
"price": 0
|
||||
}
|
||||
],
|
||||
"CQModels": [ // 问题分类模型
|
||||
"cqModels": [ // 问题分类模型
|
||||
{
|
||||
"model": "gpt-3.5-turbo-1106",
|
||||
"name": "GPT35-1106",
|
||||
@@ -105,7 +107,7 @@ weight: 708
|
||||
"functionPrompt": ""
|
||||
}
|
||||
],
|
||||
"ExtractModels": [ // 内容提取模型
|
||||
"extractModels": [ // 内容提取模型
|
||||
{
|
||||
"model": "gpt-3.5-turbo-1106",
|
||||
"name": "GPT35-1106",
|
||||
@@ -116,7 +118,7 @@ weight: 708
|
||||
"functionPrompt": ""
|
||||
}
|
||||
],
|
||||
"QGModels": [ // 生成下一步指引
|
||||
"qgModels": [ // 生成下一步指引
|
||||
{
|
||||
"model": "gpt-3.5-turbo-1106",
|
||||
"name": "GPT35-1106",
|
||||
@@ -125,7 +127,7 @@ weight: 708
|
||||
"price": 0
|
||||
}
|
||||
],
|
||||
"VectorModels": [ // 向量模型
|
||||
"vectorModels": [ // 向量模型
|
||||
{
|
||||
"model": "text-embedding-ada-002",
|
||||
"name": "Embedding-2",
|
||||
@@ -134,8 +136,8 @@ weight: 708
|
||||
"maxToken": 3000
|
||||
}
|
||||
],
|
||||
"ReRankModels": [], // 重排模型,暂时填空数组
|
||||
"AudioSpeechModels": [
|
||||
"reRankModels": [], // 重排模型,暂时填空数组
|
||||
"audioSpeechModels": [
|
||||
{
|
||||
"model": "tts-1",
|
||||
"name": "OpenAI TTS1",
|
||||
@@ -152,7 +154,7 @@ weight: 708
|
||||
]
|
||||
}
|
||||
],
|
||||
"WhisperModel": {
|
||||
"whisperModel": {
|
||||
"model": "whisper-1",
|
||||
"name": "Whisper1",
|
||||
"price": 0
|
||||
|
@@ -9,7 +9,7 @@ weight: 831
|
||||
|
||||
## 配置文件变更
|
||||
|
||||
由于 openai 已开始启用 function call,改为 toolChoice。FastGPT 同步的修改了对于的配置和调用方式,需要对配置文件做一些修改:
|
||||
由于 openai 已开始弃用 function call,改为 toolChoice。FastGPT 同步的修改了对于的配置和调用方式,需要对配置文件做一些修改:
|
||||
|
||||
[点击查看最新的配置文件](/docs/development/configuration/)
|
||||
|
||||
|
22
docSite/content/docs/development/upgrading/466.md
Normal file
22
docSite/content/docs/development/upgrading/466.md
Normal file
@@ -0,0 +1,22 @@
|
||||
---
|
||||
title: 'V4.6.6(需要改配置文件)'
|
||||
description: 'FastGPT V4.6.6'
|
||||
icon: 'upgrade'
|
||||
draft: false
|
||||
toc: true
|
||||
weight: 831
|
||||
---
|
||||
|
||||
**版本仍在开发中……**
|
||||
|
||||
## 配置文件变更
|
||||
|
||||
为了减少代码重复度,我们对配置文件做了一些修改:[点击查看最新的配置文件](/docs/development/configuration/)
|
||||
|
||||
|
||||
|
||||
## V4.6.6 即将更新
|
||||
|
||||
1. UI 优化,未来将逐步替换新的UI设计。
|
||||
|
||||
|
10
package.json
10
package.json
@@ -6,16 +6,18 @@
|
||||
"prepare": "husky install",
|
||||
"format-code": "prettier --config \"./.prettierrc.js\" --write \"./**/src/**/*.{ts,tsx,scss}\"",
|
||||
"format-doc": "zhlint --dir ./docSite *.md --fix",
|
||||
"gen:theme-typings": "chakra-cli tokens projects/app/src/web/styles/theme.ts --out node_modules/.pnpm/node_modules/@chakra-ui/styled-system/dist/theming.types.d.ts",
|
||||
"postinstall": "sh ./scripts/postinstall.sh"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@chakra-ui/cli": "^2.4.1",
|
||||
"husky": "^8.0.3",
|
||||
"lint-staged": "^13.2.1",
|
||||
"prettier": "^3.0.3",
|
||||
"zhlint": "^0.7.1",
|
||||
"i18next": "^22.5.1",
|
||||
"lint-staged": "^13.2.1",
|
||||
"next-i18next": "^13.3.0",
|
||||
"react-i18next": "^12.3.1"
|
||||
"prettier": "^3.0.3",
|
||||
"react-i18next": "^12.3.1",
|
||||
"zhlint": "^0.7.1"
|
||||
},
|
||||
"lint-staged": {
|
||||
"./**/**/*.{ts,tsx,scss}": "npm run format-code",
|
||||
|
62
packages/global/common/file/read/index.ts
Normal file
62
packages/global/common/file/read/index.ts
Normal file
@@ -0,0 +1,62 @@
|
||||
/* read file to txt */
|
||||
import * as pdfjsLib from 'pdfjs-dist';
|
||||
|
||||
export const readPdfFile = async ({ pdf }: { pdf: string | URL | ArrayBuffer }) => {
|
||||
pdfjsLib.GlobalWorkerOptions.workerSrc = '/js/pdf.worker.js';
|
||||
|
||||
type TokenType = {
|
||||
str: string;
|
||||
dir: string;
|
||||
width: number;
|
||||
height: number;
|
||||
transform: number[];
|
||||
fontName: string;
|
||||
hasEOL: boolean;
|
||||
};
|
||||
|
||||
const readPDFPage = async (doc: any, pageNo: number) => {
|
||||
const page = await doc.getPage(pageNo);
|
||||
const tokenizedText = await page.getTextContent();
|
||||
|
||||
const viewport = page.getViewport({ scale: 1 });
|
||||
const pageHeight = viewport.height;
|
||||
const headerThreshold = pageHeight * 0.07; // 假设页头在页面顶部5%的区域内
|
||||
const footerThreshold = pageHeight * 0.93; // 假设页脚在页面底部5%的区域内
|
||||
|
||||
const pageTexts: TokenType[] = tokenizedText.items.filter((token: TokenType) => {
|
||||
return (
|
||||
!token.transform ||
|
||||
(token.transform[5] > headerThreshold && token.transform[5] < footerThreshold)
|
||||
);
|
||||
});
|
||||
|
||||
// concat empty string 'hasEOL'
|
||||
for (let i = 0; i < pageTexts.length; i++) {
|
||||
const item = pageTexts[i];
|
||||
if (item.str === '' && pageTexts[i - 1]) {
|
||||
pageTexts[i - 1].hasEOL = item.hasEOL;
|
||||
pageTexts.splice(i, 1);
|
||||
i--;
|
||||
}
|
||||
}
|
||||
|
||||
page.cleanup();
|
||||
|
||||
return pageTexts
|
||||
.map((token) => {
|
||||
const paragraphEnd = token.hasEOL && /([。?!.?!\n\r]|(\r\n))$/.test(token.str);
|
||||
|
||||
return paragraphEnd ? `${token.str}\n` : token.str;
|
||||
})
|
||||
.join('');
|
||||
};
|
||||
|
||||
const doc = await pdfjsLib.getDocument(pdf).promise;
|
||||
const pageTextPromises = [];
|
||||
for (let pageNo = 1; pageNo <= doc.numPages; pageNo++) {
|
||||
pageTextPromises.push(readPDFPage(doc, pageNo));
|
||||
}
|
||||
const pageTexts = await Promise.all(pageTextPromises);
|
||||
|
||||
return pageTexts.join('');
|
||||
};
|
@@ -34,3 +34,41 @@ export const simpleMarkdownText = (rawText: string) => {
|
||||
|
||||
return rawText.trim();
|
||||
};
|
||||
|
||||
/**
|
||||
* format markdown
|
||||
* 1. upload base64
|
||||
* 2. replace \
|
||||
*/
|
||||
export const uploadMarkdownBase64 = async ({
|
||||
rawText,
|
||||
uploadImgController
|
||||
}: {
|
||||
rawText: string;
|
||||
uploadImgController: (base64: string) => Promise<string>;
|
||||
}) => {
|
||||
// match base64, upload and replace it
|
||||
const base64Regex = /data:image\/.*;base64,([^\)]+)/g;
|
||||
const base64Arr = rawText.match(base64Regex) || [];
|
||||
// upload base64 and replace it
|
||||
await Promise.all(
|
||||
base64Arr.map(async (base64Img) => {
|
||||
try {
|
||||
const str = await uploadImgController(base64Img);
|
||||
|
||||
rawText = rawText.replace(base64Img, str);
|
||||
} catch (error) {
|
||||
rawText = rawText.replace(base64Img, '');
|
||||
rawText = rawText.replace(/!\[.*\]\(\)/g, '');
|
||||
}
|
||||
})
|
||||
);
|
||||
|
||||
// Remove white space on both sides of the picture
|
||||
const trimReg = /(!\[.*\]\(.*\))\s*/g;
|
||||
if (trimReg.test(rawText)) {
|
||||
rawText = rawText.replace(trimReg, '$1');
|
||||
}
|
||||
|
||||
return simpleMarkdownText(rawText);
|
||||
};
|
||||
|
@@ -31,7 +31,7 @@ export const splitText2Chunks = (props: {
|
||||
|
||||
// The larger maxLen is, the next sentence is less likely to trigger splitting
|
||||
const stepReges: { reg: RegExp; maxLen: number }[] = [
|
||||
...customReg.map((text) => ({ reg: new RegExp(`([${text}])`, 'g'), maxLen: chunkLen * 1.4 })),
|
||||
...customReg.map((text) => ({ reg: new RegExp(`(${text})`, 'g'), maxLen: chunkLen * 1.4 })),
|
||||
{ reg: /^(#\s[^\n]+)\n/gm, maxLen: chunkLen * 1.2 },
|
||||
{ reg: /^(##\s[^\n]+)\n/gm, maxLen: chunkLen * 1.2 },
|
||||
{ reg: /^(###\s[^\n]+)\n/gm, maxLen: chunkLen * 1.2 },
|
||||
@@ -64,13 +64,22 @@ export const splitText2Chunks = (props: {
|
||||
}
|
||||
];
|
||||
}
|
||||
|
||||
const isCustomSteep = checkIsCustomStep(step);
|
||||
const isMarkdownSplit = checkIsMarkdownSplit(step);
|
||||
const independentChunk = checkIndependentChunk(step);
|
||||
|
||||
const { reg } = stepReges[step];
|
||||
|
||||
const splitTexts = text
|
||||
.replace(reg, independentChunk ? `${splitMarker}$1` : `$1${splitMarker}`)
|
||||
.replace(
|
||||
reg,
|
||||
(() => {
|
||||
if (isCustomSteep) return splitMarker;
|
||||
if (independentChunk) return `${splitMarker}$1`;
|
||||
return `$1${splitMarker}`;
|
||||
})()
|
||||
)
|
||||
.split(`${splitMarker}`)
|
||||
.filter((part) => part.trim());
|
||||
|
||||
@@ -128,11 +137,6 @@ export const splitText2Chunks = (props: {
|
||||
const independentChunk = checkIndependentChunk(step);
|
||||
const isCustomStep = checkIsCustomStep(step);
|
||||
|
||||
// mini text
|
||||
if (text.length <= chunkLen) {
|
||||
return [text];
|
||||
}
|
||||
|
||||
// oversize
|
||||
if (step >= stepReges.length) {
|
||||
if (text.length < chunkLen * 3) {
|
||||
@@ -221,6 +225,8 @@ export const splitText2Chunks = (props: {
|
||||
} else {
|
||||
chunks.push(`${mdTitle}${lastText}`);
|
||||
}
|
||||
} else if (lastText && chunks.length === 0) {
|
||||
chunks.push(lastText);
|
||||
}
|
||||
|
||||
return chunks;
|
||||
|
29
packages/global/common/system/types/index.d.ts
vendored
29
packages/global/common/system/types/index.d.ts
vendored
@@ -1,4 +1,29 @@
|
||||
export type FeConfigsType = {
|
||||
import type {
|
||||
ChatModelItemType,
|
||||
FunctionModelItemType,
|
||||
LLMModelItemType,
|
||||
VectorModelItemType,
|
||||
AudioSpeechModels,
|
||||
WhisperModelType,
|
||||
ReRankModelItemType
|
||||
} from '../../../core/ai/model.d';
|
||||
|
||||
/* fastgpt main */
|
||||
export type FastGPTConfigFileType = {
|
||||
feConfigs: FastGPTFeConfigsType;
|
||||
systemEnv: SystemEnvType;
|
||||
chatModels: ChatModelItemType[];
|
||||
qaModels: LLMModelItemType[];
|
||||
cqModels: FunctionModelItemType[];
|
||||
extractModels: FunctionModelItemType[];
|
||||
qgModels: LLMModelItemType[];
|
||||
vectorModels: VectorModelItemType[];
|
||||
reRankModels: ReRankModelItemType[];
|
||||
audioSpeechModels: AudioSpeechModelType[];
|
||||
whisperModel: WhisperModelType;
|
||||
};
|
||||
|
||||
export type FastGPTFeConfigsType = {
|
||||
show_emptyChat?: boolean;
|
||||
show_register?: boolean;
|
||||
show_appStore?: boolean;
|
||||
@@ -34,6 +59,6 @@ export type SystemEnvType = {
|
||||
};
|
||||
|
||||
declare global {
|
||||
var feConfigs: FeConfigsType;
|
||||
var feConfigs: FastGPTFeConfigsType;
|
||||
var systemEnv: SystemEnvType;
|
||||
}
|
||||
|
1
packages/global/core/ai/model.d.ts
vendored
1
packages/global/core/ai/model.d.ts
vendored
@@ -24,6 +24,7 @@ export type VectorModelItemType = {
|
||||
defaultToken: number;
|
||||
price: number;
|
||||
maxToken: number;
|
||||
weight: number;
|
||||
};
|
||||
|
||||
export type ReRankModelItemType = {
|
||||
|
@@ -16,6 +16,7 @@ export const defaultVectorModels: VectorModelItemType[] = [
|
||||
name: 'Embedding-2',
|
||||
price: 0,
|
||||
defaultToken: 500,
|
||||
maxToken: 3000
|
||||
maxToken: 3000,
|
||||
weight: 100
|
||||
}
|
||||
];
|
||||
|
1
packages/global/core/dataset/type.d.ts
vendored
1
packages/global/core/dataset/type.d.ts
vendored
@@ -89,6 +89,7 @@ export type DatasetTrainingSchemaType = {
|
||||
q: string;
|
||||
a: string;
|
||||
chunkIndex: number;
|
||||
weight: number;
|
||||
indexes: Omit<DatasetDataIndexItemType, 'dataId'>[];
|
||||
};
|
||||
|
||||
|
@@ -36,10 +36,11 @@ export const ContextExtractModule: FlowModuleTemplateType = {
|
||||
type: FlowNodeInputTypeEnum.textarea,
|
||||
valueType: ModuleIOValueTypeEnum.string,
|
||||
label: '提取要求描述',
|
||||
description: '给AI一些对应的背景知识或要求描述,引导AI更好的完成任务',
|
||||
description:
|
||||
'给AI一些对应的背景知识或要求描述,引导AI更好的完成任务。\n该输入框可使用全局变量。',
|
||||
required: true,
|
||||
placeholder:
|
||||
'例如: \n1. 你是一个实验室预约助手,你的任务是帮助用户预约实验室。\n2. 你是谷歌搜索助手,需要从文本中提取出合适的搜索词。',
|
||||
'例如: \n1. 当前时间为: {{cTime}}。你是一个实验室预约助手,你的任务是帮助用户预约实验室,从文本中获取对应的预约信息。\n2. 你是谷歌搜索助手,需要从文本中提取出合适的搜索词。',
|
||||
showTargetInApp: true,
|
||||
showTargetInPlugin: true
|
||||
},
|
||||
|
@@ -2,11 +2,12 @@
|
||||
"name": "@fastgpt/global",
|
||||
"version": "1.0.0",
|
||||
"dependencies": {
|
||||
"axios": "^1.5.1",
|
||||
"dayjs": "^1.11.7",
|
||||
"openai": "4.23.0",
|
||||
"encoding": "^0.1.13",
|
||||
"js-tiktoken": "^1.0.7",
|
||||
"axios": "^1.5.1",
|
||||
"openai": "4.23.0",
|
||||
"pdfjs-dist": "^4.0.269",
|
||||
"timezones-list": "^3.0.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
@@ -20,12 +20,12 @@ export async function connectMongo({
|
||||
console.log('mongo start connect');
|
||||
try {
|
||||
mongoose.set('strictQuery', true);
|
||||
const maxConnecting = Math.max(20, Number(process.env.DB_MAX_LINK || 20));
|
||||
const maxConnecting = Math.max(30, Number(process.env.DB_MAX_LINK || 20));
|
||||
await mongoose.connect(process.env.MONGODB_URI as string, {
|
||||
bufferCommands: true,
|
||||
maxConnecting: maxConnecting,
|
||||
maxPoolSize: maxConnecting,
|
||||
minPoolSize: Math.max(5, Math.round(Number(process.env.DB_MAX_LINK || 5) * 0.1)),
|
||||
minPoolSize: 20,
|
||||
connectTimeoutMS: 60000,
|
||||
waitQueueTimeoutMS: 60000,
|
||||
socketTimeoutMS: 60000,
|
||||
|
@@ -9,7 +9,8 @@ export const connectPg = async (): Promise<Pool> => {
|
||||
|
||||
global.pgClient = new Pool({
|
||||
connectionString: process.env.PG_URL,
|
||||
max: Number(process.env.DB_MAX_LINK || 5),
|
||||
max: Number(process.env.DB_MAX_LINK || 20),
|
||||
min: 10,
|
||||
keepAlive: true,
|
||||
idleTimeoutMillis: 60000,
|
||||
connectionTimeoutMillis: 20000
|
||||
|
@@ -1,15 +1,15 @@
|
||||
import { SystemConfigsTypeEnum } from '@fastgpt/global/common/system/config/constants';
|
||||
import { MongoSystemConfigs } from './schema';
|
||||
import { FeConfigsType } from '@fastgpt/global/common/system/types';
|
||||
import { FastGPTConfigFileType } from '@fastgpt/global/common/system/types';
|
||||
|
||||
export const getFastGPTFeConfig = async () => {
|
||||
export const getFastGPTConfigFromDB = async () => {
|
||||
const res = await MongoSystemConfigs.findOne({
|
||||
type: SystemConfigsTypeEnum.fastgpt
|
||||
}).sort({
|
||||
createTime: -1
|
||||
});
|
||||
|
||||
const config: FeConfigsType = res?.value?.FeConfig || {};
|
||||
const config = res?.value || {};
|
||||
|
||||
return config;
|
||||
return config as Omit<FastGPTConfigFileType, 'systemEnv'>;
|
||||
};
|
||||
|
@@ -22,7 +22,6 @@ const systemConfigSchema = new Schema({
|
||||
});
|
||||
|
||||
try {
|
||||
systemConfigSchema.index({ createTime: -1 }, { expireAfterSeconds: 90 * 24 * 60 * 60 });
|
||||
systemConfigSchema.index({ type: 1 });
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
|
@@ -79,6 +79,10 @@ const TrainingDataSchema = new Schema({
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
weight: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
indexes: {
|
||||
type: [
|
||||
{
|
||||
|
@@ -56,7 +56,7 @@ export async function parseHeaderCert({
|
||||
async function authCookieToken(cookie?: string, token?: string) {
|
||||
// 获取 cookie
|
||||
const cookies = Cookie.parse(cookie || '');
|
||||
const cookieToken = cookies.token || token;
|
||||
const cookieToken = token || cookies.token;
|
||||
|
||||
if (!cookieToken) {
|
||||
return Promise.reject(ERROR_ENUM.unAuthorization);
|
||||
@@ -127,7 +127,7 @@ export async function parseHeaderCert({
|
||||
authType: AuthUserTypeEnum.apikey
|
||||
};
|
||||
}
|
||||
if (authToken && (cookie || token)) {
|
||||
if (authToken && (token || cookie)) {
|
||||
// user token(from fastgpt web)
|
||||
const res = await authCookieToken(cookie, token);
|
||||
return {
|
||||
@@ -182,7 +182,7 @@ export async function parseHeaderCert({
|
||||
export const setCookie = (res: NextApiResponse, token: string) => {
|
||||
res.setHeader(
|
||||
'Set-Cookie',
|
||||
`token=${token}; Path=/; HttpOnly; Max-Age=604800; Samesite=None; Secure;`
|
||||
`token=${token}; Path=/; HttpOnly; Max-Age=604800; Samesite=Strict; Secure;`
|
||||
);
|
||||
};
|
||||
/* clear cookie */
|
||||
|
66
packages/web/common/file/img.ts
Normal file
66
packages/web/common/file/img.ts
Normal file
@@ -0,0 +1,66 @@
|
||||
export type CompressImgProps = {
|
||||
maxW?: number;
|
||||
maxH?: number;
|
||||
maxSize?: number;
|
||||
};
|
||||
|
||||
export const compressBase64ImgAndUpload = ({
|
||||
base64Img,
|
||||
maxW = 1080,
|
||||
maxH = 1080,
|
||||
maxSize = 1024 * 500, // 300kb
|
||||
uploadController
|
||||
}: CompressImgProps & {
|
||||
base64Img: string;
|
||||
uploadController: (base64: string) => Promise<string>;
|
||||
}) => {
|
||||
return new Promise<string>((resolve, reject) => {
|
||||
const fileType =
|
||||
/^data:([a-zA-Z0-9]+\/[a-zA-Z0-9-.+]+).*,/.exec(base64Img)?.[1] || 'image/jpeg';
|
||||
|
||||
const img = new Image();
|
||||
img.src = base64Img;
|
||||
img.onload = async () => {
|
||||
let width = img.width;
|
||||
let height = img.height;
|
||||
|
||||
if (width > height) {
|
||||
if (width > maxW) {
|
||||
height *= maxW / width;
|
||||
width = maxW;
|
||||
}
|
||||
} else {
|
||||
if (height > maxH) {
|
||||
width *= maxH / height;
|
||||
height = maxH;
|
||||
}
|
||||
}
|
||||
|
||||
const canvas = document.createElement('canvas');
|
||||
canvas.width = width;
|
||||
canvas.height = height;
|
||||
const ctx = canvas.getContext('2d');
|
||||
|
||||
if (!ctx) {
|
||||
return reject('压缩图片异常');
|
||||
}
|
||||
|
||||
ctx.drawImage(img, 0, 0, width, height);
|
||||
const compressedDataUrl = canvas.toDataURL(fileType, 1);
|
||||
// 移除 canvas 元素
|
||||
canvas.remove();
|
||||
|
||||
if (compressedDataUrl.length > maxSize) {
|
||||
return reject('图片太大了');
|
||||
}
|
||||
|
||||
try {
|
||||
const src = await uploadController(compressedDataUrl);
|
||||
resolve(src);
|
||||
} catch (error) {
|
||||
reject(error);
|
||||
}
|
||||
};
|
||||
img.onerror = reject;
|
||||
});
|
||||
};
|
53
packages/web/common/file/read.ts
Normal file
53
packages/web/common/file/read.ts
Normal file
@@ -0,0 +1,53 @@
|
||||
import { uploadMarkdownBase64 } from '@fastgpt/global/common/string/markdown';
|
||||
import { htmlStr2Md } from '../string/markdown';
|
||||
/**
|
||||
* read file raw text
|
||||
*/
|
||||
export const readFileRawText = (file: File) => {
|
||||
return new Promise((resolve: (_: string) => void, reject) => {
|
||||
try {
|
||||
const reader = new FileReader();
|
||||
reader.onload = () => {
|
||||
resolve(reader.result as string);
|
||||
};
|
||||
reader.onerror = (err) => {
|
||||
console.log('error txt read:', err);
|
||||
reject('Read file error');
|
||||
};
|
||||
reader.readAsText(file);
|
||||
} catch (error) {
|
||||
reject(error);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
export const readMdFile = async ({
|
||||
file,
|
||||
uploadImgController
|
||||
}: {
|
||||
file: File;
|
||||
uploadImgController: (base64: string) => Promise<string>;
|
||||
}) => {
|
||||
const md = await readFileRawText(file);
|
||||
const rawText = await uploadMarkdownBase64({
|
||||
rawText: md,
|
||||
uploadImgController
|
||||
});
|
||||
return rawText;
|
||||
};
|
||||
|
||||
export const readHtmlFile = async ({
|
||||
file,
|
||||
uploadImgController
|
||||
}: {
|
||||
file: File;
|
||||
uploadImgController: (base64: string) => Promise<string>;
|
||||
}) => {
|
||||
const md = htmlStr2Md(await readFileRawText(file));
|
||||
const rawText = await uploadMarkdownBase64({
|
||||
rawText: md,
|
||||
uploadImgController
|
||||
});
|
||||
|
||||
return rawText;
|
||||
};
|
@@ -2,6 +2,7 @@
|
||||
"name": "@fastgpt/web",
|
||||
"version": "1.0.0",
|
||||
"dependencies": {
|
||||
"@fastgpt/global": "workspace:*",
|
||||
"joplin-turndown-plugin-gfm": "^1.0.12",
|
||||
"turndown": "^7.1.2"
|
||||
},
|
||||
|
720
pnpm-lock.yaml
generated
720
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
@@ -1,3 +1,4 @@
|
||||
LOG_DEPTH=3
|
||||
# 默认用户密码,用户名为 root,每次重启时会自动更新。
|
||||
DEFAULT_ROOT_PSW=123456
|
||||
# 数据库最大连接数
|
||||
|
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"SystemParams": {
|
||||
"systemEnv": {
|
||||
"pluginBaseUrl": "",
|
||||
"vectorMaxProcess": 15,
|
||||
"qaMaxProcess": 15,
|
||||
"pgHNSWEfSearch": 100
|
||||
},
|
||||
"ChatModels": [
|
||||
"chatModels": [
|
||||
{
|
||||
"model": "gpt-3.5-turbo",
|
||||
"name": "GPT35",
|
||||
@@ -55,7 +55,7 @@
|
||||
"defaultSystemChatPrompt": ""
|
||||
}
|
||||
],
|
||||
"QAModels": [
|
||||
"qaModels": [
|
||||
{
|
||||
"model": "gpt-3.5-turbo-16k",
|
||||
"name": "GPT35-16k",
|
||||
@@ -64,7 +64,7 @@
|
||||
"price": 0
|
||||
}
|
||||
],
|
||||
"CQModels": [
|
||||
"cqModels": [
|
||||
{
|
||||
"model": "gpt-3.5-turbo",
|
||||
"name": "GPT35",
|
||||
@@ -84,7 +84,7 @@
|
||||
"functionPrompt": ""
|
||||
}
|
||||
],
|
||||
"ExtractModels": [
|
||||
"extractModels": [
|
||||
{
|
||||
"model": "gpt-3.5-turbo-1106",
|
||||
"name": "GPT35-1106",
|
||||
@@ -95,7 +95,7 @@
|
||||
"functionPrompt": ""
|
||||
}
|
||||
],
|
||||
"QGModels": [
|
||||
"qgModels": [
|
||||
{
|
||||
"model": "gpt-3.5-turbo-1106",
|
||||
"name": "GPT35-1106",
|
||||
@@ -104,17 +104,18 @@
|
||||
"price": 0
|
||||
}
|
||||
],
|
||||
"VectorModels": [
|
||||
"vectorModels": [
|
||||
{
|
||||
"model": "text-embedding-ada-002",
|
||||
"name": "Embedding-2",
|
||||
"price": 0.2,
|
||||
"defaultToken": 700,
|
||||
"maxToken": 3000
|
||||
"maxToken": 3000,
|
||||
"weight": 100
|
||||
}
|
||||
],
|
||||
"ReRankModels": [],
|
||||
"AudioSpeechModels": [
|
||||
"reRankModels": [],
|
||||
"audioSpeechModels": [
|
||||
{
|
||||
"model": "tts-1",
|
||||
"name": "OpenAI TTS1",
|
||||
@@ -129,7 +130,7 @@
|
||||
]
|
||||
}
|
||||
],
|
||||
"WhisperModel": {
|
||||
"whisperModel": {
|
||||
"model": "whisper-1",
|
||||
"name": "Whisper1",
|
||||
"price": 0
|
||||
|
@@ -7,7 +7,7 @@ module.exports = {
|
||||
i18n: {
|
||||
defaultLocale: 'zh',
|
||||
locales: ['en', 'zh'],
|
||||
localeDetection: true
|
||||
localeDetection: false
|
||||
},
|
||||
localePath:
|
||||
typeof window === 'undefined' ? require('path').resolve('./public/locales') : '/public/locales',
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "app",
|
||||
"version": "4.6.5",
|
||||
"version": "4.6.6",
|
||||
"private": false,
|
||||
"scripts": {
|
||||
"dev": "next dev",
|
||||
@@ -17,32 +17,38 @@
|
||||
"@chakra-ui/system": "^2.6.1",
|
||||
"@emotion/react": "^11.11.1",
|
||||
"@emotion/styled": "^11.11.0",
|
||||
"@fastgpt/plugins": "workspace:*",
|
||||
"@fastgpt/global": "workspace:*",
|
||||
"@fastgpt/plugins": "workspace:*",
|
||||
"@fastgpt/service": "workspace:*",
|
||||
"@fastgpt/web": "workspace:*",
|
||||
"@node-rs/jieba": "^1.7.2",
|
||||
"@tanstack/react-query": "^4.24.10",
|
||||
"@types/nprogress": "^0.2.0",
|
||||
"axios": "^1.5.1",
|
||||
"date-fns": "^2.30.0",
|
||||
"dayjs": "^1.11.7",
|
||||
"echarts": "^5.4.1",
|
||||
"next": "13.5.2",
|
||||
"echarts-gl": "^2.0.9",
|
||||
"formidable": "^2.1.1",
|
||||
"framer-motion": "^9.0.6",
|
||||
"hyperdown": "^2.4.29",
|
||||
"i18next": "^22.5.1",
|
||||
"immer": "^9.0.19",
|
||||
"jschardet": "^3.0.0",
|
||||
"jsonwebtoken": "^9.0.2",
|
||||
"lodash": "^4.17.21",
|
||||
"mammoth": "^1.6.0",
|
||||
"mermaid": "^10.2.3",
|
||||
"nanoid": "^4.0.1",
|
||||
"next": "13.5.2",
|
||||
"next-i18next": "^13.3.0",
|
||||
"nprogress": "^0.2.0",
|
||||
"papaparse": "^5.4.1",
|
||||
"react": "18.2.0",
|
||||
"react-day-picker": "^8.7.1",
|
||||
"react-dom": "18.2.0",
|
||||
"react-hook-form": "^7.43.1",
|
||||
"react-i18next": "^12.3.1",
|
||||
"react-markdown": "^8.0.7",
|
||||
"react-syntax-highlighter": "^15.5.0",
|
||||
"reactflow": "^11.7.4",
|
||||
@@ -52,13 +58,7 @@
|
||||
"remark-math": "^5.1.1",
|
||||
"request-ip": "^3.3.0",
|
||||
"sass": "^1.58.3",
|
||||
"zustand": "^4.3.5",
|
||||
"i18next": "^22.5.1",
|
||||
"next-i18next": "^13.3.0",
|
||||
"react-i18next": "^12.3.1",
|
||||
"axios": "^1.5.1",
|
||||
"nanoid": "^4.0.1",
|
||||
"dayjs": "^1.11.7"
|
||||
"zustand": "^4.3.5"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@svgr/webpack": "^6.5.1",
|
||||
|
@@ -1,3 +1,520 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1440" height="900" viewBox="0 0 1440 900" fill="none"><defs><path id="path_0"
|
||||
transform="translate(0 0) rotate(0 720 450)"
|
||||
d="M0,900L1440,900L1440,0L0,0L0,900Z" /><linearGradient id="linear_0" x1="45.776671171188354%" y1="3.4534157006028896%" x2="45.77667520943754%" y2="95.15074645348403%" gradientUnits="objectBoundingBox"><stop offset="0" stop-color="#4D3AF9" stop-opacity="1" /><stop offset="0.4571722174852774" stop-color="#3B4DFE" stop-opacity="1" /><stop offset="1" stop-color="#1A68FF" stop-opacity="1" /></linearGradient><linearGradient id="linear_1" x1="50%" y1="2.535076530612245%" x2="51%" y2="100%" gradientUnits="objectBoundingBox"><stop offset="0" stop-color="#4581FF" stop-opacity="1" /><stop offset="1" stop-color="#1C57FE" stop-opacity="1" /></linearGradient><linearGradient id="linear_2" x1="50%" y1="2.535076530612245%" x2="51%" y2="100%" gradientUnits="objectBoundingBox"><stop offset="0" stop-color="#4581FF" stop-opacity="1" /><stop offset="1" stop-color="#1C57FE" stop-opacity="1" /></linearGradient><linearGradient id="linear_3" x1="50%" y1="0%" x2="51%" y2="100%" gradientUnits="objectBoundingBox"><stop offset="0" stop-color="#29BFA8" stop-opacity="1" /><stop offset="1" stop-color="#34D1B6" stop-opacity="1" /></linearGradient><linearGradient id="linear_4" x1="50%" y1="2.535076530612245%" x2="51%" y2="100%" gradientUnits="objectBoundingBox"><stop offset="0" stop-color="#4581FF" stop-opacity="1" /><stop offset="1" stop-color="#1C57FE" stop-opacity="1" /></linearGradient></defs><g opacity="1" transform="translate(0 0) rotate(0 720 450)"><mask id="mask-0" fill="white"><use xlink:href="#path_0"></use></mask><g mask="url(#mask-0)"><path id="Mask" fill-rule="evenodd" fill="url(#linear_0)" transform="translate(0 0) rotate(0 720 450)" opacity="1" d="M0,900L1440,900L1440,0L0,0L0,900Z " /></g><g mask="url(#mask-0)"><path id="Oval" fill-rule="evenodd" fill="url(#linear_1)" transform="translate(51.66666666666667 412.5) rotate(0 37.5 37.5)" opacity="1" d="M75,37.5C75,16.79 58.21,0 37.5,0C16.79,0 0,16.79 0,37.5C0,58.21 16.79,75 37.5,75C58.21,75 75,58.21 75,37.5Z " /></g><g mask="url(#mask-0)"><path id="Oval Copy 2" fill-rule="evenodd" fill="url(#linear_2)" transform="translate(1049.166666666667 -3.333333333333333) rotate(0 30.833333333333336 30.833333333333336)" opacity="0.69" d="M61.67,30.83C61.67,13.81 47.86,0 30.83,0C13.81,0 0,13.81 0,30.83C0,47.86 13.81,61.67 30.83,61.67C47.86,61.67 61.67,47.86 61.67,30.83Z " /></g><g mask="url(#mask-0)"><g opacity="0.55" transform="translate(-64.16666666666667 547.4999999999999) rotate(0 50 226.5)"><path id="Rectangle 2" fill-rule="evenodd" style="fill:#5088FF" transform="translate(14.63769413070223 15.28431509376342) rotate(-45 35.20283757354478 34.876453649023716)" opacity="1" d="M8.17,61.88L70.41,69.75L47.22,22.97L0,0L8.17,61.88Z " /><path id="Rectangle 3" fill-rule="evenodd" fill="url(#linear_3)" transform="translate(0 50.20419426048581) rotate(0 26.487523940001577 201.14790286975716)" opacity="1" d="M0,402.3L51.51,402.3L52.98,23.25L0,0L0,402.3Z " /><path id="Rectangle 3 Copy" fill-rule="evenodd" fill="url(#linear_4)" transform="translate(48.48484848484848 50.20419426048581) rotate(0 25.75757575757576 201.14790286975716)" opacity="1" d="M0,402.3L51.52,402.3L51.52,0L0,21.68L0,402.3Z " /></g></g></g></svg>
|
||||
<svg width="1440" height="790" viewBox="0 0 1440 790" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_840_3557)">
|
||||
<rect width="1440" height="1554.93" fill="url(#paint0_linear_840_3557)" />
|
||||
<g opacity="0.8">
|
||||
<g filter="url(#filter0_f_840_3557)">
|
||||
<path d="M880.644 1048.09C1001.07 777.557 1142.27 561.127 1561.69 561.127V1784.79H182.987C158.071 1782.01 154.749 1725.69 274.347 1589.17C423.845 1418.52 760.215 1318.63 880.644 1048.09Z"
|
||||
fill="url(#paint1_linear_840_3557)" />
|
||||
</g>
|
||||
<g filter="url(#filter1_f_840_3557)">
|
||||
<path d="M880.644 912.883C1001.07 642.346 1142.27 425.916 1561.69 425.916V1649.58H182.987C158.071 1646.8 154.749 1590.48 274.347 1453.96C423.845 1283.31 760.215 1183.42 880.644 912.883Z"
|
||||
fill="url(#paint2_linear_840_3557)" />
|
||||
</g>
|
||||
<g filter="url(#filter2_f_840_3557)">
|
||||
<path d="M910.644 912.883C1031.07 642.346 1172.27 425.916 1591.69 425.916V1649.58H212.987C188.071 1646.8 184.749 1590.48 304.347 1453.96C453.845 1283.31 790.215 1183.42 910.644 912.883Z"
|
||||
fill="url(#paint3_linear_840_3557)" fill-opacity="0.6" />
|
||||
</g>
|
||||
<g filter="url(#filter3_f_840_3557)">
|
||||
<path d="M378.148 168.195C426.329 59.5163 695.475 171.617 695.475 -31.249L-103.612 -2.20793V880.857C-34.991 801.16 84.6279 552.269 102.148 407.365C124.049 226.234 329.967 276.873 378.148 168.195Z"
|
||||
fill="url(#paint4_linear_840_3557)" fill-opacity="0.5" />
|
||||
</g>
|
||||
<g filter="url(#filter4_f_840_3557)">
|
||||
<path d="M321.937 142.838C370.118 34.1595 462.149 175.301 462.149 -27.5647H-159.823V883.985C-91.2019 804.288 28.4171 526.913 45.9374 382.008C67.8378 200.878 273.756 251.516 321.937 142.838Z"
|
||||
fill="url(#paint5_linear_840_3557)" fill-opacity="0.7" />
|
||||
</g>
|
||||
<g filter="url(#filter5_f_840_3557)">
|
||||
<path d="M321.937 142.838C370.118 34.1592 659.226 175.301 659.226 -27.5649H-159.823V912.138C-91.2018 832.441 20.288 523.626 45.9374 382.008C82.7516 178.746 273.757 251.516 321.937 142.838Z"
|
||||
fill="url(#paint6_linear_840_3557)" fill-opacity="0.3" />
|
||||
</g>
|
||||
<g filter="url(#filter6_f_840_3557)">
|
||||
<path d="M1160.33 90.5001C1112.15 24.1581 843 92.5893 843 -31.249L1642.09 -13.5211V525.54C1573.47 476.89 1453.85 324.956 1436.33 236.5C1414.43 125.93 1208.51 156.842 1160.33 90.5001Z"
|
||||
fill="url(#paint7_linear_840_3557)" fill-opacity="0.5" />
|
||||
</g>
|
||||
<g filter="url(#filter7_f_840_3557)">
|
||||
<path d="M1195.98 75.0211C1154.87 8.67914 1076.33 94.8384 1076.33 -29H1607.12V527.45C1548.55 478.799 1446.47 309.477 1431.52 221.021C1412.83 110.451 1237.1 141.363 1195.98 75.0211Z"
|
||||
fill="url(#paint8_linear_840_3557)" fill-opacity="0.6" />
|
||||
</g>
|
||||
<g filter="url(#filter8_f_840_3557)">
|
||||
<path d="M1183.95 75.0211C1140.42 8.67914 879.249 94.8384 879.249 -29H1619.16V544.636C1557.17 495.985 1456.45 307.471 1433.28 221.021C1400.02 96.9411 1227.47 141.363 1183.95 75.0211Z"
|
||||
fill="url(#paint9_linear_840_3557)" fill-opacity="0.3" />
|
||||
</g>
|
||||
</g>
|
||||
<path d="M-70.5413 -25.0416C423.19 -27.0733 916.922 -29.5053 1410.65 -32.3374C1613.26 171.573 1751.4 466.358 2003.66 551.32C2218.17 623.724 2399.55 687.261 2596.67 837.608C1188.12 835.392 -220.336 835.392 -1628.71 837.608C-1492.29 758.648 -1357.59 677.195 -1210.07 652.906C-1089.86 632.774 -969.772 654.199 -849.425 644.225C-518.074 616.243 -330.676 208.606 -70.5413 -25.0416Z"
|
||||
stroke="#1767F9" stroke-opacity="0.2" stroke-width="0.953599" stroke-miterlimit="10" />
|
||||
<path d="M-1284.49 667.689C-680.247 749.235 -86.3136 971.8 523.621 964.228C1133.56 956.655 1726.3 725.87 2331.74 656.237"
|
||||
stroke="#1767F9" stroke-opacity="0.2" stroke-width="0.953599" stroke-miterlimit="10" />
|
||||
<path d="M-1026.3 642.662C-517.139 840.57 14.24 1199.45 554.083 1160.93C1098.69 1122.15 1610.96 769.829 2134.47 589.283"
|
||||
stroke="#1767F9" stroke-opacity="0.2" stroke-width="0.953599" stroke-miterlimit="10" />
|
||||
<path d="M-825.341 642.664C-379.065 871.418 90.0907 1192.52 578.092 1144.68C1067.48 1096.57 1522.09 758.473 1981.33 546.065"
|
||||
stroke="#1767F9" stroke-opacity="0.2" stroke-width="0.953599" stroke-miterlimit="10" />
|
||||
<path d="M-664.989 594.648C-262.686 773.901 167.522 999.145 597.201 947.521C1031.57 895.343 1445.32 659.94 1859.32 485.766"
|
||||
stroke="#1767F9" stroke-opacity="0.2" stroke-width="0.953599" stroke-miterlimit="10" />
|
||||
<path d="M-533.668 495.451C-159.402 621.14 225.246 750.893 613.068 712.198C1002.68 673.319 1381.44 520.293 1759.8 394.696"
|
||||
stroke="#1767F9" stroke-opacity="0.2" stroke-width="0.953599" stroke-miterlimit="10" />
|
||||
<path d="M-424.305 378.626C-75.8938 458.417 272.65 520.846 626.352 498.128C980.053 475.409 1328.99 379.087 1677.01 295.417"
|
||||
stroke="#1767F9" stroke-opacity="0.2" stroke-width="0.953599" stroke-miterlimit="10" />
|
||||
<path d="M-331.73 264.677C322.905 357.028 955.389 307.066 1607.11 201.878" stroke="#1767F9"
|
||||
stroke-opacity="0.2" stroke-width="0.953599" stroke-miterlimit="10" />
|
||||
<path d="M-252.432 164.481C348.775 210.01 947.204 180.365 1547.35 120.891" stroke="#1767F9"
|
||||
stroke-opacity="0.2" stroke-width="0.953599" stroke-miterlimit="10" />
|
||||
<path d="M-183.93 82.362C375.685 100.001 936.092 84.8555 1495.64 54.6567" stroke="#1767F9"
|
||||
stroke-opacity="0.2" stroke-width="0.953599" stroke-miterlimit="10" />
|
||||
<path d="M-123.644 19.6628C400.924 22.8951 925.757 16.4305 1450.13 4.33252" stroke="#1767F9"
|
||||
stroke-opacity="0.2" stroke-width="0.953599" stroke-miterlimit="10" />
|
||||
<path d="M1275 -31.689C1421.46 178.963 1527.79 582.999 1740.32 678.12C1806.97 708.042 1872.57 691.973 1940.48 699.361C2046.28 710.905 2117.56 754.771 2205.64 836.871"
|
||||
stroke="#1767F9" stroke-opacity="0.2" stroke-width="0.953599" stroke-miterlimit="10" />
|
||||
<path d="M1139.7 -30.9485C1214.29 135.93 1262.89 303.547 1321.54 482.153C1347.47 560.929 1406.45 777.676 1478.06 819.696C1606.01 895.054 1677.3 709.706 1816.36 837.058"
|
||||
stroke="#1767F9" stroke-opacity="0.2" stroke-width="0.953599" stroke-miterlimit="10" />
|
||||
<path d="M1004.61 -30.2087C1050.9 155.417 1085.09 342.704 1118.15 534.055C1130.78 607.013 1162.05 919.343 1216.48 955.452C1301.45 1011.88 1348.73 709.522 1428.07 837.428"
|
||||
stroke="#1767F9" stroke-opacity="0.2" stroke-width="0.953599" stroke-miterlimit="10" />
|
||||
<path d="M869.624 -29.5576C890.916 197.441 905.728 424.809 920.342 652.823C929.203 791.35 927.285 953.887 964.183 1085.39C988.715 1033.12 994.666 828.105 1041.61 837.71"
|
||||
stroke="#1767F9" stroke-opacity="0.2" stroke-width="0.953599" stroke-miterlimit="10" />
|
||||
<path d="M734.787 -29.0005C718.454 364.23 732.472 773.991 691.541 1163.8C677.06 1081.24 696.963 895.986 656.164 837.621"
|
||||
stroke="#1767F9" stroke-opacity="0.2" stroke-width="0.953599" stroke-miterlimit="10" />
|
||||
<path d="M600.184 -28.6396C552.177 240.748 529.099 509.028 496.235 782.756C491.012 826.53 474.679 1144.68 436.128 1165.83C350.496 1212.93 368.747 830.594 272.072 837.612"
|
||||
stroke="#1767F9" stroke-opacity="0.2" stroke-width="0.953599" stroke-miterlimit="10" />
|
||||
<path d="M465.746 -28.4609C390.298 205.833 347.78 447.331 298.12 693.446C287.474 746.086 242.245 1059.99 177.508 1106.62C55.2438 1194.54 25.4215 738.79 -110.729 837.698"
|
||||
stroke="#1767F9" stroke-opacity="0.2" stroke-width="0.953599" stroke-miterlimit="10" />
|
||||
<path d="M331.428 -27.3401C220.669 197.257 162.677 446.882 81.6743 692.997C59.7209 759.675 -10.0408 1005.97 -80.3976 1034.23C-234.997 1096.29 -323.472 677.667 -492.289 837.249"
|
||||
stroke="#1767F9" stroke-opacity="0.2" stroke-width="0.953599" stroke-miterlimit="10" />
|
||||
<path d="M197.259 -26.5129C71.6218 158.189 -5.34748 380.385 -105.262 591.592C-160.278 707.861 -231.362 877.879 -337.625 907.616C-430.596 933.198 -515.037 843.525 -600.405 806.585C-702.766 762.256 -776.164 773.708 -872.508 836.876"
|
||||
stroke="#1767F9" stroke-opacity="0.2" stroke-width="0.953599" stroke-miterlimit="10" />
|
||||
<path d="M63.3342 -25.5923C-137.619 202.884 -309.544 735.287 -593.88 775.552C-701.135 790.698 -808.455 732.332 -915.114 723.928C-1037.97 714.231 -1141.13 762.53 -1251.23 836.873"
|
||||
stroke="#1767F9" stroke-opacity="0.2" stroke-width="0.953599" stroke-miterlimit="10" />
|
||||
<g filter="url(#filter9_d_840_3557)">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||
d="M-55.9287 563.247L-55.4835 567.249L-36.8704 664.385L-35.5979 669.183L-33.6794 673.806L-31.1666 678.2L-28.114 682.313L-24.5789 686.096L-20.6207 689.496L-16.3008 692.464L-11.6823 694.953L-6.82928 696.916L-1.80666 698.311L3.32027 699.095L8.4863 699.229L112.617 695.16L116.878 694.683L120.748 693.632L124.203 692.056L127.219 690.004L124.432 692.855L121.884 695.328L119.222 698.054L121.883 695.329L121.884 695.328L124.432 692.855L127.219 690.004L129.777 687.522L124.435 692.853L124.434 692.854L124.432 692.855L121.884 695.328L119.222 698.054L114.139 703.126L109.178 708.075L106.657 710.523L103.703 712.56L100.338 714.139L96.5836 715.213L92.4652 715.734L-7.62892 721.098L-12.5699 721.038L-17.4626 720.349L-22.2458 719.07L-26.858 717.238L-31.2384 714.895L-35.3268 712.084L-39.064 708.851L-42.3923 705.242L-45.2558 701.305L-47.6007 697.088L-49.3755 692.64L-50.5313 688.01L-67.1749 593.762L-67.5552 589.855L-67.3109 586.158L-63.694 576.261L-62.3212 573.067L-59.4581 566.456L-56.5243 559.681L-53.5189 552.741L-54.9015 555.958L-55.7202 559.473L-55.9287 563.247Z"
|
||||
fill="url(#paint10_linear_840_3557)" />
|
||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||
d="M-35.6235 541.035L-31.4027 540.596L-26.9199 540.656L66.7862 547.1L70.8197 547.61L74.8148 548.558L78.7338 549.91L82.5393 551.634L86.1934 553.698L89.658 556.072L92.8941 558.726L95.8622 561.632L98.5215 564.761L100.83 568.086L102.745 571.58L104.222 575.216L134.475 666.156L134.475 666.159L135.045 670.278L135.051 674.227L134.511 677.968L133.441 681.46L131.857 684.659L129.778 687.522L127.22 690.004L124.203 692.056L120.748 693.632L116.879 694.683L112.617 695.16L8.48855 699.229L3.7256 699.394L-1.53434 698.637L-6.82925 696.916L-11.6823 694.953L-16.3008 692.464L-20.6207 689.496L-24.5788 686.096L-28.114 682.313L-31.1665 678.2L-33.6791 673.806L-35.5979 669.183L-36.8704 664.385L-55.4834 567.249L-55.9287 563.247L-55.7202 559.473L-54.9015 555.958L-53.516 552.734L-51.6067 549.83L-49.2154 547.273L-46.3829 545.09L-43.1486 543.306L-39.5501 541.946L-35.6235 541.035ZM134.475 666.156L104.222 575.216L133.326 661.908L134.475 666.156Z"
|
||||
fill="url(#paint11_linear_840_3557)" />
|
||||
<path d="M133.925 666.287L134.482 670.317L134.488 674.187L133.96 677.845L132.916 681.251L131.373 684.367L129.351 687.152L126.862 689.566L123.926 691.563L120.556 693.101L116.773 694.128L112.575 694.598L8.46903 698.666L8.46656 698.666L3.75628 698.83L-1.40625 698.086L-6.63645 696.387L-11.4423 694.442L-16.0068 691.983L-20.2767 689.049L-24.1885 685.688L-27.6807 681.952L-30.6942 677.891L-33.1725 673.557L-35.0632 669.002L-36.3209 664.26L-54.9261 567.165L-55.3637 563.231L-55.1605 559.553L-54.3642 556.135L-53.0181 553.002L-51.1624 550.18L-48.8353 547.691L-46.0731 545.562L-42.9118 543.818L-39.3862 542.486L-35.5303 541.591L-31.3772 541.16L-26.943 541.219L66.7316 547.661L70.7191 548.165L74.6574 549.099L78.5252 550.434L82.2841 552.137L85.8951 554.177L89.3197 556.523L92.5178 559.146L95.4497 562.016L98.0746 565.105L100.351 568.383L102.236 571.822L103.693 575.411L133.925 666.287Z"
|
||||
stroke="url(#paint12_linear_840_3557)" stroke-opacity="0.4" stroke-width="1.1265" />
|
||||
<g opacity="0.9">
|
||||
<path d="M60.2163 594.205L68.0712 594.419L75.7403 629.021C75.7929 633.977 75.8523 644.12 75.669 645.04C75.6409 645.18 75.0891 645.463 74.1343 645.852L74.4415 647.267L77.7979 643.695L74.6109 651.899C72.835 658.306 61.909 663.606 42.6378 664.7C20.7273 665.945 7.00971 660.675 4.59185 653.2C2.83889 649.198 -5.78533 604.651 -6.29329 601.483C-6.82084 598.192 -4.22121 592.445 -4.22121 592.445L2.96305 592.641C8.04514 589.947 15.9615 588.311 25.9283 587.745C40.5744 586.913 53.7724 589.164 60.2163 594.205Z"
|
||||
fill="url(#paint13_linear_840_3557)" />
|
||||
<path d="M67.9714 593.284L67.5523 591.354L67.5109 591.173C65.3579 582.247 48.2816 578.014 28.6242 579.131C8.96571 580.247 -5.89717 586.221 -4.15137 595.243L-3.69298 597.354L-3.67531 597.353C-3.65481 597.502 -3.62821 597.652 -3.59541 597.803C-2.12166 604.591 11.8219 609.369 34.9052 608.058C57.9886 606.747 69.5427 600.521 68.069 593.733C68.0362 593.582 67.9976 593.433 67.9535 593.285L67.9714 593.284Z"
|
||||
fill="#E7F4FF" />
|
||||
<path d="M-1.39079 607.957L1.58237 621.65C1.58853 621.682 1.59579 621.714 1.60307 621.746L1.61388 621.795C3.08587 628.574 17.028 633.345 40.1113 632.034C63.1947 630.723 74.7503 624.504 73.2783 617.724C73.2677 617.676 73.2566 617.628 73.2449 617.579L70.2736 603.887L70.027 603.901C69.4958 610.187 58.0443 615.667 36.8193 616.873C15.5943 618.078 2.07081 614.016 -1.14416 607.943L-1.39079 607.957Z"
|
||||
fill="#E7F4FF" />
|
||||
<path d="M3.52431 630.593L6.51291 644.357L6.52976 644.356C8.71317 651.972 22.7352 657.369 45.3337 656.086C67.9322 654.802 79.2973 647.963 78.1605 640.288L78.1773 640.287L75.1887 626.523C76.7896 633.896 65.3385 640.597 42.2551 641.908C19.1718 643.219 5.12518 637.966 3.52431 630.593Z"
|
||||
fill="#E7F4FF" />
|
||||
<path d="M-3.27031 596.868L-3.32552 596.871L-3.68358 595.222C-4.49448 591.015 -1.4555 587.386 4.46743 584.64C10.357 581.91 18.9269 580.144 28.7234 579.587C38.5185 579.031 47.6401 579.81 54.559 581.822C61.5201 583.847 66.0414 587.048 67.0461 591.208C67.0463 591.208 67.0465 591.209 67.0467 591.21L67.0857 591.38L67.0863 591.383L67.4056 592.854L67.3495 592.857L67.496 593.347C67.5367 593.483 67.5721 593.621 67.6024 593.76C67.9375 595.303 67.5431 596.848 66.3595 598.34C65.1719 599.837 63.2019 601.261 60.4396 602.531C54.9161 605.069 46.3176 606.947 34.8061 607.601C23.2945 608.255 14.0998 607.387 7.62196 605.53C4.38241 604.602 1.84948 603.434 0.04872 602.106C-1.74595 600.784 -2.79367 599.32 -3.12878 597.777C-3.15904 597.638 -3.18354 597.499 -3.20241 597.362L-3.27031 596.868ZM2.05132 621.634L2.05146 621.634L2.04901 621.623L-0.568892 609.566C1.57803 612.139 5.56631 614.2 11.03 615.579C17.534 617.22 26.2758 617.934 36.9185 617.33C47.5611 616.725 55.7838 615.048 61.4252 612.717C66.1642 610.759 69.1709 608.3 70.1621 605.55L72.7783 617.606L72.7781 617.606L72.7809 617.617C72.7917 617.662 72.8019 617.706 72.8116 617.751C73.1463 619.292 72.7517 620.836 71.5677 622.326C70.3798 623.821 68.4094 625.243 65.6468 626.511C60.1227 629.047 51.5238 630.924 40.0122 631.578C28.5006 632.231 19.3062 631.365 12.8288 629.511C9.5895 628.584 7.0569 627.417 5.25653 626.092C3.46224 624.771 2.41514 623.309 2.08053 621.768L2.07997 621.766L2.06916 621.717L2.06887 621.716C2.06131 621.682 2.0558 621.658 2.05132 621.634ZM6.98872 644.299L6.92276 644.069L4.7451 634.04C6.69644 636.473 10.1275 638.489 14.75 639.94C21.4301 642.037 30.7795 643.022 42.3543 642.364C53.9291 641.707 62.6282 639.697 68.2461 636.902C72.1335 634.967 74.616 632.615 75.4762 630.023L77.6539 640.052L77.6882 640.284C78.2175 643.857 75.8503 647.369 70.3761 650.173C64.9224 652.966 56.4982 654.989 45.2345 655.629C33.9709 656.269 24.8841 655.24 18.3648 653.127C11.8211 651.005 8.00522 647.845 6.98872 644.299Z"
|
||||
stroke="white" stroke-opacity="0.4" stroke-width="0.934774" />
|
||||
</g>
|
||||
</g>
|
||||
<g filter="url(#filter10_d_840_3557)">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||
d="M97.531 286.901L97.166 289.3L92.8506 348.738L92.8429 351.729L93.2387 354.719L94.016 357.668L95.1511 360.538L96.6188 363.291L98.3923 365.887L100.444 368.288L102.744 370.457L105.262 372.357L107.968 373.952L110.83 375.208L113.815 376.092L175.057 389.963L177.611 390.35L180.027 390.342L182.284 389.963L184.359 389.239L182.293 390.464L180.424 391.506L178.45 392.677L180.423 391.506L180.424 391.506L182.293 390.464L184.359 389.239L186.235 388.194L182.295 390.463L182.294 390.463L182.293 390.464L180.424 391.506L178.45 392.677L174.7 394.836L171.041 396.943L169.192 397.975L167.155 398.7L164.95 399.094L162.597 399.133L160.119 398.795L101.025 386.307L98.1589 385.501L95.4186 384.337L92.8343 382.846L90.4355 381.061L88.2514 379.014L86.3102 376.741L84.6393 374.276L83.265 371.656L82.2123 368.918L81.5052 366.098L81.1659 363.233L81.2152 360.358L86.2265 302.907L86.6145 300.574L87.3332 298.461L90.9819 293.264L92.2789 291.62L94.9763 288.218L97.7404 284.733L100.572 281.162L99.2656 282.819L98.241 284.737L97.531 286.901Z"
|
||||
fill="url(#paint14_linear_840_3557)" />
|
||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||
d="M112.813 277.139L115.338 277.543L117.938 278.276L171.472 296.641L173.74 297.566L175.918 298.741L177.988 300.14L179.934 301.736L181.739 303.508L183.385 305.43L184.855 307.479L186.129 309.633L187.189 311.869L188.014 314.164L188.584 316.496L188.876 318.843L192.301 376.491L192.301 376.492L191.991 378.978L191.378 381.278L190.48 383.371L189.313 385.236L187.892 386.852L186.236 388.194L184.36 389.239L182.284 389.963L180.027 390.342L177.611 390.35L175.057 389.963L113.817 376.092L111.019 375.445L108.075 374.184L105.262 372.357L102.744 370.457L100.444 368.288L98.3923 365.887L96.6188 363.291L95.1511 360.538L94.016 357.668L93.2388 354.719L92.8429 351.729L92.8506 348.738L97.166 289.3L97.531 286.901L98.241 284.737L99.2656 282.819L100.575 281.159L102.139 279.766L103.929 278.651L105.919 277.822L108.079 277.288L110.386 277.057L112.813 277.139ZM192.301 376.491L188.876 318.843L192.295 373.839L192.301 376.491Z"
|
||||
fill="url(#paint15_linear_840_3557)" />
|
||||
<path d="M191.912 376.48L191.609 378.904L191.011 381.151L190.136 383.191L189.001 385.004L187.623 386.571L186.017 387.871L184.2 388.884L182.187 389.586L179.994 389.954L177.64 389.962L175.129 389.581L113.904 375.714L113.902 375.714L111.14 375.075L108.259 373.84L105.485 372.039L102.994 370.16L100.725 368.02L98.7009 365.651L96.9511 363.09L95.5038 360.375L94.3853 357.547L93.6202 354.644L93.231 351.704L93.2386 348.752L97.5519 289.343L97.9098 286.991L98.5992 284.89L99.5916 283.032L100.858 281.426L102.372 280.078L104.108 278.997L106.04 278.191L108.145 277.671L110.398 277.446L112.776 277.526L115.255 277.922L117.822 278.647L171.336 297.004L173.575 297.918L175.717 299.073L177.756 300.451L179.674 302.026L181.455 303.773L183.079 305.669L184.529 307.691L185.786 309.815L186.83 312.018L187.642 314.276L188.201 316.567L188.489 318.878L191.912 376.48Z"
|
||||
stroke="url(#paint16_linear_840_3557)" stroke-opacity="0.4" stroke-width="0.776052" />
|
||||
<g opacity="0.9">
|
||||
<g clip-path="url(#clip1_840_3557)">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||
d="M162.265 319.674C164.781 323.14 166.777 326.839 168.187 330.667C169.64 334.629 170.414 338.562 170.472 342.35C170.523 346.116 169.871 349.512 168.526 352.441C168.226 353.094 167.895 353.717 167.533 354.311L169.518 352.609L166.153 356.25C165.214 357.385 164.133 358.373 162.917 359.206C162.885 359.228 162.852 359.25 162.819 359.272L162.807 359.283L162.812 359.278C160.419 360.893 157.615 361.826 154.487 362.06C151.242 362.296 147.786 361.77 144.203 360.481L144.077 360.435C139.924 358.923 135.789 356.408 132.068 353.146L122.972 349.873C121.456 349.328 120.199 347.601 120.17 346.02L119.996 336.557C118.069 332.054 116.995 327.406 116.898 323.079C116.811 319.3 117.439 315.883 118.748 312.928C119.76 310.655 121.148 308.734 122.883 307.192L122.862 307.194L123.059 307.038C123.399 306.745 123.751 306.466 124.117 306.201L127.952 303.168C127.704 303.394 127.466 303.624 127.239 303.855L127.266 303.835L127.191 303.904C126.872 304.23 126.574 304.558 126.302 304.875C128.217 303.915 130.347 303.333 132.658 303.133C135.933 302.852 139.424 303.366 143.049 304.652L143.169 304.695C146.77 305.991 150.271 307.974 153.587 310.596C156.83 313.154 159.749 316.215 162.265 319.674ZM129.625 301.844C129.034 302.24 128.472 302.694 127.952 303.168L129.625 301.844ZM128.85 327.25C128.88 328.9 130.193 330.702 131.775 331.271C133.363 331.842 134.62 330.965 134.59 329.315C134.56 327.665 133.247 325.863 131.665 325.294C130.083 324.725 128.82 325.6 128.85 327.25ZM140.81 331.553C140.84 333.203 142.153 335.005 143.735 335.574C145.316 336.143 146.58 335.268 146.55 333.618C146.52 331.969 145.207 330.167 143.625 329.597C142.043 329.028 140.779 329.903 140.81 331.553ZM152.77 335.856C152.8 337.506 154.113 339.308 155.694 339.877C157.276 340.447 158.54 339.572 158.51 337.922C158.48 336.272 157.167 334.47 155.585 333.901C154.003 333.332 152.739 334.207 152.77 335.856Z"
|
||||
fill="url(#paint17_linear_840_3557)" />
|
||||
</g>
|
||||
<g clip-path="url(#clip2_840_3557)">
|
||||
<path d="M172.714 326.375C171.361 322.566 169.415 318.883 166.943 315.432C164.47 311.987 161.585 308.938 158.365 306.387C155.073 303.774 151.585 301.795 147.984 300.499L147.864 300.456C144.239 299.17 140.735 298.652 137.436 298.925C134.25 299.189 131.395 300.167 128.954 301.844C126.513 303.521 124.6 305.803 123.275 308.636C121.908 311.572 121.219 314.968 121.242 318.726C121.267 323.029 122.268 327.653 124.131 332.135L124.146 341.545C124.148 343.117 125.384 344.836 126.9 345.382L135.996 348.655C139.684 351.906 143.802 354.415 147.954 355.927L148.08 355.973C151.663 357.262 155.132 357.792 158.401 357.564C161.599 357.335 164.472 356.388 166.931 354.743C169.395 353.099 171.332 350.838 172.687 348.028C174.09 345.117 174.804 341.742 174.816 337.997C174.822 334.231 174.11 330.318 172.714 326.375ZM136.071 326.902C134.489 326.333 133.199 324.538 133.196 322.898C133.194 321.257 134.48 320.39 136.062 320.959C137.644 321.528 138.934 323.322 138.936 324.963C138.939 326.604 137.659 327.473 136.071 326.902ZM148.031 331.205C146.449 330.636 145.158 328.841 145.156 327.201C145.153 325.56 146.44 324.693 148.022 325.262C149.603 325.831 150.894 327.626 150.896 329.266C150.899 330.907 149.612 331.774 148.031 331.205ZM159.99 335.508C158.409 334.939 157.118 333.145 157.116 331.504C157.113 329.864 158.4 328.996 159.981 329.565C161.563 330.134 162.854 331.929 162.856 333.57C162.859 335.21 161.572 336.078 159.99 335.508Z"
|
||||
fill="url(#paint18_linear_840_3557)" />
|
||||
<path d="M158.22 306.692L158.221 306.692C161.395 309.207 164.239 312.212 166.678 315.61C169.117 319.014 171.035 322.644 172.369 326.4C173.745 330.288 174.448 334.146 174.442 337.86C174.43 341.555 173.726 344.883 172.343 347.752C171.006 350.523 169.097 352.752 166.666 354.373L166.666 354.373C164.242 355.996 161.41 356.929 158.257 357.155C155.033 357.38 151.614 356.857 148.08 355.586L147.955 355.541C147.955 355.541 147.955 355.541 147.955 355.541C143.861 354.049 139.8 351.575 136.164 348.37L136.085 348.3L135.995 348.268L126.9 344.995C125.591 344.524 124.522 343.039 124.52 341.679L124.506 332.269L124.506 332.177L124.466 332.081C122.628 327.662 121.641 323.102 121.617 318.859L121.617 318.859C121.593 315.153 122.273 311.804 123.621 308.909C124.928 306.115 126.814 303.866 129.221 302.212C131.627 300.558 134.442 299.594 137.584 299.333C140.836 299.064 144.29 299.575 147.866 300.843L147.984 300.886C151.536 302.164 154.975 304.115 158.22 306.692ZM132.822 322.763C132.824 324.617 134.282 326.645 136.071 327.289C137.867 327.935 139.314 326.951 139.311 325.098C139.308 323.244 137.85 321.216 136.061 320.572C134.272 319.928 132.819 320.909 132.822 322.763ZM144.782 327.066C144.784 328.92 146.242 330.948 148.031 331.592C149.82 332.236 151.273 331.255 151.271 329.401C151.268 327.547 149.81 325.519 148.021 324.875C146.232 324.231 144.779 325.212 144.782 327.066ZM156.741 331.369C156.744 333.223 158.202 335.252 159.991 335.895C161.78 336.539 163.233 335.558 163.23 333.704C163.228 331.851 161.77 329.822 159.981 329.178C158.192 328.535 156.739 329.516 156.741 331.369Z"
|
||||
stroke="url(#paint19_linear_840_3557)" stroke-opacity="0.8"
|
||||
stroke-width="0.782645" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g filter="url(#filter11_d_840_3557)">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||
d="M1490.37 488.023L1490.12 491.469L1477.55 575.366L1476.62 579.522L1475.14 583.551L1473.14 587.404L1470.66 591.035L1467.77 594.4L1464.49 597.451L1460.89 600.145L1457.02 602.439L1452.93 604.29L1448.67 605.66L1444.31 606.51L1439.88 606.805L1350.5 606.934L1346.83 606.674L1343.48 605.908L1340.46 604.677L1337.8 603.023L1340.29 605.37L1342.56 607.4L1344.94 609.644L1342.56 607.401L1342.56 607.4L1340.29 605.37L1337.8 603.023L1335.52 600.985L1340.29 605.368L1340.29 605.369L1340.29 605.37L1342.56 607.4L1344.94 609.644L1349.47 613.814L1353.89 617.884L1356.14 619.894L1358.74 621.537L1361.68 622.774L1364.94 623.564L1368.48 623.868L1454.46 624.988L1458.69 624.764L1462.86 624.004L1466.91 622.741L1470.8 621.011L1474.47 618.851L1477.88 616.3L1480.97 613.399L1483.7 610.19L1486.02 606.716L1487.88 603.021L1489.25 599.147L1490.08 595.139L1501.07 513.785L1501.26 510.424L1500.92 507.264L1497.47 498.907L1496.19 496.218L1493.5 490.651L1490.75 484.947L1487.94 479.103L1489.23 481.812L1490.06 484.796L1490.37 488.023Z"
|
||||
fill="url(#paint20_linear_840_3557)" />
|
||||
<g filter="url(#filter12_b_840_3557)">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||
d="M1472.19 469.692L1468.56 469.463L1464.72 469.669L1384.63 478.448L1381.19 479.024L1377.8 479.976L1374.49 481.271L1371.29 482.881L1368.23 484.777L1365.34 486.932L1362.66 489.319L1360.22 491.912L1358.05 494.686L1356.18 497.616L1354.66 500.677L1353.53 503.845L1330.76 582.836L1330.76 582.838L1330.41 586.388L1330.54 589.773L1331.14 592.961L1332.17 595.916L1333.64 598.603L1335.52 600.985L1337.8 603.023L1340.46 604.677L1343.48 605.908L1346.83 606.674L1350.5 606.934L1439.88 606.805L1443.97 606.781L1448.45 605.949L1452.93 604.29L1457.02 602.439L1460.89 600.145L1464.49 597.451L1467.77 594.4L1470.66 591.035L1473.14 587.404L1475.14 583.551L1476.62 579.522L1477.55 575.366L1490.12 491.469L1490.37 488.023L1490.06 484.796L1489.23 481.812L1487.93 479.097L1486.2 476.674L1484.06 474.566L1481.55 472.793L1478.72 471.377L1475.59 470.336L1472.19 469.692ZM1330.76 582.836L1353.53 503.845L1331.59 579.155L1330.76 582.836Z"
|
||||
fill="url(#paint21_linear_840_3557)" />
|
||||
<path d="M1331.3 582.943L1330.97 586.404L1331.09 589.712L1331.67 592.818L1332.68 595.69L1334.11 598.297L1335.93 600.604L1338.14 602.578L1340.71 604.182L1343.64 605.378L1346.91 606.125L1350.52 606.381L1439.88 606.251L1439.88 606.251L1443.92 606.228L1448.3 605.413L1452.72 603.778L1456.77 601.947L1460.59 599.684L1464.14 597.026L1467.37 594.016L1470.22 590.698L1472.66 587.119L1474.63 583.327L1476.09 579.366L1477 575.265L1489.57 491.408L1489.81 488.03L1489.51 484.896L1488.71 482.007L1487.46 479.38L1485.77 477.035L1483.7 474.992L1481.27 473.269L1478.51 471.889L1475.45 470.873L1472.12 470.242L1468.56 470.017L1464.77 470.221L1384.71 478.996L1381.31 479.565L1377.98 480.501L1374.72 481.777L1371.56 483.364L1368.54 485.235L1365.69 487.361L1363.05 489.716L1360.64 492.273L1358.5 495.006L1356.67 497.889L1355.17 500.895L1354.05 504.015L1331.3 582.943Z"
|
||||
stroke="url(#paint22_linear_840_3557)" stroke-opacity="0.6"
|
||||
stroke-width="1.10656" />
|
||||
</g>
|
||||
<g clip-path="url(#clip3_840_3557)">
|
||||
<path d="M1426.6 497.89C1427.69 497.833 1428.7 497.927 1429.61 498.154L1428.4 493.752L1433.23 500.28C1434.91 502.173 1435.43 505.031 1434.37 508.304L1433.62 510.61L1444.81 509.828C1445.13 509.806 1445.44 509.799 1445.75 509.793C1446.06 509.803 1446.37 509.812 1446.65 509.855C1446.72 509.864 1446.78 509.873 1446.84 509.882L1445.82 505.276L1450.59 511.724C1450.68 511.821 1450.76 511.92 1450.84 512.02C1450.99 512.213 1451.13 512.438 1451.26 512.648C1451.39 512.874 1451.49 513.101 1451.59 513.345C1451.7 513.588 1451.76 513.834 1451.83 514.096C1451.89 514.357 1451.93 514.62 1451.96 514.9C1451.98 515.18 1451.99 515.462 1452 515.743C1451.99 516.025 1451.97 516.324 1451.93 516.608C1451.9 516.908 1451.84 517.194 1451.77 517.496C1451.71 517.798 1451.61 518.102 1451.51 518.407L1448.04 529.09L1450.46 528.921C1451.63 528.838 1452.72 528.92 1453.69 529.146L1452.98 525.188L1457.58 531.373C1459.19 533.207 1459.68 535.916 1458.67 539.022C1456.66 545.205 1449.82 550.598 1443.42 551.046L1440.85 551.225L1437.37 561.909C1435.71 567.081 1429.97 571.615 1424.61 571.99L1408.82 573.094L1408.83 573.057L1403.78 566.543L1411.16 565.893L1411.33 565.358C1411.44 565.005 1411.53 564.655 1411.57 564.308C1411.62 563.96 1411.61 563.632 1411.57 563.306C1411.53 562.98 1411.46 562.688 1411.33 562.415C1411.21 562.142 1411.06 561.886 1410.88 561.648C1409.93 560.462 1408.18 559.88 1406.11 560.057C1405.65 560.088 1405.18 560.168 1404.71 560.28C1404.23 560.392 1403.75 560.534 1403.26 560.725C1402.77 560.916 1402.31 561.12 1401.84 561.373C1401.36 561.625 1400.91 561.907 1400.48 562.219C1399.3 563.068 1397.78 564.474 1397.12 566.492L1394.65 574.084L1378.98 575.18C1378.66 575.203 1378.35 575.209 1378.04 575.199C1377.73 575.19 1377.42 575.164 1377.12 575.138C1376.82 575.096 1376.54 575.053 1376.25 574.98C1375.98 574.905 1375.71 574.83 1375.45 574.739C1375.18 574.648 1374.94 574.524 1374.7 574.399C1374.46 574.275 1374.25 574.134 1374.03 573.976C1373.82 573.819 1373.63 573.66 1373.44 573.486C1373.25 573.311 1373.08 573.12 1372.92 572.912C1372.77 572.717 1372.64 572.52 1372.51 572.311L1372.49 572.269C1372.46 572.215 1372.43 572.161 1372.4 572.106L1368.09 566.543L1372.28 566.173L1377.03 551.555L1385.13 550.989C1386.76 550.875 1388.55 550.108 1390.19 548.82C1390.65 548.458 1391.07 548.085 1391.47 547.666C1391.86 547.263 1392.23 546.83 1392.56 546.384C1392.88 545.939 1393.16 545.481 1393.41 545.009C1393.66 544.538 1393.85 544.071 1394 543.607C1395.1 540.024 1392.99 537.212 1389.38 537.465L1381.43 538.021L1381.43 538.015L1381.43 538.016L1376.48 531.352L1383.84 530.607L1386.33 522.933C1386.53 522.324 1386.8 521.711 1387.11 521.094C1387.44 520.476 1387.82 519.886 1388.25 519.308C1388.68 518.73 1389.16 518.164 1389.7 517.642C1390.23 517.103 1390.8 516.61 1391.39 516.161C1391.98 515.713 1392.61 515.294 1393.26 514.92C1393.9 514.546 1394.56 514.233 1395.22 513.968C1395.88 513.703 1396.56 513.483 1397.22 513.328C1397.88 513.172 1398.54 513.063 1399.17 513.035L1410.38 512.251L1411.18 509.784C1411.24 509.608 1411.3 509.416 1411.37 509.239C1411.4 509.178 1411.42 509.117 1411.45 509.054C1411.49 508.932 1411.54 508.808 1411.6 508.691C1411.64 508.602 1411.68 508.509 1411.72 508.416C1411.76 508.323 1411.81 508.23 1411.84 508.141C1411.89 508.052 1411.94 507.959 1411.98 507.865C1412.03 507.772 1412.08 507.679 1412.12 507.59C1412.21 507.411 1412.32 507.231 1412.43 507.052L1412.75 506.513C1412.86 506.333 1412.98 506.152 1413.11 505.971C1413.17 505.881 1413.23 505.794 1413.29 505.708C1413.35 505.621 1413.41 505.535 1413.48 505.444C1413.6 505.264 1413.74 505.098 1413.87 504.931C1413.91 504.89 1413.94 504.848 1413.97 504.806C1414.08 504.676 1414.19 504.542 1414.3 504.416C1414.44 504.25 1414.59 504.083 1414.74 503.916C1414.9 503.748 1415.04 503.597 1415.21 503.429C1415.36 503.278 1415.53 503.109 1415.7 502.957L1416.19 502.5C1416.3 502.397 1416.42 502.301 1416.54 502.202C1416.59 502.154 1416.65 502.106 1416.71 502.056C1416.8 501.988 1416.89 501.915 1416.98 501.842C1417.07 501.769 1417.16 501.696 1417.24 501.628C1417.42 501.49 1417.61 501.351 1417.78 501.23C1417.98 501.091 1418.15 500.97 1418.34 500.847L1418.9 500.479C1419.03 500.391 1419.17 500.31 1419.31 500.233C1419.36 500.202 1419.42 500.172 1419.47 500.142C1419.65 500.035 1419.85 499.927 1420.05 499.819C1420.15 499.765 1420.25 499.716 1420.34 499.666C1420.44 499.616 1420.54 499.566 1420.64 499.512C1420.83 499.42 1421.03 499.328 1421.24 499.235C1421.43 499.143 1421.64 499.066 1421.84 498.989C1421.95 498.951 1422.05 498.913 1422.14 498.874C1422.24 498.836 1422.34 498.798 1422.44 498.76C1422.65 498.683 1422.85 498.622 1423.05 498.561L1423.65 498.378C1423.85 498.317 1424.05 498.272 1424.26 498.226L1424.35 498.206C1424.53 498.167 1424.69 498.13 1424.86 498.106C1424.95 498.091 1425.05 498.072 1425.15 498.054C1425.25 498.035 1425.35 498.016 1425.45 498.002C1425.64 497.973 1425.85 497.943 1426.03 497.93L1426.6 497.89Z"
|
||||
fill="url(#paint23_linear_840_3557)" />
|
||||
</g>
|
||||
<g opacity="0.9" clip-path="url(#clip4_840_3557)">
|
||||
<path d="M1419.65 565.329L1403.86 566.433L1406.37 558.697C1406.49 558.344 1406.57 557.994 1406.61 557.647C1406.66 557.299 1406.65 556.971 1406.61 556.645C1406.57 556.319 1406.5 556.027 1406.38 555.754C1406.25 555.481 1406.1 555.225 1405.92 554.987C1404.97 553.801 1403.23 553.219 1401.15 553.396C1400.7 553.427 1400.23 553.507 1399.75 553.619C1399.27 553.731 1398.79 553.873 1398.3 554.064C1397.82 554.255 1397.36 554.459 1396.88 554.712C1396.4 554.964 1395.95 555.246 1395.52 555.558C1394.34 556.407 1392.82 557.813 1392.16 559.831L1389.7 567.423L1374.02 568.519C1373.7 568.542 1373.39 568.548 1373.08 568.538C1372.77 568.528 1372.47 568.503 1372.16 568.477C1371.86 568.435 1371.58 568.392 1371.29 568.319C1371.02 568.244 1370.75 568.169 1370.49 568.078C1370.22 567.987 1369.98 567.863 1369.74 567.738C1369.5 567.614 1369.29 567.473 1369.08 567.315C1368.86 567.158 1368.67 566.999 1368.48 566.825C1368.29 566.65 1368.12 566.459 1367.96 566.251C1367.8 566.043 1367.67 565.833 1367.53 565.608C1367.41 565.382 1367.28 565.156 1367.2 564.911C1367.1 564.668 1367.01 564.423 1366.95 564.161C1366.89 563.9 1366.84 563.637 1366.8 563.358C1366.78 563.078 1366.75 562.798 1366.76 562.515C1366.75 562.234 1366.79 561.934 1366.82 561.635C1366.85 561.335 1366.9 561.034 1366.98 560.731C1367.04 560.429 1367.13 560.126 1367.23 559.822L1372.08 544.894L1380.17 544.328C1381.8 544.214 1383.6 543.447 1385.23 542.158C1385.69 541.797 1386.11 541.424 1386.51 541.005C1386.9 540.602 1387.27 540.169 1387.6 539.723C1387.92 539.278 1388.2 538.82 1388.45 538.348C1388.71 537.877 1388.89 537.41 1389.04 536.946C1390.14 533.362 1388.03 530.551 1384.42 530.804L1376.47 531.36L1381.38 516.272C1381.57 515.663 1381.84 515.05 1382.15 514.433C1382.49 513.815 1382.86 513.225 1383.29 512.647C1383.73 512.069 1384.21 511.503 1384.74 510.981C1385.27 510.442 1385.84 509.949 1386.43 509.5C1387.02 509.052 1387.65 508.633 1388.3 508.259C1388.94 507.885 1389.6 507.572 1390.27 507.307C1390.93 507.042 1391.6 506.822 1392.26 506.667C1392.92 506.511 1393.58 506.402 1394.21 506.374L1405.42 505.59L1406.22 503.123C1406.28 502.947 1406.34 502.755 1406.41 502.578C1406.49 502.4 1406.55 502.208 1406.64 502.03C1406.72 501.852 1406.81 501.658 1406.89 501.48C1406.98 501.302 1407.07 501.107 1407.16 500.929C1407.25 500.75 1407.36 500.57 1407.47 500.391L1407.79 499.852C1407.9 499.672 1408.02 499.491 1408.15 499.31C1408.27 499.129 1408.39 498.964 1408.52 498.783C1408.64 498.603 1408.78 498.437 1408.91 498.27C1409.05 498.104 1409.19 497.922 1409.34 497.755C1409.48 497.589 1409.63 497.422 1409.79 497.255C1409.94 497.087 1410.09 496.936 1410.26 496.768C1410.4 496.617 1410.57 496.448 1410.74 496.296L1411.23 495.839C1411.4 495.686 1411.57 495.549 1411.75 495.395C1411.93 495.258 1412.11 495.104 1412.29 494.967C1412.46 494.829 1412.65 494.69 1412.83 494.569C1413.02 494.43 1413.19 494.309 1413.38 494.186L1413.94 493.818C1414.13 493.695 1414.33 493.587 1414.51 493.481C1414.69 493.374 1414.89 493.266 1415.09 493.158C1415.29 493.05 1415.48 492.959 1415.68 492.851C1415.88 492.759 1416.07 492.667 1416.28 492.574C1416.48 492.482 1416.68 492.405 1416.89 492.328C1417.09 492.251 1417.28 492.176 1417.49 492.099C1417.69 492.022 1417.89 491.961 1418.09 491.9L1418.69 491.717C1418.89 491.656 1419.09 491.611 1419.3 491.565C1419.51 491.518 1419.71 491.474 1419.9 491.445C1420.09 491.416 1420.3 491.37 1420.49 491.341C1420.68 491.312 1420.89 491.282 1421.07 491.269L1421.64 491.229C1427.89 490.901 1431.39 495.556 1429.41 501.643L1428.66 503.949L1439.85 503.167C1440.17 503.145 1440.48 503.138 1440.79 503.132C1441.1 503.142 1441.41 503.151 1441.69 503.194C1441.99 503.236 1442.27 503.279 1442.55 503.338C1442.83 503.397 1443.09 503.488 1443.36 503.579C1443.62 503.67 1443.87 503.778 1444.11 503.902C1444.35 504.026 1444.56 504.168 1444.78 504.309C1445 504.45 1445.19 504.625 1445.38 504.8C1445.57 504.974 1445.73 505.166 1445.88 505.359C1446.03 505.552 1446.17 505.777 1446.3 505.987C1446.43 506.213 1446.53 506.44 1446.64 506.684C1446.74 506.927 1446.8 507.173 1446.87 507.435C1446.93 507.696 1446.98 507.959 1447 508.239C1447.02 508.519 1447.03 508.801 1447.04 509.082C1447.03 509.364 1447.01 509.663 1446.97 509.947C1446.94 510.247 1446.88 510.533 1446.81 510.835C1446.75 511.137 1446.65 511.441 1446.55 511.746L1443.08 522.429L1445.5 522.26C1451.98 521.806 1455.67 526.339 1453.71 532.361C1451.7 538.543 1444.86 543.937 1438.46 544.385L1435.89 544.564L1432.42 555.248C1430.75 560.42 1425.01 564.954 1419.65 565.329Z"
|
||||
fill="url(#paint24_linear_840_3557)" />
|
||||
</g>
|
||||
</g>
|
||||
<g filter="url(#filter13_d_840_3557)">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||
d="M1244.77 55.2975L1245.04 57.4023L1247.77 109.473L1247.73 112.09L1247.33 114.698L1246.6 117.264L1245.55 119.755L1244.22 122.137L1242.62 124.377L1240.79 126.442L1238.74 128.298L1236.5 129.916L1234.11 131.263L1231.58 132.312L1228.95 133.033L1175.14 144.09L1172.9 144.383L1170.78 144.334L1168.81 143.963L1167.01 143.293L1168.8 144.401L1170.41 145.345L1172.12 146.405L1170.42 145.346L1170.41 145.345L1168.8 144.401L1167.01 143.293L1165.39 142.346L1168.8 144.4L1168.8 144.401L1168.8 144.401L1170.41 145.345L1172.12 146.405L1175.36 148.359L1178.53 150.267L1180.13 151.202L1181.9 151.872L1183.82 152.255L1185.87 152.331L1188.05 152.078L1239.96 142.193L1242.48 141.539L1244.9 140.569L1247.19 139.31L1249.32 137.79L1251.26 136.038L1253 134.084L1254.51 131.957L1255.76 129.69L1256.72 127.313L1257.39 124.859L1257.74 122.358L1257.75 119.842L1254.37 69.4982L1254.07 67.4506L1253.48 65.5889L1250.38 60.9791L1249.28 59.5176L1246.98 56.4947L1244.62 53.3971L1242.21 50.2238L1243.32 51.6961L1244.18 53.3918L1244.77 55.2975Z"
|
||||
fill="url(#paint25_linear_840_3557)" />
|
||||
<g filter="url(#filter14_b_840_3557)">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||
d="M1231.57 46.4894L1229.35 46.7977L1227.07 47.3938L1179.91 62.5175L1177.91 63.2871L1175.99 64.2765L1174.15 65.4634L1172.42 66.8262L1170.81 68.3439L1169.34 69.9962L1168.02 71.763L1166.86 73.6249L1165.9 75.5621L1165.13 77.5555L1164.6 79.5857L1164.3 81.6331L1160.29 132.001L1160.29 132.003L1160.52 134.183L1161.01 136.205L1161.76 138.052L1162.75 139.704L1163.96 141.142L1165.39 142.345L1167.01 143.293L1168.81 143.963L1170.78 144.334L1172.9 144.383L1175.14 144.089L1228.95 133.032L1231.41 132.516L1234.01 131.464L1236.5 129.916L1238.74 128.298L1240.79 126.441L1242.62 124.377L1244.22 122.137L1245.55 119.755L1246.6 117.264L1247.33 114.698L1247.73 112.089L1247.77 109.473L1245.04 57.4019L1244.77 55.2972L1244.18 53.3914L1243.32 51.6958L1242.2 50.2204L1240.86 48.9747L1239.31 47.9676L1237.59 47.2075L1235.71 46.7024L1233.69 46.4604L1231.57 46.4894ZM1160.29 132.001L1164.3 81.6331L1160.34 129.682L1160.29 132.001Z"
|
||||
fill="url(#paint26_linear_840_3557)" />
|
||||
<path d="M1160.68 131.998L1160.9 134.116L1161.38 136.085L1162.11 137.878L1163.07 139.477L1164.24 140.866L1165.61 142.026L1167.18 142.94L1168.92 143.586L1170.82 143.945L1172.87 143.993L1175.07 143.705L1228.87 132.652L1228.87 132.651L1231.3 132.142L1233.83 131.116L1236.28 129.592L1238.49 127.995L1240.51 126.167L1242.32 124.134L1243.89 121.928L1245.2 119.584L1246.23 117.135L1246.95 114.615L1247.34 112.056L1247.38 109.479L1244.66 57.4376L1244.38 55.3801L1243.82 53.5377L1242.99 51.903L1241.91 50.4825L1240.62 49.2827L1239.13 48.311L1237.46 47.5756L1235.63 47.0854L1233.67 46.8498L1231.6 46.8782L1229.43 47.18L1227.17 47.7676L1180.04 62.8846L1178.07 63.6428L1176.18 64.6138L1174.38 65.7803L1172.68 67.1212L1171.09 68.6155L1169.64 70.2427L1168.34 71.9824L1167.2 73.8145L1166.25 75.7188L1165.51 77.6753L1164.98 79.6638L1164.69 81.6764L1160.68 131.998Z"
|
||||
stroke="url(#paint27_linear_840_3557)" stroke-opacity="0.6"
|
||||
stroke-width="0.778219" />
|
||||
</g>
|
||||
<g opacity="0.9">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||
d="M1216.75 68.9201C1215.59 67.2258 1213.78 66.2582 1213.45 66.1666C1213.12 66.0749 1212.86 66.0912 1212.86 66.0912L1214.2 68.6642C1213.2 69.2027 1212.35 70.3147 1212.13 71.4898L1210.77 78.8634C1210.75 78.9539 1210.74 79.0426 1210.73 79.1296L1198.13 83.431C1198.13 83.3479 1198.12 83.2655 1198.11 83.1843L1197.29 76.7346L1197.29 76.735C1197.29 76.735 1197.26 76.0812 1197 75.6964C1195.83 74.0021 1194.03 73.0346 1193.69 72.9429C1193.36 72.8512 1193.11 72.8675 1193.11 72.8675L1194.43 75.414C1193.1 76.1308 1192.16 77.7674 1192.33 79.1008L1193.1 85.1468L1190.62 85.9928C1186.05 87.5544 1182.19 92.736 1182.01 97.5661L1181.58 109.227C1181.39 114.057 1184.95 116.707 1189.53 115.145L1212.39 107.342L1213.74 109.644L1192.19 117.002C1191.1 117.373 1190.15 118.426 1189.77 119.568L1189.24 118.867L1187.06 118.513C1187.06 118.513 1187.01 119.166 1187.28 119.55C1188.44 121.245 1189.57 122.019 1190.11 122.21C1190.5 122.349 1190.92 122.376 1191.12 122.381C1191.39 122.395 1191.68 122.354 1191.99 122.249L1214.08 114.709C1215.45 114.241 1216.6 112.686 1216.66 111.237C1216.67 110.882 1216.62 110.566 1216.51 110.299C1216.47 110.163 1216.43 110.025 1216.38 109.897C1215.74 108.233 1213.83 107.189 1213.12 107.097C1213.12 107.096 1213.12 107.096 1213.11 107.095L1217.14 105.72C1221.71 104.159 1225.57 98.9772 1225.75 94.1471L1226.19 82.4861C1226.25 80.9234 1225.91 79.5889 1225.28 78.5514L1225.29 78.5528C1225.29 78.5528 1224.86 77.8174 1224.6 77.4357C1223.43 75.7414 1221.62 74.8285 1221.2 74.6428C1220.78 74.4572 1220.06 74.2147 1220.06 74.2147L1221.4 76.1514C1220.44 76.0528 1219.37 76.1813 1218.23 76.5678L1215.76 77.4138L1217 70.6791C1217.07 70.3351 1217.07 70.0155 1217.02 69.7297C1216.99 69.5043 1216.92 69.1599 1216.75 68.9201ZM1214.71 88.1871C1215.06 88.5192 1215.26 89.0344 1215.23 89.679L1215.21 90.2214L1214.71 88.1871ZM1196.89 99.9633C1196.42 100.659 1195.74 101.225 1195 101.478C1194.1 101.785 1193.33 101.549 1192.93 100.941L1196.89 99.9633Z"
|
||||
fill="url(#paint28_linear_840_3557)" />
|
||||
<g clip-path="url(#clip5_840_3557)">
|
||||
<path d="M1213.09 75.1799L1215.57 74.3339C1220.14 72.7724 1223.7 75.4221 1223.52 80.2522L1223.08 91.9133C1222.9 96.7434 1219.05 101.925 1214.47 103.487L1186.86 112.912C1182.29 114.473 1178.73 111.823 1178.91 106.993L1179.35 95.3323C1179.53 90.5022 1183.38 85.3206 1187.96 83.759L1190.44 82.913L1189.67 76.867C1189.5 75.5147 1190.46 73.8506 1191.82 73.1503C1193.19 72.45 1194.43 72.9786 1194.6 74.3309L1195.44 80.9505C1195.45 81.0317 1195.46 81.1141 1195.46 81.1972L1208.06 76.8957C1208.07 76.8087 1208.08 76.7201 1208.1 76.6296L1209.47 69.256C1209.75 67.7497 1211.06 66.3469 1212.41 66.1231C1213.75 65.8992 1214.62 66.9389 1214.34 68.4452L1213.09 75.1799ZM1190.04 95.136L1189.95 97.4682C1189.9 98.9172 1190.96 99.7121 1192.34 99.2437C1193.71 98.7752 1194.87 97.2207 1194.92 95.7717L1195.01 93.4395C1195.06 91.9905 1193.99 91.1955 1192.62 91.664C1191.25 92.1325 1190.09 93.687 1190.04 95.136ZM1207.6 89.1417L1207.51 91.4739C1207.46 92.9229 1208.52 93.7178 1209.9 93.2493C1211.27 92.7809 1212.42 91.2264 1212.48 89.7774L1212.57 87.4451C1212.62 85.9961 1211.55 85.2012 1210.18 85.6697C1208.81 86.1381 1207.65 87.6927 1207.6 89.1417ZM1189.32 120.015C1187.95 120.484 1186.88 119.689 1186.94 118.24C1186.99 116.791 1188.15 115.236 1189.52 114.768L1211.61 107.228C1212.98 106.759 1214.05 107.554 1213.99 109.003C1213.94 110.452 1212.78 112.007 1211.41 112.475L1189.32 120.015Z"
|
||||
fill="url(#paint29_linear_840_3557)" />
|
||||
<path d="M1212.58 75.2641L1212.46 75.9324L1213.07 75.7245L1215.55 74.8785C1219.84 73.4142 1223.18 75.8989 1223.01 80.4283L1222.57 92.0893C1222.4 96.6187 1218.78 101.478 1214.49 102.942L1186.88 112.367C1182.59 113.831 1179.25 111.347 1179.42 106.817L1179.86 95.1562C1180.03 90.6269 1183.65 85.7679 1187.94 84.3036L1190.42 83.4576L1191.02 83.2497L1190.95 82.6498L1190.18 76.6038L1189.67 76.867L1190.18 76.6038C1190.04 75.5322 1190.81 74.2135 1191.89 73.6586C1192.97 73.1036 1193.95 73.5225 1194.09 74.5941C1194.09 74.5941 1194.09 74.5941 1194.09 74.5941L1194.93 81.2137L1194.93 81.2139C1194.94 81.2782 1194.94 81.3437 1194.95 81.4101L1194.96 81.9062L1195.44 81.7418L1208.04 77.4403L1208.52 77.2759L1208.58 76.7573C1208.58 76.6879 1208.59 76.6174 1208.61 76.5457L1208.61 76.5455L1209.97 69.1718C1210.19 67.9782 1211.24 66.8666 1212.3 66.6892C1213.37 66.5118 1214.05 67.3357 1213.83 68.5293L1212.58 75.2641ZM1189.52 95.312L1189.43 97.6443C1189.37 99.394 1190.66 100.354 1192.32 99.7883C1193.97 99.2226 1195.37 97.3454 1195.44 95.5956L1195.52 93.2634C1195.59 91.5136 1194.3 90.5537 1192.64 91.1194C1190.98 91.6851 1189.59 93.5623 1189.52 95.312ZM1207.08 89.3177L1206.99 91.6499C1206.93 93.3997 1208.22 94.3596 1209.88 93.7939C1211.53 93.2282 1212.93 91.3511 1213 89.6013L1213.08 87.2691C1213.15 85.5193 1211.86 84.5594 1210.2 85.1251C1208.54 85.6908 1207.15 87.5679 1207.08 89.3177ZM1189.34 119.471C1188.25 119.842 1187.41 119.212 1187.45 118.064C1187.49 116.915 1188.41 115.684 1189.5 115.312L1211.59 107.772C1212.67 107.401 1213.52 108.031 1213.48 109.179C1213.43 110.327 1212.52 111.559 1211.43 111.931L1189.34 119.471Z"
|
||||
stroke="url(#paint30_linear_840_3557)" stroke-opacity="0.4"
|
||||
stroke-width="1.08995" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<defs>
|
||||
<filter id="filter0_f_840_3557" x="92.914" y="485.027" width="1544.88" height="1375.86"
|
||||
filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix" />
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
|
||||
<feGaussianBlur stdDeviation="38.05" result="effect1_foregroundBlur_840_3557" />
|
||||
</filter>
|
||||
<filter id="filter1_f_840_3557" x="-13.886" y="243.016" width="1758.48" height="1589.46"
|
||||
filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix" />
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
|
||||
<feGaussianBlur stdDeviation="91.45" result="effect1_foregroundBlur_840_3557" />
|
||||
</filter>
|
||||
<filter id="filter2_f_840_3557" x="16.114" y="243.016" width="1758.48" height="1589.46"
|
||||
filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix" />
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
|
||||
<feGaussianBlur stdDeviation="91.45" result="effect1_foregroundBlur_840_3557" />
|
||||
</filter>
|
||||
<filter id="filter3_f_840_3557" x="-184.739" y="-112.376" width="961.341" height="1074.36"
|
||||
filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix" />
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
|
||||
<feGaussianBlur stdDeviation="40.5634" result="effect1_foregroundBlur_840_3557" />
|
||||
</filter>
|
||||
<filter id="filter4_f_840_3557" x="-219.823" y="-87.5647" width="741.972" height="1031.55"
|
||||
filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix" />
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
|
||||
<feGaussianBlur stdDeviation="30" result="effect1_foregroundBlur_840_3557" />
|
||||
</filter>
|
||||
<filter id="filter5_f_840_3557" x="-199.823" y="-67.5649" width="899.049" height="1019.7"
|
||||
filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix" />
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
|
||||
<feGaussianBlur stdDeviation="20" result="effect1_foregroundBlur_840_3557" />
|
||||
</filter>
|
||||
<filter id="filter6_f_840_3557" x="761.873" y="-112.376" width="961.341" height="719.043"
|
||||
filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix" />
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
|
||||
<feGaussianBlur stdDeviation="40.5634" result="effect1_foregroundBlur_840_3557" />
|
||||
</filter>
|
||||
<filter id="filter7_f_840_3557" x="1036.33" y="-69" width="610.788" height="636.45"
|
||||
filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix" />
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
|
||||
<feGaussianBlur stdDeviation="20" result="effect1_foregroundBlur_840_3557" />
|
||||
</filter>
|
||||
<filter id="filter8_f_840_3557" x="849.249" y="-59" width="799.909" height="633.636"
|
||||
filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix" />
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape" />
|
||||
<feGaussianBlur stdDeviation="15" result="effect1_foregroundBlur_840_3557" />
|
||||
</filter>
|
||||
<filter id="filter9_d_840_3557" x="-82.7739" y="540.596" width="233.044" height="214.744"
|
||||
filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix" />
|
||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
|
||||
result="hardAlpha" />
|
||||
<feMorphology radius="7.60935" operator="erode" in="SourceAlpha"
|
||||
result="effect1_dropShadow_840_3557" />
|
||||
<feOffset dy="19.0234" />
|
||||
<feGaussianBlur stdDeviation="11.414" />
|
||||
<feColorMatrix type="matrix"
|
||||
values="0 0 0 0 0 0 0 0 0 0.128299 0 0 0 0 0.801872 0 0 0 0.15 0" />
|
||||
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_840_3557" />
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_840_3557" result="shape" />
|
||||
</filter>
|
||||
<filter id="filter10_d_840_3557" x="65.9472" y="277.057" width="141.573" height="156.318"
|
||||
filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix" />
|
||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
|
||||
result="hardAlpha" />
|
||||
<feMorphology radius="7.60935" operator="erode" in="SourceAlpha"
|
||||
result="effect1_dropShadow_840_3557" />
|
||||
<feOffset dy="19.0234" />
|
||||
<feGaussianBlur stdDeviation="11.414" />
|
||||
<feColorMatrix type="matrix"
|
||||
values="0 0 0 0 0 0 0 0 0 0.128299 0 0 0 0 0.801872 0 0 0 0.15 0" />
|
||||
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_840_3557" />
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_840_3557" result="shape" />
|
||||
</filter>
|
||||
<filter id="filter11_d_840_3557" x="1315.19" y="469.463" width="201.282" height="189.767"
|
||||
filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix" />
|
||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
|
||||
result="hardAlpha" />
|
||||
<feMorphology radius="7.60935" operator="erode" in="SourceAlpha"
|
||||
result="effect1_dropShadow_840_3557" />
|
||||
<feOffset dy="19.0234" />
|
||||
<feGaussianBlur stdDeviation="11.414" />
|
||||
<feColorMatrix type="matrix"
|
||||
values="0 0 0 0 0 0 0 0 0 0.128299 0 0 0 0 0.801872 0 0 0 0.15 0" />
|
||||
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_840_3557" />
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_840_3557" result="shape" />
|
||||
</filter>
|
||||
<filter id="filter12_b_840_3557" x="1314.37" y="453.419" width="192.043" height="169.559"
|
||||
filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix" />
|
||||
<feGaussianBlur in="BackgroundImageFix" stdDeviation="8.02187" />
|
||||
<feComposite in2="SourceAlpha" operator="in" result="effect1_backgroundBlur_840_3557" />
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="effect1_backgroundBlur_840_3557"
|
||||
result="shape" />
|
||||
</filter>
|
||||
<filter id="filter13_d_840_3557" x="1145.07" y="46.4604" width="127.896" height="140.113"
|
||||
filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix" />
|
||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"
|
||||
result="hardAlpha" />
|
||||
<feMorphology radius="7.60935" operator="erode" in="SourceAlpha"
|
||||
result="effect1_dropShadow_840_3557" />
|
||||
<feOffset dy="19.0234" />
|
||||
<feGaussianBlur stdDeviation="11.414" />
|
||||
<feColorMatrix type="matrix"
|
||||
values="0 0 0 0 0 0 0 0 0 0.128299 0 0 0 0 0.801872 0 0 0 0.15 0" />
|
||||
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_840_3557" />
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_840_3557" result="shape" />
|
||||
</filter>
|
||||
<filter id="filter14_b_840_3557" x="1155.27" y="41.4442" width="97.517" height="107.955"
|
||||
filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix" />
|
||||
<feGaussianBlur in="BackgroundImageFix" stdDeviation="2.50814" />
|
||||
<feComposite in2="SourceAlpha" operator="in" result="effect1_backgroundBlur_840_3557" />
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="effect1_backgroundBlur_840_3557"
|
||||
result="shape" />
|
||||
</filter>
|
||||
<linearGradient id="paint0_linear_840_3557" x1="720" y1="0" x2="720" y2="883.5"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#F5F6FF" />
|
||||
<stop offset="0.461461" stop-color="#F6F9FF" />
|
||||
<stop offset="0.875" stop-color="#E4EAFF" />
|
||||
</linearGradient>
|
||||
<linearGradient id="paint1_linear_840_3557" x1="865.352" y1="561.127" x2="865.352" y2="1784.79"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#C2CFFF" />
|
||||
<stop offset="0.28125" stop-color="#638EFF" />
|
||||
<stop offset="0.526042" stop-color="#6691FF" />
|
||||
<stop offset="0.703125" stop-color="#618EFF" />
|
||||
<stop offset="0.833333" stop-color="#618FFF" />
|
||||
<stop offset="1" stop-color="#7398FF" />
|
||||
</linearGradient>
|
||||
<linearGradient id="paint2_linear_840_3557" x1="947.5" y1="497.5" x2="1380.5" y2="1069"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0.153575" stop-color="#CAECFF" stop-opacity="0.9" />
|
||||
<stop offset="0.4375" stop-color="#ACBEFF" />
|
||||
<stop offset="0.703125" stop-color="#618DFF" />
|
||||
<stop offset="0.833333" stop-color="#628EFF" />
|
||||
<stop offset="1" stop-color="#0058FF" />
|
||||
</linearGradient>
|
||||
<linearGradient id="paint3_linear_840_3557" x1="977.5" y1="497.5" x2="1410.5" y2="1069"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0.153575" stop-color="#CAECFF" stop-opacity="0.9" />
|
||||
<stop offset="0.4375" stop-color="#ACBEFF" />
|
||||
<stop offset="0.703125" stop-color="#618DFF" />
|
||||
<stop offset="0.833333" stop-color="#628EFF" />
|
||||
<stop offset="1" stop-color="#0058FF" />
|
||||
</linearGradient>
|
||||
<linearGradient id="paint4_linear_840_3557" x1="78.1487" y1="573.637" x2="-256.389" y2="244.696"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#ABBDFF" />
|
||||
<stop offset="0.0001" stop-color="#CEF0FF" />
|
||||
<stop offset="0.322917" stop-color="#83A6FF" />
|
||||
<stop offset="0.734375" stop-color="#4D7FFF" />
|
||||
<stop offset="1" stop-color="#4E71FD" />
|
||||
</linearGradient>
|
||||
<linearGradient id="paint5_linear_840_3557" x1="21.9374" y1="548.281" x2="-312.6" y2="219.339"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#CEE8FF" />
|
||||
<stop offset="0.333333" stop-color="#83B5FF" />
|
||||
<stop offset="0.666667" stop-color="#4D8AFF" />
|
||||
<stop offset="1" stop-color="#4E89FD" />
|
||||
</linearGradient>
|
||||
<linearGradient id="paint6_linear_840_3557" x1="21.9378" y1="548.28" x2="-312.6" y2="219.339"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#E2E1FF" />
|
||||
<stop offset="0.333333" stop-color="#A8A6FF" />
|
||||
<stop offset="0.666667" stop-color="#4D8AFF" />
|
||||
<stop offset="1" stop-color="#4E89FD" />
|
||||
</linearGradient>
|
||||
<linearGradient id="paint7_linear_840_3557" x1="1460.33" y1="338" x2="1643.38" y2="43.152"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#ABBDFF" />
|
||||
<stop offset="0.0001" stop-color="#CEF0FF" />
|
||||
<stop offset="0.322917" stop-color="#83A6FF" />
|
||||
<stop offset="0.734375" stop-color="#4D7FFF" />
|
||||
<stop offset="1" stop-color="#4E71FD" />
|
||||
</linearGradient>
|
||||
<linearGradient id="paint8_linear_840_3557" x1="1452" y1="322.521" x2="1646.33" y2="55.3989"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#CEE8FF" />
|
||||
<stop offset="0.333333" stop-color="#83B5FF" />
|
||||
<stop offset="0.666667" stop-color="#4D8AFF" />
|
||||
<stop offset="1" stop-color="#4E89FD" />
|
||||
</linearGradient>
|
||||
<linearGradient id="paint9_linear_840_3557" x1="1454.96" y1="322.521" x2="1645.63" y2="45.0681"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#E2E1FF" />
|
||||
<stop offset="0.333333" stop-color="#A8A6FF" />
|
||||
<stop offset="0.666667" stop-color="#4D8AFF" />
|
||||
<stop offset="1" stop-color="#4E89FD" />
|
||||
</linearGradient>
|
||||
<linearGradient id="paint10_linear_840_3557" x1="-119.125" y1="597.79" x2="128.987" y2="740.818"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#CFE1FF" />
|
||||
<stop offset="0.35896" stop-color="#3FA3FF" />
|
||||
<stop offset="0.683604" stop-color="#2D9AFF" />
|
||||
<stop offset="1" stop-color="#A4C3FF" />
|
||||
</linearGradient>
|
||||
<linearGradient id="paint11_linear_840_3557" x1="-12.1107" y1="736.572" x2="85.6238" y2="543.022"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#3290FF" />
|
||||
<stop offset="0.390625" stop-color="#55A3FF" />
|
||||
<stop offset="1" stop-color="#79BFFF" />
|
||||
</linearGradient>
|
||||
<linearGradient id="paint12_linear_840_3557" x1="-23.9854" y1="713.67" x2="96.0805" y2="542.236"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0.180663" stop-color="white" stop-opacity="0.35" />
|
||||
<stop offset="0.533255" stop-color="white" stop-opacity="0" />
|
||||
</linearGradient>
|
||||
<linearGradient id="paint13_linear_840_3557" x1="35.717" y1="587.576" x2="35.717" y2="664.883"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#9CC9FF" />
|
||||
<stop offset="1" stop-color="#9AC9FF" />
|
||||
</linearGradient>
|
||||
<linearGradient id="paint14_linear_840_3557" x1="55.3621" y1="297.15" x2="177.464" y2="419.09"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#BCD7FF" />
|
||||
<stop offset="0.35896" stop-color="#699EFF" />
|
||||
<stop offset="0.683604" stop-color="#4A8AFF" />
|
||||
<stop offset="1" stop-color="#4B9EFF" />
|
||||
</linearGradient>
|
||||
<linearGradient id="paint15_linear_840_3557" x1="100.049" y1="371.005" x2="194.054" y2="333.268"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#679BFF" />
|
||||
<stop offset="0.525226" stop-color="#68A5FF" />
|
||||
<stop offset="0.89375" stop-color="#7FB2FF" />
|
||||
</linearGradient>
|
||||
<linearGradient id="paint16_linear_840_3557" x1="92.6638" y1="379.433" x2="189.281" y2="298.378"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0.180663" stop-color="white" stop-opacity="0.35" />
|
||||
<stop offset="0.533255" stop-color="white" stop-opacity="0" />
|
||||
</linearGradient>
|
||||
<linearGradient id="paint17_linear_840_3557" x1="129.228" y1="360.436" x2="156.999" y2="303.538"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#A6C9FF" />
|
||||
<stop offset="1" stop-color="#72B3FF" />
|
||||
</linearGradient>
|
||||
<linearGradient id="paint18_linear_840_3557" x1="147.987" y1="300.5" x2="130.326" y2="349.584"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#E7F3FF" />
|
||||
<stop offset="1" stop-color="#E7F3FF" />
|
||||
</linearGradient>
|
||||
<linearGradient id="paint19_linear_840_3557" x1="123.476" y1="343.82" x2="172.132" y2="333.675"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white" />
|
||||
<stop offset="1" stop-color="white" stop-opacity="0" />
|
||||
</linearGradient>
|
||||
<linearGradient id="paint20_linear_840_3557" x1="1545.73" y1="515.433" x2="1338.05" y2="646.635"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#9CBDFE" />
|
||||
<stop offset="0.35896" stop-color="#579AFF" />
|
||||
<stop offset="0.683604" stop-color="#5196FF" />
|
||||
<stop offset="1" stop-color="#76A4FE" />
|
||||
</linearGradient>
|
||||
<linearGradient id="paint21_linear_840_3557" x1="1458.83" y1="638.093" x2="1368.35" y2="475.607"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0.320833" stop-color="#5A9EFF" />
|
||||
<stop offset="0.604167" stop-color="#7EB2FF" />
|
||||
<stop offset="0.89375" stop-color="#A4C9FF" />
|
||||
</linearGradient>
|
||||
<linearGradient id="paint22_linear_840_3557" x1="1468.22" y1="618.053" x2="1359.36" y2="475.296"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0.180663" stop-color="white" stop-opacity="0.35" />
|
||||
<stop offset="0.533255" stop-color="white" stop-opacity="0" />
|
||||
</linearGradient>
|
||||
<linearGradient id="paint23_linear_840_3557" x1="1413.64" y1="493.752" x2="1413.64" y2="575.204"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#C3D8FF" />
|
||||
<stop offset="1" stop-color="#A1C2FF" />
|
||||
</linearGradient>
|
||||
<linearGradient id="paint24_linear_840_3557" x1="1428.45" y1="490.753" x2="1433.59" y2="564.353"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0.0208333" stop-color="#F1F9FF" />
|
||||
<stop offset="1" stop-color="#F1F9FF" />
|
||||
</linearGradient>
|
||||
<linearGradient id="paint25_linear_840_3557" x1="1281.47" y1="65.0044" x2="1172.52" y2="169.527"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#9CC0FE" />
|
||||
<stop offset="0.35896" stop-color="#6098FF" />
|
||||
<stop offset="0.683604" stop-color="#518FFF" />
|
||||
<stop offset="1" stop-color="#A2BCFF" />
|
||||
</linearGradient>
|
||||
<linearGradient id="paint26_linear_840_3557" x1="1244.21" y1="149.548" x2="1169.76" y2="62.8069"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#669DFF" />
|
||||
<stop offset="0.479167" stop-color="#89B8FF" />
|
||||
<stop offset="1" stop-color="#A2C3FF" />
|
||||
</linearGradient>
|
||||
<linearGradient id="paint27_linear_840_3557" x1="1247.4" y1="136.327" x2="1164.3" y2="63.7239"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0.180663" stop-color="white" stop-opacity="0.35" />
|
||||
<stop offset="0.533255" stop-color="white" stop-opacity="0" />
|
||||
</linearGradient>
|
||||
<linearGradient id="paint28_linear_840_3557" x1="1204.78" y1="71.8343" x2="1218.86" y2="113.075"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0.0208333" stop-color="#A7C6FF" />
|
||||
<stop offset="1" stop-color="#ABC8FF" />
|
||||
</linearGradient>
|
||||
<linearGradient id="paint29_linear_840_3557" x1="1202.12" y1="69.6006" x2="1216.2" y2="110.841"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#F7FCFF" />
|
||||
<stop offset="1" stop-color="#F3FAFF" />
|
||||
</linearGradient>
|
||||
<linearGradient id="paint30_linear_840_3557" x1="1225.45" y1="113.607" x2="1173.97" y2="88.5136"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="white" />
|
||||
<stop offset="1" stop-color="white" stop-opacity="0" />
|
||||
</linearGradient>
|
||||
<clipPath id="clip0_840_3557">
|
||||
<rect width="1440" height="1554.93" fill="white" />
|
||||
</clipPath>
|
||||
<clipPath id="clip1_840_3557">
|
||||
<rect width="64.1261" height="64.1261" fill="white"
|
||||
transform="matrix(0.956305 0.292372 0.0348995 0.999391 111.689 291.145)" />
|
||||
</clipPath>
|
||||
<clipPath id="clip2_840_3557">
|
||||
<rect width="64.1261" height="64.1261" fill="white"
|
||||
transform="matrix(0.956305 0.292372 0.0348995 0.999391 117.168 285.666)" />
|
||||
</clipPath>
|
||||
<clipPath id="clip3_840_3557">
|
||||
<rect width="95.4896" height="95.4896" fill="white"
|
||||
transform="matrix(0.997564 -0.0697565 -0.309017 0.951057 1388.25 493.176)" />
|
||||
</clipPath>
|
||||
<clipPath id="clip4_840_3557">
|
||||
<rect width="95.4896" height="95.4896" fill="white"
|
||||
transform="matrix(0.997564 -0.0697565 -0.309017 0.951057 1383.29 486.514)" />
|
||||
</clipPath>
|
||||
<clipPath id="clip5_840_3557">
|
||||
<rect width="56.013" height="56.013" fill="white"
|
||||
transform="matrix(0.946375 -0.323069 -0.0375396 0.999295 1175.79 73.9841)" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 72 KiB |
File diff suppressed because it is too large
Load Diff
64502
projects/app/public/js/pdf.worker.js
vendored
64502
projects/app/public/js/pdf.worker.js
vendored
File diff suppressed because one or more lines are too long
@@ -231,7 +231,9 @@
|
||||
},
|
||||
"app": {
|
||||
"App params config": "App Config",
|
||||
"Chat Variable": "",
|
||||
"Next Step Guide": "Next step guide",
|
||||
"Question Guide": "",
|
||||
"Question Guide Tip": "At the end of the conversation, three leading questions will be asked.",
|
||||
"Save and preview": "Save",
|
||||
"Select TTS": "Select TTS",
|
||||
@@ -297,10 +299,10 @@
|
||||
"Stop Speak": "Stop Speak",
|
||||
"Type a message": "Input problem",
|
||||
"error": {
|
||||
"Chat error": "Chat error",
|
||||
"Messages empty": "Interface content is empty, maybe the text is too long ~",
|
||||
"Select dataset empty": "You didn't choose any dataset.",
|
||||
"user input empty": "User question is empty",
|
||||
"Chat error": "Chat error"
|
||||
"user input empty": "User question is empty"
|
||||
},
|
||||
"feedback": {
|
||||
"Close User Good Feedback": "",
|
||||
@@ -448,6 +450,8 @@
|
||||
"Chunk Split": "Chunk Split",
|
||||
"Chunk Split Tip": "Select the files and split the by sentences",
|
||||
"Csv format error": "The csv file format is incorrect, please ensure that the index and content columns are two",
|
||||
"Custom split char": "Custom split char",
|
||||
"Custom split char Tips": "Allows you to block according to custom delimiters. It is usually used for processed data, using specific delimiters to precisely block it.",
|
||||
"Estimated Price": "Estimated Price",
|
||||
"Estimated Price Tips": "Index generation is billed as: {{price}}/1k tokens",
|
||||
"Fetch Error": "Get link failed",
|
||||
@@ -852,6 +856,17 @@
|
||||
"To Edit Plugin": "To Edit",
|
||||
"Update Your Plugin": "Update Plugin"
|
||||
},
|
||||
"support": {
|
||||
"user": {
|
||||
"auth": {
|
||||
"Sending Code": "Sending"
|
||||
},
|
||||
"login": {
|
||||
"Github": "Github",
|
||||
"Google": "Google"
|
||||
}
|
||||
}
|
||||
},
|
||||
"system": {
|
||||
"Help Document": "Document"
|
||||
},
|
||||
|
@@ -231,7 +231,9 @@
|
||||
},
|
||||
"app": {
|
||||
"App params config": "应用配置",
|
||||
"Chat Variable": "对话框变量",
|
||||
"Next Step Guide": "下一步指引",
|
||||
"Question Guide": "问题引导",
|
||||
"Question Guide Tip": "对话结束后,会为生成 3 个引导性问题。",
|
||||
"Save and preview": "保存并预览",
|
||||
"Select TTS": "选择语音播放模式",
|
||||
@@ -239,8 +241,6 @@
|
||||
"TTS": "语音播报",
|
||||
"TTS Tip": "开启后,每次对话后可使用语音播放功能。使用该功能可能产生额外费用。",
|
||||
"Welcome Text": "对话开场白",
|
||||
"Chat Variable": "对话框变量",
|
||||
"Question Guide": "问题引导",
|
||||
"create app": "创建属于你的 AI 应用",
|
||||
"edit": {
|
||||
"Confirm Save App Tip": "该应用可能为高级编排模式,保存后将会覆盖高级编排配置,请确认!",
|
||||
@@ -299,10 +299,10 @@
|
||||
"Stop Speak": "停止录音",
|
||||
"Type a message": "输入问题",
|
||||
"error": {
|
||||
"Chat error": "对话出现异常",
|
||||
"Messages empty": "接口内容为空,可能文本超长了~",
|
||||
"Select dataset empty": "你没有选择知识库",
|
||||
"user input empty": "传入的用户问题为空",
|
||||
"Chat error": "对话出现异常"
|
||||
"user input empty": "传入的用户问题为空"
|
||||
},
|
||||
"feedback": {
|
||||
"Close User Good Feedback": "",
|
||||
@@ -450,6 +450,8 @@
|
||||
"Chunk Split": "直接分段",
|
||||
"Chunk Split Tip": "选择文本文件,直接将其按分段进行处理",
|
||||
"Csv format error": "csv 文件格式有误,请确保 index 和 content 两列",
|
||||
"Custom split char": "自定义分隔符",
|
||||
"Custom split char Tips": "允许你根据自定义的分隔符进行分块。通常用于已处理好的数据,使用特定的分隔符来精确分块。",
|
||||
"Estimated Price": "预估价格",
|
||||
"Estimated Price Tips": "索引生成计费为: {{price}}/1k tokens",
|
||||
"Fetch Error": "获取链接失败",
|
||||
@@ -854,6 +856,17 @@
|
||||
"To Edit Plugin": "去编辑",
|
||||
"Update Your Plugin": "更新插件"
|
||||
},
|
||||
"support": {
|
||||
"user": {
|
||||
"auth": {
|
||||
"Sending Code": "正在发送"
|
||||
},
|
||||
"login": {
|
||||
"Github": "Github 登录",
|
||||
"Google": "Google 登录"
|
||||
}
|
||||
}
|
||||
},
|
||||
"system": {
|
||||
"Help Document": "帮助文档"
|
||||
},
|
||||
|
@@ -18,11 +18,11 @@ const Badge = ({
|
||||
{count > 0 && (
|
||||
<Box position={'absolute'} right={0} top={0} transform={'translate(70%,-50%)'}>
|
||||
{isDot ? (
|
||||
<Box w={'5px'} h={'5px'} bg={'myRead.600'} borderRadius={'20px'}></Box>
|
||||
<Box w={'5px'} h={'5px'} bg={'red.600'} borderRadius={'20px'}></Box>
|
||||
) : (
|
||||
<Box
|
||||
color={'white'}
|
||||
bg={'myRead.600'}
|
||||
bg={'red.600'}
|
||||
lineHeight={0.9}
|
||||
borderRadius={'100px'}
|
||||
px={'4px'}
|
||||
|
@@ -49,7 +49,7 @@ const FeedbackModal = ({
|
||||
<Textarea ref={ref} rows={10} placeholder={t('chat.Feedback Modal Tip')} />
|
||||
</ModalBody>
|
||||
<ModalFooter>
|
||||
<Button variant={'base'} mr={2} onClick={onClose}>
|
||||
<Button variant={'whiteBase'} mr={2} onClick={onClose}>
|
||||
{t('Cancel')}
|
||||
</Button>
|
||||
<Button isLoading={isLoading} onClick={mutate}>
|
||||
|
@@ -216,7 +216,7 @@ ${images.map((img) => JSON.stringify({ src: img.src })).join('\n')}
|
||||
pl={5}
|
||||
alignItems={'center'}
|
||||
bg={'white'}
|
||||
color={'blue.500'}
|
||||
color={'primary.500'}
|
||||
visibility={isSpeaking && isTransCription ? 'visible' : 'hidden'}
|
||||
>
|
||||
<Spinner size={'sm'} mr={4} />
|
||||
@@ -244,7 +244,7 @@ ${images.map((img) => JSON.stringify({ src: img.src })).join('\n')}
|
||||
alignItems={'center'}
|
||||
justifyContent={'center'}
|
||||
rounded={'md'}
|
||||
color={'blue.500'}
|
||||
color={'primary.500'}
|
||||
top={0}
|
||||
left={0}
|
||||
bottom={0}
|
||||
@@ -260,7 +260,7 @@ ${images.map((img) => JSON.stringify({ src: img.src })).join('\n')}
|
||||
h={'16px'}
|
||||
color={'myGray.700'}
|
||||
cursor={'pointer'}
|
||||
_hover={{ color: 'blue.500' }}
|
||||
_hover={{ color: 'primary.500' }}
|
||||
position={'absolute'}
|
||||
bg={'white'}
|
||||
right={'-8px'}
|
||||
@@ -396,7 +396,7 @@ ${images.map((img) => JSON.stringify({ src: img.src })).join('\n')}
|
||||
name={isSpeaking ? 'core/chat/stopSpeechFill' : 'core/chat/recordFill'}
|
||||
width={['20px', '22px']}
|
||||
height={['20px', '22px']}
|
||||
color={'blue.500'}
|
||||
color={'primary.500'}
|
||||
/>
|
||||
</MyTooltip>
|
||||
</Flex>
|
||||
@@ -415,7 +415,7 @@ ${images.map((img) => JSON.stringify({ src: img.src })).join('\n')}
|
||||
h={['28px', '32px']}
|
||||
w={['28px', '32px']}
|
||||
borderRadius={'md'}
|
||||
bg={isSpeaking || isChatting ? '' : !havInput ? '#E5E5E5' : 'blue.500'}
|
||||
bg={isSpeaking || isChatting ? '' : !havInput ? '#E5E5E5' : 'primary.500'}
|
||||
cursor={havInput ? 'pointer' : 'not-allowed'}
|
||||
lineHeight={1}
|
||||
onClick={() => {
|
||||
|
@@ -125,7 +125,7 @@ export const QuoteList = React.memo(function QuoteList({
|
||||
className="hover-data"
|
||||
display={'none'}
|
||||
alignItems={'center'}
|
||||
color={'blue.500'}
|
||||
color={'primary.500'}
|
||||
href={`/dataset/detail?datasetId=${item.datasetId}¤tTab=dataCard&collectionId=${item.collectionId}`}
|
||||
>
|
||||
{t('core.dataset.Go Dataset')}
|
||||
@@ -184,7 +184,7 @@ export const QuoteList = React.memo(function QuoteList({
|
||||
cursor={'pointer'}
|
||||
color={'myGray.600'}
|
||||
_hover={{
|
||||
color: 'blue.600'
|
||||
color: 'primary.600'
|
||||
}}
|
||||
onClick={() => onclickEdit(item)}
|
||||
/>
|
||||
|
@@ -147,7 +147,7 @@ const ResponseTags = ({
|
||||
name="common/routePushLight"
|
||||
w={'14px'}
|
||||
cursor={'pointer'}
|
||||
_hover={{ color: 'blue.500' }}
|
||||
_hover={{ color: 'primary.500' }}
|
||||
onClick={async (e) => {
|
||||
e.stopPropagation();
|
||||
|
||||
|
@@ -70,7 +70,7 @@ const SelectMarkCollection = ({
|
||||
}}
|
||||
{...(selected
|
||||
? {
|
||||
bg: 'blue.200'
|
||||
bg: 'primary.200'
|
||||
}
|
||||
: {})}
|
||||
onClick={() => {
|
||||
@@ -132,7 +132,7 @@ const SelectMarkCollection = ({
|
||||
CustomFooter={
|
||||
<ModalFooter>
|
||||
<Button
|
||||
variant={'base'}
|
||||
variant={'whiteBase'}
|
||||
mr={2}
|
||||
onClick={() => {
|
||||
setAdminMarkData({
|
||||
|
@@ -505,7 +505,7 @@ const ChatBox = (
|
||||
const colorMap = {
|
||||
loading: 'myGray.700',
|
||||
running: '#67c13b',
|
||||
finish: 'blue.500'
|
||||
finish: 'primary.500'
|
||||
};
|
||||
if (!isChatting) return;
|
||||
const chatContent = chatHistory[chatHistory.length - 1];
|
||||
@@ -673,7 +673,7 @@ const ChatBox = (
|
||||
<Card
|
||||
className="markdown"
|
||||
{...MessageCardStyle}
|
||||
bg={'blue.200'}
|
||||
bg={'primary.200'}
|
||||
borderRadius={'8px 0 8px 8px'}
|
||||
textAlign={'left'}
|
||||
>
|
||||
@@ -1145,7 +1145,7 @@ function ChatAvatar({ src, type }: { src?: string; type: 'Human' | 'AI' }) {
|
||||
borderRadius={'lg'}
|
||||
border={theme.borders.base}
|
||||
boxShadow={'0 0 5px rgba(0,0,0,0.1)'}
|
||||
bg={type === 'Human' ? 'white' : 'blue.50'}
|
||||
bg={type === 'Human' ? 'white' : 'primary.50'}
|
||||
>
|
||||
<Avatar src={src} w={'100%'} h={'100%'} />
|
||||
</Box>
|
||||
@@ -1226,7 +1226,7 @@ function ChatController({
|
||||
<MyIcon
|
||||
{...controlIconStyle}
|
||||
name={'copy'}
|
||||
_hover={{ color: 'blue.600' }}
|
||||
_hover={{ color: 'primary.600' }}
|
||||
onClick={() => copyData(chat.value)}
|
||||
/>
|
||||
</MyTooltip>
|
||||
|
@@ -19,7 +19,7 @@ const CommunityModal = ({ onClose }: { onClose: () => void }) => {
|
||||
</ModalBody>
|
||||
|
||||
<ModalFooter>
|
||||
<Button variant={'base'} onClick={onClose}>
|
||||
<Button variant={'whiteBase'} onClick={onClose}>
|
||||
关闭
|
||||
</Button>
|
||||
</ModalFooter>
|
||||
|
@@ -74,14 +74,14 @@ const Layout = ({ children }: { children: JSX.Element }) => {
|
||||
|
||||
return (
|
||||
<>
|
||||
<Box h={'100%'} bg={'myWhite.600'}>
|
||||
<Box h={'100%'} bg={'myGray.100'}>
|
||||
{isPc === true && (
|
||||
<>
|
||||
{pcUnShowLayoutRoute[router.pathname] ? (
|
||||
<Auth>{children}</Auth>
|
||||
) : (
|
||||
<>
|
||||
<Box h={'100%'} position={'fixed'} left={0} top={0} w={'70px'}>
|
||||
<Box h={'100%'} position={'fixed'} left={0} top={0} w={'64px'}>
|
||||
<Navbar unread={unread} />
|
||||
</Box>
|
||||
<Box h={'100%'} ml={'70px'} overflow={'overlay'}>
|
||||
|
@@ -1,5 +1,5 @@
|
||||
import React, { useMemo } from 'react';
|
||||
import { Box, Flex, Link } from '@chakra-ui/react';
|
||||
import { Box, BoxProps, Flex, Link, LinkProps } from '@chakra-ui/react';
|
||||
import { useRouter } from 'next/router';
|
||||
import { useUserStore } from '@/web/support/user/useUserStore';
|
||||
import { useChatStore } from '@/web/core/chat/storeChat';
|
||||
@@ -77,19 +77,16 @@ const Navbar = ({ unread }: { unread: number }) => {
|
||||
[lastChatAppId, lastChatId, t]
|
||||
);
|
||||
|
||||
const itemStyles: any = {
|
||||
const itemStyles: BoxProps & LinkProps = {
|
||||
my: 3,
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
alignItems: 'center',
|
||||
justifyContent: 'center',
|
||||
cursor: 'pointer',
|
||||
w: '54px',
|
||||
h: '54px',
|
||||
borderRadius: 'md',
|
||||
_hover: {
|
||||
bg: 'myWhite.600'
|
||||
}
|
||||
w: '48px',
|
||||
h: '58px',
|
||||
borderRadius: 'md'
|
||||
};
|
||||
|
||||
return (
|
||||
@@ -97,10 +94,8 @@ const Navbar = ({ unread }: { unread: number }) => {
|
||||
flexDirection={'column'}
|
||||
alignItems={'center'}
|
||||
pt={6}
|
||||
bg={'white'}
|
||||
h={'100%'}
|
||||
w={'100%'}
|
||||
boxShadow={'2px 0px 8px 0px rgba(0,0,0,0.1)'}
|
||||
userSelect={'none'}
|
||||
>
|
||||
{/* logo */}
|
||||
@@ -113,13 +108,7 @@ const Navbar = ({ unread }: { unread: number }) => {
|
||||
cursor={'pointer'}
|
||||
onClick={() => router.push('/account')}
|
||||
>
|
||||
<Avatar
|
||||
w={'36px'}
|
||||
h={'36px'}
|
||||
borderRadius={'50%'}
|
||||
src={userInfo?.avatar}
|
||||
fallbackSrc={HUMAN_ICON}
|
||||
/>
|
||||
<Avatar w={'36px'} h={'36px'} src={userInfo?.avatar} fallbackSrc={HUMAN_ICON} />
|
||||
</Box>
|
||||
{/* 导航列表 */}
|
||||
<Box flex={1}>
|
||||
@@ -129,13 +118,17 @@ const Navbar = ({ unread }: { unread: number }) => {
|
||||
{...itemStyles}
|
||||
{...(item.activeLink.includes(router.pathname)
|
||||
? {
|
||||
color: 'blue.600',
|
||||
bg: 'white !important',
|
||||
boxShadow: '1px 1px 10px rgba(0,0,0,0.2)'
|
||||
color: 'primary.600',
|
||||
bg: 'white',
|
||||
boxShadow:
|
||||
'0px 0px 1px 0px rgba(19, 51, 107, 0.08), 0px 4px 4px 0px rgba(19, 51, 107, 0.05)'
|
||||
}
|
||||
: {
|
||||
color: 'myGray.500',
|
||||
backgroundColor: 'transparent'
|
||||
bg: 'transparent',
|
||||
_hover: {
|
||||
bg: 'rgba(255,255,255,0.9)'
|
||||
}
|
||||
})}
|
||||
{...(item.link !== router.asPath
|
||||
? {
|
||||
|
@@ -25,9 +25,15 @@ const Loading = ({
|
||||
justifyContent={'center'}
|
||||
flexDirection={'column'}
|
||||
>
|
||||
<Spinner thickness="4px" speed="0.65s" emptyColor="myGray.100" color="blue.500" size="xl" />
|
||||
<Spinner
|
||||
thickness="4px"
|
||||
speed="0.65s"
|
||||
emptyColor="myGray.100"
|
||||
color="primary.500"
|
||||
size="xl"
|
||||
/>
|
||||
{text && (
|
||||
<Box mt={2} color="blue.600" fontWeight={'bold'}>
|
||||
<Box mt={2} color="primary.600" fontWeight={'bold'}>
|
||||
{text}
|
||||
</Box>
|
||||
)}
|
||||
|
@@ -23,7 +23,7 @@ function MyLink(e: any) {
|
||||
<Box as={'li'} mb={1}>
|
||||
<Box
|
||||
as={'span'}
|
||||
color={'blue.700'}
|
||||
color={'primary.700'}
|
||||
textDecoration={'underline'}
|
||||
cursor={'pointer'}
|
||||
onClick={() => {
|
||||
|
@@ -77,7 +77,7 @@ const QuestionGuide = ({ text }: { text: string }) => {
|
||||
name={'core/chat/sendLight'}
|
||||
w={'14px'}
|
||||
cursor={'pointer'}
|
||||
_hover={{ color: 'blue.500' }}
|
||||
_hover={{ color: 'primary.500' }}
|
||||
onClick={() => eventBus.emit(EventNameEnum.sendQuestion, { text })}
|
||||
/>
|
||||
</MyTooltip>
|
||||
|
@@ -123,7 +123,7 @@ const MermaidBlock = ({ code }: { code: string }) => {
|
||||
position={'absolute'}
|
||||
color={'myGray.600'}
|
||||
_hover={{
|
||||
color: 'blue.600'
|
||||
color: 'primary.600'
|
||||
}}
|
||||
right={0}
|
||||
top={0}
|
||||
|
@@ -4,7 +4,7 @@
|
||||
width: 3px;
|
||||
height: 14px;
|
||||
transform: translate(4px, 2px) scaleY(1.3);
|
||||
background-color: var(--chakra-colors-blue-700);
|
||||
background-color: var(--chakra-colors-primary-700);
|
||||
animation: blink 0.6s infinite;
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
width: 3px;
|
||||
height: 14px;
|
||||
transform: translate(4px, 2px) scaleY(1.3);
|
||||
background-color: var(--chakra-colors-blue-700);
|
||||
background-color: var(--chakra-colors-primary-700);
|
||||
animation: blink 0.6s infinite;
|
||||
}
|
||||
}
|
||||
@@ -129,7 +129,7 @@
|
||||
.markdown dl,
|
||||
.markdown table,
|
||||
.markdown pre {
|
||||
margin: 10px 0;
|
||||
margin: 14px 0;
|
||||
}
|
||||
.markdown > h2:first-child,
|
||||
.markdown > h1:first-child,
|
||||
@@ -368,7 +368,7 @@
|
||||
|
||||
a {
|
||||
text-decoration: underline;
|
||||
color: var(--chakra-colors-blue-600);
|
||||
color: var(--chakra-colors-primary-700);
|
||||
}
|
||||
|
||||
table {
|
||||
|
@@ -1,11 +1,11 @@
|
||||
import React, { useMemo } from 'react';
|
||||
import ReactMarkdown from 'react-markdown';
|
||||
import RemarkGfm from 'remark-gfm';
|
||||
import RemarkMath from 'remark-math';
|
||||
import RehypeKatex from 'rehype-katex';
|
||||
import RemarkBreaks from 'remark-breaks';
|
||||
|
||||
import 'katex/dist/katex.min.css';
|
||||
import RemarkMath from 'remark-math';
|
||||
import RemarkBreaks from 'remark-breaks';
|
||||
import RehypeKatex from 'rehype-katex';
|
||||
import RemarkGfm from 'remark-gfm';
|
||||
|
||||
import styles from './index.module.scss';
|
||||
import dynamic from 'next/dynamic';
|
||||
|
||||
@@ -74,7 +74,7 @@ function A({ children, ...props }: any) {
|
||||
return (
|
||||
<MyTooltip label={t('core.chat.markdown.Quick Question')}>
|
||||
<Button
|
||||
variant={'base'}
|
||||
variant={'whitePrimary'}
|
||||
size={'xs'}
|
||||
borderRadius={'md'}
|
||||
my={1}
|
||||
@@ -96,10 +96,10 @@ function A({ children, ...props }: any) {
|
||||
name={'core/chat/quoteSign'}
|
||||
transform={'translateY(-2px)'}
|
||||
w={'18px'}
|
||||
color={'blue.500'}
|
||||
color={'primary.500'}
|
||||
cursor={'pointer'}
|
||||
_hover={{
|
||||
color: 'blue.700'
|
||||
color: 'primary.700'
|
||||
}}
|
||||
onClick={() => getFileAndOpen(props.href)}
|
||||
/>
|
||||
@@ -112,17 +112,6 @@ function A({ children, ...props }: any) {
|
||||
}
|
||||
|
||||
const Markdown = ({ source, isChatting = false }: { source: string; isChatting?: boolean }) => {
|
||||
const components = useMemo(
|
||||
() => ({
|
||||
img: Image,
|
||||
pre: 'div',
|
||||
p: 'div',
|
||||
code: Code,
|
||||
a: A
|
||||
}),
|
||||
[]
|
||||
);
|
||||
|
||||
const formatSource = source
|
||||
.replace(/\\n/g, '\n ')
|
||||
.replace(/(http[s]?:\/\/[^\s,。]+)([。,])/g, '$1 $2')
|
||||
@@ -133,10 +122,15 @@ const Markdown = ({ source, isChatting = false }: { source: string; isChatting?:
|
||||
className={`markdown ${styles.markdown}
|
||||
${isChatting ? `${formatSource ? styles.waitingAnimation : styles.animation}` : ''}
|
||||
`}
|
||||
remarkPlugins={[RemarkGfm, RemarkMath, RemarkBreaks]}
|
||||
remarkPlugins={[RemarkMath, RemarkGfm, RemarkBreaks]}
|
||||
rehypePlugins={[RehypeKatex]}
|
||||
// @ts-ignore
|
||||
components={components}
|
||||
components={{
|
||||
img: Image,
|
||||
pre: 'div',
|
||||
p: (pProps) => <p {...pProps} dir="auto" />,
|
||||
code: Code,
|
||||
a: A
|
||||
}}
|
||||
linkTarget={'_blank'}
|
||||
>
|
||||
{formatSource}
|
||||
|
@@ -41,7 +41,7 @@ const MyMenu = ({ width, offset = [0, 10], Button, menuList }: Props) => {
|
||||
e.stopPropagation();
|
||||
item.onClick && item.onClick();
|
||||
}}
|
||||
color={item.isActive ? 'blue.500' : ''}
|
||||
color={item.isActive ? 'primary.500' : ''}
|
||||
whiteSpace={'pre-wrap'}
|
||||
>
|
||||
{item.child}
|
||||
|
@@ -70,7 +70,9 @@ const MyModal = ({
|
||||
)}
|
||||
{title}
|
||||
<Box flex={1} />
|
||||
{onClose && <ModalCloseButton position={'relative'} top={0} right={0} />}
|
||||
{onClose && (
|
||||
<ModalCloseButton position={'relative'} fontSize={'sm'} top={0} right={0} />
|
||||
)}
|
||||
</ModalHeader>
|
||||
)}
|
||||
|
||||
|
@@ -1,20 +1,29 @@
|
||||
import React from 'react';
|
||||
import { Box, useTheme, type BoxProps } from '@chakra-ui/react';
|
||||
import { useTheme, type BoxProps } from '@chakra-ui/react';
|
||||
import MyBox from '../common/MyBox';
|
||||
|
||||
const PageContainer = ({ children, ...props }: BoxProps & { isLoading?: boolean }) => {
|
||||
const PageContainer = ({
|
||||
children,
|
||||
isLoading,
|
||||
insertProps = {},
|
||||
...props
|
||||
}: BoxProps & { isLoading?: boolean; insertProps?: BoxProps }) => {
|
||||
const theme = useTheme();
|
||||
return (
|
||||
<MyBox bg={'myGray.100'} h={'100%'} p={[0, 5]} px={[0, 6]} {...props}>
|
||||
<Box
|
||||
<MyBox h={'100%'} py={[0, '16px']} pr={[0, '16px']} {...props}>
|
||||
<MyBox
|
||||
isLoading={isLoading}
|
||||
h={'100%'}
|
||||
bg={'white'}
|
||||
borderRadius={props?.borderRadius || [0, '2xl']}
|
||||
border={['none', theme.borders.lg]}
|
||||
borderColor={'borderColor.base'}
|
||||
borderWidth={[0, 1]}
|
||||
boxShadow={'1.5'}
|
||||
overflow={'overlay'}
|
||||
bg={'myGray.25'}
|
||||
borderRadius={[0, '16px']}
|
||||
{...insertProps}
|
||||
>
|
||||
{children}
|
||||
</Box>
|
||||
</MyBox>
|
||||
</MyBox>
|
||||
);
|
||||
};
|
||||
|
@@ -32,7 +32,7 @@ const PromptTemplate = ({
|
||||
cursor={'pointer'}
|
||||
{...(item.title === selectTemplateTitle?.title
|
||||
? {
|
||||
bg: 'blue.50'
|
||||
bg: 'primary.50'
|
||||
}
|
||||
: {})}
|
||||
onClick={() => setSelectTemplateTitle(item)}
|
||||
|
@@ -54,7 +54,7 @@ const MySelect = (
|
||||
width={width}
|
||||
px={3}
|
||||
rightIcon={<ChevronDownIcon />}
|
||||
variant={'base'}
|
||||
variant={'whitePrimary'}
|
||||
textAlign={'left'}
|
||||
_active={{
|
||||
transform: 'none'
|
||||
@@ -62,7 +62,7 @@ const MySelect = (
|
||||
{...(isOpen
|
||||
? {
|
||||
boxShadow: '0px 0px 4px #A8DBFF',
|
||||
borderColor: 'blue.500'
|
||||
borderColor: 'primary.500'
|
||||
}
|
||||
: {})}
|
||||
{...props}
|
||||
@@ -93,7 +93,7 @@ const MySelect = (
|
||||
{...menuItemStyles}
|
||||
{...(value === item.value
|
||||
? {
|
||||
color: 'blue.500',
|
||||
color: 'primary.500',
|
||||
bg: 'myWhite.300'
|
||||
}
|
||||
: {})}
|
||||
|
@@ -44,9 +44,9 @@ const SideTabs = ({ list, size = 'md', activeId, onChange, ...props }: Props) =>
|
||||
alignItems={'center'}
|
||||
{...(activeId === item.id
|
||||
? {
|
||||
bg: ' blue.100 !important',
|
||||
bg: ' primary.100 !important',
|
||||
fontWeight: 'bold',
|
||||
color: 'blue.600 ',
|
||||
color: 'primary.600 ',
|
||||
cursor: 'default'
|
||||
}
|
||||
: {
|
||||
|
@@ -69,18 +69,18 @@ const MySlider = ({
|
||||
<SliderMark
|
||||
value={value}
|
||||
textAlign="center"
|
||||
bg="blue.500"
|
||||
bg="primary.500"
|
||||
color="white"
|
||||
px={1}
|
||||
minW={'18px'}
|
||||
w={'auto'}
|
||||
h={'18px'}
|
||||
lineHeight={'18px'}
|
||||
borderRadius={'18px'}
|
||||
fontSize={'xs'}
|
||||
transform={'translate(-50%, -155%)'}
|
||||
boxSizing={'border-box'}
|
||||
fontSize={'11px'}
|
||||
>
|
||||
{value}
|
||||
<Box transform={'scale(0.9)'}>{value}</Box>
|
||||
</SliderMark>
|
||||
<SliderTrack
|
||||
bg={'#EAEDF3'}
|
||||
@@ -95,9 +95,9 @@ const MySlider = ({
|
||||
right: '-3px'
|
||||
}}
|
||||
>
|
||||
<SliderFilledTrack bg={'blue.500'} />
|
||||
<SliderFilledTrack bg={'primary.500'} />
|
||||
</SliderTrack>
|
||||
<SliderThumb border={'3px solid'} borderColor={'blue.500'}></SliderThumb>
|
||||
<SliderThumb border={'3px solid'} borderColor={'primary.500'}></SliderThumb>
|
||||
</Slider>
|
||||
);
|
||||
};
|
||||
|
@@ -55,10 +55,10 @@ const Tabs = ({ list, size = 'md', activeId, onChange, ...props }: Props) => {
|
||||
whiteSpace={'nowrap'}
|
||||
{...(activeId === item.id
|
||||
? {
|
||||
color: 'blue.600',
|
||||
color: 'primary.600',
|
||||
cursor: 'default',
|
||||
fontWeight: 'bold',
|
||||
borderBottomColor: 'blue.600'
|
||||
borderBottomColor: 'primary.600'
|
||||
}
|
||||
: {
|
||||
cursor: 'pointer'
|
||||
|
@@ -10,9 +10,9 @@ const Tag = ({ children, colorSchema = 'blue', ...props }: Props) => {
|
||||
const theme = useMemo(() => {
|
||||
const map = {
|
||||
blue: {
|
||||
borderColor: 'blue.500',
|
||||
borderColor: 'primary.500',
|
||||
bg: '#F2FBFF',
|
||||
color: 'blue.600'
|
||||
color: 'primary.600'
|
||||
},
|
||||
green: {
|
||||
borderColor: '#67c13b',
|
||||
|
@@ -43,13 +43,13 @@ const MyRadio = ({
|
||||
position={'relative'}
|
||||
{...(value === item.value
|
||||
? {
|
||||
borderColor: 'blue.400',
|
||||
bg: 'blue.50'
|
||||
borderColor: 'primary.400',
|
||||
bg: 'primary.50'
|
||||
}
|
||||
: {
|
||||
bg: 'myWhite.300',
|
||||
_hover: {
|
||||
borderColor: 'blue.400'
|
||||
borderColor: 'primary.400'
|
||||
}
|
||||
})}
|
||||
_after={{
|
||||
@@ -66,7 +66,7 @@ const MyRadio = ({
|
||||
...(value === item.value
|
||||
? {
|
||||
border: '5px solid',
|
||||
borderColor: 'blue.600'
|
||||
borderColor: 'primary.600'
|
||||
}
|
||||
: {
|
||||
border: '2px solid',
|
||||
|
@@ -52,7 +52,7 @@ const TagTextarea = ({ defaultValues, onUpdate, ...props }: Props) => {
|
||||
bg={'myWhite.600'}
|
||||
{...(focus && {
|
||||
boxShadow: '0px 0px 4px #A8DBFF',
|
||||
borderColor: 'blue.500'
|
||||
borderColor: 'primary.500'
|
||||
})}
|
||||
{...props}
|
||||
onClick={() => {
|
||||
@@ -64,7 +64,7 @@ const TagTextarea = ({ defaultValues, onUpdate, ...props }: Props) => {
|
||||
>
|
||||
<Flex alignItems={'center'} gap={2} flexWrap={'wrap'}>
|
||||
{tags.map((tag, i) => (
|
||||
<Tag key={tag} colorScheme="blue" onClick={(e) => e.stopPropagation()}>
|
||||
<Tag key={tag} colorScheme="primary" onClick={(e) => e.stopPropagation()}>
|
||||
<TagLabel>{tag}</TagLabel>
|
||||
<TagCloseButton
|
||||
onClick={() => {
|
||||
|
@@ -66,7 +66,7 @@ const AIChatSettingsModal = ({
|
||||
fontSize: ['sm', 'md']
|
||||
};
|
||||
const selectTemplateBtn: BoxProps = {
|
||||
color: 'blue.500',
|
||||
color: 'primary.500',
|
||||
cursor: 'pointer'
|
||||
};
|
||||
|
||||
@@ -229,7 +229,7 @@ const AIChatSettingsModal = ({
|
||||
)}
|
||||
</ModalBody>
|
||||
<ModalFooter>
|
||||
<Button variant={'base'} onClick={onClose}>
|
||||
<Button variant={'whiteBase'} onClick={onClose}>
|
||||
{t('Cancel')}
|
||||
</Button>
|
||||
<Button ml={4} onClick={handleSubmit(onSuccess)}>
|
||||
|
@@ -141,7 +141,7 @@ const DatasetParamsModal = ({
|
||||
)}
|
||||
</ModalBody>
|
||||
<ModalFooter>
|
||||
<Button variant={'base'} mr={3} onClick={onClose}>
|
||||
<Button variant={'whiteBase'} mr={3} onClick={onClose}>
|
||||
{t('common.Close')}
|
||||
</Button>
|
||||
<Button
|
||||
|
@@ -82,7 +82,7 @@ export const DatasetSelectModal = ({
|
||||
p={3}
|
||||
border={theme.borders.base}
|
||||
boxShadow={'sm'}
|
||||
bg={'blue.200'}
|
||||
bg={'primary.200'}
|
||||
>
|
||||
<Flex alignItems={'center'} h={'38px'}>
|
||||
<Avatar src={item.avatar} w={['24px', '28px']}></Avatar>
|
||||
|
@@ -104,9 +104,9 @@ const ChatTest = (
|
||||
<MyTooltip label={'重置'}>
|
||||
<IconButton
|
||||
className="chat"
|
||||
size={'sm'}
|
||||
size={'smSquare'}
|
||||
icon={<MyIcon name={'clear'} w={'14px'} />}
|
||||
variant={'base'}
|
||||
variant={'whiteDanger'}
|
||||
borderRadius={'md'}
|
||||
aria-label={'delete'}
|
||||
onClick={(e) => {
|
||||
|
@@ -48,7 +48,7 @@ export type useFlowProviderStoreType = {
|
||||
onDelNode: (nodeId: string) => void;
|
||||
onChangeNode: (e: FlowNodeChangeProps) => void;
|
||||
onCopyNode: (nodeId: string) => void;
|
||||
onResetNode: (id: string, module: FlowModuleTemplateType) => void;
|
||||
onResetNode: (e: { id: string; module: FlowModuleTemplateType }) => void;
|
||||
onDelEdge: (e: {
|
||||
moduleId: string;
|
||||
sourceHandle?: string | undefined;
|
||||
@@ -58,6 +58,13 @@ export type useFlowProviderStoreType = {
|
||||
onConnect: ({ connect }: { connect: Connection }) => any;
|
||||
initData: (modules: ModuleItemType[]) => void;
|
||||
};
|
||||
type requestEventType =
|
||||
| 'onChangeNode'
|
||||
| 'onCopyNode'
|
||||
| 'onResetNode'
|
||||
| 'onDelNode'
|
||||
| 'onDelConnect'
|
||||
| 'setNodes';
|
||||
|
||||
const StateContext = createContext<useFlowProviderStoreType>({
|
||||
reactFlowWrapper: null,
|
||||
@@ -107,7 +114,7 @@ const StateContext = createContext<useFlowProviderStoreType>({
|
||||
initData: function (modules: ModuleItemType[]): void {
|
||||
throw new Error('Function not implemented.');
|
||||
},
|
||||
onResetNode: function (id: string, module: FlowModuleTemplateType): void {
|
||||
onResetNode: function (e): void {
|
||||
throw new Error('Function not implemented.');
|
||||
}
|
||||
});
|
||||
@@ -350,7 +357,7 @@ export const FlowProvider = ({
|
||||
|
||||
// reset a node data. delete edge and replace it
|
||||
const onResetNode = useCallback(
|
||||
(id: string, module: FlowModuleTemplateType) => {
|
||||
({ id, module }: { id: string; module: FlowModuleTemplateType }) => {
|
||||
setNodes((state) =>
|
||||
state.map((node) => {
|
||||
if (node.id === id) {
|
||||
@@ -379,8 +386,7 @@ export const FlowProvider = ({
|
||||
const initData = useCallback(
|
||||
(modules: ModuleItemType[]) => {
|
||||
const edges = appModule2FlowEdge({
|
||||
modules,
|
||||
onDelete: onDelConnect
|
||||
modules
|
||||
});
|
||||
setEdges(edges);
|
||||
|
||||
@@ -388,19 +394,54 @@ export const FlowProvider = ({
|
||||
|
||||
onFixView();
|
||||
},
|
||||
[onDelConnect, setEdges, setNodes, onFixView]
|
||||
[setEdges, setNodes, onFixView]
|
||||
);
|
||||
|
||||
// use eventbus to avoid refresh ReactComponents
|
||||
useEffect(() => {
|
||||
const update = (e: FlowNodeChangeProps) => {
|
||||
onChangeNode(e);
|
||||
};
|
||||
eventBus.on(EventNameEnum.updaterNode, update);
|
||||
eventBus.on(
|
||||
EventNameEnum.requestFlowEvent,
|
||||
({ type, data }: { type: requestEventType; data: any }) => {
|
||||
switch (type) {
|
||||
case 'onChangeNode':
|
||||
onChangeNode(data);
|
||||
return;
|
||||
case 'onCopyNode':
|
||||
onCopyNode(data);
|
||||
return;
|
||||
case 'onResetNode':
|
||||
onResetNode(data);
|
||||
return;
|
||||
case 'onDelNode':
|
||||
onDelNode(data);
|
||||
return;
|
||||
case 'onDelConnect':
|
||||
onDelConnect(data);
|
||||
return;
|
||||
case 'setNodes':
|
||||
setNodes(data);
|
||||
return;
|
||||
}
|
||||
}
|
||||
);
|
||||
return () => {
|
||||
eventBus.off(EventNameEnum.updaterNode);
|
||||
eventBus.off(EventNameEnum.requestFlowEvent);
|
||||
};
|
||||
}, [onChangeNode]);
|
||||
}, []);
|
||||
useEffect(() => {
|
||||
eventBus.on(EventNameEnum.requestFlowStore, () => {
|
||||
eventBus.emit('receiveFlowStore', {
|
||||
nodes,
|
||||
edges,
|
||||
mode,
|
||||
filterAppIds,
|
||||
reactFlowWrapper
|
||||
});
|
||||
});
|
||||
return () => {
|
||||
eventBus.off(EventNameEnum.requestFlowStore);
|
||||
};
|
||||
}, [edges, filterAppIds, mode, nodes]);
|
||||
|
||||
const value = {
|
||||
reactFlowWrapper,
|
||||
@@ -429,5 +470,53 @@ export const FlowProvider = ({
|
||||
export default React.memo(FlowProvider);
|
||||
|
||||
export const onChangeNode = (e: FlowNodeChangeProps) => {
|
||||
eventBus.emit(EventNameEnum.updaterNode, e);
|
||||
eventBus.emit(EventNameEnum.requestFlowEvent, {
|
||||
type: 'onChangeNode',
|
||||
data: e
|
||||
});
|
||||
};
|
||||
export const onCopyNode = (nodeId: string) => {
|
||||
eventBus.emit(EventNameEnum.requestFlowEvent, {
|
||||
type: 'onCopyNode',
|
||||
data: nodeId
|
||||
});
|
||||
};
|
||||
export const onResetNode = (e: Parameters<useFlowProviderStoreType['onResetNode']>[0]) => {
|
||||
eventBus.emit(EventNameEnum.requestFlowEvent, {
|
||||
type: 'onResetNode',
|
||||
data: e
|
||||
});
|
||||
};
|
||||
export const onDelNode = (nodeId: string) => {
|
||||
eventBus.emit(EventNameEnum.requestFlowEvent, {
|
||||
type: 'onDelNode',
|
||||
data: nodeId
|
||||
});
|
||||
};
|
||||
export const onDelConnect = (e: Parameters<useFlowProviderStoreType['onDelConnect']>[0]) => {
|
||||
eventBus.emit(EventNameEnum.requestFlowEvent, {
|
||||
type: 'onDelConnect',
|
||||
data: e
|
||||
});
|
||||
};
|
||||
export const onSetNodes = (e: useFlowProviderStoreType['nodes']) => {
|
||||
eventBus.emit(EventNameEnum.requestFlowEvent, {
|
||||
type: 'setNodes',
|
||||
data: e
|
||||
});
|
||||
};
|
||||
|
||||
export const getFlowStore = () =>
|
||||
new Promise<{
|
||||
nodes: useFlowProviderStoreType['nodes'];
|
||||
edges: useFlowProviderStoreType['edges'];
|
||||
mode: useFlowProviderStoreType['mode'];
|
||||
filterAppIds: useFlowProviderStoreType['filterAppIds'];
|
||||
reactFlowWrapper: useFlowProviderStoreType['reactFlowWrapper'];
|
||||
}>((resolve) => {
|
||||
eventBus.on('receiveFlowStore', (data: any) => {
|
||||
resolve(data);
|
||||
eventBus.off('receiveFlowStore');
|
||||
});
|
||||
eventBus.emit(EventNameEnum.requestFlowStore);
|
||||
});
|
||||
|
@@ -3,24 +3,16 @@ import { Textarea, Button, ModalBody, ModalFooter } from '@chakra-ui/react';
|
||||
import MyModal from '@/components/MyModal';
|
||||
import { useTranslation } from 'next-i18next';
|
||||
import { useToast } from '@/web/common/hooks/useToast';
|
||||
import { useFlowProviderStore, type useFlowProviderStoreType } from './FlowProvider';
|
||||
import { useFlowProviderStore } from './FlowProvider';
|
||||
|
||||
type Props = {
|
||||
onClose: () => void;
|
||||
};
|
||||
|
||||
const ImportSettings = ({
|
||||
onClose,
|
||||
setNodes,
|
||||
setEdges,
|
||||
initData
|
||||
}: Props & {
|
||||
setNodes: useFlowProviderStoreType['setNodes'];
|
||||
setEdges: useFlowProviderStoreType['setEdges'];
|
||||
initData: useFlowProviderStoreType['initData'];
|
||||
}) => {
|
||||
const ImportSettings = ({ onClose }: Props) => {
|
||||
const { t } = useTranslation();
|
||||
const { toast } = useToast();
|
||||
const { setNodes, setEdges, initData } = useFlowProviderStore();
|
||||
const [value, setValue] = useState('');
|
||||
|
||||
return (
|
||||
@@ -41,7 +33,7 @@ const ImportSettings = ({
|
||||
</ModalBody>
|
||||
<ModalFooter>
|
||||
<Button
|
||||
variant="base"
|
||||
variant="whiteBase"
|
||||
onClick={() => {
|
||||
if (!value) {
|
||||
return onClose();
|
||||
@@ -68,8 +60,4 @@ const ImportSettings = ({
|
||||
);
|
||||
};
|
||||
|
||||
export default React.memo(function (props: Props) {
|
||||
const { setNodes, setEdges, initData } = useFlowProviderStore();
|
||||
|
||||
return <ImportSettings {...props} setNodes={setNodes} setEdges={setEdges} initData={initData} />;
|
||||
});
|
||||
export default React.memo(ImportSettings);
|
||||
|
@@ -7,11 +7,10 @@ import type {
|
||||
import { useViewport, XYPosition } from 'reactflow';
|
||||
import { useSystemStore } from '@/web/common/system/useSystemStore';
|
||||
import Avatar from '@/components/Avatar';
|
||||
import { useFlowProviderStore, type useFlowProviderStoreType } from './FlowProvider';
|
||||
import { getFlowStore, onSetNodes } from './FlowProvider';
|
||||
import { customAlphabet } from 'nanoid';
|
||||
import { appModule2FlowNode } from '@/utils/adapt';
|
||||
import { useTranslation } from 'next-i18next';
|
||||
import { useRouter } from 'next/router';
|
||||
const nanoid = customAlphabet('abcdefghijklmnopqrstuvwxyz1234567890', 6);
|
||||
import EmptyTip from '@/components/EmptyTip';
|
||||
import { FlowNodeTypeEnum } from '@fastgpt/global/core/module/node/constant';
|
||||
@@ -19,7 +18,6 @@ import { getPreviewPluginModule } from '@/web/core/plugin/api';
|
||||
import { useToast } from '@/web/common/hooks/useToast';
|
||||
import { getErrText } from '@fastgpt/global/common/error/utils';
|
||||
import { moduleTemplatesList } from '@/web/core/modules/template/system';
|
||||
import { ModuleTemplateTypeEnum } from '@fastgpt/global/core/module/constants';
|
||||
|
||||
export type ModuleTemplateProps = {
|
||||
templates: FlowModuleTemplateType[];
|
||||
@@ -32,20 +30,9 @@ type ModuleTemplateListProps = ModuleTemplateProps & {
|
||||
type RenderListProps = {
|
||||
templates: FlowModuleTemplateType[];
|
||||
onClose: () => void;
|
||||
setNodes: useFlowProviderStoreType['setNodes'];
|
||||
reactFlowWrapper: useFlowProviderStoreType['reactFlowWrapper'];
|
||||
};
|
||||
|
||||
const ModuleTemplateList = ({
|
||||
templates,
|
||||
isOpen,
|
||||
onClose,
|
||||
setNodes,
|
||||
reactFlowWrapper
|
||||
}: ModuleTemplateListProps & {
|
||||
setNodes: useFlowProviderStoreType['setNodes'];
|
||||
reactFlowWrapper: useFlowProviderStoreType['reactFlowWrapper'];
|
||||
}) => {
|
||||
const ModuleTemplateList = ({ templates, isOpen, onClose }: ModuleTemplateListProps) => {
|
||||
const { t } = useTranslation();
|
||||
|
||||
return (
|
||||
@@ -77,31 +64,16 @@ const ModuleTemplateList = ({
|
||||
transition={'.2s ease'}
|
||||
userSelect={'none'}
|
||||
>
|
||||
<RenderList
|
||||
templates={templates}
|
||||
onClose={onClose}
|
||||
setNodes={setNodes}
|
||||
reactFlowWrapper={reactFlowWrapper}
|
||||
/>
|
||||
<RenderList templates={templates} onClose={onClose} />
|
||||
</Flex>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
export default React.memo(function (props: ModuleTemplateListProps) {
|
||||
const { setNodes, reactFlowWrapper } = useFlowProviderStore();
|
||||
export default React.memo(ModuleTemplateList);
|
||||
|
||||
return <ModuleTemplateList {...props} setNodes={setNodes} reactFlowWrapper={reactFlowWrapper} />;
|
||||
});
|
||||
|
||||
const RenderList = React.memo(function RenderList({
|
||||
templates,
|
||||
onClose,
|
||||
setNodes,
|
||||
reactFlowWrapper
|
||||
}: RenderListProps) {
|
||||
const RenderList = React.memo(function RenderList({ templates, onClose }: RenderListProps) {
|
||||
const { t } = useTranslation();
|
||||
const router = useRouter();
|
||||
const { isPc } = useSystemStore();
|
||||
const { x, y, zoom } = useViewport();
|
||||
const { setLoading } = useSystemStore();
|
||||
@@ -119,6 +91,7 @@ const RenderList = React.memo(function RenderList({
|
||||
|
||||
const onAddNode = useCallback(
|
||||
async ({ template, position }: { template: FlowModuleTemplateType; position: XYPosition }) => {
|
||||
const { reactFlowWrapper, nodes } = await getFlowStore();
|
||||
if (!reactFlowWrapper?.current) return;
|
||||
|
||||
const templateModule = await (async () => {
|
||||
@@ -145,8 +118,8 @@ const RenderList = React.memo(function RenderList({
|
||||
const mouseX = (position.x - reactFlowBounds.left - x) / zoom - 100;
|
||||
const mouseY = (position.y - reactFlowBounds.top - y) / zoom;
|
||||
|
||||
setNodes((state) =>
|
||||
state.concat(
|
||||
onSetNodes(
|
||||
nodes.concat(
|
||||
appModule2FlowNode({
|
||||
item: {
|
||||
...templateModule,
|
||||
@@ -157,7 +130,7 @@ const RenderList = React.memo(function RenderList({
|
||||
)
|
||||
);
|
||||
},
|
||||
[reactFlowWrapper, setLoading, setNodes, t, toast, x, y, zoom]
|
||||
[setLoading, t, toast, x, y, zoom]
|
||||
);
|
||||
|
||||
return templates.length === 0 ? (
|
||||
|
@@ -60,7 +60,7 @@ const SelectAppModal = ({
|
||||
cursor={'pointer'}
|
||||
{...(selectedApps.includes(app._id)
|
||||
? {
|
||||
bg: 'blue.100',
|
||||
bg: 'primary.100',
|
||||
onClick: () => {
|
||||
setSelectedApps(selectedApps.filter((e) => e !== app._id));
|
||||
}
|
||||
@@ -83,7 +83,7 @@ const SelectAppModal = ({
|
||||
))}
|
||||
</ModalBody>
|
||||
<ModalFooter>
|
||||
<Button variant={'base'} onClick={onClose}>
|
||||
<Button variant={'whiteBase'} onClick={onClose}>
|
||||
{t('Cancel')}
|
||||
</Button>
|
||||
<Button
|
||||
|
@@ -1,19 +1,10 @@
|
||||
import React from 'react';
|
||||
import {
|
||||
BezierEdge,
|
||||
getBezierPath,
|
||||
EdgeLabelRenderer,
|
||||
EdgeProps,
|
||||
getSmoothStepPath
|
||||
} from 'reactflow';
|
||||
import { BezierEdge, getBezierPath, EdgeLabelRenderer, EdgeProps } from 'reactflow';
|
||||
import { onDelConnect } from '../../FlowProvider';
|
||||
import { Flex } from '@chakra-ui/react';
|
||||
import MyIcon from '@/components/Icon';
|
||||
|
||||
const ButtonEdge = (
|
||||
props: EdgeProps<{
|
||||
onDelete: (id: string) => void;
|
||||
}>
|
||||
) => {
|
||||
const ButtonEdge = (props: EdgeProps) => {
|
||||
const {
|
||||
id,
|
||||
sourceX,
|
||||
@@ -22,7 +13,6 @@ const ButtonEdge = (
|
||||
targetY,
|
||||
sourcePosition,
|
||||
targetPosition,
|
||||
data,
|
||||
selected,
|
||||
style = {}
|
||||
} = props;
|
||||
@@ -67,12 +57,12 @@ const ButtonEdge = (
|
||||
_hover={{
|
||||
boxShadow: '0 0 6px 2px rgba(0, 0, 0, 0.08)'
|
||||
}}
|
||||
onClick={() => data?.onDelete(id)}
|
||||
onClick={() => onDelConnect(id)}
|
||||
>
|
||||
<MyIcon
|
||||
name="closeSolid"
|
||||
w={'100%'}
|
||||
color={selected ? 'blue.700' : 'myGray.500'}
|
||||
color={selected ? 'primary.700' : 'myGray.500'}
|
||||
></MyIcon>
|
||||
</Flex>
|
||||
</EdgeLabelRenderer>
|
||||
|
@@ -133,7 +133,8 @@ const TTSSelect = ({
|
||||
<Image src="/icon/speaking.gif" w={'24px'} alt={''} />
|
||||
<Button
|
||||
ml={2}
|
||||
variant={'gray'}
|
||||
variant={'grayBase'}
|
||||
color={'primary.600'}
|
||||
isLoading={audioLoading}
|
||||
leftIcon={<MyIcon name={'core/chat/stopSpeech'} w={'16px'} />}
|
||||
onClick={() => {
|
||||
|
@@ -289,7 +289,7 @@ const VariableEdit = ({
|
||||
</ModalBody>
|
||||
|
||||
<ModalFooter>
|
||||
<Button variant={'base'} mr={3} onClick={onCloseEdit}>
|
||||
<Button variant={'whiteBase'} mr={3} onClick={onCloseEdit}>
|
||||
{t('common.Close')}
|
||||
</Button>
|
||||
<Button
|
||||
|
@@ -6,7 +6,7 @@ import Container from '../modules/Container';
|
||||
import RenderInput from '../render/RenderInput';
|
||||
import RenderOutput from '../render/RenderOutput';
|
||||
|
||||
const NodeAnswer = ({ data }: NodeProps<FlowModuleItemType>) => {
|
||||
const NodeAnswer = React.memo(function NodeAnswer({ data }: { data: FlowModuleItemType }) {
|
||||
const { moduleId, inputs, outputs } = data;
|
||||
return (
|
||||
<NodeCard minW={'400px'} {...data}>
|
||||
@@ -16,5 +16,7 @@ const NodeAnswer = ({ data }: NodeProps<FlowModuleItemType>) => {
|
||||
</Container>
|
||||
</NodeCard>
|
||||
);
|
||||
};
|
||||
export default React.memo(NodeAnswer);
|
||||
});
|
||||
export default function Node({ data }: NodeProps<FlowModuleItemType>) {
|
||||
return <NodeAnswer data={data} />;
|
||||
}
|
||||
|
@@ -17,7 +17,7 @@ import SourceHandle from '../render/SourceHandle';
|
||||
import MyTooltip from '@/components/MyTooltip';
|
||||
import { onChangeNode } from '../../FlowProvider';
|
||||
|
||||
const NodeCQNode = ({ data }: NodeProps<FlowModuleItemType>) => {
|
||||
const NodeCQNode = React.memo(function NodeCQNode({ data }: { data: FlowModuleItemType }) {
|
||||
const { t } = useTranslation();
|
||||
const { moduleId, inputs } = data;
|
||||
|
||||
@@ -136,5 +136,7 @@ const NodeCQNode = ({ data }: NodeProps<FlowModuleItemType>) => {
|
||||
</Container>
|
||||
</NodeCard>
|
||||
);
|
||||
};
|
||||
export default React.memo(NodeCQNode);
|
||||
});
|
||||
export default function Node({ data }: NodeProps<FlowModuleItemType>) {
|
||||
return <NodeCQNode data={data} />;
|
||||
}
|
||||
|
@@ -3,7 +3,10 @@ import { NodeProps } from 'reactflow';
|
||||
import NodeCard from '../render/NodeCard';
|
||||
import { FlowModuleItemType } from '@fastgpt/global/core/module/type.d';
|
||||
|
||||
const NodeAnswer = ({ data }: NodeProps<FlowModuleItemType>) => {
|
||||
const NodeAnswer = React.memo(function NodeAnswer({ data }: { data: FlowModuleItemType }) {
|
||||
return <NodeCard {...data}></NodeCard>;
|
||||
};
|
||||
export default React.memo(NodeAnswer);
|
||||
});
|
||||
|
||||
export default function Node({ data }: NodeProps<FlowModuleItemType>) {
|
||||
return <NodeAnswer data={data} />;
|
||||
}
|
||||
|
@@ -73,7 +73,7 @@ const ExtractFieldModal = ({
|
||||
</ModalBody>
|
||||
|
||||
<ModalFooter>
|
||||
<Button variant={'base'} mr={3} onClick={onClose}>
|
||||
<Button variant={'whiteBase'} mr={3} onClick={onClose}>
|
||||
{t('common.Close')}
|
||||
</Button>
|
||||
<Button onClick={handleSubmit(onSubmit)}>{t('common.Confirm')}</Button>
|
||||
|
@@ -17,7 +17,7 @@ import { FlowNodeOutputTypeEnum } from '@fastgpt/global/core/module/node/constan
|
||||
import { ModuleIOValueTypeEnum } from '@fastgpt/global/core/module/constants';
|
||||
import { onChangeNode } from '../../../FlowProvider';
|
||||
|
||||
const NodeExtract = ({ data }: NodeProps<FlowModuleItemType>) => {
|
||||
const NodeExtract = React.memo(function NodeExtract({ data }: { data: FlowModuleItemType }) {
|
||||
const { inputs, outputs, moduleId } = data;
|
||||
const { t } = useTranslation();
|
||||
const [editExtractFiled, setEditExtractField] = useState<ContextExtractAgentItemType>();
|
||||
@@ -39,7 +39,7 @@ const NodeExtract = ({ data }: NodeProps<FlowModuleItemType>) => {
|
||||
<Box pt={2}>
|
||||
<Box position={'absolute'} top={0} right={0}>
|
||||
<Button
|
||||
variant={'base'}
|
||||
variant={'whitePrimary'}
|
||||
leftIcon={<AddIcon fontSize={'10px'} />}
|
||||
onClick={() => setEditExtractField(defaultField)}
|
||||
>
|
||||
@@ -183,6 +183,8 @@ const NodeExtract = ({ data }: NodeProps<FlowModuleItemType>) => {
|
||||
)}
|
||||
</NodeCard>
|
||||
);
|
||||
};
|
||||
});
|
||||
|
||||
export default React.memo(NodeExtract);
|
||||
export default function Node({ data }: NodeProps<FlowModuleItemType>) {
|
||||
return <NodeExtract data={data} />;
|
||||
}
|
||||
|
@@ -17,7 +17,7 @@ import { ModuleIOValueTypeEnum } from '@fastgpt/global/core/module/constants';
|
||||
import { customAlphabet } from 'nanoid';
|
||||
const nanoid = customAlphabet('abcdefghijklmnopqrstuvwxyz1234567890', 6);
|
||||
|
||||
const NodeHttp = ({ data }: NodeProps<FlowModuleItemType>) => {
|
||||
const NodeHttp = React.memo(function NodeHttp({ data }: { data: FlowModuleItemType }) {
|
||||
const { moduleId, inputs, outputs } = data;
|
||||
|
||||
return (
|
||||
@@ -31,5 +31,7 @@ const NodeHttp = ({ data }: NodeProps<FlowModuleItemType>) => {
|
||||
</Container>
|
||||
</NodeCard>
|
||||
);
|
||||
};
|
||||
export default React.memo(NodeHttp);
|
||||
});
|
||||
export default function Node({ data }: NodeProps<FlowModuleItemType>) {
|
||||
return <NodeHttp data={data} />;
|
||||
}
|
||||
|
@@ -41,7 +41,11 @@ const createEditField = {
|
||||
inputType: true
|
||||
};
|
||||
|
||||
const NodePluginInput = ({ data }: NodeProps<FlowModuleItemType>) => {
|
||||
const NodePluginInput = React.memo(function NodePluginInput({
|
||||
data
|
||||
}: {
|
||||
data: FlowModuleItemType;
|
||||
}) {
|
||||
const { t } = useTranslation();
|
||||
const { moduleId, inputs, outputs } = data;
|
||||
const [createField, setCreateField] = useState<EditNodeFieldType>();
|
||||
@@ -65,7 +69,7 @@ const NodePluginInput = ({ data }: NodeProps<FlowModuleItemType>) => {
|
||||
w={'14px'}
|
||||
cursor={'pointer'}
|
||||
mr={3}
|
||||
_hover={{ color: 'blue.500' }}
|
||||
_hover={{ color: 'primary.500' }}
|
||||
onClick={() =>
|
||||
setEditField({
|
||||
inputType: item.type,
|
||||
@@ -121,7 +125,7 @@ const NodePluginInput = ({ data }: NodeProps<FlowModuleItemType>) => {
|
||||
))}
|
||||
<Box textAlign={'right'} mt={5}>
|
||||
<Button
|
||||
variant={'base'}
|
||||
variant={'whitePrimary'}
|
||||
leftIcon={<SmallAddIcon />}
|
||||
onClick={() => {
|
||||
setCreateField(defaultCreateField);
|
||||
@@ -253,5 +257,7 @@ const NodePluginInput = ({ data }: NodeProps<FlowModuleItemType>) => {
|
||||
)}
|
||||
</NodeCard>
|
||||
);
|
||||
};
|
||||
export default React.memo(NodePluginInput);
|
||||
});
|
||||
export default function Node({ data }: NodeProps<FlowModuleItemType>) {
|
||||
return <NodePluginInput data={data} />;
|
||||
}
|
||||
|
@@ -42,7 +42,11 @@ const createEditField = {
|
||||
inputType: false
|
||||
};
|
||||
|
||||
const NodePluginOutput = ({ data }: NodeProps<FlowModuleItemType>) => {
|
||||
const NodePluginOutput = React.memo(function NodePluginOutput({
|
||||
data
|
||||
}: {
|
||||
data: FlowModuleItemType;
|
||||
}) {
|
||||
const { t } = useTranslation();
|
||||
const { moduleId, inputs, outputs } = data;
|
||||
const [createField, setCreateField] = useState<EditNodeFieldType>();
|
||||
@@ -84,7 +88,7 @@ const NodePluginOutput = ({ data }: NodeProps<FlowModuleItemType>) => {
|
||||
w={'14px'}
|
||||
cursor={'pointer'}
|
||||
ml={3}
|
||||
_hover={{ color: 'blue.500' }}
|
||||
_hover={{ color: 'primary.500' }}
|
||||
onClick={() =>
|
||||
setEditField({
|
||||
inputType: item.type,
|
||||
@@ -121,7 +125,7 @@ const NodePluginOutput = ({ data }: NodeProps<FlowModuleItemType>) => {
|
||||
))}
|
||||
<Box textAlign={'left'} mt={5}>
|
||||
<Button
|
||||
variant={'base'}
|
||||
variant={'whitePrimary'}
|
||||
leftIcon={<SmallAddIcon />}
|
||||
onClick={() => {
|
||||
setCreateField(defaultCreateField);
|
||||
@@ -233,5 +237,8 @@ const NodePluginOutput = ({ data }: NodeProps<FlowModuleItemType>) => {
|
||||
)}
|
||||
</NodeCard>
|
||||
);
|
||||
};
|
||||
export default React.memo(NodePluginOutput);
|
||||
});
|
||||
|
||||
export default function Node({ data }: NodeProps<FlowModuleItemType>) {
|
||||
return <NodePluginOutput data={data} />;
|
||||
}
|
||||
|
@@ -6,7 +6,11 @@ import Container from '../modules/Container';
|
||||
|
||||
import RenderOutput from '../render/RenderOutput';
|
||||
|
||||
const QuestionInputNode = ({ data }: NodeProps<FlowModuleItemType>) => {
|
||||
const QuestionInputNode = React.memo(function QuestionInputNode({
|
||||
data
|
||||
}: {
|
||||
data: FlowModuleItemType;
|
||||
}) {
|
||||
const { moduleId, outputs } = data;
|
||||
|
||||
return (
|
||||
@@ -16,5 +20,8 @@ const QuestionInputNode = ({ data }: NodeProps<FlowModuleItemType>) => {
|
||||
</Container>
|
||||
</NodeCard>
|
||||
);
|
||||
};
|
||||
export default React.memo(QuestionInputNode);
|
||||
});
|
||||
|
||||
export default function Node({ data }: NodeProps<FlowModuleItemType>) {
|
||||
return <QuestionInputNode data={data} />;
|
||||
}
|
||||
|
@@ -7,7 +7,7 @@ import Container from '../modules/Container';
|
||||
import RenderInput from '../render/RenderInput';
|
||||
import RenderOutput from '../render/RenderOutput';
|
||||
|
||||
const NodeRunAPP = ({ data }: NodeProps<FlowModuleItemType>) => {
|
||||
const NodeRunAPP = React.memo(function NodeRunAPP({ data }: { data: FlowModuleItemType }) {
|
||||
const { moduleId, inputs, outputs } = data;
|
||||
|
||||
return (
|
||||
@@ -21,5 +21,7 @@ const NodeRunAPP = ({ data }: NodeProps<FlowModuleItemType>) => {
|
||||
</Container>
|
||||
</NodeCard>
|
||||
);
|
||||
};
|
||||
export default React.memo(NodeRunAPP);
|
||||
});
|
||||
export default function Node({ data }: NodeProps<FlowModuleItemType>) {
|
||||
return <NodeRunAPP data={data} />;
|
||||
}
|
||||
|
@@ -7,7 +7,7 @@ import Container from '../modules/Container';
|
||||
import RenderInput from '../render/RenderInput';
|
||||
import RenderOutput from '../render/RenderOutput';
|
||||
|
||||
const NodeSimple = ({ data }: NodeProps<FlowModuleItemType>) => {
|
||||
const NodeSimple = React.memo(function NodeSimple({ data }: { data: FlowModuleItemType }) {
|
||||
const { moduleId, inputs, outputs } = data;
|
||||
|
||||
return (
|
||||
@@ -30,5 +30,7 @@ const NodeSimple = ({ data }: NodeProps<FlowModuleItemType>) => {
|
||||
)}
|
||||
</NodeCard>
|
||||
);
|
||||
};
|
||||
export default React.memo(NodeSimple);
|
||||
});
|
||||
export default function Node({ data }: NodeProps<FlowModuleItemType>) {
|
||||
return <NodeSimple data={data} />;
|
||||
}
|
||||
|
@@ -30,7 +30,7 @@ import QGSwitch from '@/components/core/module/Flow/components/modules/QGSwitch'
|
||||
import TTSSelect from '@/components/core/module/Flow/components/modules/TTSSelect';
|
||||
import { splitGuideModule } from '@fastgpt/global/core/module/utils';
|
||||
|
||||
const NodeUserGuide = ({ data }: NodeProps<FlowModuleItemType>) => {
|
||||
const NodeUserGuide = React.memo(function NodeUserGuide({ data }: { data: FlowModuleItemType }) {
|
||||
const theme = useTheme();
|
||||
return (
|
||||
<>
|
||||
@@ -50,9 +50,11 @@ const NodeUserGuide = ({ data }: NodeProps<FlowModuleItemType>) => {
|
||||
</NodeCard>
|
||||
</>
|
||||
);
|
||||
};
|
||||
export default React.memo(NodeUserGuide);
|
||||
});
|
||||
|
||||
export default function Node({ data }: NodeProps<FlowModuleItemType>) {
|
||||
return <NodeUserGuide data={data} />;
|
||||
}
|
||||
export function WelcomeText({ data }: { data: FlowModuleItemType }) {
|
||||
const { inputs, moduleId } = data;
|
||||
|
||||
|
@@ -221,7 +221,7 @@ const FieldEditModal = ({
|
||||
</ModalBody>
|
||||
|
||||
<ModalFooter>
|
||||
<Button variant={'base'} mr={3} onClick={onClose}>
|
||||
<Button variant={'whiteBase'} mr={3} onClick={onClose}>
|
||||
{t('common.Close')}
|
||||
</Button>
|
||||
<Button
|
||||
|
@@ -8,11 +8,7 @@ import { QuestionOutlineIcon } from '@chakra-ui/icons';
|
||||
import { useTranslation } from 'next-i18next';
|
||||
import { useEditTitle } from '@/web/common/hooks/useEditTitle';
|
||||
import { useToast } from '@/web/common/hooks/useToast';
|
||||
import {
|
||||
useFlowProviderStore,
|
||||
onChangeNode,
|
||||
type useFlowProviderStoreType
|
||||
} from '../../FlowProvider';
|
||||
import { onChangeNode, onCopyNode, onResetNode, onDelNode } from '../../FlowProvider';
|
||||
import { FlowNodeTypeEnum } from '@fastgpt/global/core/module/node/constant';
|
||||
import { ModuleInputKeyEnum } from '@fastgpt/global/core/module/constants';
|
||||
import { useSystemStore } from '@/web/common/system/useSystemStore';
|
||||
@@ -27,13 +23,7 @@ type Props = FlowModuleItemType & {
|
||||
isPreview?: boolean;
|
||||
};
|
||||
|
||||
const NodeCard = (
|
||||
props: Props & {
|
||||
onCopyNode: useFlowProviderStoreType['onCopyNode'];
|
||||
onResetNode: useFlowProviderStoreType['onResetNode'];
|
||||
onDelNode: useFlowProviderStoreType['onDelNode'];
|
||||
}
|
||||
) => {
|
||||
const NodeCard = (props: Props) => {
|
||||
const { t } = useTranslation();
|
||||
const {
|
||||
children,
|
||||
@@ -44,11 +34,9 @@ const NodeCard = (
|
||||
moduleId,
|
||||
flowType,
|
||||
inputs,
|
||||
isPreview,
|
||||
onCopyNode,
|
||||
onResetNode,
|
||||
onDelNode
|
||||
isPreview
|
||||
} = props;
|
||||
|
||||
const theme = useTheme();
|
||||
const { toast } = useToast();
|
||||
const { setLoading } = useSystemStore();
|
||||
@@ -77,7 +65,10 @@ const NodeCard = (
|
||||
try {
|
||||
setLoading(true);
|
||||
const pluginModule = await getPreviewPluginModule(pluginId);
|
||||
onResetNode(moduleId, pluginModule);
|
||||
onResetNode({
|
||||
id: moduleId,
|
||||
module: pluginModule
|
||||
});
|
||||
} catch (e) {
|
||||
return toast({
|
||||
status: 'error',
|
||||
@@ -130,20 +121,7 @@ const NodeCard = (
|
||||
onClick: () => {}
|
||||
}
|
||||
],
|
||||
[
|
||||
flowType,
|
||||
inputs,
|
||||
moduleId,
|
||||
name,
|
||||
onCopyNode,
|
||||
onDelNode,
|
||||
onOpenModal,
|
||||
onResetNode,
|
||||
openConfirm,
|
||||
setLoading,
|
||||
t,
|
||||
toast
|
||||
]
|
||||
[flowType, inputs, moduleId, name, onOpenModal, openConfirm, setLoading, t, toast]
|
||||
);
|
||||
|
||||
return (
|
||||
@@ -198,10 +176,4 @@ const NodeCard = (
|
||||
);
|
||||
};
|
||||
|
||||
export default React.memo(function (props: Props) {
|
||||
const { onCopyNode, onResetNode, onDelNode } = useFlowProviderStore();
|
||||
|
||||
return (
|
||||
<NodeCard {...props} onCopyNode={onCopyNode} onResetNode={onResetNode} onDelNode={onDelNode} />
|
||||
);
|
||||
});
|
||||
export default React.memo(NodeCard);
|
||||
|
@@ -1,11 +1,7 @@
|
||||
import { EditNodeFieldType, FlowNodeInputItemType } from '@fastgpt/global/core/module/node/type';
|
||||
import React, { useMemo, useState } from 'react';
|
||||
import { useTranslation } from 'next-i18next';
|
||||
import {
|
||||
onChangeNode,
|
||||
useFlowProviderStore,
|
||||
useFlowProviderStoreType
|
||||
} from '../../../FlowProvider';
|
||||
import { onChangeNode, useFlowProviderStoreType } from '../../../FlowProvider';
|
||||
import { FlowNodeInputTypeEnum } from '@fastgpt/global/core/module/node/constant';
|
||||
import { Box, Flex } from '@chakra-ui/react';
|
||||
import MyTooltip from '@/components/MyTooltip';
|
||||
@@ -20,16 +16,10 @@ const FieldEditModal = dynamic(() => import('../FieldEditModal'));
|
||||
type Props = FlowNodeInputItemType & {
|
||||
moduleId: string;
|
||||
inputKey: string;
|
||||
mode: useFlowProviderStoreType['mode'];
|
||||
};
|
||||
|
||||
const InputLabel = ({
|
||||
moduleId,
|
||||
inputKey,
|
||||
mode,
|
||||
...item
|
||||
}: Props & {
|
||||
mode: useFlowProviderStoreType['mode'];
|
||||
}) => {
|
||||
const InputLabel = ({ moduleId, inputKey, mode, ...item }: Props) => {
|
||||
const { t } = useTranslation();
|
||||
const {
|
||||
required = false,
|
||||
@@ -41,6 +31,7 @@ const InputLabel = ({
|
||||
showTargetInApp,
|
||||
showTargetInPlugin
|
||||
} = item;
|
||||
|
||||
const [editField, setEditField] = useState<EditNodeFieldType>();
|
||||
|
||||
const targetHandle = useMemo(() => {
|
||||
@@ -81,7 +72,7 @@ const InputLabel = ({
|
||||
w={'14px'}
|
||||
cursor={'pointer'}
|
||||
ml={3}
|
||||
_hover={{ color: 'blue.500' }}
|
||||
_hover={{ color: 'primary.500' }}
|
||||
onClick={() =>
|
||||
setEditField({
|
||||
inputType: type,
|
||||
@@ -153,8 +144,4 @@ const InputLabel = ({
|
||||
);
|
||||
};
|
||||
|
||||
export default React.memo(function (props: Props) {
|
||||
const { mode } = useFlowProviderStore();
|
||||
|
||||
return <InputLabel {...props} mode={mode} />;
|
||||
});
|
||||
export default React.memo(InputLabel);
|
||||
|
@@ -1,4 +1,4 @@
|
||||
import React, { useMemo } from 'react';
|
||||
import React, { useEffect, useMemo, useState } from 'react';
|
||||
import type { FlowNodeInputItemType } from '@fastgpt/global/core/module/node/type';
|
||||
import { Box } from '@chakra-ui/react';
|
||||
import { FlowNodeInputTypeEnum } from '@fastgpt/global/core/module/node/constant';
|
||||
@@ -6,7 +6,7 @@ import dynamic from 'next/dynamic';
|
||||
|
||||
import InputLabel from './Label';
|
||||
import type { RenderInputProps } from './type.d';
|
||||
import { useFlowProviderStore, type useFlowProviderStoreType } from '../../../FlowProvider';
|
||||
import { getFlowStore, type useFlowProviderStoreType } from '../../../FlowProvider';
|
||||
|
||||
const RenderList: {
|
||||
types: `${FlowNodeInputTypeEnum}`[];
|
||||
@@ -71,14 +71,9 @@ type Props = {
|
||||
moduleId: string;
|
||||
CustomComponent?: Record<string, (e: FlowNodeInputItemType) => React.ReactNode>;
|
||||
};
|
||||
const RenderInput = ({
|
||||
flowInputList,
|
||||
moduleId,
|
||||
CustomComponent = {},
|
||||
mode
|
||||
}: Props & {
|
||||
mode: useFlowProviderStoreType['mode'];
|
||||
}) => {
|
||||
const RenderInput = ({ flowInputList, moduleId, CustomComponent = {} }: Props) => {
|
||||
const [mode, setMode] = useState<useFlowProviderStoreType['mode']>('app');
|
||||
|
||||
const sortInputs = useMemo(
|
||||
() =>
|
||||
flowInputList.sort((a, b) => {
|
||||
@@ -108,6 +103,13 @@ const RenderInput = ({
|
||||
[mode, sortInputs]
|
||||
);
|
||||
|
||||
useEffect(() => {
|
||||
async () => {
|
||||
const { mode } = await getFlowStore();
|
||||
setMode(mode);
|
||||
};
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<>
|
||||
{filterInputs.map((input) => {
|
||||
@@ -124,7 +126,9 @@ const RenderInput = ({
|
||||
return (
|
||||
input.type !== FlowNodeInputTypeEnum.hidden && (
|
||||
<Box key={input.key} _notLast={{ mb: 7 }} position={'relative'}>
|
||||
{!!input.label && <InputLabel moduleId={moduleId} inputKey={input.key} {...input} />}
|
||||
{!!input.label && (
|
||||
<InputLabel moduleId={moduleId} inputKey={input.key} mode={mode} {...input} />
|
||||
)}
|
||||
{!!RenderComponent && (
|
||||
<Box mt={2} className={'nodrag'}>
|
||||
{RenderComponent}
|
||||
@@ -138,7 +142,4 @@ const RenderInput = ({
|
||||
);
|
||||
};
|
||||
|
||||
export default React.memo(function (props: Props) {
|
||||
const { mode } = useFlowProviderStore();
|
||||
return <RenderInput {...props} mode={mode} />;
|
||||
});
|
||||
export default React.memo(RenderInput);
|
||||
|
@@ -16,7 +16,7 @@ const AddInputParam = ({ inputs = [], item, moduleId }: RenderInputProps) => {
|
||||
return (
|
||||
<>
|
||||
<Button
|
||||
variant={'base'}
|
||||
variant={'whitePrimary'}
|
||||
leftIcon={<SmallAddIcon />}
|
||||
onClick={() => {
|
||||
setEditField(item.defaultEditField || {});
|
||||
|
@@ -26,7 +26,7 @@ const AiSettingRender = ({ inputs = [], moduleId }: RenderInputProps) => {
|
||||
return (
|
||||
<>
|
||||
<Button
|
||||
variant={'base'}
|
||||
variant={'whitePrimary'}
|
||||
leftIcon={<MyIcon name={'settingLight'} w={'14px'} />}
|
||||
onClick={onOpenAIChatSetting}
|
||||
>
|
||||
|
@@ -1,23 +1,14 @@
|
||||
import React from 'react';
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import type { RenderInputProps } from '../type';
|
||||
import {
|
||||
onChangeNode,
|
||||
useFlowProviderStore,
|
||||
type useFlowProviderStoreType
|
||||
} from '../../../../FlowProvider';
|
||||
import { getFlowStore, onChangeNode, useFlowProviderStoreType } from '../../../../FlowProvider';
|
||||
import { Box, Button, Flex, useDisclosure, useTheme } from '@chakra-ui/react';
|
||||
import { SelectAppItemType } from '@fastgpt/global/core/module/type';
|
||||
import Avatar from '@/components/Avatar';
|
||||
import SelectAppModal from '../../../../SelectAppModal';
|
||||
|
||||
const SelectAppRender = ({
|
||||
item,
|
||||
moduleId,
|
||||
filterAppIds
|
||||
}: RenderInputProps & {
|
||||
filterAppIds: useFlowProviderStoreType['filterAppIds'];
|
||||
}) => {
|
||||
const SelectAppRender = ({ item, moduleId }: RenderInputProps) => {
|
||||
const theme = useTheme();
|
||||
const [filterAppIds, setFilterAppIds] = useState<useFlowProviderStoreType['filterAppIds']>([]);
|
||||
|
||||
const {
|
||||
isOpen: isOpenSelectApp,
|
||||
@@ -27,11 +18,18 @@ const SelectAppRender = ({
|
||||
|
||||
const value = item.value as SelectAppItemType | undefined;
|
||||
|
||||
useEffect(() => {
|
||||
async () => {
|
||||
const { filterAppIds } = await getFlowStore();
|
||||
setFilterAppIds(filterAppIds);
|
||||
};
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<>
|
||||
<Box onClick={onOpenSelectApp}>
|
||||
{!value ? (
|
||||
<Button variant={'base'} w={'100%'}>
|
||||
<Button variant={'whitePrimary'} w={'100%'}>
|
||||
选择应用
|
||||
</Button>
|
||||
) : (
|
||||
@@ -66,7 +64,4 @@ const SelectAppRender = ({
|
||||
);
|
||||
};
|
||||
|
||||
export default React.memo(function (props: RenderInputProps) {
|
||||
const { filterAppIds } = useFlowProviderStore();
|
||||
return <SelectAppRender {...props} filterAppIds={filterAppIds} />;
|
||||
});
|
||||
export default React.memo(SelectAppRender);
|
||||
|
@@ -1,6 +1,6 @@
|
||||
import React, { useEffect, useMemo, useState } from 'react';
|
||||
import type { RenderInputProps } from '../type';
|
||||
import { onChangeNode, useFlowProviderStore } from '../../../../FlowProvider';
|
||||
import { getFlowStore, onChangeNode, useFlowProviderStoreType } from '../../../../FlowProvider';
|
||||
import { Button, useDisclosure } from '@chakra-ui/react';
|
||||
import { useTranslation } from 'next-i18next';
|
||||
import { DatasetSearchModeEnum } from '@fastgpt/global/core/dataset/constant';
|
||||
@@ -11,7 +11,7 @@ import MyIcon from '@/components/Icon';
|
||||
import DatasetParamsModal from '@/components/core/module/DatasetParamsModal';
|
||||
|
||||
const SelectDatasetParam = ({ inputs = [], moduleId }: RenderInputProps) => {
|
||||
const { nodes } = useFlowProviderStore();
|
||||
const [nodes, setNodes] = useState<useFlowProviderStoreType['nodes']>([]);
|
||||
|
||||
const { t } = useTranslation();
|
||||
const [data, setData] = useState({
|
||||
@@ -51,10 +51,17 @@ const SelectDatasetParam = ({ inputs = [], moduleId }: RenderInputProps) => {
|
||||
});
|
||||
}, [inputs]);
|
||||
|
||||
useEffect(() => {
|
||||
async () => {
|
||||
const { nodes } = await getFlowStore();
|
||||
setNodes(nodes);
|
||||
};
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<>
|
||||
<Button
|
||||
variant={'base'}
|
||||
variant={'whitePrimary'}
|
||||
leftIcon={<MyIcon name={'settingLight'} w={'14px'} />}
|
||||
onClick={onOpen}
|
||||
>
|
||||
|
@@ -41,7 +41,7 @@ const OutputLabel = ({
|
||||
w={'14px'}
|
||||
cursor={'pointer'}
|
||||
mr={3}
|
||||
_hover={{ color: 'blue.500' }}
|
||||
_hover={{ color: 'primary.500' }}
|
||||
onClick={() =>
|
||||
setEditField({
|
||||
key: outputKey,
|
||||
|
@@ -17,7 +17,7 @@ const AddOutputParam = ({ outputs = [], item, moduleId }: RenderOutputProps) =>
|
||||
return (
|
||||
<Box textAlign={'right'}>
|
||||
<Button
|
||||
variant={'base'}
|
||||
variant={'whitePrimary'}
|
||||
leftIcon={<SmallAddIcon />}
|
||||
onClick={() => {
|
||||
setEditField(item.defaultEditField || {});
|
||||
|
@@ -28,7 +28,7 @@ const SourceHandle = ({ handleKey, valueType, ...props }: Props) => {
|
||||
<Box
|
||||
position={'absolute'}
|
||||
top={'50%'}
|
||||
right={'-16px'}
|
||||
right={'-18px'}
|
||||
transform={'translate(50%,-50%)'}
|
||||
{...props}
|
||||
>
|
||||
@@ -40,8 +40,8 @@ const SourceHandle = ({ handleKey, valueType, ...props }: Props) => {
|
||||
>
|
||||
<Handle
|
||||
style={{
|
||||
width: '12px',
|
||||
height: '12px',
|
||||
width: '14px',
|
||||
height: '14px',
|
||||
...valueStyle
|
||||
}}
|
||||
type="source"
|
||||
|
@@ -9,10 +9,9 @@ import { ModuleIOValueTypeEnum } from '@fastgpt/global/core/module/constants';
|
||||
interface Props extends BoxProps {
|
||||
handleKey: string;
|
||||
valueType?: `${ModuleIOValueTypeEnum}`;
|
||||
onConnect?: OnConnect;
|
||||
}
|
||||
|
||||
const TargetHandle = ({ handleKey, valueType, onConnect, ...props }: Props) => {
|
||||
const TargetHandle = ({ handleKey, valueType, ...props }: Props) => {
|
||||
const { t } = useTranslation();
|
||||
|
||||
const valType = valueType ?? ModuleIOValueTypeEnum.any;
|
||||
@@ -28,7 +27,7 @@ const TargetHandle = ({ handleKey, valueType, onConnect, ...props }: Props) => {
|
||||
<Box
|
||||
position={'absolute'}
|
||||
top={'50%'}
|
||||
left={'-16px'}
|
||||
left={'-18px'}
|
||||
transform={'translate(50%,-50%)'}
|
||||
{...props}
|
||||
>
|
||||
@@ -40,8 +39,8 @@ const TargetHandle = ({ handleKey, valueType, onConnect, ...props }: Props) => {
|
||||
>
|
||||
<Handle
|
||||
style={{
|
||||
width: '12px',
|
||||
height: '12px',
|
||||
width: '14px',
|
||||
height: '14px',
|
||||
...valueStyle
|
||||
}}
|
||||
type="target"
|
||||
|
@@ -11,7 +11,6 @@ import ModuleTemplateList, { type ModuleTemplateProps } from './ModuleTemplateLi
|
||||
import { useFlowProviderStore } from './FlowProvider';
|
||||
|
||||
import 'reactflow/dist/style.css';
|
||||
import type { ModuleItemType } from '@fastgpt/global/core/module/type.d';
|
||||
|
||||
const NodeSimple = dynamic(() => import('./components/nodes/NodeSimple'));
|
||||
const nodeTypes: Record<`${FlowNodeTypeEnum}`, any> = {
|
||||
@@ -34,61 +33,12 @@ const nodeTypes: Record<`${FlowNodeTypeEnum}`, any> = {
|
||||
const edgeTypes = {
|
||||
[EDGE_TYPE]: ButtonEdge
|
||||
};
|
||||
type Props = {
|
||||
modules: ModuleItemType[];
|
||||
Header: React.ReactNode;
|
||||
} & ModuleTemplateProps;
|
||||
|
||||
const Container = React.memo(function Container(props: Props) {
|
||||
const { modules = [], Header, templates } = props;
|
||||
|
||||
const {
|
||||
isOpen: isOpenTemplate,
|
||||
onOpen: onOpenTemplate,
|
||||
onClose: onCloseTemplate
|
||||
} = useDisclosure();
|
||||
|
||||
const { reactFlowWrapper, nodes, onNodesChange, edges, onEdgesChange, onConnect, initData } =
|
||||
const Container = React.memo(function Container() {
|
||||
const { reactFlowWrapper, nodes, onNodesChange, edges, onEdgesChange, onConnect } =
|
||||
useFlowProviderStore();
|
||||
|
||||
useEffect(() => {
|
||||
initData(JSON.parse(JSON.stringify(modules)));
|
||||
}, [modules.length]);
|
||||
|
||||
return (
|
||||
<>
|
||||
{/* header */}
|
||||
{Header}
|
||||
<Box
|
||||
minH={'400px'}
|
||||
flex={'1 0 0'}
|
||||
w={'100%'}
|
||||
h={0}
|
||||
position={'relative'}
|
||||
onContextMenu={(e) => {
|
||||
e.preventDefault();
|
||||
return false;
|
||||
}}
|
||||
>
|
||||
{/* open module template */}
|
||||
<IconButton
|
||||
position={'absolute'}
|
||||
top={5}
|
||||
left={5}
|
||||
w={'38px'}
|
||||
h={'38px'}
|
||||
borderRadius={'50%'}
|
||||
icon={<SmallCloseIcon fontSize={'26px'} />}
|
||||
transform={isOpenTemplate ? '' : 'rotate(135deg)'}
|
||||
transition={'0.2s ease'}
|
||||
aria-label={''}
|
||||
zIndex={1}
|
||||
boxShadow={'2px 2px 6px #85b1ff'}
|
||||
onClick={() => {
|
||||
isOpenTemplate ? onCloseTemplate() : onOpenTemplate();
|
||||
}}
|
||||
/>
|
||||
|
||||
<ReactFlow
|
||||
ref={reactFlowWrapper}
|
||||
fitView
|
||||
@@ -117,6 +67,55 @@ const Container = React.memo(function Container(props: Props) {
|
||||
<Background />
|
||||
<Controls position={'bottom-right'} style={{ display: 'flex' }} showInteractive={false} />
|
||||
</ReactFlow>
|
||||
);
|
||||
});
|
||||
|
||||
const Flow = ({
|
||||
Header,
|
||||
templates,
|
||||
...data
|
||||
}: ModuleTemplateProps & { Header: React.ReactNode }) => {
|
||||
const {
|
||||
isOpen: isOpenTemplate,
|
||||
onOpen: onOpenTemplate,
|
||||
onClose: onCloseTemplate
|
||||
} = useDisclosure();
|
||||
|
||||
return (
|
||||
<Box h={'100%'} position={'fixed'} zIndex={999} top={0} left={0} right={0} bottom={0}>
|
||||
<ReactFlowProvider>
|
||||
<Flex h={'100%'} flexDirection={'column'} bg={'#fff'}>
|
||||
{Header}
|
||||
<Box
|
||||
minH={'400px'}
|
||||
flex={'1 0 0'}
|
||||
w={'100%'}
|
||||
h={0}
|
||||
position={'relative'}
|
||||
onContextMenu={(e) => {
|
||||
e.preventDefault();
|
||||
return false;
|
||||
}}
|
||||
>
|
||||
{/* open module template */}
|
||||
<IconButton
|
||||
position={'absolute'}
|
||||
top={5}
|
||||
left={5}
|
||||
size={'mdSquare'}
|
||||
borderRadius={'50%'}
|
||||
icon={<SmallCloseIcon fontSize={'26px'} />}
|
||||
transform={isOpenTemplate ? '' : 'rotate(135deg)'}
|
||||
transition={'0.2s ease'}
|
||||
aria-label={''}
|
||||
zIndex={1}
|
||||
boxShadow={'2px 2px 6px #85b1ff'}
|
||||
onClick={() => {
|
||||
isOpenTemplate ? onCloseTemplate() : onOpenTemplate();
|
||||
}}
|
||||
/>
|
||||
|
||||
<Container {...data} />
|
||||
|
||||
<ModuleTemplateList
|
||||
templates={templates}
|
||||
@@ -124,16 +123,6 @@ const Container = React.memo(function Container(props: Props) {
|
||||
onClose={onCloseTemplate}
|
||||
/>
|
||||
</Box>
|
||||
</>
|
||||
);
|
||||
});
|
||||
|
||||
const Flow = (data: Props) => {
|
||||
return (
|
||||
<Box h={'100%'} position={'fixed'} zIndex={999} top={0} left={0} right={0} bottom={0}>
|
||||
<ReactFlowProvider>
|
||||
<Flex h={'100%'} flexDirection={'column'} bg={'#fff'}>
|
||||
<Container {...data} />
|
||||
</Flex>
|
||||
</ReactFlowProvider>
|
||||
</Box>
|
||||
|
@@ -88,7 +88,7 @@ const ApiKeyTable = ({ tips, appId }: { tips: string; appId?: string }) => {
|
||||
href={feConfigs.openAPIDocUrl || getDocPath('/docs/development/openapi')}
|
||||
target={'_blank'}
|
||||
ml={1}
|
||||
color={'blue.500'}
|
||||
color={'primary.500'}
|
||||
>
|
||||
查看文档
|
||||
</Link>
|
||||
@@ -119,7 +119,7 @@ const ApiKeyTable = ({ tips, appId }: { tips: string; appId?: string }) => {
|
||||
<Button
|
||||
ml={3}
|
||||
leftIcon={<AddIcon fontSize={'md'} />}
|
||||
variant={'base'}
|
||||
variant={'whitePrimary'}
|
||||
onClick={() =>
|
||||
setEditData({
|
||||
...defaultEditData,
|
||||
@@ -254,7 +254,7 @@ const ApiKeyTable = ({ tips, appId }: { tips: string; appId?: string }) => {
|
||||
</Flex>
|
||||
</ModalBody>
|
||||
<ModalFooter>
|
||||
<Button variant="base" onClick={() => setApiKey('')}>
|
||||
<Button variant="whiteBase" onClick={() => setApiKey('')}>
|
||||
好的
|
||||
</Button>
|
||||
</ModalFooter>
|
||||
@@ -358,7 +358,7 @@ function EditKeyModal({
|
||||
</ModalBody>
|
||||
|
||||
<ModalFooter>
|
||||
<Button variant={'base'} mr={3} onClick={onClose}>
|
||||
<Button variant={'whiteBase'} mr={3} onClick={onClose}>
|
||||
{t('Cancel')}
|
||||
</Button>
|
||||
|
||||
|
@@ -12,7 +12,7 @@ const PermissionIconText = ({
|
||||
return PermissionTypeMap[permission] ? (
|
||||
<Flex alignItems={'center'} {...props}>
|
||||
<MyIcon name={PermissionTypeMap[permission]?.iconLight as any} w={'14px'} />
|
||||
<Box ml={'1px'}>{t(PermissionTypeMap[permission]?.label)}</Box>
|
||||
<Box ml={'2px'}>{t(PermissionTypeMap[permission]?.label)}</Box>
|
||||
</Flex>
|
||||
) : null;
|
||||
};
|
||||
|
@@ -135,7 +135,7 @@ function EditModal({
|
||||
{!!defaultData.id ? (
|
||||
<>
|
||||
<Box flex={1} />
|
||||
<Button variant={'base'} mr={3} onClick={onClose}>
|
||||
<Button variant={'whiteBase'} mr={3} onClick={onClose}>
|
||||
{t('common.Close')}
|
||||
</Button>
|
||||
<Button isLoading={updating} onClick={handleSubmit((data) => onclickUpdate(data))}>
|
||||
|
@@ -156,7 +156,7 @@ const TeamManageModal = ({ onClose }: { onClose: () => void }) => {
|
||||
<MyIcon
|
||||
name={'common/addCircleLight'}
|
||||
w={['16px', '18px']}
|
||||
color={'blue.500'}
|
||||
color={'primary.500'}
|
||||
cursor={'pointer'}
|
||||
/>
|
||||
}
|
||||
@@ -177,7 +177,7 @@ const TeamManageModal = ({ onClose }: { onClose: () => void }) => {
|
||||
gap={3}
|
||||
{...(userInfo?.team?.teamId === team.teamId
|
||||
? {
|
||||
bg: 'blue.200'
|
||||
bg: 'primary.200'
|
||||
}
|
||||
: {
|
||||
_hover: {
|
||||
@@ -198,9 +198,13 @@ const TeamManageModal = ({ onClose }: { onClose: () => void }) => {
|
||||
{team.teamName}
|
||||
</Box>
|
||||
{userInfo?.team?.teamId === team.teamId ? (
|
||||
<MyIcon name={'common/tickFill'} w={'16px'} color={'blue.500'} />
|
||||
<MyIcon name={'common/tickFill'} w={'16px'} color={'primary.500'} />
|
||||
) : (
|
||||
<Button size={'xs'} variant={'base'} onClick={() => onSwitchTeam(team.teamId)}>
|
||||
<Button
|
||||
size={'xs'}
|
||||
variant={'whitePrimary'}
|
||||
onClick={() => onSwitchTeam(team.teamId)}
|
||||
>
|
||||
{t('user.team.Check Team')}
|
||||
</Button>
|
||||
)}
|
||||
@@ -235,7 +239,7 @@ const TeamManageModal = ({ onClose }: { onClose: () => void }) => {
|
||||
ml={2}
|
||||
cursor={'pointer'}
|
||||
_hover={{
|
||||
color: 'blue.500'
|
||||
color: 'primary.500'
|
||||
}}
|
||||
onClick={() => {
|
||||
if (!userInfo?.team) return;
|
||||
@@ -256,11 +260,11 @@ const TeamManageModal = ({ onClose }: { onClose: () => void }) => {
|
||||
</Box>
|
||||
{userInfo.team.role === TeamMemberRoleEnum.owner && (
|
||||
<Button
|
||||
variant={'base'}
|
||||
variant={'whitePrimary'}
|
||||
size="sm"
|
||||
borderRadius={'md'}
|
||||
ml={3}
|
||||
leftIcon={<MyIcon name={'common/inviteLight'} w={'14px'} color={'blue.500'} />}
|
||||
leftIcon={<MyIcon name={'common/inviteLight'} w={'14px'} color={'primary.500'} />}
|
||||
onClick={() => {
|
||||
if (userInfo.team.maxSize <= members.length) {
|
||||
toast({
|
||||
@@ -278,12 +282,16 @@ const TeamManageModal = ({ onClose }: { onClose: () => void }) => {
|
||||
<Box flex={1} />
|
||||
{userInfo.team.role !== TeamMemberRoleEnum.owner && (
|
||||
<Button
|
||||
variant={'base'}
|
||||
variant={'whitePrimary'}
|
||||
size="sm"
|
||||
borderRadius={'md'}
|
||||
ml={3}
|
||||
leftIcon={
|
||||
<MyIcon name={'support/account/loginoutLight'} w={'14px'} color={'blue.500'} />
|
||||
<MyIcon
|
||||
name={'support/account/loginoutLight'}
|
||||
w={'14px'}
|
||||
color={'primary.500'}
|
||||
/>
|
||||
}
|
||||
onClick={() => {
|
||||
openLeaveConfirm(() => onLeaveTeam(userInfo?.team?.teamId))();
|
||||
@@ -335,7 +343,7 @@ const TeamManageModal = ({ onClose }: { onClose: () => void }) => {
|
||||
name={'edit'}
|
||||
cursor={'pointer'}
|
||||
w="14px"
|
||||
_hover={{ color: 'blue.500' }}
|
||||
_hover={{ color: 'primary.500' }}
|
||||
/>
|
||||
</MenuButton>
|
||||
}
|
||||
|
@@ -19,7 +19,7 @@ const TeamMenu = () => {
|
||||
|
||||
return (
|
||||
<Button
|
||||
variant={'base'}
|
||||
variant={'whitePrimary'}
|
||||
userSelect={'none'}
|
||||
w={'100%'}
|
||||
display={'block'}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user