作者 202304001

增加思维导图页面

import { ControlParamItem } from "../sd";
import { IconButton } from "../button";
import styles from "./bg-removal-panel.module.scss";
import { useEffect, useState } from "react";
import { Select } from "@/app/components/ui-lib";
import { message } from 'antd';
import type { LocalData, FileProps } from '@/app/types/zuotang';
import { ApiPath } from '@/app/constant';
import { useAccessStore } from '@/app/store';
import Locale from '@/app/locales';
import { useState } from "react";
import { message } from "antd";
import type { LocalData, FileProps } from "@/app/types/zuotang";
import { ApiPath } from "@/app/constant";
import { useAccessStore } from "@/app/store";
import Locale from "@/app/locales";
import LoadingIcon from "@/app/icons/three-dots.svg";
import WriteIcon from '@/app/icons/write.svg'
import WriteIcon from "@/app/icons/write.svg";
import { useChatStore } from "@/app/store";
import { getBgPrompt } from "@/app/utils/prompt";
// 错误消息映射函数
const getErrorMessage = (state: number): string => {
const errorMap: { [key: number]: string } = {
[-8]: '处理超时,最长处理时间30秒',
[-7]: '无效图片文件(可能已损坏或格式错误)',
[-5]: '图片大小超过15MB限制',
[-3]: '服务器下载图片失败,请检查URL有效性',
[-2]: '处理结果上传失败',
[-1]: '任务处理失败'
};
return errorMap[state] || `未知错误(状态码:${state})`;
const errorMap: { [key: number]: string } = {
[-8]: "处理超时,最长处理时间30秒",
[-7]: "无效图片文件(可能已损坏或格式错误)",
[-5]: "图片大小超过15MB限制",
[-3]: "服务器下载图片失败,请检查URL有效性",
[-2]: "处理结果上传失败",
[-1]: "任务处理失败",
};
return errorMap[state] || `未知错误(状态码:${state})`;
};
// 图片URL转Blob方法
const urlToBlob = async (url: string): Promise<Blob> => {
const response = await fetch(url);
if (!response.ok) throw new Error(Locale.BgRemoval.error.imgLoadingErr);
return await response.blob();
const response = await fetch(url);
if (!response.ok) throw new Error(Locale.BgRemoval.error.imgLoadingErr);
return await response.blob();
};
// 通用轮询函数
const useTaskPoller = () => {
const pollTask = async (
taskId: string,
endpoint: string,
onSuccess: (data: any) => void,
onError: (message: string) => void
) => {
const pollInterval = 1000;
const maxAttempts = 60;
let attempts = 0;
const intervalId = setInterval(async () => {
try {
attempts++;
if (attempts > maxAttempts) {
clearInterval(intervalId);
onError(Locale.BgRemoval.error.timeoutErr);
return;
}
const result = await fetch(`${ApiPath.ZuoTang}/${endpoint}/${taskId}`);
if (!result.ok) {
const errorData = await result.json();
throw new Error(errorData.message || Locale.BgRemoval.error.statuErr);
}
const taskResult = await result.json();
// 根据 state 字段处理状态
switch (taskResult.data?.state) {
case 1: // 任务成功
clearInterval(intervalId);
onSuccess(taskResult.data);
break;
case 0: // 队列中
case 2: // 准备中
case 3: // 等待中
case 4: // 处理中
// 保持轮询不做操作
break;
default: // 处理错误状态
clearInterval(intervalId);
if (taskResult.data?.state < 0) { // 所有负数状态均为错误
onError(getErrorMessage(taskResult.data.state));
} else {
onError('未知任务状态');
}
}
} catch (error) {
clearInterval(intervalId);
onError(error instanceof Error ? error.message : Locale.BgRemoval.error.reqErr);
const pollTask = async (
taskId: string,
endpoint: string,
onSuccess: (data: any) => void,
onError: (message: string) => void,
) => {
const pollInterval = 1000;
const maxAttempts = 60;
let attempts = 0;
const intervalId = setInterval(async () => {
try {
attempts++;
if (attempts > maxAttempts) {
clearInterval(intervalId);
onError(Locale.BgRemoval.error.timeoutErr);
return;
}
const result = await fetch(`${ApiPath.ZuoTang}/${endpoint}/${taskId}`);
if (!result.ok) {
const errorData = await result.json();
throw new Error(errorData.message || Locale.BgRemoval.error.statuErr);
}
const taskResult = await result.json();
// 根据 state 字段处理状态
switch (taskResult.data?.state) {
case 1: // 任务成功
clearInterval(intervalId);
onSuccess(taskResult.data);
break;
case 0: // 队列中
case 2: // 准备中
case 3: // 等待中
case 4: // 处理中
// 保持轮询不做操作
break;
default: // 处理错误状态
clearInterval(intervalId);
if (taskResult.data?.state < 0) {
// 所有负数状态均为错误
onError(getErrorMessage(taskResult.data.state));
} else {
onError("未知任务状态");
}
}, pollInterval);
}
} catch (error) {
clearInterval(intervalId);
onError(
error instanceof Error
? error.message
: Locale.BgRemoval.error.reqErr,
);
}
}, pollInterval);
return () => clearInterval(intervalId);
};
return () => clearInterval(intervalId);
};
return { pollTask };
return { pollTask };
};
// 日期处理工具
const useDateUtils = () => {
const getFormattedToday = (): string => {
const today = new Date();
return today.toISOString().split('T')[0].replace(/-/g, '');
};
const getFormattedToday = (): string => {
const today = new Date();
return today.toISOString().split("T")[0].replace(/-/g, "");
};
const isToday = (dateStr: string): boolean => {
return dateStr === getFormattedToday();
};
const isToday = (dateStr: string): boolean => {
return dateStr === getFormattedToday();
};
return { getFormattedToday, isToday };
return { getFormattedToday, isToday };
};
// 本地存储管理
const useLocalStorage = () => {
const { getFormattedToday, isToday } = useDateUtils();
const { getFormattedToday, isToday } = useDateUtils();
const getLocalData = (accessCode: string): LocalData => {
try {
const data = localStorage.getItem(accessCode);
if (!data) return defaultLocalData();
const getLocalData = (accessCode: string): LocalData => {
try {
const data = localStorage.getItem(accessCode);
if (!data) return defaultLocalData();
const parsed = JSON.parse(data);
if (!isToday(parsed.date)) return defaultLocalData();
const parsed = JSON.parse(data);
if (!isToday(parsed.date)) return defaultLocalData();
return {
date: parsed.date || getFormattedToday(),
maxDailyUses: parsed.maxDailyUses || 'first'
};
} catch (e) {
return defaultLocalData();
}
};
return {
date: parsed.date || getFormattedToday(),
maxDailyUses: parsed.maxDailyUses || "first",
};
} catch (e) {
return defaultLocalData();
}
};
const updateLocalUsage = (accessCode: string, maxDailyUses: number) => {
const saveData: LocalData = {
date: getFormattedToday(),
maxDailyUses: maxDailyUses.toString()
};
localStorage.setItem(accessCode, JSON.stringify(saveData));
const updateLocalUsage = (accessCode: string, maxDailyUses: number) => {
const saveData: LocalData = {
date: getFormattedToday(),
maxDailyUses: maxDailyUses.toString(),
};
localStorage.setItem(accessCode, JSON.stringify(saveData));
};
const defaultLocalData = (): LocalData => ({
date: getFormattedToday(),
maxDailyUses: 'first'
});
const defaultLocalData = (): LocalData => ({
date: getFormattedToday(),
maxDailyUses: "first",
});
return { getLocalData, updateLocalUsage };
return { getLocalData, updateLocalUsage };
};
// 定义组件的 props 类型
interface PromptListProps {
promptList: string[];
setPromptList: React.Dispatch<React.SetStateAction<string[]>>;
setPrompt: React.Dispatch<React.SetStateAction<string>>;
promptList: string[];
setPromptList: React.Dispatch<React.SetStateAction<string[]>>;
setPrompt: React.Dispatch<React.SetStateAction<string>>;
}
const PromptListComponent: React.FC<PromptListProps> = ({
promptList,
setPromptList,
setPrompt,
promptList,
setPromptList,
setPrompt,
}) => {
// 删除处理函数
const handleDelete = (index: number, e: React.MouseEvent) => {
e.stopPropagation(); // 阻止冒泡
setPromptList(prev => prev.filter((_, i) => i !== index));
};
// 删除处理函数
const handleDelete = (index: number, e: React.MouseEvent) => {
e.stopPropagation(); // 阻止冒泡
setPromptList((prev) => prev.filter((_, i) => i !== index));
};
// 响应式样式配置
const containerStyle: React.CSSProperties = {
maxWidth: '90%',
margin: '0 auto',
padding: '0.6rem',
};
// 响应式样式配置
const containerStyle: React.CSSProperties = {
maxWidth: "90%",
margin: "0 auto",
padding: "0.6rem",
};
const itemStyle: React.CSSProperties = {
position: 'relative',
backgroundColor: '#f8f9fa',
padding: '0.5rem',
margin: '0.5rem 0',
borderRadius: '12px',
cursor: 'pointer',
boxShadow: '0 2px 8px rgba(0,0,0,0.1)',
transition: 'all 0.3s ease',
};
const itemStyle: React.CSSProperties = {
position: "relative",
backgroundColor: "#f8f9fa",
padding: "0.5rem",
margin: "0.5rem 0",
borderRadius: "12px",
cursor: "pointer",
boxShadow: "0 2px 8px rgba(0,0,0,0.1)",
transition: "all 0.3s ease",
};
const deleteButtonStyle: React.CSSProperties = {
position: 'absolute',
top: '0.2rem',
right: '0.5rem',
width: '15px',
height: '15px',
borderRadius: '50%',
backgroundColor: '#ff4444',
color: 'white',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
cursor: 'pointer',
transition: 'all 0.2s ease',
visibility: 'hidden', // 默认隐藏
};
const deleteButtonStyle: React.CSSProperties = {
position: "absolute",
top: "0.2rem",
right: "0.5rem",
width: "15px",
height: "15px",
borderRadius: "50%",
backgroundColor: "#ff4444",
color: "white",
display: "flex",
alignItems: "center",
justifyContent: "center",
cursor: "pointer",
transition: "all 0.2s ease",
visibility: "hidden", // 默认隐藏
};
return (
<div style={containerStyle}>
{promptList.map((item, index) => (
<div
key={index}
style={itemStyle}
onMouseEnter={(e) => {
const currentTarget = e.currentTarget as HTMLElement;
currentTarget.style.transform = 'translateY(-3px)';
currentTarget.style.boxShadow = '0 4px 12px rgba(0,0,0,0.15)';
// 显示删除按钮
const button = currentTarget.querySelector('.delete-btn');
if (button) {
(button as HTMLElement).style.visibility = 'visible';
}
}}
onMouseLeave={(e) => {
const currentTarget = e.currentTarget as HTMLElement;
currentTarget.style.transform = 'translateY(0)';
currentTarget.style.boxShadow = '0 2px 8px rgba(0,0,0,0.1)';
// 隐藏删除按钮
const button = currentTarget.querySelector('.delete-btn');
if (button) {
(button as HTMLElement).style.visibility = 'hidden';
}
}}
onClick={() => setPrompt(item)}
>
{/* 删除按钮 */}
<div
className="delete-btn"
style={deleteButtonStyle}
onClick={(e) => handleDelete(index, e)}
onMouseEnter={(e) => {
e.currentTarget.style.backgroundColor = '#cc0000';
e.currentTarget.style.transform = 'scale(1.1)';
}}
onMouseLeave={(e) => {
e.currentTarget.style.backgroundColor = '#ff4444';
e.currentTarget.style.transform = 'scale(1)';
}}
>
×
</div>
return (
<div style={containerStyle}>
{promptList.map((item, index) => (
<div
key={index}
style={itemStyle}
onMouseEnter={(e) => {
const currentTarget = e.currentTarget as HTMLElement;
currentTarget.style.transform = "translateY(-3px)";
currentTarget.style.boxShadow = "0 4px 12px rgba(0,0,0,0.15)";
// 显示删除按钮
const button = currentTarget.querySelector(".delete-btn");
if (button) {
(button as HTMLElement).style.visibility = "visible";
}
}}
onMouseLeave={(e) => {
const currentTarget = e.currentTarget as HTMLElement;
currentTarget.style.transform = "translateY(0)";
currentTarget.style.boxShadow = "0 2px 8px rgba(0,0,0,0.1)";
// 隐藏删除按钮
const button = currentTarget.querySelector(".delete-btn");
if (button) {
(button as HTMLElement).style.visibility = "hidden";
}
}}
onClick={() => setPrompt(item)}
>
{/* 删除按钮 */}
<div
className="delete-btn"
style={deleteButtonStyle}
onClick={(e) => handleDelete(index, e)}
onMouseEnter={(e) => {
e.currentTarget.style.backgroundColor = "#cc0000";
e.currentTarget.style.transform = "scale(1.1)";
}}
onMouseLeave={(e) => {
e.currentTarget.style.backgroundColor = "#ff4444";
e.currentTarget.style.transform = "scale(1)";
}}
>
×
</div>
{/* 内容区域 */}
<div style={{
fontSize: 'clamp(12px, 2vw, 14px)',
color: '#343a40',
lineHeight: 1.6,
paddingRight: '2rem', // 为删除按钮留出空间
}}>
{item}
</div>
</div>
))}
{/* 内容区域 */}
<div
style={{
fontSize: "clamp(12px, 2vw, 14px)",
color: "#343a40",
lineHeight: 1.6,
paddingRight: "2rem", // 为删除按钮留出空间
}}
>
{item}
</div>
</div>
);
))}
</div>
);
};
export function BgPanel(props: FileProps) {
const [prompt, setPrompt] = useState('') //背景提示词
const [promptList, setPromptList] = useState<string[]>([]) //背景提示词优化列表
const [isGenerate, setIsGenerate] = useState(false)
const [sceneTypeList, setSceneTypeList] = useState([])
const chatStore = useChatStore();
const [loading, setLoading] = useState(false) //是否优化文案
const { previewUrl, setPreviewUrl, fileData, setFileData, isLoading, setIsLoading } = props;
const accessStore = useAccessStore();
const { pollTask } = useTaskPoller();
const { updateLocalUsage, getLocalData } = useLocalStorage();
const [prompt, setPrompt] = useState(""); //背景提示词
const [promptList, setPromptList] = useState<string[]>([]); //背景提示词优化列表
const [isGenerate, setIsGenerate] = useState(false);
const [sceneTypeList, setSceneTypeList] = useState([]);
const chatStore = useChatStore();
const [loading, setLoading] = useState(false); //是否优化文案
const {
previewUrl,
setPreviewUrl,
fileData,
setFileData,
isLoading,
setIsLoading,
} = props;
const accessStore = useAccessStore();
const { pollTask } = useTaskPoller();
const { updateLocalUsage, getLocalData } = useLocalStorage();
const handleApiRequest = async (endpoint: string) => {
if (!previewUrl) {
message.error(Locale.BgRemoval.error.selectImg);
throw new Error(`VALIDATION_ERROR: ${Locale.BgRemoval.error.selectImg}`);
}
if (!accessStore.accessCode) {
message.error(Locale.BgRemoval.error.code);
throw new Error(`VALIDATION_ERROR: ${Locale.BgRemoval.error.code}`);
}
if (endpoint === 'visual/r-background' && !prompt.trim()) {
message.error(Locale.BgRemoval.error.prompt);
setIsLoading(false);
throw new Error(`VALIDATION_ERROR: ${Locale.BgRemoval.error.prompt}`);
const handleApiRequest = async (endpoint: string) => {
if (!previewUrl) {
message.error(Locale.BgRemoval.error.selectImg);
throw new Error(`VALIDATION_ERROR: ${Locale.BgRemoval.error.selectImg}`);
}
if (!accessStore.accessCode) {
message.error(Locale.BgRemoval.error.code);
throw new Error(`VALIDATION_ERROR: ${Locale.BgRemoval.error.code}`);
}
if (endpoint === "visual/r-background" && !prompt.trim()) {
message.error(Locale.BgRemoval.error.prompt);
setIsLoading(false);
throw new Error(`VALIDATION_ERROR: ${Locale.BgRemoval.error.prompt}`);
}
try {
const formData = new FormData();
const localData = getLocalData(accessStore.accessCode); // 获取本地数据
formData.append("accessCode", accessStore.accessCode);
formData.append("localData", JSON.stringify(localData)); // 序列化后添加
formData.append("image_file", fileData as Blob);
if (endpoint === "visual/r-background") {
formData.append("prompt", prompt);
} //生成背景添加提示词
const res = await fetch(`${ApiPath.ZuoTang}/${endpoint}`, {
method: "POST",
body: formData,
});
if (!res.ok) {
const errorData = await res.json();
throw new Error(errorData.message || Locale.BgRemoval.error.reqErr);
}
const responseData = await res.json();
if (responseData.status >= 400) {
if (responseData.status === 429) {
updateLocalUsage(accessStore.accessCode, 0);
}
try {
const formData = new FormData();
const localData = getLocalData(accessStore.accessCode); // 获取本地数据
formData.append("accessCode", accessStore.accessCode);
formData.append("localData", JSON.stringify(localData)); // 序列化后添加
formData.append("image_file", fileData as Blob);
if (endpoint === 'visual/r-background') { formData.append("prompt", prompt) } //生成背景添加提示词
const res = await fetch(`${ApiPath.ZuoTang}/${endpoint}`, {
method: 'POST',
body: formData
});
if (!res.ok) {
const errorData = await res.json();
throw new Error(errorData.message || Locale.BgRemoval.error.reqErr);
}
const responseData = await res.json();
if (responseData.status >= 400) {
if (responseData.status === 429) {
updateLocalUsage(accessStore.accessCode, 0);
}
throw new Error(responseData.message);
}
return responseData;
} finally {}
};
throw new Error(responseData.message);
}
return responseData;
} finally {
}
};
const handleProcessImage = async (endpoint: string) => {
setIsLoading(true);
try {
const responseData = await handleApiRequest(endpoint);
updateLocalUsage(accessStore.accessCode, responseData.maxDailyUses);
const handleProcessImage = async (endpoint: string) => {
setIsLoading(true);
try {
const responseData = await handleApiRequest(endpoint);
updateLocalUsage(accessStore.accessCode, responseData.maxDailyUses);
pollTask(
responseData.data.task_id,
endpoint,
async (data) => {
try {
// 获取新图片的Blob
const newBlob = await urlToBlob(data.image || data.image_1);
// 创建新的对象URL
const newUrl = URL.createObjectURL(newBlob);
// 同步更新所有相关状态
setPreviewUrl(newUrl);
setFileData(newBlob);
message.success(Locale.BgRemoval.success);
} catch (error) {
message.error(Locale.BgRemoval.error.resultErr);
} finally {
setIsLoading(false);
}
},
(errorMsg) => {
message.error(errorMsg);
setIsLoading(false);
}
);
} catch (error) {
const errorMessage = error instanceof Error ? error.message : '';
if (!errorMessage.startsWith('VALIDATION_ERROR:')) {
message.error(Locale.BgRemoval.error.reqErr);
}
pollTask(
responseData.data.task_id,
endpoint,
async (data) => {
try {
// 获取新图片的Blob
const newBlob = await urlToBlob(data.image || data.image_1);
// 创建新的对象URL
const newUrl = URL.createObjectURL(newBlob);
// 同步更新所有相关状态
setPreviewUrl(newUrl);
setFileData(newBlob);
message.success(Locale.BgRemoval.success);
} catch (error) {
message.error(Locale.BgRemoval.error.resultErr);
} finally {
setIsLoading(false);
}
};
}
},
(errorMsg) => {
message.error(errorMsg);
setIsLoading(false);
},
);
} catch (error) {
const errorMessage = error instanceof Error ? error.message : "";
if (!errorMessage.startsWith("VALIDATION_ERROR:")) {
message.error(Locale.BgRemoval.error.reqErr);
}
setIsLoading(false);
}
};
const handleDownload = () => {
if (!previewUrl) return message.error(Locale.BgRemoval.error.downLoadErr);
const link = document.createElement('a');
link.href = previewUrl;
link.download = `processed-${Date.now()}.png`;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
};
const handleDownload = () => {
if (!previewUrl) return message.error(Locale.BgRemoval.error.downLoadErr);
const link = document.createElement("a");
link.href = previewUrl;
link.download = `processed-${Date.now()}.png`;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
};
const optimizePrompt = async () => {
try {
if (!prompt.trim()) {
return message.error(Locale.BgRemoval.error.prompt);
}
const input = `你现扮演生成创意思图片的提示词工程师,参考我的描述“${prompt}”帮我做优化润色5组,返回的数据用''分割,直接输出结果,不要做解释`
setLoading(true)
const response = await chatStore.directLlmInvoke(input,'gpt-4o-mini');
const items = response.split("'").filter(item => item.trim() !== '');
setPromptList(items);
} catch (error) {
message.error("优化失败,请重试")
} finally {
setLoading(false)
}
const optimizePrompt = async () => {
try {
if (!prompt.trim()) {
return message.error(Locale.BgRemoval.error.prompt);
}
const input = getBgPrompt(prompt);
setLoading(true);
const response = await chatStore.directLlmInvoke(input, "gpt-4o-mini");
const items = response.split("'").filter((item) => item.trim() !== "");
setPromptList(items);
} catch (error) {
message.error("优化失败,请重试");
} finally {
setLoading(false);
}
return (
<>
<ControlParamItem title={Locale.BgRemoval.subTitle}>
<div className={styles["ai-models"]}>
<IconButton
text={Locale.BgRemoval.bgRemoveBtn}
type="primary"
shadow
onClick={() => handleProcessImage('visual/segmentation')}
disabled={isLoading}
/>
<IconButton
text={Locale.BgRemoval.downloadImg}
type="primary"
shadow
onClick={handleDownload}
disabled={!previewUrl}
/>
<IconButton
text={Locale.BgRemoval.generateBg}
type="primary"
shadow
onClick={() => handleProcessImage('visual/r-background')}
disabled={isLoading}
/>
</div>
</ControlParamItem>
<ControlParamItem
title={Locale.BgRemoval.promptTitle}
required={true}
>
<div className={styles["prompt"]}>
<textarea
rows={3}
className={styles["tx"]}
placeholder={Locale.BgRemoval.error.prompt}
onChange={(e) => { setPrompt(e.target.value) }}
value={prompt}
></textarea>
<div className={styles["ai-prompt"]} onClick={optimizePrompt}>
<WriteIcon />
AI优化文案
</div>
</div>
{loading ?
(<div className={styles["loading-content"]}>
<LoadingIcon />
</div>)
: (<PromptListComponent promptList={promptList} setPromptList={setPromptList} setPrompt={setPrompt} />)}
</ControlParamItem>
</>
)
}
\ No newline at end of file
};
return (
<>
<ControlParamItem title={Locale.BgRemoval.subTitle}>
<div className={styles["ai-models"]}>
<IconButton
text={Locale.BgRemoval.bgRemoveBtn}
type="primary"
shadow
onClick={() => handleProcessImage("visual/segmentation")}
disabled={isLoading}
/>
<IconButton
text={Locale.BgRemoval.downloadImg}
type="primary"
shadow
onClick={handleDownload}
disabled={!previewUrl}
/>
<IconButton
text={Locale.BgRemoval.generateBg}
type="primary"
shadow
onClick={() => handleProcessImage("visual/r-background")}
disabled={isLoading}
/>
</div>
</ControlParamItem>
<ControlParamItem title={Locale.BgRemoval.promptTitle} required={true}>
<div className={styles["prompt"]}>
<textarea
rows={3}
className={styles["tx"]}
placeholder={Locale.BgRemoval.error.prompt}
onChange={(e) => {
setPrompt(e.target.value);
}}
value={prompt}
></textarea>
<div
className={styles["ai-prompt"]}
onClick={(e) => {
if (loading) {
e.stopPropagation();
return;
}
optimizePrompt();
}}
>
<WriteIcon />
AI优化文案
</div>
</div>
{loading ? (
<div className={styles["loading-content"]}>
<LoadingIcon />
</div>
) : (
<PromptListComponent
promptList={promptList}
setPromptList={setPromptList}
setPrompt={setPrompt}
/>
)}
</ControlParamItem>
</>
);
}
... ...
... ... @@ -32,9 +32,9 @@ import clsx from "clsx";
import { initializeMcpSystem, isMcpEnabled } from "../mcp/actions";
/**
*
*
* @param props 可选参数,用于控制是否显示机器人图标
* @returns
* @returns
*/
export function Loading(props: { noLogo?: boolean }) {
return (
... ... @@ -45,7 +45,6 @@ export function Loading(props: { noLogo?: boolean }) {
);
}
const Artifacts = dynamic(async () => (await import("./artifacts")).Artifacts, {
loading: () => <Loading noLogo />,
});
... ... @@ -88,19 +87,13 @@ const McpMarketPage = dynamic(
},
);
//以下新增思维导图路由,抠图路由 20250319
const Mind = dynamic(
async () => (await import("./mind")).Mind,
{
loading: () => <Loading noLogo />,
},
);
const Mind = dynamic(async () => (await import("./mind")).MindPage, {
loading: () => <Loading noLogo />,
});
const BgRemoval = dynamic(
async () => (await import("./bgRemoval")).BgRemoval,
{
loading: () => <Loading noLogo />,
},
);
const BgRemoval = dynamic(async () => (await import("./bgRemoval")).BgRemoval, {
loading: () => <Loading noLogo />,
});
const WritingPage = dynamic(
async () => (await import("./writing")).WritingPage,
... ... @@ -109,7 +102,6 @@ const WritingPage = dynamic(
},
);
export function useSwitchTheme() {
const config = useAppConfig();
... ... @@ -198,7 +190,6 @@ function Screen() {
const isBgRemoval = location.pathname === Path.BgRemoval;
const isWrting = location.pathname === Path.Writing;
const isMobileScreen = useMobileScreen();
const shouldTightBorder =
getClientConfig()?.isApp || (config.tightBorder && !isMobileScreen);
... ... @@ -221,9 +212,9 @@ function Screen() {
// 20250317新增思维导图
if (isMind) return <Mind />;
//20250322新增抠图界面
if (isBgRemoval) return <BgRemoval />
if (isBgRemoval) return <BgRemoval />;
//20250325新增AI写作界面
if(isWrting)return <WritingPage/>
if (isWrting) return <WritingPage />;
return (
<>
... ...
.minder-container {
position: absolute;
width: 100%;
height: 100%;
background: transparent !important;
z-index: 1;
}
.minder-tools {
width: 950px;
position: absolute;
z-index: 2;
background: #f7f7f8;
border-radius: 10px;
left: 50%;
transform: translateX(-50%);
top: 0;
display: flex;
align-items: center;
padding: 4px 9px;
box-shadow: 0 0 20px rgba(100, 100, 100, 0.1);
.split {
height: 14px;
width: 1px;
background: #ddd;
margin: 0 10px;
padding: 0;
}
.tools-item {
padding: 4px 8px;
border-radius: 5px;
color: #666 !important;
margin: 0 3px;
font-size: 14px;
cursor: pointer;
.icon {
font-size: 18px;
}
.color-block {
display: block;
width: 16px;
height: 16px;
border-radius: 4px;
}
&:hover,
&:active {
background: #eff0f0;
}
&.active {
background: #e3e4e4;
}
&.disabled {
color: #ccc !important;
.icon {
color: #ccc !important;
}
}
&.btn-primary {
//background: linear-gradient(108deg, #a561ff 0, #ff6060 96%), linear-gradient(69deg, #ffa100 14%, #f95757 49%) !important;
background: linear-gradient(108deg, #35b1d9 0, #1adca9 96%) !important;
color: #fff !important;
&:hover {
background: linear-gradient(108deg, #289dc2 0, #15bb8f 96%) !important;
}
}
}
}
.el-popover {
padding: 0;
}
\ No newline at end of file
import React from 'react';
import { ReactFlow } from '@xyflow/react';
import '@xyflow/react/dist/style.css';
const initialNodes = [
{ id: '1', position: { x: 0, y: 0 }, data: { label: 'jsadisahsaa' } },
{ id: '2', position: { x: 0, y: 100 }, data: { label: 'sohidhso' } },
{ id: '3', position: { x: 0, y: 100 }, data: { label: 'sohidhso' } },
{ id: '2', position: { x: 0, y: 100 }, data: { label: 'sohidhso' } },
];
const initialEdges = [{ id: 'e1-2', source: '1', target: '2' }];
export function Mind() {
return (
<div style={{ width: '100vw', height: '100vh' }}>
<ReactFlow nodes={initialNodes} edges={initialEdges} />
</div>
);
}
\ No newline at end of file
export * from "./mind";
export * from "./mind-panel";
... ...
import { useState } from "react";
import { ControlParamItem } from "../sd";
import { SideBarTail } from "@/app/components/sidebar";
import { IconButton } from "../button";
import { getMindPrompt } from "@/app/utils/prompt";
import { useChatStore } from "@/app/store";
import { type MindElixirData } from "mind-elixir";
import { message } from "antd";
export interface MindPanelProps {
setData: React.Dispatch<React.SetStateAction<MindElixirData>>;
isLoading: boolean;
setIsLoading: React.Dispatch<React.SetStateAction<boolean>>;
}
export function MindPanel(props: MindPanelProps) {
const { setData, isLoading, setIsLoading } = props;
const [inputValue, setInputValue] = useState("");
const [loading, setLoading] = useState(false);
const chatStore = useChatStore();
const submit = async () => {
if (!inputValue.trim()) return message.error("请输入提示词!");
setIsLoading(true);
try {
const prompt = getMindPrompt(inputValue);
const response = await chatStore.directLlmInvoke(prompt, "gpt-4o-mini");
console.log("原始响应:", response);
const parsedData: MindElixirData = JSON.parse(response);
console.log("解析后响应:", parsedData);
// 增强校验逻辑
if (
!parsedData?.nodeData?.id ||
!Array.isArray(parsedData.nodeData.children)
) {
throw new Error("数据结构不完整");
}
setData(parsedData);
} catch (error) {
console.log(error);
message.error("请求失败,请重试");
} finally {
setIsLoading(false); // 确保关闭加载状态‌:ml-citation{ref="2,5" data="citationList"}
}
};
return (
<>
<div>
<ControlParamItem title="提示词" required={true}>
<textarea
rows={3}
style={{ maxWidth: "100%", width: "100%", padding: "10px" }}
placeholder="请输入"
value={inputValue}
onChange={(e) => {
setInputValue(e.target.value);
}}
></textarea>
</ControlParamItem>
<SideBarTail
secondaryAction={
<IconButton
text="提交生成"
type="primary"
shadow
onClick={submit}
disabled={isLoading}
></IconButton>
}
/>
</div>
</>
);
}
... ...
import { useMobileScreen } from "@/app/utils";
import dynamic from "next/dynamic";
import {
SideBarContainer,
SideBarBody,
SideBarHeader,
useDragSideBar,
useHotKey,
} from "@/app/components/sidebar";
import { type MindElixirData } from "mind-elixir";
import { IconButton } from "@/app/components/button";
import ReturnIcon from "@/app/icons/return.svg";
import HistoryIcon from "@/app/icons/history.svg";
import Locale from "@/app/locales";
import { Path } from "@/app/constant";
import { useNavigate } from "react-router-dom";
import SDIcon from "@/app/icons/sd.svg";
const MindPanel = dynamic(
async () => (await import("@/app/components/mind")).MindPanel,
{
loading: () => null,
},
);
export interface MindSiderBarProps {
className?: string;
setData: React.Dispatch<React.SetStateAction<MindElixirData>>;
isLoading: boolean;
setIsLoading: React.Dispatch<React.SetStateAction<boolean>>;
}
export function MindSiderBar(props: MindSiderBarProps) {
const { className, setData, isLoading, setIsLoading } = props;
const isMobileScreen = useMobileScreen();
const { onDragStart, shouldNarrow } = useDragSideBar();
const navigate = useNavigate();
useHotKey();
return (
<>
<SideBarContainer
onDragStart={onDragStart}
shouldNarrow={shouldNarrow}
{...props}
>
{isMobileScreen ? (
<div
className="window-header"
data-tauri-drag-region
style={{
paddingLeft: 0,
paddingRight: 0,
}}
>
<div className="window-actions">
<div className="window-action-button">
<IconButton
icon={<ReturnIcon />}
bordered
title={Locale.Sd.Actions.ReturnHome}
onClick={() => navigate(Path.Home)}
/>
</div>
</div>
<SDIcon width={50} height={50} />
<div className="window-actions">
<div className="window-action-button">
<IconButton
icon={<HistoryIcon />}
bordered
title={Locale.Sd.Actions.History}
onClick={() => navigate(Path.SdNew)}
/>
</div>
</div>
</div>
) : (
<SideBarHeader
title={
<IconButton
icon={<ReturnIcon />}
bordered
title={Locale.Sd.Actions.ReturnHome}
onClick={() => navigate(Path.Home)}
/>
}
logo={<SDIcon width={38} height={"100%"} />}
></SideBarHeader>
)}
<SideBarBody>
<MindPanel
setData={setData}
isLoading={isLoading}
setIsLoading={setIsLoading}
/>
</SideBarBody>
</SideBarContainer>
</>
);
}
... ...
.loading-content {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
height: 100%;
width: 100%;
gap: 5px;
}
\ No newline at end of file
... ...
import chatStyles from "@/app/components/chat.module.scss";
import homeStyles from "@/app/components/home.module.scss";
import { MindSiderBar } from "./mind-siderBar";
import MindElixir, { type Options, type MindElixirData } from "mind-elixir";
import { WindowContent } from "@/app/components/home";
import { useMobileScreen } from "@/app/utils";
import { IconButton } from "../button";
import Locale from "@/app/locales";
import { Path } from "@/app/constant";
import { useNavigate } from "react-router-dom";
import clsx from "clsx";
import { getClientConfig } from "@/app/config/client";
import React, { useEffect, useMemo, useRef, useState } from "react";
import { useAppConfig } from "@/app/store";
import ReturnIcon from "@/app/icons/return.svg";
import MinIcon from "@/app/icons/min.svg";
import MaxIcon from "@/app/icons/max.svg";
import SDIcon from "@/app/icons/sd.svg";
export function MindPage() {
const isMobileScreen = useMobileScreen();
const navigate = useNavigate();
const clientConfig = useMemo(() => getClientConfig(), []);
const showMaxIcon = !isMobileScreen && !clientConfig?.isApp;
const config = useAppConfig();
const scrollRef = useRef<HTMLDivElement>(null);
const isWriting = location.pathname === Path.Writing;
const [isLoading, setIsLoading] = useState(false);
const containerRef = useRef<HTMLDivElement>(null);
const mindInstance = useRef<InstanceType<typeof MindElixir> | null>(null);
const [data, setData] = useState<MindElixirData>({
nodeData: {
id: "root",
topic: "中心主题",
},
});
useEffect(() => {
// 确保容器元素已挂载
if (!containerRef.current) return;
// 初始化配置项
const options: Options = {
el: containerRef.current,
contextMenu: true,
toolBar: true,
nodeMenu: true,
};
// 创建实例
mindInstance.current = new MindElixir(options);
mindInstance.current.init(data);
return () => {
if (mindInstance.current) {
mindInstance.current.destroy();
// 移除事件监听器
document.removeEventListener("mousemove", () => {});
document.removeEventListener("mouseup", () => {});
}
};
}, []);
useEffect(() => {
mindInstance.current?.refresh(data);
}, [data]);
useEffect(() => {
if (isLoading) {
mindInstance.current?.refresh({
nodeData: {
id: "root",
topic: "生成中....",
},
});
}
}, [isLoading]);
// const meNode=document.querySelector('me-nodes')
// const draggableElement = meNode?.querySelector('me-root') as HTMLElement | null;
// if (draggableElement) {
// let isDragging = false; // 是否正在拖拽
// let startX = 0; // 鼠标按下时的 X 坐标
// let startY = 0; // 鼠标按下时的 Y 坐标
// let initialLeft = 0; // 元素初始的左偏移量
// let initialTop = 0; // 元素初始的上偏移量
// // 鼠标按下事件
// draggableElement.addEventListener('mousedown', (e) => {
// isDragging = true;
// startX = e.clientX;
// startY = e.clientY;
// // 获取 me-root 元素当前的位置
// const draggableStyle = window.getComputedStyle(draggableElement);
// initialLeft = parseInt(draggableStyle.left) || 0;
// initialTop = parseInt(draggableStyle.top) || 0;
// // 确保元素可以移动
// draggableElement.style.position = 'absolute';
// });
// // 鼠标移动事件
// document.addEventListener('mousemove', (e) => {
// if (isDragging) {
// const currentX = e.clientX;
// const currentY = e.clientY;
// // 计算偏移量
// const diffX = currentX - startX;
// const diffY = currentY - startY;
// // 更新 me-root 元素位置
// draggableElement.style.left = `${initialLeft + diffX}px`;
// draggableElement.style.top = `${initialTop + diffY}px`;
// // 检查 meMain 是否存在,如果存在则更新其位置
// const meMain = meNode?.querySelector('me-main') as HTMLElement | null;
// if (meMain) {
// // 获取 meMain 元素当前的位置
// const meMainStyle = window.getComputedStyle(meMain);
// const meMainInitialLeft = parseInt(meMainStyle.left) || 0;
// const meMainInitialTop = parseInt(meMainStyle.top) || 0;
// // 更新 meMain 元素位置
// meMain.style.position = 'absolute';
// meMain.style.left = `${meMainInitialLeft + diffX}px`;
// meMain.style.top = `${meMainInitialTop + diffY}px`;
// }
// }
// });
// // 鼠标释放事件
// document.addEventListener('mouseup', () => {
// isDragging = false;
// });
// } else {
// console.error('未找到 me-root 元素');
// }
return (
<>
<MindSiderBar
className={clsx({ [homeStyles["sidebar-show"]]: isWriting })}
setData={setData}
isLoading={isLoading}
setIsLoading={setIsLoading}
/>
<WindowContent>
<div className={chatStyles.chat} key={"1"}>
<div className="window-header" data-tauri-drag-region>
{isMobileScreen && (
<div className="window-actions">
<div className={"window-action-button"}>
<IconButton
icon={<ReturnIcon />}
bordered
title={Locale.Chat.Actions.ChatList}
onClick={() => navigate(Path.BgRemoval)}
/>
</div>
</div>
)}
<div
className={clsx(
"window-header-title",
chatStyles["chat-body-title"],
)}
>
<div className={`window-header-main-title`}>生成思维导图</div>
</div>
<div className={chatStyles["chat-message-actions"]}>
<div className={chatStyles["chat-input-actions"]}>
{/* <ChatAction
text={Locale.Chat.Actions.ReWrite}
icon={<ReloadIcon />}
onClick={() => { }
}
/> */}
</div>
</div>
<div className="window-actions">
{showMaxIcon && (
<div className="window-action-button">
<IconButton
aria={Locale.Chat.Actions.FullScreen}
icon={config.tightBorder ? <MinIcon /> : <MaxIcon />}
bordered
onClick={() => {
config.update(
(config) => (config.tightBorder = !config.tightBorder),
);
}}
/>
</div>
)}
{isMobileScreen && <SDIcon width={50} height={50} />}
</div>
</div>
<div className={chatStyles["chat-body"]} ref={scrollRef}>
<div ref={containerRef} style={{ width: "100%", height: "100%" }} />
</div>
</div>
</WindowContent>
</>
);
}
... ...
... ... @@ -38,7 +38,8 @@ const DISCOVERY = [
{ name: "Stable Diffusion", path: Path.Sd },
{ name: Locale.SearchChat.Page.Title, path: Path.SearchChat },
{ name: "智能抠图", path: Path.BgRemoval },
{ name: "AI-writing", path: Path.Writing }
{ name: "AI-writing", path: Path.Writing },
{ name: "思维导图", path: Path.Mind },
];
const ChatList = dynamic(async () => (await import("./chat-list")).ChatList, {
... ...
import { useMobileScreen } from "@/app/utils";
import dynamic from "next/dynamic";
import {
SideBarContainer,
SideBarBody,
SideBarHeader,
SideBarTail,
useDragSideBar,
useHotKey,
SideBarContainer,
SideBarBody,
SideBarHeader,
useDragSideBar,
useHotKey,
} from "@/app/components/sidebar";
import { IconButton } from "@/app/components/button";
import ReturnIcon from "@/app/icons/return.svg";
... ... @@ -15,84 +14,88 @@ import Locale from "@/app/locales";
import { Path } from "@/app/constant";
import { useNavigate } from "react-router-dom";
import SDIcon from "@/app/icons/sd.svg";
import { ApiPath } from '@/app/constant';
import { message } from 'antd';
export interface WriteSiderBarProps {
className?: string;
htmlCode: string;
setHtmlCode: React.Dispatch<React.SetStateAction<string>>;
className?: string;
htmlCode: string;
setHtmlCode: React.Dispatch<React.SetStateAction<string>>;
loading: boolean;
setLoading: React.Dispatch<React.SetStateAction<boolean>>;
}
const WritingPanel = dynamic(
async () => (await import("@/app/components/writing")).WritingPanel,
{
loading: () => null,
},
async () => (await import("@/app/components/writing")).WritingPanel,
{
loading: () => null,
},
);
export function WriteSiderBar(props:WriteSiderBarProps) {
const {className,htmlCode,setHtmlCode}=props
const isMobileScreen = useMobileScreen();
const { onDragStart, shouldNarrow } = useDragSideBar();
const navigate = useNavigate();
useHotKey();
return (
<>
<SideBarContainer
onDragStart={onDragStart}
shouldNarrow={shouldNarrow}
{...props}
>
{isMobileScreen ? (
<div
className="window-header"
data-tauri-drag-region
style={{
paddingLeft: 0,
paddingRight: 0,
}}
>
<div className="window-actions">
<div className="window-action-button">
<IconButton
icon={<ReturnIcon />}
bordered
title={Locale.Sd.Actions.ReturnHome}
onClick={() => navigate(Path.Home)}
/>
</div>
</div>
<SDIcon width={50} height={50} />
<div className="window-actions">
<div className="window-action-button">
<IconButton
icon={<HistoryIcon />}
bordered
title={Locale.Sd.Actions.History}
onClick={() => navigate(Path.SdNew)}
/>
</div>
</div>
</div>
) : (
<SideBarHeader
title={
<IconButton
icon={<ReturnIcon />}
bordered
title={Locale.Sd.Actions.ReturnHome}
onClick={() => navigate(Path.Home)}
/>
}
logo={<SDIcon width={38} height={"100%"} />}
></SideBarHeader>
)}
<SideBarBody>
<WritingPanel htmlCode={htmlCode} setHtmlCode={setHtmlCode}/>
</SideBarBody>
</SideBarContainer>
</>
)
}
\ No newline at end of file
export function WriteSiderBar(props: WriteSiderBarProps) {
const { className, htmlCode, setHtmlCode, loading, setLoading } = props;
const isMobileScreen = useMobileScreen();
const { onDragStart, shouldNarrow } = useDragSideBar();
const navigate = useNavigate();
useHotKey();
return (
<>
<SideBarContainer
onDragStart={onDragStart}
shouldNarrow={shouldNarrow}
{...props}
>
{isMobileScreen ? (
<div
className="window-header"
data-tauri-drag-region
style={{
paddingLeft: 0,
paddingRight: 0,
}}
>
<div className="window-actions">
<div className="window-action-button">
<IconButton
icon={<ReturnIcon />}
bordered
title={Locale.Sd.Actions.ReturnHome}
onClick={() => navigate(Path.Home)}
/>
</div>
</div>
<SDIcon width={50} height={50} />
<div className="window-actions">
<div className="window-action-button">
<IconButton
icon={<HistoryIcon />}
bordered
title={Locale.Sd.Actions.History}
onClick={() => navigate(Path.SdNew)}
/>
</div>
</div>
</div>
) : (
<SideBarHeader
title={
<IconButton
icon={<ReturnIcon />}
bordered
title={Locale.Sd.Actions.ReturnHome}
onClick={() => navigate(Path.Home)}
/>
}
logo={<SDIcon width={38} height={"100%"} />}
></SideBarHeader>
)}
<SideBarBody>
<WritingPanel
htmlCode={htmlCode}
setHtmlCode={setHtmlCode}
loading={loading}
setLoading={setLoading}
/>
</SideBarBody>
</SideBarContainer>
</>
);
}
... ...
import { Select } from "@/app/components/ui-lib";
import { ControlParamItem } from "../sd";
import { SideBarTail } from "@/app/components/sidebar";
import { useEffect, useState } from "react";
import { useState } from "react";
import { IconButton } from "../button";
import { message } from "antd";
import { useChatStore } from "@/app/store";
import { getWrtingPrompt } from "@/app/utils/prompt";
import type { writePromptParam } from "@/app/types/prompt";
// 定义mergedData数据结构
const mergedData = [
{
title: "写作用途",
required: true,
type: "select",
default: "公司官网",
options: [
{ name: '公司官网', value: '1' },
{ name: '小红书', value: '2' },
{ name: '微信', value: '3' },
{ name: '公众号', value: '4' },
{ name: '今日头条', value: '5' },
]
},
{
title: "图片模式",
type: "select",
required: false,
default: "免费配图",
options: [
{ name: '免费配图', value: 'free' },
{ name: '收费配图', value: 'paid' }
]
},
{
title: "写作风格",
type: "select",
required: false,
default: "专业",
options: [
{ name: '专业', value: 'professional' },
{ name: '活泼', value: 'lively' },
{ name: '严谨', value: 'strict' },
]
},
{
title: "写作语言",
type: "select",
required: false,
default: "中文",
options: [
{ name: '中文', value: 'Chinese' },
{ name: '英文', value: 'English' },
{ name: '法文', value: 'French' },
{ name: '德文', value: 'German' },
]
},
{
title: "写作类型",
type: "select",
required: false,
default: "产品推广文案",
options: [
{ name: '产品推广文案', value: '产品推广文案' },
{ name: '品牌宣传文案', value: '品牌宣传文案' },
{ name: '产品说明书', value: '产品说明书' },
{ name: '产品介绍', value: '产品介绍' },
]
},
{
title: "是否图文",
type: "select",
required: false,
default: "是",
options: [
{ name: '是', value: 'true' },
{ name: '否', value: 'false' },
]
},
{
title: "写作用途",
required: true,
type: "select",
default: "公司官网",
options: [
{ name: "公司官网", value: "1" },
{ name: "小红书", value: "2" },
{ name: "微信", value: "3" },
{ name: "公众号", value: "4" },
{ name: "今日头条", value: "5" },
],
},
{
title: "图片模式",
type: "select",
required: false,
default: "免费配图",
options: [
{ name: "免费配图", value: "free" },
{ name: "收费配图", value: "paid" },
],
},
{
title: "写作风格",
type: "select",
required: false,
default: "专业",
options: [
{ name: "专业", value: "professional" },
{ name: "活泼", value: "lively" },
{ name: "严谨", value: "strict" },
],
},
{
title: "写作语言",
type: "select",
required: false,
default: "中文",
options: [
{ name: "中文", value: "Chinese" },
{ name: "英文", value: "English" },
{ name: "法文", value: "French" },
{ name: "德文", value: "German" },
],
},
{
title: "写作类型",
type: "select",
required: false,
default: "产品推广文案",
options: [
{ name: "产品推广文案", value: "产品推广文案" },
{ name: "品牌宣传文案", value: "品牌宣传文案" },
{ name: "产品说明书", value: "产品说明书" },
{ name: "产品介绍", value: "产品介绍" },
],
},
{
title: "是否图文",
type: "select",
required: false,
default: "是",
options: [
{ name: "是", value: "true" },
{ name: "否", value: "false" },
],
},
];
export interface WritePanelProps {
htmlCode: string;
setHtmlCode: React.Dispatch<React.SetStateAction<string>>;
htmlCode: string;
setHtmlCode: React.Dispatch<React.SetStateAction<string>>;
loading: boolean;
setLoading: React.Dispatch<React.SetStateAction<boolean>>;
}
export function WritingPanel(props: WritePanelProps) {
const { htmlCode, setHtmlCode } = props;
// 为每个选择框单独声明状态,存储name
const chatStore = useChatStore();
const [writingPurposeName, setWritingPurposeName] = useState('公司官网'); // 写作用途
const [imageModeName, setImageModeName] = useState('免费配图'); // 图片模式
const [writingStyleName, setWritingStyleName] = useState('专业'); // 写作风格
const [writingLanguageName, setWritingLanguageName] = useState('中文'); // 写作语言
const [writingTypeName, setWritingTypeName] = useState('产品推广文案'); // 写作类型
const [isImgName, setIsImgName] = useState('是'); // 是否图文
// 为输入框和文本区域单独声明状态
const [writingCount, setWritingCount] = useState('200'); // 写作字数
const [prompt, setPrompt] = useState(''); // 提示词
const [isLoading, setIsLoading] = useState(false)
// 处理选择框变更事件
const handleSelectChange = (index: number, value: string) => {
const options = mergedData[index].options;
const selectedName = options.find(opt => opt.value === value)?.name || '';
switch (index) {
case 0:
setWritingPurposeName(selectedName);
break;
case 1:
setImageModeName(selectedName);
break;
case 2:
setWritingStyleName(selectedName);
break;
case 3:
setWritingLanguageName(selectedName);
break;
case 4:
setWritingTypeName(selectedName);
break;
case 5:
setIsImgName(selectedName);
break;
default:
break;
}
};
// 处理输入框变更事件
const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {
setWritingCount(e.target.value);
};
const { htmlCode, setHtmlCode, setLoading, loading } = props;
// 为每个选择框单独声明状态,存储name
const chatStore = useChatStore();
const [writingPurposeName, setWritingPurposeName] = useState("公司官网"); // 写作用途
const [imageModeName, setImageModeName] = useState("免费配图"); // 图片模式
const [writingStyleName, setWritingStyleName] = useState("专业"); // 写作风格
const [writingLanguageName, setWritingLanguageName] = useState("中文"); // 写作语言
const [writingTypeName, setWritingTypeName] = useState("产品推广文案"); // 写作类型
const [isImgName, setIsImgName] = useState("是"); // 是否图文
// 为输入框和文本区域单独声明状态
const [writingCount, setWritingCount] = useState("200"); // 写作字数
const [prompt, setPrompt] = useState(""); // 提示词
const [isLoading, setIsLoading] = useState(false);
// 处理选择框变更事件
const handleSelectChange = (index: number, value: string) => {
const options = mergedData[index].options;
const selectedName = options.find((opt) => opt.value === value)?.name || "";
// 处理文本区域变更事件
const handleTextareaChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {
setPrompt(e.target.value);
};
switch (index) {
case 0:
setWritingPurposeName(selectedName);
break;
case 1:
setImageModeName(selectedName);
break;
case 2:
setWritingStyleName(selectedName);
break;
case 3:
setWritingLanguageName(selectedName);
break;
case 4:
setWritingTypeName(selectedName);
break;
case 5:
setIsImgName(selectedName);
break;
default:
break;
}
};
// 提交表单时的处理函数
const handleSubmit = async () => {
if (!prompt.trim()) { return message.error('请输入提示词') }
try {
const isImg = `文案要配上图片,实现图文混排,要美观,
要符合${writingPurposeName}的排版标准和写作风格,写作风格要${writingStyleName},
你没有图片没关系,把图文混排的效果实现,
并在你认为要插入图片的地方将图片的Prompt用英文输出给:
![description](https://image.pollinations.ai/prompt/description?nologo=true),记得图片地址后面的?nologo=true一定不能去掉了,
因为这个语法可以自动按照提示生成并渲染图片。你可以帮我大幅提高生成图片质量和丰富程度,
比如增加相机光圈、具体场景描述等内容,注意图片一定要用<img,
否则在HTML下图片可能显示不了`
const input = `帮我使用${writingLanguageName}写一篇主题是${prompt}的${writingTypeName},
${isImgName ? isImg : ''},字数要求不少于${writingCount}字,字数不包括html代码和图片Prompt。输出成标准的html,直接给结果,不要做任何解释`
setIsLoading(true)
console.log("------------------------" + input)
const response = await chatStore.directLlmInvoke(input, 'gpt-4o-mini');
let cleanedContent = response.startsWith('```html') ? response.substring(8) : response;
if (cleanedContent.endsWith('```')) {
cleanedContent = cleanedContent.substring(0, cleanedContent.length - 4);
}
setHtmlCode(cleanedContent)
} catch (error) {
message.error("生成失败,请重试")
} finally {
setIsLoading(false)
}
// 处理输入框变更事件
const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {
setWritingCount(e.target.value);
};
};
// 处理文本区域变更事件
const handleTextareaChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {
setPrompt(e.target.value);
};
return (
<div>
{/* 动态渲染选择框 */}
{mergedData.map((item, index) => {
let currentValue = '';
switch (index) {
case 0:
currentValue = writingPurposeName;
break;
case 1:
currentValue = imageModeName;
break;
case 2:
currentValue = writingStyleName;
break;
case 3:
currentValue = writingLanguageName;
break;
case 4:
currentValue = writingTypeName;
break;
case 5:
currentValue = isImgName;
break;
default:
currentValue = '';
break;
}
// 提交表单时的处理函数
const handleSubmit = async () => {
if (!prompt.trim()) {
return message.error("请输入提示词");
}
try {
const param: writePromptParam = {
writingPurposeName,
writingStyleName,
writingLanguageName,
prompt,
writingTypeName,
isImgName,
writingCount,
};
const input = getWrtingPrompt(param);
setLoading(true);
console.log("------------------------" + input);
const response = await chatStore.directLlmInvoke(input, "gpt-4o-mini");
let cleanedContent = response.startsWith("```html")
? response.substring(8)
: response;
if (cleanedContent.endsWith("```")) {
cleanedContent = cleanedContent.substring(0, cleanedContent.length - 4);
}
setHtmlCode(cleanedContent);
} catch (error) {
message.error("生成失败,请重试");
} finally {
setLoading(false);
}
};
return (
<ControlParamItem
key={item.title}
title={item.title}
required={item.required}
>
<Select
aria-label={item.title}
value={item.options.find(opt => opt.name === currentValue)?.value || ''}
onChange={(e) => handleSelectChange(index, e.target.value)}
>
{item.options.map((opt) => (
<option key={opt.value} value={opt.value}>
{opt.name}
</option>
))}
</Select>
</ControlParamItem>
);
})}
return (
<div>
{/* 动态渲染选择框 */}
{mergedData.map((item, index) => {
let currentValue = "";
switch (index) {
case 0:
currentValue = writingPurposeName;
break;
case 1:
currentValue = imageModeName;
break;
case 2:
currentValue = writingStyleName;
break;
case 3:
currentValue = writingLanguageName;
break;
case 4:
currentValue = writingTypeName;
break;
case 5:
currentValue = isImgName;
break;
default:
currentValue = "";
break;
}
{/* 写作字数输入框 */}
<ControlParamItem
title="写作字数"
required={true}
return (
<ControlParamItem
key={item.title}
title={item.title}
required={item.required}
>
<Select
aria-label={item.title}
value={
item.options.find((opt) => opt.name === currentValue)?.value ||
""
}
onChange={(e) => handleSelectChange(index, e.target.value)}
>
<input
aria-label="写作字数"
type="number"
placeholder="200"
min="200"
max="5000"
value={writingCount}
onChange={handleInputChange}
/>
</ControlParamItem>
{item.options.map((opt) => (
<option key={opt.value} value={opt.value}>
{opt.name}
</option>
))}
</Select>
</ControlParamItem>
);
})}
{/* 提示词文本区域 */}
<ControlParamItem
title="提示词"
required={true}
>
<textarea
rows={3}
style={{ maxWidth: "100%", width: "100%", padding: "10px" }}
placeholder="请输入"
value={prompt}
onChange={handleTextareaChange}
></textarea>
</ControlParamItem>
{/* 写作字数输入框 */}
<ControlParamItem title="写作字数" required={true}>
<input
aria-label="写作字数"
type="number"
placeholder="200"
min="200"
max="5000"
value={writingCount}
onChange={handleInputChange}
/>
</ControlParamItem>
{/* 提交按钮 */}
<SideBarTail
secondaryAction={
<IconButton
text="提交生成"
type="primary"
shadow
onClick={handleSubmit}
></IconButton>
}
/>
</div>
);
}
\ No newline at end of file
{/* 提示词文本区域 */}
<ControlParamItem title="提示词" required={true}>
<textarea
rows={3}
style={{ maxWidth: "100%", width: "100%", padding: "10px" }}
placeholder="请输入"
value={prompt}
onChange={handleTextareaChange}
></textarea>
</ControlParamItem>
{/* 提交按钮 */}
<SideBarTail
secondaryAction={
<IconButton
text="提交生成"
type="primary"
shadow
onClick={handleSubmit}
disabled={loading}
></IconButton>
}
/>
</div>
);
}
... ...
.loading-content {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
height: 100%;
width: 100%;
gap: 5px;
}
\ No newline at end of file
... ...
import chatStyles from "@/app/components/chat.module.scss";
import homeStyles from "@/app/components/home.module.scss";
import styles from "@/app/components/writing/writing.module.scss";
import clsx from "clsx";
import { WriteSiderBar } from "./write-siderBar";
import { WindowContent } from "@/app/components/home";
import { useMobileScreen, copyToClipboard } from "@/app/utils";
import { useMobileScreen } from "@/app/utils";
import { IconButton } from "../button";
import Locale from "@/app/locales";
import { Path } from "@/app/constant";
import { useNavigate } from "react-router-dom";
import { getClientConfig } from "@/app/config/client";
import React, { MutableRefObject, useEffect, useMemo, useRef, useState } from "react";
import React, { useMemo, useRef, useState } from "react";
import { useAppConfig } from "@/app/store";
import { ChatAction } from "../chat";
import { useWindowSize } from "@/app/utils";
import { exportWord } from "@/app/utils/excelAndWordUtils/word";
import { HTMLPreview } from "../artifacts";
import ReactQuill from 'react-quill';
import 'react-quill/dist/quill.snow.css';
import ReactQuill from "react-quill";
import "react-quill/dist/quill.snow.css";
import ReturnIcon from "@/app/icons/return.svg";
import MinIcon from "@/app/icons/min.svg";
... ... @@ -25,196 +26,217 @@ import MaxIcon from "@/app/icons/max.svg";
import SDIcon from "@/app/icons/sd.svg";
import LoadingIcon from "@/app/icons/loading.svg";
import BotIcon from "@/app/icons/bot.svg";
import CloseIcon from "@/app/icons/close.svg";
import EditIcon from "@/app/icons/rename.svg";
import ReloadIcon from "@/app/icons/reload.svg";
import CopyIcon from "@/app/icons/copy.svg";
import ExcelIcon from "@/app/icons/excel.svg";
import WordIcon from "@/app/icons/word.svg";
import MindIcon from "@/app/icons/mind.svg"
import MindIcon from "@/app/icons/mind.svg";
import PptIcon from "@/app/icons/ppt.svg";
import PdfIcon from "@/app/icons/pdf.svg";
import { message } from "antd";
export function WritingPage() {
const isMobileScreen = useMobileScreen();
const navigate = useNavigate();
const clientConfig = useMemo(() => getClientConfig(), []);
const showMaxIcon = !isMobileScreen && !clientConfig?.isApp;
const config = useAppConfig();
const scrollRef = useRef<HTMLDivElement>(null);
const isWriting = location.pathname === Path.Writing;
const { height } = useWindowSize();
const [isEdit, setIsEdit] = useState(false)
const isMobileScreen = useMobileScreen();
const navigate = useNavigate();
const clientConfig = useMemo(() => getClientConfig(), []);
const showMaxIcon = !isMobileScreen && !clientConfig?.isApp;
const config = useAppConfig();
const scrollRef = useRef<HTMLDivElement>(null);
const isWriting = location.pathname === Path.Writing;
const { height } = useWindowSize();
const [isEdit, setIsEdit] = useState(false);
const [loading, setLoading] = useState(false);
const quillRef = useRef<ReactQuill | null>(null);
const [htmlCode, setHtmlCode] = useState("");
const quillRef = useRef<ReactQuill | null>(null);
//编辑器
const toolbarOptions = [
[{ font: [] }, { size: ["small", false, "large", "huge"] }],
[{ header: [1, 2, 3, 4, 5, 6, false] }],
["bold", "italic", "underline", "strike"],
[{ list: "ordered" }, { list: "bullet" }, { align: [] }],
[{ color: [] }, { background: [] }],
["link", "image"],
];
const [htmlCode, setHtmlCode] = useState('');
//编辑器
const toolbarOptions = [
[{ 'font': [] }, { 'size': ['small', false, 'large', 'huge'] }],
[{ 'header': [1, 2, 3, 4, 5, 6, false] }],
['bold', 'italic', 'underline', 'strike'],
[{ 'list': 'ordered' }, { 'list': 'bullet' }, { 'align': [] }],
[{ 'color': [] }, { 'background': [] }],
['link', 'image'],
];
const copyToClipboard = () => {
// 检查quillRef.current是否为null
if (quillRef.current) {
const editor = quillRef.current.getEditor(); // 获取编辑器实例
const range = editor.getSelection(); // 获取当前选择的范围
const text = editor.getText(); // 获取编辑器中的文本内容
const copyToClipboard = () => {
// 检查quillRef.current是否为null
if (quillRef.current) {
const editor = quillRef.current.getEditor(); // 获取编辑器实例
const range = editor.getSelection(); // 获取当前选择的范围
const text = editor.getText(); // 获取编辑器中的文本内容
if (range && range.length > 0) {
// 如果有选中的文本,复制选中的内容
const selectedText = text.substring(
range.index,
range.index + range.length,
);
navigator.clipboard
.writeText(selectedText)
.then(() => {
message.success("复制成功");
})
.catch((err) => {
message.error("复制失败:");
});
} else {
// 如果没有选择文本,就复制全部内容
navigator.clipboard
.writeText(text)
.then(() => {
message.success("复制成功");
})
.catch((err) => {
message.error("复制失败:");
});
}
} else {
console.error("Quill编辑器尚未初始化");
}
};
if (range && range.length > 0) {
// 如果有选中的文本,复制选中的内容
const selectedText = text.substring(range.index, range.index + range.length);
navigator.clipboard.writeText(selectedText)
.then(() => {
message.success("复制成功")
})
.catch((err) => {
message.error('复制失败:');
});
} else {
// 如果没有选择文本,就复制全部内容
navigator.clipboard.writeText(text)
.then(() => {
message.success("复制成功")
})
.catch((err) => {
message.error('复制失败:');
});
}
} else {
console.error('Quill编辑器尚未初始化');
}
};
return (
<>
<WriteSiderBar className={clsx({ [homeStyles["sidebar-show"]]: isWriting })} htmlCode={htmlCode} setHtmlCode={setHtmlCode}/>
<WindowContent>
<div className={chatStyles.chat} key={"1"}>
<div className="window-header" data-tauri-drag-region>
{isMobileScreen && (
<div className="window-actions">
<div className={"window-action-button"}>
<IconButton
icon={<ReturnIcon />}
bordered
title={Locale.Chat.Actions.ChatList}
onClick={() => navigate(Path.BgRemoval)}
/>
</div>
</div>
)}
<div
className={clsx(
"window-header-title",
chatStyles["chat-body-title"],
)}
>
<div className={`window-header-main-title`}>AI-Writing</div>
</div>
<div className={chatStyles["chat-message-actions"]}>
<div className={chatStyles["chat-input-actions"]}>
<ChatAction
text={Locale.Chat.Actions.ReWrite}
icon={<ReloadIcon />}
onClick={() => { }
}
/>
<ChatAction
text={Locale.Chat.Actions.Copy}
icon={<CopyIcon />}
onClick={copyToClipboard}
/>
{!isEdit ? (
<ChatAction
text={Locale.Chat.Actions.Edit}
icon={<EditIcon />}
onClick={() => { setIsEdit(true) }}
/>
) : (
<ChatAction
text="取消编辑"
icon={<EditIcon />}
onClick={() => { setIsEdit(false) }}
/>
)}
return (
<>
<WriteSiderBar
className={clsx({ [homeStyles["sidebar-show"]]: isWriting })}
htmlCode={htmlCode}
setHtmlCode={setHtmlCode}
loading={loading}
setLoading={setLoading}
/>
<WindowContent>
<div className={chatStyles.chat} key={"1"}>
<div className="window-header" data-tauri-drag-region>
{isMobileScreen && (
<div className="window-actions">
<div className={"window-action-button"}>
<IconButton
icon={<ReturnIcon />}
bordered
title={Locale.Chat.Actions.ChatList}
onClick={() => navigate(Path.BgRemoval)}
/>
</div>
</div>
)}
<div
className={clsx(
"window-header-title",
chatStyles["chat-body-title"],
)}
>
<div className={`window-header-main-title`}>AI-Writing</div>
</div>
<div className={chatStyles["chat-message-actions"]}>
<div className={chatStyles["chat-input-actions"]}>
<ChatAction
text={Locale.Chat.Actions.ReWrite}
icon={<ReloadIcon />}
onClick={() => {}}
/>
<ChatAction
text={Locale.Chat.Actions.Copy}
icon={<CopyIcon />}
onClick={copyToClipboard}
/>
{!isEdit ? (
<ChatAction
text={Locale.Chat.Actions.Edit}
icon={<EditIcon />}
onClick={() => {
setIsEdit(true);
}}
/>
) : (
<ChatAction
text="取消编辑"
icon={<EditIcon />}
onClick={() => {
setIsEdit(false);
}}
/>
)}
<ChatAction
text={Locale.Chat.Actions.Pdf}
icon={<PdfIcon />}
onClick={() => { }}
/>
{htmlCode&&
<ChatAction
text={Locale.Chat.Actions.Word}
icon={<WordIcon />}
onClick={()=>{exportWord(htmlCode)}}
/>
}
<ChatAction
text={Locale.Chat.Actions.Excel}
icon={<ExcelIcon />}
onClick={() => { }}
/>
<ChatAction
text={Locale.Chat.Actions.Ppt}
icon={<PptIcon />}
onClick={() => { }}
/>
<ChatAction
text={Locale.Chat.Actions.Mind}
icon={<MindIcon />}
onClick={() => { }}
/>
</div>
</div>
<div className="window-actions">
{showMaxIcon && (
<div className="window-action-button">
<IconButton
aria={Locale.Chat.Actions.FullScreen}
icon={config.tightBorder ? <MinIcon /> : <MaxIcon />}
bordered
onClick={() => {
config.update(
(config) => (config.tightBorder = !config.tightBorder),
);
}}
/>
</div>
)}
{isMobileScreen && <SDIcon width={50} height={50} />}
</div>
</div>
<div className={chatStyles["chat-body"]} ref={scrollRef}>
{htmlCode && (
isEdit ? (
<ReactQuill
ref={quillRef}
theme="snow"
value={htmlCode}
onChange={setHtmlCode}
modules={{
toolbar: toolbarOptions
}}
/>
) : (
<HTMLPreview
code={htmlCode}
autoHeight={!document.fullscreenElement}
height={!document.fullscreenElement ? 600 : height}
/>
)
)}
</div>
<ChatAction
text={Locale.Chat.Actions.Pdf}
icon={<PdfIcon />}
onClick={() => {}}
/>
{htmlCode && (
<ChatAction
text={Locale.Chat.Actions.Word}
icon={<WordIcon />}
onClick={() => {
exportWord(htmlCode);
}}
/>
)}
<ChatAction
text={Locale.Chat.Actions.Excel}
icon={<ExcelIcon />}
onClick={() => {}}
/>
<ChatAction
text={Locale.Chat.Actions.Ppt}
icon={<PptIcon />}
onClick={() => {}}
/>
<ChatAction
text={Locale.Chat.Actions.Mind}
icon={<MindIcon />}
onClick={() => {}}
/>
</div>
</div>
<div className="window-actions">
{showMaxIcon && (
<div className="window-action-button">
<IconButton
aria={Locale.Chat.Actions.FullScreen}
icon={config.tightBorder ? <MinIcon /> : <MaxIcon />}
bordered
onClick={() => {
config.update(
(config) => (config.tightBorder = !config.tightBorder),
);
}}
/>
</div>
</WindowContent>
</>
)
}
\ No newline at end of file
)}
{isMobileScreen && <SDIcon width={50} height={50} />}
</div>
</div>
<div className={chatStyles["chat-body"]} ref={scrollRef}>
{loading ? (
<div className={clsx("no-dark", styles["loading-content"])}>
<BotIcon />
<LoadingIcon />
</div>
) : (
htmlCode &&
(isEdit ? (
<ReactQuill
ref={quillRef}
theme="snow"
value={htmlCode}
onChange={setHtmlCode}
modules={{
toolbar: toolbarOptions,
}}
/>
) : (
<HTMLPreview
code={htmlCode}
autoHeight={!document.fullscreenElement}
height={!document.fullscreenElement ? 600 : height}
/>
))
)}
</div>
</div>
</WindowContent>
</>
);
}
... ...
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1742974696172" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4604" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><path d="M870.4 204.8c-18.6368 0-36.1472 5.0176-51.2 13.7728V153.6a102.5024 102.5024 0 0 0-159.3856-85.0432C645.7856 28.672 607.7952 0 563.2 0S480.5632 28.672 466.5856 68.5568A102.5024 102.5024 0 0 0 307.2 153.6v377.4976L238.2848 411.648a99.6864 99.6864 0 0 0-61.3888-48.7936 95.5392 95.5392 0 0 0-74.8544 10.3424c-46.4384 27.8528-64.1536 90.8288-39.424 140.3904 1.536 3.1232 34.2016 70.0416 136.192 273.92 48.0256 96 100.7104 164.6592 156.6208 203.9808 43.8784 30.8736 74.1888 32.4608 79.8208 32.4608h256c43.5712 0 84.0704-14.1824 120.4224-42.0864 34.1504-26.2656 63.7952-64.256 88.064-112.8448 47.8208-95.6416 73.1136-227.9424 73.1136-382.6688v-179.2c0-56.4736-45.9264-102.4-102.4-102.4z m51.2 281.6c0 146.7904-23.3984 271.1552-67.6864 359.7312C825.0368 903.8848 773.3248 972.8 691.2 972.8H435.712c-1.9968-0.1536-23.552-2.56-56.064-26.88-32.4096-24.2688-82.176-75.3664-135.0656-181.248-103.7824-207.5648-135.68-272.9472-135.9872-273.5616l-0.1024-0.2048c-12.8512-25.7536-3.7376-59.4944 19.9168-73.6768a44.8512 44.8512 0 0 1 35.072-4.864 48.9472 48.9472 0 0 1 30.0544 24.1664l0.3072 0.512 79.9232 138.496c16.3328 29.8496 34.7136 42.3936 54.6304 37.3248 19.968-5.0688 30.0544-25.0368 30.0544-59.2384V153.6c0-28.2112 22.9888-51.2 51.2-51.2s51.2 22.9888 51.2 51.2v332.8a25.6 25.6 0 0 0 51.2 0V102.4c0-28.2112 22.9888-51.2 51.2-51.2s51.2 22.9888 51.2 51.2v384a25.6 25.6 0 0 0 51.2 0V153.6c0-28.2112 22.9888-51.2 51.2-51.2s51.2 22.9888 51.2 51.2v384a25.6 25.6 0 0 0 51.2 0V307.2c0-28.2112 22.9888-51.2 51.2-51.2s51.2 22.9888 51.2 51.2v179.2z" fill="" p-id="4605"></path></svg>
\ No newline at end of file
... ...
export type writePromptParam = {
writingPurposeName: string;
writingStyleName: string;
writingLanguageName: string;
prompt: string;
writingTypeName: string;
isImgName: string;
writingCount: string;
};
... ...
import type { writePromptParam } from "@/app/types/prompt";
export function getWrtingPrompt(param: writePromptParam) {
const isImg = `文案要配上图片,实现图文混排,要美观,要符合${param.writingPurposeName}的排版标准和写作风格,写作风格要${param.writingStyleName},
你没有图片没关系,把图文混排的效果实现,并在你认为要插入图片的地方将图片的Prompt用英文输出给:![description](https://image.pollinations.ai/prompt/description?nologo=true),记得图片地址后面的?nologo=true一定不能去掉了,
因为这个语法可以自动按照提示生成并渲染图片。你可以帮我大幅提高生成图片质量和丰富程度,比如增加相机光圈、具体场景描述等内容,注意图片一定要用<img,否则在HTML下图片可能显示不了`;
const input = `帮我使用${param.writingLanguageName}写一篇主题是${
param.prompt
}的${param.writingTypeName},${
param.isImgName === "是" ? isImg : ""
},字数要求不少于${
param.writingCount
}字,字数不包括html代码和图片Prompt。输出成标准的html,直接给结果,不要做任何解释`;
return input;
}
export function getBgPrompt(content: string) {
const input = `你现扮演生成创意思图片的提示词工程师,参考我的描述“${content}”帮我做优化润色5组,返回的数据用''分割,直接输出结果,不要做解释`;
return input;
}
export function getMindPrompt(content: string) {
return `请你帮我生成一份以"${content}"为主题的思维导图数据,请严格遵循以下要求生成思维导图数据:
1. 所有键名必须使用双引号
2. 所有字符串值必须使用双引号
3. 确保没有尾随逗号
4. 按这个模板结构生成::{
"nodeData": {
"id": "root",
"topic": "中心主题",
"children": [
{
"id": "d451a724b7c10970",
"topic": "sub1",
"children": [
{
"id": "d451a77ca7348eae",
"topic": "sub2",
},],
},
],
},}
只需要返回数据,不要做任何解释
`;
}
... ...
import webpack from "webpack";
const mode = process.env.BUILD_MODE ?? "standalone";
console.log("[Next] build mode", mode);
... ... @@ -13,7 +12,6 @@ const nextConfig = {
test: /\.svg$/,
use: ["@svgr/webpack"],
});
if (disableChunk) {
config.plugins.push(
new webpack.optimize.LimitChunkCountPlugin({ maxChunks: 1 }),
... ...
此 diff 太大无法显示。
... ... @@ -25,6 +25,7 @@
"@hello-pangea/dnd": "^16.5.0",
"@modelcontextprotocol/sdk": "^1.0.4",
"@next/third-parties": "^14.1.0",
"@radix-ui/react-slot": "^1.1.2",
"@svgr/webpack": "^6.5.1",
"@vercel/analytics": "^0.1.11",
"@vercel/speed-insights": "^1.0.2",
... ... @@ -44,8 +45,10 @@
"html-to-image": "^1.11.11",
"idb-keyval": "^6.2.1",
"lodash-es": "^4.17.21",
"lucide-react": "^0.484.0",
"markdown-to-txt": "^2.0.1",
"mermaid": "^10.6.1",
"mind-elixir": "^4.4.3",
"nanoid": "^5.0.3",
"next": "^14.1.1",
"node-fetch": "^3.3.1",
... ... @@ -66,8 +69,7 @@
"spark-md5": "^3.0.2",
"use-debounce": "^9.0.4",
"xlsx": "^0.18.5",
"zod": "^3.24.1",
"zustand": "^4.3.8"
"zod": "^3.24.1"
},
"devDependencies": {
"@tauri-apps/api": "^2.1.1",
... ... @@ -103,8 +105,9 @@
"ts-node": "^10.9.2",
"tsx": "^4.16.0",
"typescript": "5.2.2",
"vue-loader": "^17.3.1",
"watch": "^1.0.2",
"webpack": "^5.88.1"
"webpack": "^5.0.0-rc.6"
},
"resolutions": {
"lint-staged/yaml": "^2.2.2"
... ...
... ... @@ -21,8 +21,8 @@
],
"paths": {
"@/*": ["./*"]
},
}
},
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
"exclude": ["node_modules"]
}
}
\ No newline at end of file
... ...
... ... @@ -1533,6 +1533,11 @@
resolved "https://registry.npmmirror.com/@fortaine/fetch-event-source/-/fetch-event-source-3.0.6.tgz"
integrity sha512-621GAuLMvKtyZQ3IA6nlDWhV1V/7PGOTNIGLUifxt0KzM+dZIweJ6F3XvQF3QnqeNfS1N7WQ0Kil1Di/lhChEw==
"@gar/promisify@^1.0.1":
version "1.1.3"
resolved "https://registry.npmmirror.com/@gar/promisify/-/promisify-1.1.3.tgz"
integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==
"@hello-pangea/dnd@^16.5.0":
version "16.5.0"
resolved "https://registry.npmjs.org/@hello-pangea/dnd/-/dnd-16.5.0.tgz"
... ... @@ -1781,71 +1786,38 @@
"@jridgewell/set-array" "^1.0.0"
"@jridgewell/sourcemap-codec" "^1.4.10"
"@jridgewell/gen-mapping@^0.3.0":
version "0.3.3"
resolved "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz"
integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==
dependencies:
"@jridgewell/set-array" "^1.0.1"
"@jridgewell/sourcemap-codec" "^1.4.10"
"@jridgewell/trace-mapping" "^0.3.9"
"@jridgewell/gen-mapping@^0.3.2":
version "0.3.2"
resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz"
integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==
dependencies:
"@jridgewell/set-array" "^1.0.1"
"@jridgewell/sourcemap-codec" "^1.4.10"
"@jridgewell/trace-mapping" "^0.3.9"
"@jridgewell/gen-mapping@^0.3.5":
version "0.3.5"
resolved "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz"
integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==
"@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5":
version "0.3.8"
resolved "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz"
integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==
dependencies:
"@jridgewell/set-array" "^1.2.1"
"@jridgewell/sourcemap-codec" "^1.4.10"
"@jridgewell/trace-mapping" "^0.3.24"
"@jridgewell/resolve-uri@3.1.0":
version "3.1.0"
resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz"
integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==
"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0":
version "3.1.2"
resolved "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz"
integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1":
version "1.1.2"
resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz"
integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==
"@jridgewell/set-array@^1.2.1":
"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.2.1":
version "1.2.1"
resolved "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.2.1.tgz"
integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==
"@jridgewell/source-map@^0.3.3":
version "0.3.3"
resolved "https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.3.tgz"
integrity sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==
version "0.3.6"
resolved "https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.6.tgz"
integrity sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==
dependencies:
"@jridgewell/gen-mapping" "^0.3.0"
"@jridgewell/trace-mapping" "^0.3.9"
"@jridgewell/gen-mapping" "^0.3.5"
"@jridgewell/trace-mapping" "^0.3.25"
"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10":
"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14":
version "1.4.14"
resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz"
integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==
"@jridgewell/sourcemap-codec@^1.4.14":
version "1.5.0"
resolved "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz"
integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==
"@jridgewell/trace-mapping@0.3.9":
version "0.3.9"
resolved "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz"
... ... @@ -1854,7 +1826,7 @@
"@jridgewell/resolve-uri" "^3.0.3"
"@jridgewell/sourcemap-codec" "^1.4.10"
"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25":
"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25", "@jridgewell/trace-mapping@^0.3.9":
version "0.3.25"
resolved "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz"
integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==
... ... @@ -1862,14 +1834,6 @@
"@jridgewell/resolve-uri" "^3.1.0"
"@jridgewell/sourcemap-codec" "^1.4.14"
"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9":
version "0.3.17"
resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz"
integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==
dependencies:
"@jridgewell/resolve-uri" "3.1.0"
"@jridgewell/sourcemap-codec" "1.4.14"
"@modelcontextprotocol/sdk@^1.0.4":
version "1.0.4"
resolved "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.0.4.tgz"
... ... @@ -1964,11 +1928,39 @@
"@nodelib/fs.scandir" "2.1.5"
fastq "^1.6.0"
"@npmcli/fs@^1.0.0":
version "1.1.1"
resolved "https://registry.npmmirror.com/@npmcli/fs/-/fs-1.1.1.tgz"
integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==
dependencies:
"@gar/promisify" "^1.0.1"
semver "^7.3.5"
"@npmcli/move-file@^1.0.1":
version "1.1.2"
resolved "https://registry.npmmirror.com/@npmcli/move-file/-/move-file-1.1.2.tgz"
integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==
dependencies:
mkdirp "^1.0.4"
rimraf "^3.0.2"
"@pkgr/core@^0.1.0":
version "0.1.0"
resolved "https://registry.npmjs.org/@pkgr/core/-/core-0.1.0.tgz"
integrity sha512-Zwq5OCzuwJC2jwqmpEQt7Ds1DTi6BWSwoGkbb1n9pO3hzb35BoJELx7c0T23iDkBGkh2e7tvOtjF3tr3OaQHDQ==
"@radix-ui/react-compose-refs@1.1.1":
version "1.1.1"
resolved "https://registry.npmmirror.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.1.tgz"
integrity sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==
"@radix-ui/react-slot@^1.1.2":
version "1.1.2"
resolved "https://registry.npmmirror.com/@radix-ui/react-slot/-/react-slot-1.1.2.tgz"
integrity sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==
dependencies:
"@radix-ui/react-compose-refs" "1.1.1"
"@rc-component/async-validator@^5.0.3":
version "5.0.4"
resolved "https://registry.npmmirror.com/@rc-component/async-validator/-/async-validator-5.0.4.tgz"
... ... @@ -2437,10 +2429,10 @@
"@types/react" "*"
immutable "~3.7.4"
"@types/eslint-scope@^3.7.3":
version "3.7.4"
resolved "https://registry.npmmirror.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz"
integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==
"@types/eslint-scope@^3.7.0":
version "3.7.7"
resolved "https://registry.npmmirror.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz"
integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==
dependencies:
"@types/eslint" "*"
"@types/estree" "*"
... ... @@ -2453,11 +2445,16 @@
"@types/estree" "*"
"@types/json-schema" "*"
"@types/estree@*", "@types/estree@^1.0.0":
"@types/estree@*":
version "1.0.1"
resolved "https://registry.npmmirror.com/@types/estree/-/estree-1.0.1.tgz"
integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==
"@types/estree@^0.0.45":
version "0.0.45"
resolved "https://registry.npmmirror.com/@types/estree/-/estree-0.0.45.tgz"
integrity sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g==
"@types/file-saver@^2.0.7":
version "2.0.7"
resolved "https://registry.npmmirror.com/@types/file-saver/-/file-saver-2.0.7.tgz"
... ... @@ -2617,7 +2614,7 @@
"@types/quill@^1.3.10":
version "1.3.10"
resolved "https://registry.npmmirror.com/@types/quill/-/quill-1.3.10.tgz#dc1f7b6587f7ee94bdf5291bc92289f6f0497613"
resolved "https://registry.npmmirror.com/@types/quill/-/quill-1.3.10.tgz"
integrity sha512-IhW3fPW+bkt9MLNlycw8u8fWb7oO7W5URC9MfZYHBlA24rex9rs23D5DETChu1zvgVdc5ka64ICjJOgQMr6Shw==
dependencies:
parchment "^1.1.2"
... ... @@ -2749,125 +2746,149 @@
resolved "https://registry.npmjs.org/@vercel/speed-insights/-/speed-insights-1.0.2.tgz"
integrity sha512-y5HWeB6RmlyVYxJAMrjiDEz8qAIy2cit0fhBq+MD78WaUwQvuBnQlX4+5MuwVTWi46bV3klaRMq83u9zUy1KOg==
"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5":
version "1.11.6"
resolved "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.11.6.tgz"
integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==
"@webassemblyjs/ast@1.9.0":
version "1.9.0"
resolved "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.9.0.tgz"
integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==
dependencies:
"@webassemblyjs/helper-numbers" "1.11.6"
"@webassemblyjs/helper-wasm-bytecode" "1.11.6"
"@webassemblyjs/helper-module-context" "1.9.0"
"@webassemblyjs/helper-wasm-bytecode" "1.9.0"
"@webassemblyjs/wast-parser" "1.9.0"
"@webassemblyjs/floating-point-hex-parser@1.11.6":
version "1.11.6"
resolved "https://registry.npmmirror.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz"
integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==
"@webassemblyjs/floating-point-hex-parser@1.9.0":
version "1.9.0"
resolved "https://registry.npmmirror.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz"
integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==
"@webassemblyjs/helper-api-error@1.11.6":
version "1.11.6"
resolved "https://registry.npmmirror.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz"
integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==
"@webassemblyjs/helper-api-error@1.9.0":
version "1.9.0"
resolved "https://registry.npmmirror.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz"
integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==
"@webassemblyjs/helper-buffer@1.11.6":
version "1.11.6"
resolved "https://registry.npmmirror.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz"
integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==
"@webassemblyjs/helper-buffer@1.9.0":
version "1.9.0"
resolved "https://registry.npmmirror.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz"
integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==
"@webassemblyjs/helper-numbers@1.11.6":
version "1.11.6"
resolved "https://registry.npmmirror.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz"
integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==
"@webassemblyjs/helper-code-frame@1.9.0":
version "1.9.0"
resolved "https://registry.npmmirror.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz"
integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==
dependencies:
"@webassemblyjs/floating-point-hex-parser" "1.11.6"
"@webassemblyjs/helper-api-error" "1.11.6"
"@xtuc/long" "4.2.2"
"@webassemblyjs/wast-printer" "1.9.0"
"@webassemblyjs/helper-fsm@1.9.0":
version "1.9.0"
resolved "https://registry.npmmirror.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz"
integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==
"@webassemblyjs/helper-module-context@1.9.0":
version "1.9.0"
resolved "https://registry.npmmirror.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz"
integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==
dependencies:
"@webassemblyjs/ast" "1.9.0"
"@webassemblyjs/helper-wasm-bytecode@1.11.6":
version "1.11.6"
resolved "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz"
integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==
"@webassemblyjs/helper-wasm-bytecode@1.9.0":
version "1.9.0"
resolved "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz"
integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==
"@webassemblyjs/helper-wasm-section@1.11.6":
version "1.11.6"
resolved "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz"
integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==
"@webassemblyjs/helper-wasm-section@1.9.0":
version "1.9.0"
resolved "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz"
integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==
dependencies:
"@webassemblyjs/ast" "1.11.6"
"@webassemblyjs/helper-buffer" "1.11.6"
"@webassemblyjs/helper-wasm-bytecode" "1.11.6"
"@webassemblyjs/wasm-gen" "1.11.6"
"@webassemblyjs/ast" "1.9.0"
"@webassemblyjs/helper-buffer" "1.9.0"
"@webassemblyjs/helper-wasm-bytecode" "1.9.0"
"@webassemblyjs/wasm-gen" "1.9.0"
"@webassemblyjs/ieee754@1.11.6":
version "1.11.6"
resolved "https://registry.npmmirror.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz"
integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==
"@webassemblyjs/ieee754@1.9.0":
version "1.9.0"
resolved "https://registry.npmmirror.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz"
integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==
dependencies:
"@xtuc/ieee754" "^1.2.0"
"@webassemblyjs/leb128@1.11.6":
version "1.11.6"
resolved "https://registry.npmmirror.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz"
integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==
"@webassemblyjs/leb128@1.9.0":
version "1.9.0"
resolved "https://registry.npmmirror.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz"
integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==
dependencies:
"@xtuc/long" "4.2.2"
"@webassemblyjs/utf8@1.11.6":
version "1.11.6"
resolved "https://registry.npmmirror.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz"
integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==
"@webassemblyjs/wasm-edit@^1.11.5":
version "1.11.6"
resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz"
integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==
dependencies:
"@webassemblyjs/ast" "1.11.6"
"@webassemblyjs/helper-buffer" "1.11.6"
"@webassemblyjs/helper-wasm-bytecode" "1.11.6"
"@webassemblyjs/helper-wasm-section" "1.11.6"
"@webassemblyjs/wasm-gen" "1.11.6"
"@webassemblyjs/wasm-opt" "1.11.6"
"@webassemblyjs/wasm-parser" "1.11.6"
"@webassemblyjs/wast-printer" "1.11.6"
"@webassemblyjs/wasm-gen@1.11.6":
version "1.11.6"
resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz"
integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==
dependencies:
"@webassemblyjs/ast" "1.11.6"
"@webassemblyjs/helper-wasm-bytecode" "1.11.6"
"@webassemblyjs/ieee754" "1.11.6"
"@webassemblyjs/leb128" "1.11.6"
"@webassemblyjs/utf8" "1.11.6"
"@webassemblyjs/wasm-opt@1.11.6":
version "1.11.6"
resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz"
integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==
dependencies:
"@webassemblyjs/ast" "1.11.6"
"@webassemblyjs/helper-buffer" "1.11.6"
"@webassemblyjs/wasm-gen" "1.11.6"
"@webassemblyjs/wasm-parser" "1.11.6"
"@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5":
version "1.11.6"
resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz"
integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==
dependencies:
"@webassemblyjs/ast" "1.11.6"
"@webassemblyjs/helper-api-error" "1.11.6"
"@webassemblyjs/helper-wasm-bytecode" "1.11.6"
"@webassemblyjs/ieee754" "1.11.6"
"@webassemblyjs/leb128" "1.11.6"
"@webassemblyjs/utf8" "1.11.6"
"@webassemblyjs/wast-printer@1.11.6":
version "1.11.6"
resolved "https://registry.npmmirror.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz"
integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==
dependencies:
"@webassemblyjs/ast" "1.11.6"
"@webassemblyjs/utf8@1.9.0":
version "1.9.0"
resolved "https://registry.npmmirror.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz"
integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==
"@webassemblyjs/wasm-edit@1.9.0":
version "1.9.0"
resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz"
integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==
dependencies:
"@webassemblyjs/ast" "1.9.0"
"@webassemblyjs/helper-buffer" "1.9.0"
"@webassemblyjs/helper-wasm-bytecode" "1.9.0"
"@webassemblyjs/helper-wasm-section" "1.9.0"
"@webassemblyjs/wasm-gen" "1.9.0"
"@webassemblyjs/wasm-opt" "1.9.0"
"@webassemblyjs/wasm-parser" "1.9.0"
"@webassemblyjs/wast-printer" "1.9.0"
"@webassemblyjs/wasm-gen@1.9.0":
version "1.9.0"
resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz"
integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==
dependencies:
"@webassemblyjs/ast" "1.9.0"
"@webassemblyjs/helper-wasm-bytecode" "1.9.0"
"@webassemblyjs/ieee754" "1.9.0"
"@webassemblyjs/leb128" "1.9.0"
"@webassemblyjs/utf8" "1.9.0"
"@webassemblyjs/wasm-opt@1.9.0":
version "1.9.0"
resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz"
integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==
dependencies:
"@webassemblyjs/ast" "1.9.0"
"@webassemblyjs/helper-buffer" "1.9.0"
"@webassemblyjs/wasm-gen" "1.9.0"
"@webassemblyjs/wasm-parser" "1.9.0"
"@webassemblyjs/wasm-parser@1.9.0":
version "1.9.0"
resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz"
integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==
dependencies:
"@webassemblyjs/ast" "1.9.0"
"@webassemblyjs/helper-api-error" "1.9.0"
"@webassemblyjs/helper-wasm-bytecode" "1.9.0"
"@webassemblyjs/ieee754" "1.9.0"
"@webassemblyjs/leb128" "1.9.0"
"@webassemblyjs/utf8" "1.9.0"
"@webassemblyjs/wast-parser@1.9.0":
version "1.9.0"
resolved "https://registry.npmmirror.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz"
integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==
dependencies:
"@webassemblyjs/ast" "1.9.0"
"@webassemblyjs/floating-point-hex-parser" "1.9.0"
"@webassemblyjs/helper-api-error" "1.9.0"
"@webassemblyjs/helper-code-frame" "1.9.0"
"@webassemblyjs/helper-fsm" "1.9.0"
"@xtuc/long" "4.2.2"
"@webassemblyjs/wast-printer@1.9.0":
version "1.9.0"
resolved "https://registry.npmmirror.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz"
integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==
dependencies:
"@webassemblyjs/ast" "1.9.0"
"@webassemblyjs/wast-parser" "1.9.0"
"@xtuc/long" "4.2.2"
"@xmldom/xmldom@^0.9.7":
... ... @@ -2920,11 +2941,6 @@ acorn-globals@^7.0.0:
acorn "^8.1.0"
acorn-walk "^8.0.2"
acorn-import-assertions@^1.9.0:
version "1.9.0"
resolved "https://registry.npmmirror.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz"
integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==
acorn-jsx@^5.3.2:
version "5.3.2"
resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz"
... ... @@ -2937,20 +2953,10 @@ acorn-walk@^8.0.2, acorn-walk@^8.1.1:
dependencies:
acorn "^8.11.0"
acorn@^8.1.0, acorn@^8.11.0, acorn@^8.4.1, acorn@^8.8.1:
version "8.12.1"
resolved "https://registry.npmmirror.com/acorn/-/acorn-8.12.1.tgz"
integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==
acorn@^8.7.1, acorn@^8.8.2:
version "8.9.0"
resolved "https://registry.npmmirror.com/acorn/-/acorn-8.9.0.tgz"
integrity sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==
acorn@^8.9.0:
version "8.10.0"
resolved "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz"
integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==
acorn@^8.0.3, acorn@^8.1.0, acorn@^8.11.0, acorn@^8.4.1, acorn@^8.8.1, acorn@^8.8.2, acorn@^8.9.0:
version "8.14.1"
resolved "https://registry.npmmirror.com/acorn/-/acorn-8.14.1.tgz"
integrity sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==
adler-32@~1.3.0:
version "1.3.1"
... ... @@ -3340,35 +3346,15 @@ browser-or-node@^1.2.1:
resolved "https://registry.npmmirror.com/browser-or-node/-/browser-or-node-1.3.0.tgz"
integrity sha512-0F2z/VSnLbmEeBcUrSuDH5l0HxTXdQQzLjkmBR4cYfvg1zJrKSlmIZFqyFR8oX0NrwPhy3c3HQ6i3OxMbew4Tg==
browserslist@^4.14.5:
version "4.21.9"
resolved "https://registry.npmmirror.com/browserslist/-/browserslist-4.21.9.tgz"
integrity sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==
dependencies:
caniuse-lite "^1.0.30001503"
electron-to-chromium "^1.4.431"
node-releases "^2.0.12"
update-browserslist-db "^1.0.11"
browserslist@^4.21.3, browserslist@^4.21.5:
version "4.21.5"
resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz"
integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==
dependencies:
caniuse-lite "^1.0.30001449"
electron-to-chromium "^1.4.284"
node-releases "^2.0.8"
update-browserslist-db "^1.0.10"
browserslist@^4.23.1:
version "4.23.3"
resolved "https://registry.npmmirror.com/browserslist/-/browserslist-4.23.3.tgz"
integrity sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==
browserslist@^4.14.3, browserslist@^4.21.3, browserslist@^4.21.5, browserslist@^4.23.1:
version "4.24.4"
resolved "https://registry.npmmirror.com/browserslist/-/browserslist-4.24.4.tgz"
integrity sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==
dependencies:
caniuse-lite "^1.0.30001646"
electron-to-chromium "^1.5.4"
node-releases "^2.0.18"
update-browserslist-db "^1.1.0"
caniuse-lite "^1.0.30001688"
electron-to-chromium "^1.5.73"
node-releases "^2.0.19"
update-browserslist-db "^1.1.1"
bser@2.1.1:
version "2.1.1"
... ... @@ -3394,25 +3380,41 @@ bytes@3.1.2:
resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz"
integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
cacache@^15.0.5:
version "15.3.0"
resolved "https://registry.npmmirror.com/cacache/-/cacache-15.3.0.tgz"
integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==
dependencies:
"@npmcli/fs" "^1.0.0"
"@npmcli/move-file" "^1.0.1"
chownr "^2.0.0"
fs-minipass "^2.0.0"
glob "^7.1.4"
infer-owner "^1.0.4"
lru-cache "^6.0.0"
minipass "^3.1.1"
minipass-collect "^1.0.2"
minipass-flush "^1.0.5"
minipass-pipeline "^1.2.2"
mkdirp "^1.0.3"
p-map "^4.0.0"
promise-inflight "^1.0.1"
rimraf "^3.0.2"
ssri "^8.0.1"
tar "^6.0.2"
unique-filename "^1.1.1"
call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2:
version "1.0.2"
resolved "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6"
resolved "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz"
integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==
dependencies:
es-errors "^1.3.0"
function-bind "^1.1.2"
call-bind@^1.0.0, call-bind@^1.0.2:
version "1.0.2"
resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz"
integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
dependencies:
function-bind "^1.1.1"
get-intrinsic "^1.0.2"
call-bind@^1.0.8:
call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.8:
version "1.0.8"
resolved "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c"
resolved "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.8.tgz"
integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==
dependencies:
call-bind-apply-helpers "^1.0.0"
... ... @@ -3435,7 +3437,7 @@ camelcase@^6.2.0:
resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz"
integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
caniuse-lite@^1.0.30001449, caniuse-lite@^1.0.30001503, caniuse-lite@^1.0.30001579, caniuse-lite@^1.0.30001646:
caniuse-lite@^1.0.30001579, caniuse-lite@^1.0.30001688:
version "1.0.30001692"
resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001692.tgz"
integrity sha512-A95VKan0kdtrsnMubMKxEKUKImOPSuCpYgxSQBo036P5YYgVIcOYJEgt/txJWqObiRQeISNCfef9nvlQ0vbV7A==
... ... @@ -3495,7 +3497,7 @@ character-entities@^2.0.0:
cheerio-select@^2.1.0:
version "2.1.0"
resolved "https://registry.npmmirror.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4"
resolved "https://registry.npmmirror.com/cheerio-select/-/cheerio-select-2.1.0.tgz"
integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==
dependencies:
boolbase "^1.0.0"
... ... @@ -3507,7 +3509,7 @@ cheerio-select@^2.1.0:
cheerio@^1.0.0:
version "1.0.0"
resolved "https://registry.npmmirror.com/cheerio/-/cheerio-1.0.0.tgz#1ede4895a82f26e8af71009f961a9b8cb60d6a81"
resolved "https://registry.npmmirror.com/cheerio/-/cheerio-1.0.0.tgz"
integrity sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==
dependencies:
cheerio-select "^2.1.0"
... ... @@ -3537,6 +3539,11 @@ cheerio@^1.0.0:
optionalDependencies:
fsevents "~2.3.2"
chownr@^2.0.0:
version "2.0.0"
resolved "https://registry.npmmirror.com/chownr/-/chownr-2.0.0.tgz"
integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==
chrome-trace-event@^1.0.2:
version "1.0.3"
resolved "https://registry.npmmirror.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz"
... ... @@ -3606,7 +3613,7 @@ cliui@^8.0.1:
clone@^2.1.1:
version "2.1.2"
resolved "https://registry.npmmirror.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f"
resolved "https://registry.npmmirror.com/clone/-/clone-2.1.2.tgz"
integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==
clsx@^2.1.1:
... ... @@ -3690,6 +3697,11 @@ commander@^8.0.0, commander@^8.3.0:
resolved "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz"
integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==
commondir@^1.0.1:
version "1.0.1"
resolved "https://registry.npmmirror.com/commondir/-/commondir-1.0.1.tgz"
integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==
compute-scroll-into-view@^3.0.2:
version "3.1.1"
resolved "https://registry.npmmirror.com/compute-scroll-into-view/-/compute-scroll-into-view-3.1.1.tgz"
... ... @@ -3833,7 +3845,7 @@ css-select@^4.1.3:
css-select@^5.1.0:
version "5.1.0"
resolved "https://registry.npmmirror.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6"
resolved "https://registry.npmmirror.com/css-select/-/css-select-5.1.0.tgz"
integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==
dependencies:
boolbase "^1.0.0"
... ... @@ -4261,7 +4273,7 @@ dedent@^1.0.0:
deep-equal@^1.0.1:
version "1.1.2"
resolved "https://registry.npmmirror.com/deep-equal/-/deep-equal-1.1.2.tgz#78a561b7830eef3134c7f6f3a3d6af272a678761"
resolved "https://registry.npmmirror.com/deep-equal/-/deep-equal-1.1.2.tgz"
integrity sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg==
dependencies:
is-arguments "^1.1.1"
... ... @@ -4306,24 +4318,16 @@ deepmerge@^4.2.2:
define-data-property@^1.0.1, define-data-property@^1.1.4:
version "1.1.4"
resolved "https://registry.npmmirror.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e"
resolved "https://registry.npmmirror.com/define-data-property/-/define-data-property-1.1.4.tgz"
integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==
dependencies:
es-define-property "^1.0.0"
es-errors "^1.3.0"
gopd "^1.0.1"
define-properties@^1.1.3, define-properties@^1.1.4:
version "1.2.0"
resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz"
integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==
dependencies:
has-property-descriptors "^1.0.0"
object-keys "^1.1.1"
define-properties@^1.2.1:
define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.1:
version "1.2.1"
resolved "https://registry.npmmirror.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c"
resolved "https://registry.npmmirror.com/define-properties/-/define-properties-1.2.1.tgz"
integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==
dependencies:
define-data-property "^1.0.1"
... ... @@ -4438,7 +4442,7 @@ dom-serializer@^1.0.1:
dom-serializer@^2.0.0:
version "2.0.0"
resolved "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53"
resolved "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-2.0.0.tgz"
integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==
dependencies:
domelementtype "^2.3.0"
... ... @@ -4466,7 +4470,7 @@ domhandler@^4.2.0, domhandler@^4.3.1:
domhandler@^5.0.2, domhandler@^5.0.3:
version "5.0.3"
resolved "https://registry.npmmirror.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31"
resolved "https://registry.npmmirror.com/domhandler/-/domhandler-5.0.3.tgz"
integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==
dependencies:
domelementtype "^2.3.0"
... ... @@ -4487,7 +4491,7 @@ domutils@^2.8.0:
domutils@^3.0.1, domutils@^3.1.0:
version "3.2.2"
resolved "https://registry.npmmirror.com/domutils/-/domutils-3.2.2.tgz#edbfe2b668b0c1d97c24baf0f1062b132221bc78"
resolved "https://registry.npmmirror.com/domutils/-/domutils-3.2.2.tgz"
integrity sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==
dependencies:
dom-serializer "^2.0.0"
... ... @@ -4496,7 +4500,7 @@ domutils@^3.0.1, domutils@^3.1.0:
dunder-proto@^1.0.1:
version "1.0.1"
resolved "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a"
resolved "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz"
integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==
dependencies:
call-bind-apply-helpers "^1.0.1"
... ... @@ -4508,20 +4512,10 @@ eastasianwidth@^0.2.0:
resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz"
integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
electron-to-chromium@^1.4.284:
version "1.4.345"
resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.345.tgz"
integrity sha512-znGhOQK2TUYLICgS25uaM0a7pHy66rSxbre7l762vg9AUoCcJK+Bu+HCPWpjL/U/kK8/Hf+6E0szAUJSyVYb3Q==
electron-to-chromium@^1.4.431:
version "1.4.445"
resolved "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.445.tgz"
integrity sha512-++DB+9VK8SBJwC+X1zlMfJ1tMA3F0ipi39GdEp+x3cV2TyBihqAgad8cNMWtLDEkbH39nlDQP7PfGrDr3Dr7HA==
electron-to-chromium@^1.5.4:
version "1.5.5"
resolved "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.5.tgz"
integrity sha512-QR7/A7ZkMS8tZuoftC/jfqNkZLQO779SSW3YuZHP4eXpj3EffGLFcB/Xu9AAZQzLccTiCV+EmUo3ha4mQ9wnlA==
electron-to-chromium@^1.5.73:
version "1.5.124"
resolved "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.124.tgz"
integrity sha512-riELkpDUqBi00gqreV3RIGoowxGrfueEKBd6zPdOk/I8lvuFpBGNkYoHof3zUHbiTBsIU8oxdIIL/WNrAG1/7A==
elkjs@^0.8.2:
version "0.8.2"
... ... @@ -4552,24 +4546,16 @@ emoji-regex@^9.2.2:
encoding-sniffer@^0.2.0:
version "0.2.0"
resolved "https://registry.npmmirror.com/encoding-sniffer/-/encoding-sniffer-0.2.0.tgz#799569d66d443babe82af18c9f403498365ef1d5"
resolved "https://registry.npmmirror.com/encoding-sniffer/-/encoding-sniffer-0.2.0.tgz"
integrity sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==
dependencies:
iconv-lite "^0.6.3"
whatwg-encoding "^3.1.1"
enhanced-resolve@^5.12.0:
version "5.12.0"
resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz"
integrity sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==
dependencies:
graceful-fs "^4.2.4"
tapable "^2.2.0"
enhanced-resolve@^5.15.0:
version "5.15.0"
resolved "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz"
integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==
enhanced-resolve@^5.12.0, enhanced-resolve@^5.2.0:
version "5.18.1"
resolved "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz"
integrity sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==
dependencies:
graceful-fs "^4.2.4"
tapable "^2.2.0"
... ... @@ -4579,16 +4565,11 @@ entities@^2.0.0:
resolved "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz"
integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==
entities@^4.2.0, entities@^4.5.0:
entities@^4.2.0, entities@^4.4.0, entities@^4.5.0:
version "4.5.0"
resolved "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
resolved "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz"
integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
entities@^4.4.0:
version "4.4.0"
resolved "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz"
integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==
error-ex@^1.3.1:
version "1.3.2"
resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz"
... ... @@ -4638,12 +4619,12 @@ es-abstract@^1.19.0, es-abstract@^1.20.4:
es-define-property@^1.0.0, es-define-property@^1.0.1:
version "1.0.1"
resolved "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa"
resolved "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz"
integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==
es-errors@^1.3.0:
version "1.3.0"
resolved "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f"
resolved "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz"
integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==
es-get-iterator@^1.1.2:
... ... @@ -4661,14 +4642,9 @@ es-get-iterator@^1.1.2:
isarray "^2.0.5"
stop-iteration-iterator "^1.0.0"
es-module-lexer@^1.2.1:
version "1.3.0"
resolved "https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-1.3.0.tgz"
integrity sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==
es-object-atoms@^1.0.0, es-object-atoms@^1.1.1:
version "1.1.1"
resolved "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1"
resolved "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz"
integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==
dependencies:
es-errors "^1.3.0"
... ... @@ -4727,15 +4703,10 @@ esbuild@~0.21.5:
"@esbuild/win32-ia32" "0.21.5"
"@esbuild/win32-x64" "0.21.5"
escalade@^3.1.1:
version "3.1.1"
resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz"
integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
escalade@^3.1.2:
version "3.1.2"
resolved "https://registry.npmmirror.com/escalade/-/escalade-3.1.2.tgz"
integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==
escalade@^3.1.1, escalade@^3.2.0:
version "3.2.0"
resolved "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz"
integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==
escape-string-regexp@^1.0.5:
version "1.0.5"
... ... @@ -4906,7 +4877,7 @@ eslint-rule-composer@^0.3.0:
resolved "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz"
integrity sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==
eslint-scope@5.1.1:
eslint-scope@^5.1.0:
version "5.1.1"
resolved "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz"
integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
... ... @@ -5015,7 +4986,7 @@ esutils@^2.0.2:
eventemitter3@^2.0.3:
version "2.0.3"
resolved "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-2.0.3.tgz#b5e1079b59fb5e1ba2771c0a993be060a58c99ba"
resolved "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-2.0.3.tgz"
integrity sha512-jLN68Dx5kyFHaePoXWPsCGW5qdyZQtLYHkxkg02/Mz6g0kYpDx4FyP6XfArhQdlOC4b8Mv+EMxPo/8La7Tzghg==
events@^3.2.0:
... ... @@ -5088,7 +5059,7 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
fast-diff@1.1.2:
version "1.1.2"
resolved "https://registry.npmmirror.com/fast-diff/-/fast-diff-1.1.2.tgz#4b62c42b8e03de3f848460b639079920695d0154"
resolved "https://registry.npmmirror.com/fast-diff/-/fast-diff-1.1.2.tgz"
integrity sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig==
fast-diff@^1.1.2:
... ... @@ -5165,6 +5136,15 @@ fill-range@^7.0.1:
dependencies:
to-regex-range "^5.0.1"
find-cache-dir@^3.3.1:
version "3.3.2"
resolved "https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz"
integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==
dependencies:
commondir "^1.0.1"
make-dir "^3.0.2"
pkg-dir "^4.1.0"
find-up@^4.0.0, find-up@^4.1.0:
version "4.1.0"
resolved "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz"
... ... @@ -5237,6 +5217,13 @@ frac@~1.1.2:
resolved "https://registry.npmmirror.com/frac/-/frac-1.1.2.tgz"
integrity sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==
fs-minipass@^2.0.0:
version "2.1.0"
resolved "https://registry.npmmirror.com/fs-minipass/-/fs-minipass-2.1.0.tgz"
integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==
dependencies:
minipass "^3.0.0"
fs.realpath@^1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz"
... ... @@ -5247,12 +5234,7 @@ fsevents@^2.3.2, fsevents@~2.3.2, fsevents@~2.3.3:
resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
function-bind@^1.1.1:
version "1.1.1"
resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz"
integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
function-bind@^1.1.2:
function-bind@^1.1.1, function-bind@^1.1.2:
version "1.1.2"
resolved "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz"
integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
... ... @@ -5287,18 +5269,9 @@ get-caller-file@^2.0.5:
resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz"
integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0:
version "1.2.0"
resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz"
integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==
dependencies:
function-bind "^1.1.1"
has "^1.0.3"
has-symbols "^1.0.3"
get-intrinsic@^1.2.4:
get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.4:
version "1.3.0"
resolved "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01"
resolved "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz"
integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==
dependencies:
call-bind-apply-helpers "^1.0.2"
... ... @@ -5319,7 +5292,7 @@ get-package-type@^0.1.0:
get-proto@^1.0.1:
version "1.0.1"
resolved "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1"
resolved "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz"
integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==
dependencies:
dunder-proto "^1.0.1"
... ... @@ -5435,16 +5408,9 @@ globby@^13.1.3:
merge2 "^1.4.1"
slash "^4.0.0"
gopd@^1.0.1:
version "1.0.1"
resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz"
integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==
dependencies:
get-intrinsic "^1.1.3"
gopd@^1.2.0:
gopd@^1.0.1, gopd@^1.2.0:
version "1.2.0"
resolved "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1"
resolved "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz"
integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==
graceful-fs@^4.1.2, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.9:
... ... @@ -5472,16 +5438,9 @@ has-flag@^4.0.0:
resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz"
integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
has-property-descriptors@^1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz"
integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==
dependencies:
get-intrinsic "^1.1.1"
has-property-descriptors@^1.0.2:
has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2:
version "1.0.2"
resolved "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854"
resolved "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz"
integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==
dependencies:
es-define-property "^1.0.0"
... ... @@ -5491,14 +5450,9 @@ has-proto@^1.0.1:
resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz"
integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==
has-symbols@^1.0.2, has-symbols@^1.0.3:
version "1.0.3"
resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz"
integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
has-symbols@^1.1.0:
has-symbols@^1.0.2, has-symbols@^1.0.3, has-symbols@^1.1.0:
version "1.1.0"
resolved "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338"
resolved "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz"
integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==
has-tostringtag@^1.0.0:
... ... @@ -5515,6 +5469,11 @@ has@^1.0.3:
dependencies:
function-bind "^1.1.1"
hash-sum@^2.0.0:
version "2.0.0"
resolved "https://registry.npmmirror.com/hash-sum/-/hash-sum-2.0.0.tgz"
integrity sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==
hash.js@^1.1.7:
version "1.1.7"
resolved "https://registry.npmmirror.com/hash.js/-/hash.js-1.1.7.tgz"
... ... @@ -5646,7 +5605,7 @@ html-docx-js-typescript@^0.1.5:
html-docx-js@^0.3.1:
version "0.3.1"
resolved "https://registry.npmmirror.com/html-docx-js/-/html-docx-js-0.3.1.tgz#9713f6587a08d1f0c87a801fe7649a4d0ab07d76"
resolved "https://registry.npmmirror.com/html-docx-js/-/html-docx-js-0.3.1.tgz"
integrity sha512-QSrMiRhxesqxYCa3f+2Z3ttIHPzSjDOL1tCOmIDIEET7HdabxXND6tAbsFMXAgRG4RADQ3wbl74ydMmjidaDPA==
dependencies:
jszip "^2.3.0"
... ... @@ -5672,7 +5631,7 @@ html-to-image@^1.11.11:
htmlparser2@^9.1.0:
version "9.1.0"
resolved "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-9.1.0.tgz#cdb498d8a75a51f739b61d3f718136c369bc8c23"
resolved "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-9.1.0.tgz"
integrity sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==
dependencies:
domelementtype "^2.3.0"
... ... @@ -5781,6 +5740,11 @@ indent-string@^4.0.0:
resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz"
integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
infer-owner@^1.0.4:
version "1.0.4"
resolved "https://registry.npmmirror.com/infer-owner/-/infer-owner-1.0.4.tgz"
integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==
inflight@^1.0.4:
version "1.0.6"
resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz"
... ... @@ -6452,14 +6416,14 @@ jest-watcher@^29.7.0:
jest-util "^29.7.0"
string-length "^4.0.1"
jest-worker@^27.4.5:
version "27.5.1"
resolved "https://registry.npmmirror.com/jest-worker/-/jest-worker-27.5.1.tgz"
integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==
jest-worker@^26.5.0:
version "26.6.2"
resolved "https://registry.npmmirror.com/jest-worker/-/jest-worker-26.6.2.tgz"
integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==
dependencies:
"@types/node" "*"
merge-stream "^2.0.0"
supports-color "^8.0.0"
supports-color "^7.0.0"
jest-worker@^29.7.0:
version "29.7.0"
... ... @@ -6543,7 +6507,12 @@ jsesc@~0.5.0:
resolved "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz"
integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==
json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1:
json-parse-better-errors@^1.0.2:
version "1.0.2"
resolved "https://registry.npmmirror.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz"
integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
json-parse-even-better-errors@^2.3.0:
version "2.3.1"
resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz"
integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
... ... @@ -6597,7 +6566,7 @@ jszip@*, jszip@^3.10.1, jszip@^3.4.0:
jszip@^2.3.0:
version "2.7.0"
resolved "https://registry.npmmirror.com/jszip/-/jszip-2.7.0.tgz#c420b1e1aa800490724a0dd277e8cca950bc2c41"
resolved "https://registry.npmmirror.com/jszip/-/jszip-2.7.0.tgz"
integrity sha512-JIsRKRVC3gTRo2vM4Wy9WBC3TRcfnIZU8k65Phi3izkvPH975FowRYtKGT6PxevA0XnJ/yO8b0QwV0ydVyQwfw==
dependencies:
pako "~1.0.2"
... ... @@ -6716,7 +6685,7 @@ listr2@^5.0.7:
through "^2.3.8"
wrap-ansi "^7.0.0"
loader-runner@^4.2.0:
loader-runner@^4.1.0:
version "4.3.0"
resolved "https://registry.npmmirror.com/loader-runner/-/loader-runner-4.3.0.tgz"
integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==
... ... @@ -6742,32 +6711,32 @@ lodash-es@^4.17.21:
lodash._arraycopy@^3.0.0:
version "3.0.0"
resolved "https://registry.npmmirror.com/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz#76e7b7c1f1fb92547374878a562ed06a3e50f6e1"
resolved "https://registry.npmmirror.com/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz"
integrity sha512-RHShTDnPKP7aWxlvXKiDT6IX2jCs6YZLCtNhOru/OX2Q/tzX295vVBK5oX1ECtN+2r86S0Ogy8ykP1sgCZAN0A==
lodash._arrayeach@^3.0.0:
version "3.0.0"
resolved "https://registry.npmmirror.com/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz#bab156b2a90d3f1bbd5c653403349e5e5933ef9e"
resolved "https://registry.npmmirror.com/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz"
integrity sha512-Mn7HidOVcl3mkQtbPsuKR0Fj0N6Q6DQB77CtYncZcJc0bx5qv2q4Gl6a0LC1AN+GSxpnBDNnK3CKEm9XNA4zqQ==
lodash._basecopy@^3.0.0:
version "3.0.1"
resolved "https://registry.npmmirror.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36"
resolved "https://registry.npmmirror.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz"
integrity sha512-rFR6Vpm4HeCK1WPGvjZSJ+7yik8d8PVUdCJx5rT2pogG4Ve/2ZS7kfmO5l5T2o5V2mqlNIfSF5MZlr1+xOoYQQ==
lodash._basefor@^3.0.0:
version "3.0.3"
resolved "https://registry.npmmirror.com/lodash._basefor/-/lodash._basefor-3.0.3.tgz#7550b4e9218ef09fad24343b612021c79b4c20c2"
resolved "https://registry.npmmirror.com/lodash._basefor/-/lodash._basefor-3.0.3.tgz"
integrity sha512-6bc3b8grkpMgDcVJv9JYZAk/mHgcqMljzm7OsbmcE2FGUMmmLQTPHlh/dFqR8LA0GQ7z4K67JSotVKu5058v1A==
lodash._bindcallback@^3.0.0:
version "3.0.1"
resolved "https://registry.npmmirror.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e"
resolved "https://registry.npmmirror.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz"
integrity sha512-2wlI0JRAGX8WEf4Gm1p/mv/SZ+jLijpj0jyaE/AXeuQphzCgD8ZQW4oSpoN8JAopujOFGU3KMuq7qfHBWlGpjQ==
lodash._createassigner@^3.0.0:
version "3.1.1"
resolved "https://registry.npmmirror.com/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz#838a5bae2fdaca63ac22dee8e19fa4e6d6970b11"
resolved "https://registry.npmmirror.com/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz"
integrity sha512-LziVL7IDnJjQeeV95Wvhw6G28Z8Q6da87LWKOPWmzBLv4u6FAT/x5v00pyGW0u38UoogNF2JnD3bGgZZDaNEBw==
dependencies:
lodash._bindcallback "^3.0.0"
... ... @@ -6776,17 +6745,17 @@ lodash._createassigner@^3.0.0:
lodash._getnative@^3.0.0:
version "3.9.1"
resolved "https://registry.npmmirror.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5"
resolved "https://registry.npmmirror.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz"
integrity sha512-RrL9VxMEPyDMHOd9uFbvMe8X55X16/cGM5IgOKgRElQZutpX89iS6vwl64duTV1/16w5JY7tuFNXqoekmh1EmA==
lodash._isiterateecall@^3.0.0:
version "3.0.9"
resolved "https://registry.npmmirror.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c"
resolved "https://registry.npmmirror.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz"
integrity sha512-De+ZbrMu6eThFti/CSzhRvTKMgQToLxbij58LMfM8JnYDNSOjkjTCIaa8ixglOeGh2nyPlakbt5bJWJ7gvpYlQ==
lodash._root@^3.0.0:
version "3.0.1"
resolved "https://registry.npmmirror.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692"
resolved "https://registry.npmmirror.com/lodash._root/-/lodash._root-3.0.1.tgz"
integrity sha512-O0pWuFSK6x4EXhM1dhZ8gchNtG7JMqBtrHdoUFUWXD7dJnNSUze1GuyQr5sOs0aCvgGeI3o/OJW8f4ca7FDxmQ==
lodash.debounce@^4.0.8:
... ... @@ -6796,7 +6765,7 @@ lodash.debounce@^4.0.8:
lodash.escape@^3.0.0:
version "3.2.0"
resolved "https://registry.npmmirror.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698"
resolved "https://registry.npmmirror.com/lodash.escape/-/lodash.escape-3.2.0.tgz"
integrity sha512-n1PZMXgaaDWZDSvuNZ/8XOcYO2hOKDqZel5adtR30VKQAtoWs/5AOeFA0vPV8moiPzlqe7F4cP2tzpFewQyelQ==
dependencies:
lodash._root "^3.0.0"
... ... @@ -6808,17 +6777,17 @@ lodash.escape@^4.0.1:
lodash.isarguments@^3.0.0:
version "3.1.0"
resolved "https://registry.npmmirror.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a"
resolved "https://registry.npmmirror.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz"
integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==
lodash.isarray@^3.0.0:
version "3.0.4"
resolved "https://registry.npmmirror.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55"
resolved "https://registry.npmmirror.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz"
integrity sha512-JwObCrNJuT0Nnbuecmqr5DgtuBppuCvGD9lxjFpAzwnVtdGoDQ1zig+5W8k5/6Gcn0gZ3936HDAlGd28i7sOGQ==
lodash.isplainobject@^3.0.0:
version "3.2.0"
resolved "https://registry.npmmirror.com/lodash.isplainobject/-/lodash.isplainobject-3.2.0.tgz#9a8238ae16b200432960cd7346512d0123fbf4c5"
resolved "https://registry.npmmirror.com/lodash.isplainobject/-/lodash.isplainobject-3.2.0.tgz"
integrity sha512-P4wZnho5curNqeEq/x292Pb57e1v+woR7DJ84DURelKB46lby8aDEGVobSaYtzHdQBWQrJSdxcCwjlGOvvdIyg==
dependencies:
lodash._basefor "^3.0.0"
... ... @@ -6827,12 +6796,12 @@ lodash.isplainobject@^3.0.0:
lodash.istypedarray@^3.0.0:
version "3.0.6"
resolved "https://registry.npmmirror.com/lodash.istypedarray/-/lodash.istypedarray-3.0.6.tgz#c9a477498607501d8e8494d283b87c39281cef62"
resolved "https://registry.npmmirror.com/lodash.istypedarray/-/lodash.istypedarray-3.0.6.tgz"
integrity sha512-lGWJ6N8AA3KSv+ZZxlTdn4f6A7kMfpJboeyvbFdE7IU9YAgweODqmOgdUHOA+c6lVWeVLysdaxciFXi+foVsWw==
lodash.keys@^3.0.0:
version "3.1.2"
resolved "https://registry.npmmirror.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a"
resolved "https://registry.npmmirror.com/lodash.keys/-/lodash.keys-3.1.2.tgz"
integrity sha512-CuBsapFjcubOGMn3VD+24HOAPxM79tH+V6ivJL3CHYjtrawauDJHUk//Yew9Hvc6e9rbCrURGk8z6PC+8WJBfQ==
dependencies:
lodash._getnative "^3.0.0"
... ... @@ -6841,7 +6810,7 @@ lodash.keys@^3.0.0:
lodash.keysin@^3.0.0:
version "3.0.8"
resolved "https://registry.npmmirror.com/lodash.keysin/-/lodash.keysin-3.0.8.tgz#22c4493ebbedb1427962a54b445b2c8a767fb47f"
resolved "https://registry.npmmirror.com/lodash.keysin/-/lodash.keysin-3.0.8.tgz"
integrity sha512-YDB/5xkL3fBKFMDaC+cfGV00pbiJ6XoJIfRmBhv7aR6wWtbCW6IzkiWnTfkiHTF6ALD7ff83dAtB3OEaSoyQPg==
dependencies:
lodash.isarguments "^3.0.0"
... ... @@ -6849,7 +6818,7 @@ lodash.keysin@^3.0.0:
lodash.merge@^3.2.0:
version "3.3.2"
resolved "https://registry.npmmirror.com/lodash.merge/-/lodash.merge-3.3.2.tgz#0d90d93ed637b1878437bb3e21601260d7afe994"
resolved "https://registry.npmmirror.com/lodash.merge/-/lodash.merge-3.3.2.tgz"
integrity sha512-ZgGZpRhWLjivGUbjtApZR4HyLv/UAyoYqESVYkK4aLBJVHRrbFpG+GNnE9JPijliME4LkKM0SFI/WyOiBiv1+w==
dependencies:
lodash._arraycopy "^3.0.0"
... ... @@ -6871,12 +6840,12 @@ lodash.merge@^4.6.2:
lodash.restparam@^3.0.0:
version "3.6.1"
resolved "https://registry.npmmirror.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805"
resolved "https://registry.npmmirror.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz"
integrity sha512-L4/arjjuq4noiUJpt3yS6KIKDtJwNe2fIYgMqyYYKoeIfV1iEqvPwhCx23o+R9dzouGihDAPN1dTIRWa7zk8tw==
lodash.toplainobject@^3.0.0:
version "3.0.0"
resolved "https://registry.npmmirror.com/lodash.toplainobject/-/lodash.toplainobject-3.0.0.tgz#28790ad942d293d78aa663a07ecf7f52ca04198d"
resolved "https://registry.npmmirror.com/lodash.toplainobject/-/lodash.toplainobject-3.0.0.tgz"
integrity sha512-wMI0Ju1bvSmnBS3EcRRH/3zDnZOPpDtMtNDzbbNMKuTrEpALsf+sPyMeogmv63Y11qZQO7H1xFzohIEGRMjPYA==
dependencies:
lodash._basecopy "^3.0.0"
... ... @@ -6937,11 +6906,23 @@ lru-cache@^6.0.0:
dependencies:
yallist "^4.0.0"
lucide-react@^0.484.0:
version "0.484.0"
resolved "https://registry.npmmirror.com/lucide-react/-/lucide-react-0.484.0.tgz"
integrity sha512-oZy8coK9kZzvqhSgfbGkPtTgyjpBvs3ukLgDPv14dSOZtBtboryWF5o8i3qen7QbGg7JhiJBz5mK1p8YoMZTLQ==
lz-string@^1.5.0:
version "1.5.0"
resolved "https://registry.npmmirror.com/lz-string/-/lz-string-1.5.0.tgz"
integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==
make-dir@^3.0.2:
version "3.1.0"
resolved "https://registry.npmmirror.com/make-dir/-/make-dir-3.1.0.tgz"
integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
dependencies:
semver "^6.0.0"
make-dir@^4.0.0:
version "4.0.0"
resolved "https://registry.npmmirror.com/make-dir/-/make-dir-4.0.0.tgz"
... ... @@ -6982,7 +6963,7 @@ marked@^4.0.14:
math-intrinsics@^1.1.0:
version "1.1.0"
resolved "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9"
resolved "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz"
integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==
mdast-util-definitions@^5.0.0:
... ... @@ -7506,6 +7487,11 @@ min-indent@^1.0.0:
resolved "https://registry.npmmirror.com/min-indent/-/min-indent-1.0.1.tgz"
integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==
mind-elixir@^4.4.3:
version "4.4.3"
resolved "https://registry.npmmirror.com/mind-elixir/-/mind-elixir-4.4.3.tgz#bef5650a29276856bef089bc54576048c87eeabd"
integrity sha512-i2GBFtZ4Z6pv5z5/QcfQFrbVTNa0OWayfx7OvQpzNn7X62l6xJn0y3dKxQ/KuT50HxgZiyRptY5J0xBc2qeuZw==
minimalistic-assert@^1.0.1:
version "1.0.1"
resolved "https://registry.npmmirror.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz"
... ... @@ -7523,6 +7509,52 @@ minimist@^1.2.0, minimist@^1.2.6:
resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz"
integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
minipass-collect@^1.0.2:
version "1.0.2"
resolved "https://registry.npmmirror.com/minipass-collect/-/minipass-collect-1.0.2.tgz"
integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==
dependencies:
minipass "^3.0.0"
minipass-flush@^1.0.5:
version "1.0.5"
resolved "https://registry.npmmirror.com/minipass-flush/-/minipass-flush-1.0.5.tgz"
integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==
dependencies:
minipass "^3.0.0"
minipass-pipeline@^1.2.2:
version "1.2.4"
resolved "https://registry.npmmirror.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz"
integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==
dependencies:
minipass "^3.0.0"
minipass@^3.0.0, minipass@^3.1.1:
version "3.3.6"
resolved "https://registry.npmmirror.com/minipass/-/minipass-3.3.6.tgz"
integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==
dependencies:
yallist "^4.0.0"
minipass@^5.0.0:
version "5.0.0"
resolved "https://registry.npmmirror.com/minipass/-/minipass-5.0.0.tgz"
integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==
minizlib@^2.1.1:
version "2.1.2"
resolved "https://registry.npmmirror.com/minizlib/-/minizlib-2.1.2.tgz"
integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==
dependencies:
minipass "^3.0.0"
yallist "^4.0.0"
mkdirp@^1.0.3, mkdirp@^1.0.4:
version "1.0.4"
resolved "https://registry.npmmirror.com/mkdirp/-/mkdirp-1.0.4.tgz"
integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
mri@^1.1.0:
version "1.2.0"
resolved "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz"
... ... @@ -7600,20 +7632,10 @@ node-int64@^0.4.0:
resolved "https://registry.npmmirror.com/node-int64/-/node-int64-0.4.0.tgz"
integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==
node-releases@^2.0.12:
version "2.0.12"
resolved "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.12.tgz"
integrity sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==
node-releases@^2.0.18:
version "2.0.18"
resolved "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.18.tgz"
integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==
node-releases@^2.0.8:
version "2.0.10"
resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz"
integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==
node-releases@^2.0.19:
version "2.0.19"
resolved "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.19.tgz"
integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==
non-layered-tidy-tree-layout@^2.0.2:
version "2.0.2"
... ... @@ -7813,7 +7835,7 @@ pako@~1.0.2:
parchment@^1.1.2, parchment@^1.1.4:
version "1.1.4"
resolved "https://registry.npmmirror.com/parchment/-/parchment-1.1.4.tgz#aeded7ab938fe921d4c34bc339ce1168bc2ffde5"
resolved "https://registry.npmmirror.com/parchment/-/parchment-1.1.4.tgz"
integrity sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg==
parent-module@^1.0.0:
... ... @@ -7835,7 +7857,7 @@ parse-json@^5.0.0, parse-json@^5.2.0:
parse5-htmlparser2-tree-adapter@^7.0.0:
version "7.1.0"
resolved "https://registry.npmmirror.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz#b5a806548ed893a43e24ccb42fbb78069311e81b"
resolved "https://registry.npmmirror.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz"
integrity sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==
dependencies:
domhandler "^5.0.3"
... ... @@ -7843,25 +7865,18 @@ parse5-htmlparser2-tree-adapter@^7.0.0:
parse5-parser-stream@^7.1.2:
version "7.1.2"
resolved "https://registry.npmmirror.com/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz#d7c20eadc37968d272e2c02660fff92dd27e60e1"
resolved "https://registry.npmmirror.com/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz"
integrity sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==
dependencies:
parse5 "^7.0.0"
parse5@^7.0.0, parse5@^7.1.1:
parse5@^7.0.0, parse5@^7.1.1, parse5@^7.1.2:
version "7.1.2"
resolved "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz"
integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==
dependencies:
entities "^4.4.0"
parse5@^7.1.2:
version "7.2.1"
resolved "https://registry.npmmirror.com/parse5/-/parse5-7.2.1.tgz#8928f55915e6125f430cc44309765bf17556a33a"
integrity sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==
dependencies:
entities "^4.5.0"
path-exists@^4.0.0:
version "4.0.0"
resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz"
... ... @@ -7892,15 +7907,10 @@ path-type@^4.0.0:
resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz"
integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
picocolors@^1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz"
integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
picocolors@^1.0.1:
version "1.0.1"
resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.1.tgz"
integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==
picocolors@^1.0.0, picocolors@^1.1.1:
version "1.1.1"
resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz"
integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1:
version "2.3.1"
... ... @@ -7917,7 +7927,7 @@ pirates@^4.0.4:
resolved "https://registry.npmmirror.com/pirates/-/pirates-4.0.6.tgz"
integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==
pkg-dir@^4.2.0:
pkg-dir@^4.1.0, pkg-dir@^4.2.0:
version "4.2.0"
resolved "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-4.2.0.tgz"
integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
... ... @@ -7973,6 +7983,11 @@ process-nextick-args@~2.0.0:
resolved "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz"
integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
promise-inflight@^1.0.1:
version "1.0.1"
resolved "https://registry.npmmirror.com/promise-inflight/-/promise-inflight-1.0.1.tgz"
integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==
prompts@^2.0.1:
version "2.4.2"
resolved "https://registry.npmmirror.com/prompts/-/prompts-2.4.2.tgz"
... ... @@ -8032,7 +8047,7 @@ queue-microtask@^1.2.2:
quill-delta@^3.6.2:
version "3.6.3"
resolved "https://registry.npmmirror.com/quill-delta/-/quill-delta-3.6.3.tgz#b19fd2b89412301c60e1ff213d8d860eac0f1032"
resolved "https://registry.npmmirror.com/quill-delta/-/quill-delta-3.6.3.tgz"
integrity sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg==
dependencies:
deep-equal "^1.0.1"
... ... @@ -8041,7 +8056,7 @@ quill-delta@^3.6.2:
quill@^1.3.7:
version "1.3.7"
resolved "https://registry.npmmirror.com/quill/-/quill-1.3.7.tgz#da5b2f3a2c470e932340cdbf3668c9f21f9286e8"
resolved "https://registry.npmmirror.com/quill/-/quill-1.3.7.tgz"
integrity sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g==
dependencies:
clone "^2.1.1"
... ... @@ -8470,7 +8485,7 @@ react-markdown@^8.0.7:
react-quill@^2.0.0:
version "2.0.0"
resolved "https://registry.npmmirror.com/react-quill/-/react-quill-2.0.0.tgz#67a0100f58f96a246af240c9fa6841b363b3e017"
resolved "https://registry.npmmirror.com/react-quill/-/react-quill-2.0.0.tgz"
integrity sha512-4qQtv1FtCfLgoD3PXAur5RyxuUbPXQGOHgTlFie3jtxp43mXDtzCKaOgQ3mLyZfi1PUlyjycfivKelFhy13QUg==
dependencies:
"@types/quill" "^1.3.10"
... ... @@ -8570,18 +8585,9 @@ regenerator-transform@^0.15.1:
dependencies:
"@babel/runtime" "^7.8.4"
regexp.prototype.flags@^1.4.3:
version "1.4.3"
resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz"
integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==
dependencies:
call-bind "^1.0.2"
define-properties "^1.1.3"
functions-have-names "^1.2.2"
regexp.prototype.flags@^1.5.1:
regexp.prototype.flags@^1.4.3, regexp.prototype.flags@^1.5.1:
version "1.5.4"
resolved "https://registry.npmmirror.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz#1ad6c62d44a259007e55b3970e00f746efbcaa19"
resolved "https://registry.npmmirror.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz"
integrity sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==
dependencies:
call-bind "^1.0.8"
... ... @@ -8820,12 +8826,7 @@ sade@^1.7.3:
dependencies:
mri "^1.1.0"
safe-buffer@^5.1.0:
version "5.2.1"
resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz"
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
safe-buffer@~5.1.0, safe-buffer@~5.1.1:
safe-buffer@^5.1.0, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
version "5.1.2"
resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz"
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
... ... @@ -8872,7 +8873,7 @@ scheduler@^0.23.0:
dependencies:
loose-envify "^1.1.0"
schema-utils@^3.1.1, schema-utils@^3.2.0:
schema-utils@^3.0.0:
version "3.3.0"
resolved "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.3.0.tgz"
integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==
... ... @@ -8888,11 +8889,16 @@ scroll-into-view-if-needed@^3.1.0:
dependencies:
compute-scroll-into-view "^3.0.2"
semver@^6.1.1, semver@^6.1.2, semver@^6.3.0, semver@^6.3.1:
semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0, semver@^6.3.1:
version "6.3.1"
resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz"
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
semver@^7.3.5:
version "7.7.1"
resolved "https://registry.npmmirror.com/semver/-/semver-7.7.1.tgz"
integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==
semver@^7.5.3:
version "7.6.3"
resolved "https://registry.npmmirror.com/semver/-/semver-7.6.3.tgz"
... ... @@ -8905,16 +8911,16 @@ semver@^7.5.4:
dependencies:
lru-cache "^6.0.0"
serialize-javascript@^6.0.1:
version "6.0.1"
resolved "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz"
integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==
serialize-javascript@^5.0.1:
version "5.0.1"
resolved "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz"
integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==
dependencies:
randombytes "^2.1.0"
set-function-length@^1.2.2:
version "1.2.2"
resolved "https://registry.npmmirror.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449"
resolved "https://registry.npmmirror.com/set-function-length/-/set-function-length-1.2.2.tgz"
integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==
dependencies:
define-data-property "^1.1.4"
... ... @@ -8926,7 +8932,7 @@ set-function-length@^1.2.2:
set-function-name@^2.0.2:
version "2.0.2"
resolved "https://registry.npmmirror.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985"
resolved "https://registry.npmmirror.com/set-function-name/-/set-function-name-2.0.2.tgz"
integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==
dependencies:
define-data-property "^1.1.4"
... ... @@ -9016,10 +9022,15 @@ slice-ansi@^5.0.0:
ansi-styles "^6.0.0"
is-fullwidth-code-point "^4.0.0"
source-list-map@^2.0.0, source-list-map@^2.0.1:
version "2.0.1"
resolved "https://registry.npmmirror.com/source-list-map/-/source-list-map-2.0.1.tgz"
integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==
"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2:
version "1.0.2"
resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz"
integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
version "1.2.1"
resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz"
integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==
source-map-support@0.5.13:
version "0.5.13"
... ... @@ -9069,6 +9080,13 @@ ssf@~0.11.2:
dependencies:
frac "~1.1.2"
ssri@^8.0.1:
version "8.0.1"
resolved "https://registry.npmmirror.com/ssri/-/ssri-8.0.1.tgz"
integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==
dependencies:
minipass "^3.1.1"
stable@^0.1.8:
version "0.1.8"
resolved "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz"
... ... @@ -9254,7 +9272,7 @@ supports-color@^5.3.0:
dependencies:
has-flag "^3.0.0"
supports-color@^7.1.0:
supports-color@^7.0.0, supports-color@^7.1.0:
version "7.2.0"
resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz"
integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
... ... @@ -9304,26 +9322,42 @@ synckit@^0.8.5, synckit@^0.8.6:
"@pkgr/core" "^0.1.0"
tslib "^2.6.2"
tapable@^2.1.1, tapable@^2.2.0:
tapable@^2.0.0, tapable@^2.2.0:
version "2.2.1"
resolved "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz"
integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==
terser-webpack-plugin@^5.3.7:
version "5.3.9"
resolved "https://registry.npmmirror.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz"
integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==
tar@^6.0.2:
version "6.2.1"
resolved "https://registry.npmmirror.com/tar/-/tar-6.2.1.tgz"
integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==
dependencies:
chownr "^2.0.0"
fs-minipass "^2.0.0"
minipass "^5.0.0"
minizlib "^2.1.1"
mkdirp "^1.0.3"
yallist "^4.0.0"
terser-webpack-plugin@^4.1.0:
version "4.2.3"
resolved "https://registry.npmmirror.com/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz"
integrity sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==
dependencies:
"@jridgewell/trace-mapping" "^0.3.17"
jest-worker "^27.4.5"
schema-utils "^3.1.1"
serialize-javascript "^6.0.1"
terser "^5.16.8"
cacache "^15.0.5"
find-cache-dir "^3.3.1"
jest-worker "^26.5.0"
p-limit "^3.0.2"
schema-utils "^3.0.0"
serialize-javascript "^5.0.1"
source-map "^0.6.1"
terser "^5.3.4"
webpack-sources "^1.4.3"
terser@^5.16.8:
version "5.18.2"
resolved "https://registry.npmmirror.com/terser/-/terser-5.18.2.tgz"
integrity sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w==
terser@^5.3.4:
version "5.39.0"
resolved "https://registry.npmmirror.com/terser/-/terser-5.39.0.tgz"
integrity sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==
dependencies:
"@jridgewell/source-map" "^0.3.3"
acorn "^8.8.2"
... ... @@ -9545,7 +9579,7 @@ undici-types@~6.20.0:
undici@^6.19.5:
version "6.21.2"
resolved "https://registry.npmmirror.com/undici/-/undici-6.21.2.tgz#49c5884e8f9039c65a89ee9018ef3c8e2f1f4928"
resolved "https://registry.npmmirror.com/undici/-/undici-6.21.2.tgz"
integrity sha512-uROZWze0R0itiAKVPsYhFov9LxrPMHLMEQFszeI2gCN6bnIIZ8twzBCJcN2LJrBBLfrP0t1FW0g+JmKVl8Vk1g==
unicode-canonical-property-names-ecmascript@^2.0.0:
... ... @@ -9584,6 +9618,20 @@ unified@^10.0.0:
trough "^2.0.0"
vfile "^5.0.0"
unique-filename@^1.1.1:
version "1.1.1"
resolved "https://registry.npmmirror.com/unique-filename/-/unique-filename-1.1.1.tgz"
integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==
dependencies:
unique-slug "^2.0.0"
unique-slug@^2.0.0:
version "2.0.2"
resolved "https://registry.npmmirror.com/unique-slug/-/unique-slug-2.0.2.tgz"
integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==
dependencies:
imurmurhash "^0.1.4"
unist-util-find-after@^4.0.0:
version "4.0.1"
resolved "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-4.0.1.tgz"
... ... @@ -9653,29 +9701,13 @@ unpipe@1.0.0:
resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz"
integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
update-browserslist-db@^1.0.10:
version "1.0.10"
resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz"
integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==
dependencies:
escalade "^3.1.1"
picocolors "^1.0.0"
update-browserslist-db@^1.0.11:
version "1.0.11"
resolved "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz"
integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==
dependencies:
escalade "^3.1.1"
picocolors "^1.0.0"
update-browserslist-db@^1.1.0:
version "1.1.0"
resolved "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz"
integrity sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==
update-browserslist-db@^1.1.1:
version "1.1.3"
resolved "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz"
integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==
dependencies:
escalade "^3.1.2"
picocolors "^1.0.1"
escalade "^3.2.0"
picocolors "^1.1.1"
uri-js@^4.2.2:
version "4.4.1"
... ... @@ -9767,6 +9799,15 @@ vfile@^5.0.0:
unist-util-stringify-position "^3.0.0"
vfile-message "^3.0.0"
vue-loader@^17.3.1:
version "17.3.1"
resolved "https://registry.npmmirror.com/vue-loader/-/vue-loader-17.3.1.tgz"
integrity sha512-nmVu7KU8geOyzsStyyaxID/uBGDMS8BkPXb6Lu2SNkMawriIbb+hYrNtgftHMKxOSkjjjTF5OSSwPo3KP59egg==
dependencies:
chalk "^4.1.0"
hash-sum "^2.0.0"
watchpack "^2.4.0"
w3c-xmlserializer@^4.0.0:
version "4.0.0"
resolved "https://registry.npmmirror.com/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz"
... ... @@ -9789,10 +9830,10 @@ watch@^1.0.2:
exec-sh "^0.2.0"
minimist "^1.2.0"
watchpack@^2.4.0:
version "2.4.0"
resolved "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz"
integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==
watchpack@^2.0.0, watchpack@^2.4.0:
version "2.4.2"
resolved "https://registry.npmmirror.com/watchpack/-/watchpack-2.4.2.tgz"
integrity sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==
dependencies:
glob-to-regexp "^0.4.1"
graceful-fs "^4.1.2"
... ... @@ -9817,40 +9858,51 @@ webidl-conversions@^7.0.0:
resolved "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz"
integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==
webpack-sources@^3.2.3:
version "3.2.3"
resolved "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz"
integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==
webpack@^5.88.1:
version "5.88.1"
resolved "https://registry.npmmirror.com/webpack/-/webpack-5.88.1.tgz"
integrity sha512-FROX3TxQnC/ox4N+3xQoWZzvGXSuscxR32rbzjpXgEzWudJFEJBpdlkkob2ylrv5yzzufD1zph1OoFsLtm6stQ==
dependencies:
"@types/eslint-scope" "^3.7.3"
"@types/estree" "^1.0.0"
"@webassemblyjs/ast" "^1.11.5"
"@webassemblyjs/wasm-edit" "^1.11.5"
"@webassemblyjs/wasm-parser" "^1.11.5"
acorn "^8.7.1"
acorn-import-assertions "^1.9.0"
browserslist "^4.14.5"
webpack-sources@^1.4.3:
version "1.4.3"
resolved "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-1.4.3.tgz"
integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==
dependencies:
source-list-map "^2.0.0"
source-map "~0.6.1"
webpack-sources@^2.0.1:
version "2.3.1"
resolved "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-2.3.1.tgz"
integrity sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==
dependencies:
source-list-map "^2.0.1"
source-map "^0.6.1"
webpack@^5.0.0-rc.6:
version "5.0.0-rc.6"
resolved "https://registry.npmmirror.com/webpack/-/webpack-5.0.0-rc.6.tgz"
integrity sha512-UeZzugQFKpfqwv4e908rNnXxHILh/+MhNZtGg3hDrLaGpRaagZpVfu2wyrcbyRFhEGNKjJSb5USUOi/kQbNwqA==
dependencies:
"@types/eslint-scope" "^3.7.0"
"@types/estree" "^0.0.45"
"@webassemblyjs/ast" "1.9.0"
"@webassemblyjs/helper-module-context" "1.9.0"
"@webassemblyjs/wasm-edit" "1.9.0"
"@webassemblyjs/wasm-parser" "1.9.0"
acorn "^8.0.3"
browserslist "^4.14.3"
chrome-trace-event "^1.0.2"
enhanced-resolve "^5.15.0"
es-module-lexer "^1.2.1"
eslint-scope "5.1.1"
enhanced-resolve "^5.2.0"
eslint-scope "^5.1.0"
events "^3.2.0"
glob-to-regexp "^0.4.1"
graceful-fs "^4.2.9"
json-parse-even-better-errors "^2.3.1"
loader-runner "^4.2.0"
graceful-fs "^4.2.4"
json-parse-better-errors "^1.0.2"
loader-runner "^4.1.0"
mime-types "^2.1.27"
neo-async "^2.6.2"
schema-utils "^3.2.0"
tapable "^2.1.1"
terser-webpack-plugin "^5.3.7"
watchpack "^2.4.0"
webpack-sources "^3.2.3"
pkg-dir "^4.2.0"
schema-utils "^3.0.0"
tapable "^2.0.0"
terser-webpack-plugin "^4.1.0"
watchpack "^2.0.0"
webpack-sources "^2.0.1"
whatwg-encoding@^2.0.0:
version "2.0.0"
... ... @@ -9861,7 +9913,7 @@ whatwg-encoding@^2.0.0:
whatwg-encoding@^3.1.1:
version "3.1.1"
resolved "https://registry.npmmirror.com/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz#d0f4ef769905d426e1688f3e34381a99b60b76e5"
resolved "https://registry.npmmirror.com/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz"
integrity sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==
dependencies:
iconv-lite "0.6.3"
... ... @@ -9873,7 +9925,7 @@ whatwg-mimetype@^3.0.0:
whatwg-mimetype@^4.0.0:
version "4.0.0"
resolved "https://registry.npmmirror.com/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz#bc1bf94a985dc50388d54a9258ac405c3ca2fc0a"
resolved "https://registry.npmmirror.com/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz"
integrity sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==
whatwg-url@^11.0.0:
... ... @@ -10017,7 +10069,7 @@ yallist@^3.0.2:
yallist@^4.0.0:
version "4.0.0"
resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz"
resolved "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz"
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
yaml@^1.10.0:
... ... @@ -10063,7 +10115,7 @@ zod@^3.23.8, zod@^3.24.1:
resolved "https://registry.npmjs.org/zod/-/zod-3.24.1.tgz"
integrity sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==
zustand@^4.3.8, zustand@^4.4.0:
zustand@^4.4.0:
version "4.5.6"
resolved "https://registry.npmmirror.com/zustand/-/zustand-4.5.6.tgz"
integrity sha512-ibr/n1hBzLLj5Y+yUcU7dYw8p6WnIVzdJbnX+1YpaScvZVF2ziugqHs+LAmHw4lWO9c/zRj+K1ncgWDQuthEdQ==
... ...