Merge branch 'Yidadaa:main' into main
This commit is contained in:
commit
6d7e536758
|
@ -0,0 +1,14 @@
|
||||||
|
{
|
||||||
|
"presets": [
|
||||||
|
[
|
||||||
|
"next/babel",
|
||||||
|
{
|
||||||
|
"preset-env": {
|
||||||
|
"targets": {
|
||||||
|
"browsers": ["> 0.25%, not dead"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
88
LICENSE
88
LICENSE
|
@ -1,75 +1,21 @@
|
||||||
版权所有(c)<2023><Zhang Yifei>
|
MIT License
|
||||||
|
|
||||||
反996许可证版本1.0
|
Copyright (c) 2023 Zhang Yifei
|
||||||
|
|
||||||
在符合下列条件的情况下,
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
特此免费向任何得到本授权作品的副本(包括源代码、文件和/或相关内容,以下统称为“授权作品”
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
)的个人和法人实体授权:被授权个人或法人实体有权以任何目的处置授权作品,包括但不限于使
|
in the Software without restriction, including without limitation the rights
|
||||||
用、复制,修改,衍生利用、散布,发布和再许可:
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
1. 个人或法人实体必须在许可作品的每个再散布或衍生副本上包含以上版权声明和本许可证,不
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
得自行修改。
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
2. 个人或法人实体必须严格遵守与个人实际所在地或个人出生地或归化地、或法人实体注册地或
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
经营地(以较严格者为准)的司法管辖区所有适用的与劳动和就业相关法律、法规、规则和
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
标准。如果该司法管辖区没有此类法律、法规、规章和标准或其法律、法规、规章和标准不可
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
执行,则个人或法人实体必须遵守国际劳工标准的核心公约。
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
3. 个人或法人不得以任何方式诱导或强迫其全职或兼职员工或其独立承包人以口头或书面形式同
|
SOFTWARE.
|
||||||
意直接或间接限制、削弱或放弃其所拥有的,受相关与劳动和就业有关的法律、法规、规则和
|
|
||||||
标准保护的权利或补救措施,无论该等书面或口头协议是否被该司法管辖区的法律所承认,该
|
|
||||||
等个人或法人实体也不得以任何方法限制其雇员或独立承包人向版权持有人或监督许可证合规
|
|
||||||
情况的有关当局报告或投诉上述违反许可证的行为的权利。
|
|
||||||
|
|
||||||
该授权作品是"按原样"提供,不做任何明示或暗示的保证,包括但不限于对适销性、特定用途适用
|
|
||||||
性和非侵权性的保证。在任何情况下,无论是在合同诉讼、侵权诉讼或其他诉讼中,版权持有人均
|
|
||||||
不承担因本软件或本软件的使用或其他交易而产生、引起或与之相关的任何索赔、损害或其他责任。
|
|
||||||
|
|
||||||
|
|
||||||
------------------------- ENGLISH ------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
Copyright (c) <2023> <Zhang Yifei>
|
|
||||||
|
|
||||||
Anti 996 License Version 1.0 (Draft)
|
|
||||||
|
|
||||||
Permission is hereby granted to any individual or legal entity obtaining a copy
|
|
||||||
of this licensed work (including the source code, documentation and/or related
|
|
||||||
items, hereinafter collectively referred to as the "licensed work"), free of
|
|
||||||
charge, to deal with the licensed work for any purpose, including without
|
|
||||||
limitation, the rights to use, reproduce, modify, prepare derivative works of,
|
|
||||||
publish, distribute and sublicense the licensed work, subject to the following
|
|
||||||
conditions:
|
|
||||||
|
|
||||||
1. The individual or the legal entity must conspicuously display, without
|
|
||||||
modification, this License on each redistributed or derivative copy of the
|
|
||||||
Licensed Work.
|
|
||||||
|
|
||||||
2. The individual or the legal entity must strictly comply with all applicable
|
|
||||||
laws, regulations, rules and standards of the jurisdiction relating to
|
|
||||||
labor and employment where the individual is physically located or where
|
|
||||||
the individual was born or naturalized; or where the legal entity is
|
|
||||||
registered or is operating (whichever is stricter). In case that the
|
|
||||||
jurisdiction has no such laws, regulations, rules and standards or its
|
|
||||||
laws, regulations, rules and standards are unenforceable, the individual
|
|
||||||
or the legal entity are required to comply with Core International Labor
|
|
||||||
Standards.
|
|
||||||
|
|
||||||
3. The individual or the legal entity shall not induce or force its
|
|
||||||
employee(s), whether full-time or part-time, or its independent
|
|
||||||
contractor(s), in any methods, to agree in oral or written form,
|
|
||||||
to directly or indirectly restrict, weaken or relinquish his or
|
|
||||||
her rights or remedies under such laws, regulations, rules and
|
|
||||||
standards relating to labor and employment as mentioned above,
|
|
||||||
no matter whether such written or oral agreement are enforceable
|
|
||||||
under the laws of the said jurisdiction, nor shall such individual
|
|
||||||
or the legal entity limit, in any methods, the rights of its employee(s)
|
|
||||||
or independent contractor(s) from reporting or complaining to the copyright
|
|
||||||
holder or relevant authorities monitoring the compliance of the license
|
|
||||||
about its violation(s) of the said license.
|
|
||||||
|
|
||||||
THE LICENSED WORK IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
||||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
||||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN ANY WAY CONNECTION
|
|
||||||
WITH THE LICENSED WORK OR THE USE OR OTHER DEALINGS IN THE LICENSED WORK.
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ One-Click to get well-designed cross-platform ChatGPT web UI.
|
||||||
[![MacOS][MacOS-image]][download-url]
|
[![MacOS][MacOS-image]][download-url]
|
||||||
[![Linux][Linux-image]][download-url]
|
[![Linux][Linux-image]][download-url]
|
||||||
|
|
||||||
[Web App](https://chatgpt.nextweb.fun/) / [Desktop App](https://github.com/Yidadaa/ChatGPT-Next-Web/releases) / [Issues](https://github.com/Yidadaa/ChatGPT-Next-Web/issues) / [Buy Me a Coffee](https://www.buymeacoffee.com/yidadaa)
|
[Web App](https://chatgpt.nextweb.fun/) / [Desktop App](https://github.com/Yidadaa/ChatGPT-Next-Web/releases) / [Issues](https://github.com/Yidadaa/ChatGPT-Next-Web/issues) / [Discord](https://discord.gg/YCkeafCafC) / [Buy Me a Coffee](https://www.buymeacoffee.com/yidadaa)
|
||||||
|
|
||||||
[网页版](https://chatgpt.nextweb.fun/) / [客户端](https://github.com/Yidadaa/ChatGPT-Next-Web/releases) / [反馈](https://github.com/Yidadaa/ChatGPT-Next-Web/issues) / [QQ 群](https://github.com/Yidadaa/ChatGPT-Next-Web/discussions/1724) / [打赏开发者](https://user-images.githubusercontent.com/16968934/227772541-5bcd52d8-61b7-488c-a203-0330d8006e2b.jpg)
|
[网页版](https://chatgpt.nextweb.fun/) / [客户端](https://github.com/Yidadaa/ChatGPT-Next-Web/releases) / [反馈](https://github.com/Yidadaa/ChatGPT-Next-Web/issues) / [QQ 群](https://github.com/Yidadaa/ChatGPT-Next-Web/discussions/1724) / [打赏开发者](https://user-images.githubusercontent.com/16968934/227772541-5bcd52d8-61b7-488c-a203-0330d8006e2b.jpg)
|
||||||
|
|
||||||
|
@ -306,4 +306,4 @@ If you want to add a new translation, read this [document](./docs/translation.md
|
||||||
|
|
||||||
## LICENSE
|
## LICENSE
|
||||||
|
|
||||||
[Anti 996 License](https://github.com/kattgu7/Anti-996-License/blob/master/LICENSE_CN_EN)
|
[MIT](https://opensource.org/license/mit/)
|
||||||
|
|
|
@ -181,6 +181,4 @@ bash <(curl -s https://raw.githubusercontent.com/Yidadaa/ChatGPT-Next-Web/main/s
|
||||||
|
|
||||||
## 开源协议
|
## 开源协议
|
||||||
|
|
||||||
> 反对 996,从我开始。
|
[MIT](https://opensource.org/license/mit/)
|
||||||
|
|
||||||
[Anti 996 License](https://github.com/kattgu7/Anti-996-License/blob/master/LICENSE_CN_EN)
|
|
||||||
|
|
14
README_ES.md
14
README_ES.md
|
@ -7,7 +7,7 @@ Implemente su aplicación web privada ChatGPT de forma gratuita con un solo clic
|
||||||
|
|
||||||
[Demo demo](https://chat-gpt-next-web.vercel.app/) / [Problemas de comentarios](https://github.com/Yidadaa/ChatGPT-Next-Web/issues) / [Únete a Discord](https://discord.gg/zrhvHCr79N) / [Grupo QQ](https://user-images.githubusercontent.com/16968934/228190818-7dd00845-e9b9-4363-97e5-44c507ac76da.jpeg) / [Desarrolladores de consejos](https://user-images.githubusercontent.com/16968934/227772541-5bcd52d8-61b7-488c-a203-0330d8006e2b.jpg) / [Donar](#捐赠-donate-usdt)
|
[Demo demo](https://chat-gpt-next-web.vercel.app/) / [Problemas de comentarios](https://github.com/Yidadaa/ChatGPT-Next-Web/issues) / [Únete a Discord](https://discord.gg/zrhvHCr79N) / [Grupo QQ](https://user-images.githubusercontent.com/16968934/228190818-7dd00845-e9b9-4363-97e5-44c507ac76da.jpeg) / [Desarrolladores de consejos](https://user-images.githubusercontent.com/16968934/227772541-5bcd52d8-61b7-488c-a203-0330d8006e2b.jpg) / [Donar](#捐赠-donate-usdt)
|
||||||
|
|
||||||
[](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FYidadaa%2FChatGPT-Next-Web\&env=OPENAI_API_KEY\&env=CODE\&project-name=chatgpt-next-web\&repository-name=ChatGPT-Next-Web)
|
[](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FYidadaa%2FChatGPT-Next-Web&env=OPENAI_API_KEY&env=CODE&project-name=chatgpt-next-web&repository-name=ChatGPT-Next-Web)
|
||||||
|
|
||||||
[](https://gitpod.io/#https://github.com/Yidadaa/ChatGPT-Next-Web)
|
[](https://gitpod.io/#https://github.com/Yidadaa/ChatGPT-Next-Web)
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ Implemente su aplicación web privada ChatGPT de forma gratuita con un solo clic
|
||||||
|
|
||||||
1. Prepara el tuyo [Clave API OpenAI](https://platform.openai.com/account/api-keys);
|
1. Prepara el tuyo [Clave API OpenAI](https://platform.openai.com/account/api-keys);
|
||||||
2. Haga clic en el botón de la derecha para iniciar la implementación:
|
2. Haga clic en el botón de la derecha para iniciar la implementación:
|
||||||
[](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FYidadaa%2FChatGPT-Next-Web\&env=OPENAI_API_KEY\&env=CODE\&project-name=chatgpt-next-web\&repository-name=ChatGPT-Next-Web), inicie sesión directamente con su cuenta de Github y recuerde completar la clave API y la suma en la página de variables de entorno[Contraseña de acceso a la página](#配置页面访问密码) CÓDIGO;
|
[](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FYidadaa%2FChatGPT-Next-Web&env=OPENAI_API_KEY&env=CODE&project-name=chatgpt-next-web&repository-name=ChatGPT-Next-Web), inicie sesión directamente con su cuenta de Github y recuerde completar la clave API y la suma en la página de variables de entorno[Contraseña de acceso a la página](#配置页面访问密码) CÓDIGO;
|
||||||
3. Una vez implementado, puede comenzar;
|
3. Una vez implementado, puede comenzar;
|
||||||
4. (Opcional)[Enlazar un nombre de dominio personalizado](https://vercel.com/docs/concepts/projects/domains/add-a-domain): El nombre de dominio DNS asignado por Vercel está contaminado en algunas regiones y puede conectarse directamente enlazando un nombre de dominio personalizado.
|
4. (Opcional)[Enlazar un nombre de dominio personalizado](https://vercel.com/docs/concepts/projects/domains/add-a-domain): El nombre de dominio DNS asignado por Vercel está contaminado en algunas regiones y puede conectarse directamente enlazando un nombre de dominio personalizado.
|
||||||
|
|
||||||
|
@ -28,9 +28,9 @@ Implemente su aplicación web privada ChatGPT de forma gratuita con un solo clic
|
||||||
Si sigue los pasos anteriores para implementar su proyecto con un solo clic, es posible que siempre diga "La actualización existe" porque Vercel creará un nuevo proyecto para usted de forma predeterminada en lugar de bifurcar el proyecto, lo que evitará que la actualización se detecte correctamente.
|
Si sigue los pasos anteriores para implementar su proyecto con un solo clic, es posible que siempre diga "La actualización existe" porque Vercel creará un nuevo proyecto para usted de forma predeterminada en lugar de bifurcar el proyecto, lo que evitará que la actualización se detecte correctamente.
|
||||||
Le recomendamos que siga estos pasos para volver a implementar:
|
Le recomendamos que siga estos pasos para volver a implementar:
|
||||||
|
|
||||||
* Eliminar el repositorio original;
|
- Eliminar el repositorio original;
|
||||||
* Utilice el botón de bifurcación en la esquina superior derecha de la página para bifurcar este proyecto;
|
- Utilice el botón de bifurcación en la esquina superior derecha de la página para bifurcar este proyecto;
|
||||||
* En Vercel, vuelva a seleccionar e implementar,[Echa un vistazo al tutorial detallado](./docs/vercel-cn.md#如何新建项目)。
|
- En Vercel, vuelva a seleccionar e implementar,[Echa un vistazo al tutorial detallado](./docs/vercel-cn.md#如何新建项目)。
|
||||||
|
|
||||||
### Activar actualizaciones automáticas
|
### Activar actualizaciones automáticas
|
||||||
|
|
||||||
|
@ -170,6 +170,4 @@ bash <(curl -s https://raw.githubusercontent.com/Yidadaa/ChatGPT-Next-Web/main/s
|
||||||
|
|
||||||
## Licencia de código abierto
|
## Licencia de código abierto
|
||||||
|
|
||||||
> Contra 996, empezando por mí.
|
[MIT](https://opensource.org/license/mit/)
|
||||||
|
|
||||||
[Licencia Anti 996](https://github.com/kattgu7/Anti-996-License/blob/master/LICENSE_CN_EN)
|
|
||||||
|
|
|
@ -2,8 +2,8 @@ import { NextRequest, NextResponse } from "next/server";
|
||||||
|
|
||||||
export const OPENAI_URL = "api.openai.com";
|
export const OPENAI_URL = "api.openai.com";
|
||||||
const DEFAULT_PROTOCOL = "https";
|
const DEFAULT_PROTOCOL = "https";
|
||||||
const PROTOCOL = process.env.PROTOCOL ?? DEFAULT_PROTOCOL;
|
const PROTOCOL = process.env.PROTOCOL || DEFAULT_PROTOCOL;
|
||||||
const BASE_URL = process.env.BASE_URL ?? OPENAI_URL;
|
const BASE_URL = process.env.BASE_URL || OPENAI_URL;
|
||||||
const DISABLE_GPT4 = !!process.env.DISABLE_GPT4;
|
const DISABLE_GPT4 = !!process.env.DISABLE_GPT4;
|
||||||
|
|
||||||
export async function requestOpenai(req: NextRequest) {
|
export async function requestOpenai(req: NextRequest) {
|
||||||
|
@ -35,12 +35,12 @@ export async function requestOpenai(req: NextRequest) {
|
||||||
const fetchOptions: RequestInit = {
|
const fetchOptions: RequestInit = {
|
||||||
headers: {
|
headers: {
|
||||||
"Content-Type": "application/json",
|
"Content-Type": "application/json",
|
||||||
|
"Cache-Control": "no-store",
|
||||||
Authorization: authValue,
|
Authorization: authValue,
|
||||||
...(process.env.OPENAI_ORG_ID && {
|
...(process.env.OPENAI_ORG_ID && {
|
||||||
"OpenAI-Organization": process.env.OPENAI_ORG_ID,
|
"OpenAI-Organization": process.env.OPENAI_ORG_ID,
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
cache: "no-store",
|
|
||||||
method: req.method,
|
method: req.method,
|
||||||
body: req.body,
|
body: req.body,
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
|
|
|
@ -99,7 +99,7 @@ export class ClientApi {
|
||||||
// 敬告二开开发者们,为了开源大模型的发展,请不要修改上述消息,此消息用于后续数据清洗使用
|
// 敬告二开开发者们,为了开源大模型的发展,请不要修改上述消息,此消息用于后续数据清洗使用
|
||||||
// Please do not modify this message
|
// Please do not modify this message
|
||||||
|
|
||||||
console.log("[Share]", msgs);
|
console.log("[Share]", messages, msgs);
|
||||||
const clientConfig = getClientConfig();
|
const clientConfig = getClientConfig();
|
||||||
const proxyUrl = "/sharegpt";
|
const proxyUrl = "/sharegpt";
|
||||||
const rawUrl = "https://sharegpt.com/api/conversations";
|
const rawUrl = "https://sharegpt.com/api/conversations";
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import {
|
import {
|
||||||
DEFAULT_API_HOST,
|
DEFAULT_API_HOST,
|
||||||
|
DEFAULT_MODELS,
|
||||||
OpenaiPath,
|
OpenaiPath,
|
||||||
REQUEST_TIMEOUT_MS,
|
REQUEST_TIMEOUT_MS,
|
||||||
} from "@/app/constant";
|
} from "@/app/constant";
|
||||||
|
@ -23,6 +24,8 @@ export interface OpenAIListModelResponse {
|
||||||
}
|
}
|
||||||
|
|
||||||
export class ChatGPTApi implements LLMApi {
|
export class ChatGPTApi implements LLMApi {
|
||||||
|
private disableListModels = true;
|
||||||
|
|
||||||
path(path: string): string {
|
path(path: string): string {
|
||||||
let openaiUrl = useAccessStore.getState().openaiUrl;
|
let openaiUrl = useAccessStore.getState().openaiUrl;
|
||||||
if (openaiUrl.length === 0) {
|
if (openaiUrl.length === 0) {
|
||||||
|
@ -246,6 +249,10 @@ export class ChatGPTApi implements LLMApi {
|
||||||
}
|
}
|
||||||
|
|
||||||
async models(): Promise<LLMModel[]> {
|
async models(): Promise<LLMModel[]> {
|
||||||
|
if (this.disableListModels) {
|
||||||
|
return DEFAULT_MODELS.slice();
|
||||||
|
}
|
||||||
|
|
||||||
const res = await fetch(this.path(OpenaiPath.ListModelPath), {
|
const res = await fetch(this.path(OpenaiPath.ListModelPath), {
|
||||||
method: "GET",
|
method: "GET",
|
||||||
headers: {
|
headers: {
|
||||||
|
|
|
@ -7,6 +7,8 @@ interface Commands {
|
||||||
fill?: Command;
|
fill?: Command;
|
||||||
submit?: Command;
|
submit?: Command;
|
||||||
mask?: Command;
|
mask?: Command;
|
||||||
|
code?: Command;
|
||||||
|
settings?: Command;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function useCommand(commands: Commands = {}) {
|
export function useCommand(commands: Commands = {}) {
|
||||||
|
|
|
@ -95,11 +95,41 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.context-prompt {
|
.context-prompt {
|
||||||
|
.context-prompt-insert {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
padding: 4px;
|
||||||
|
opacity: 0.2;
|
||||||
|
transition: all ease 0.3s;
|
||||||
|
background-color: rgba(0, 0, 0, 0);
|
||||||
|
cursor: pointer;
|
||||||
|
border-radius: 4px;
|
||||||
|
margin-top: 4px;
|
||||||
|
margin-bottom: 4px;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
opacity: 1;
|
||||||
|
background-color: rgba(0, 0, 0, 0.05);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.context-prompt-row {
|
.context-prompt-row {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
margin-bottom: 10px;
|
|
||||||
|
&:hover {
|
||||||
|
.context-drag {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.context-drag {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
opacity: 0.5;
|
||||||
|
transition: all ease 0.3s;
|
||||||
|
}
|
||||||
|
|
||||||
.context-role {
|
.context-role {
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
|
|
|
@ -5,6 +5,7 @@ import React, {
|
||||||
useEffect,
|
useEffect,
|
||||||
useMemo,
|
useMemo,
|
||||||
useCallback,
|
useCallback,
|
||||||
|
Fragment,
|
||||||
} from "react";
|
} from "react";
|
||||||
|
|
||||||
import SendWhiteIcon from "../icons/send-white.svg";
|
import SendWhiteIcon from "../icons/send-white.svg";
|
||||||
|
@ -24,6 +25,8 @@ import SettingsIcon from "../icons/chat-settings.svg";
|
||||||
import DeleteIcon from "../icons/clear.svg";
|
import DeleteIcon from "../icons/clear.svg";
|
||||||
import PinIcon from "../icons/pin.svg";
|
import PinIcon from "../icons/pin.svg";
|
||||||
import EditIcon from "../icons/rename.svg";
|
import EditIcon from "../icons/rename.svg";
|
||||||
|
import ConfirmIcon from "../icons/confirm.svg";
|
||||||
|
import CancelIcon from "../icons/cancel.svg";
|
||||||
|
|
||||||
import LightIcon from "../icons/light.svg";
|
import LightIcon from "../icons/light.svg";
|
||||||
import DarkIcon from "../icons/dark.svg";
|
import DarkIcon from "../icons/dark.svg";
|
||||||
|
@ -62,6 +65,7 @@ import { IconButton } from "./button";
|
||||||
import styles from "./chat.module.scss";
|
import styles from "./chat.module.scss";
|
||||||
|
|
||||||
import {
|
import {
|
||||||
|
List,
|
||||||
ListItem,
|
ListItem,
|
||||||
Modal,
|
Modal,
|
||||||
Selector,
|
Selector,
|
||||||
|
@ -72,7 +76,7 @@ import {
|
||||||
import { useLocation, useNavigate } from "react-router-dom";
|
import { useLocation, useNavigate } from "react-router-dom";
|
||||||
import { LAST_INPUT_KEY, Path, REQUEST_TIMEOUT_MS } from "../constant";
|
import { LAST_INPUT_KEY, Path, REQUEST_TIMEOUT_MS } from "../constant";
|
||||||
import { Avatar } from "./emoji";
|
import { Avatar } from "./emoji";
|
||||||
import { MaskAvatar, MaskConfig } from "./mask";
|
import { ContextPrompts, MaskAvatar, MaskConfig } from "./mask";
|
||||||
import { useMaskStore } from "../store/mask";
|
import { useMaskStore } from "../store/mask";
|
||||||
import { ChatCommandPrefix, useChatCommand, useCommand } from "../command";
|
import { ChatCommandPrefix, useChatCommand, useCommand } from "../command";
|
||||||
import { prettyObject } from "../utils/format";
|
import { prettyObject } from "../utils/format";
|
||||||
|
@ -519,6 +523,68 @@ export function ChatActions(props: {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function EditMessageModal(props: { onClose: () => void }) {
|
||||||
|
const chatStore = useChatStore();
|
||||||
|
const session = chatStore.currentSession();
|
||||||
|
const [messages, setMessages] = useState(session.messages.slice());
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="modal-mask">
|
||||||
|
<Modal
|
||||||
|
title={Locale.UI.Edit}
|
||||||
|
onClose={props.onClose}
|
||||||
|
actions={[
|
||||||
|
<IconButton
|
||||||
|
text={Locale.UI.Cancel}
|
||||||
|
icon={<CancelIcon />}
|
||||||
|
key="cancel"
|
||||||
|
onClick={() => {
|
||||||
|
props.onClose();
|
||||||
|
}}
|
||||||
|
/>,
|
||||||
|
<IconButton
|
||||||
|
type="primary"
|
||||||
|
text={Locale.UI.Confirm}
|
||||||
|
icon={<ConfirmIcon />}
|
||||||
|
key="ok"
|
||||||
|
onClick={() => {
|
||||||
|
chatStore.updateCurrentSession(
|
||||||
|
(session) => (session.messages = messages),
|
||||||
|
);
|
||||||
|
props.onClose();
|
||||||
|
}}
|
||||||
|
/>,
|
||||||
|
]}
|
||||||
|
>
|
||||||
|
<List>
|
||||||
|
<ListItem
|
||||||
|
title={Locale.Chat.EditMessage.Topic.Title}
|
||||||
|
subTitle={Locale.Chat.EditMessage.Topic.SubTitle}
|
||||||
|
>
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
value={session.topic}
|
||||||
|
onInput={(e) =>
|
||||||
|
chatStore.updateCurrentSession(
|
||||||
|
(session) => (session.topic = e.currentTarget.value),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
></input>
|
||||||
|
</ListItem>
|
||||||
|
</List>
|
||||||
|
<ContextPrompts
|
||||||
|
context={messages}
|
||||||
|
updateContext={(updater) => {
|
||||||
|
const newMessages = messages.slice();
|
||||||
|
updater(newMessages);
|
||||||
|
setMessages(newMessages);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</Modal>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
export function Chat() {
|
export function Chat() {
|
||||||
type RenderMessage = ChatMessage & { preview?: boolean };
|
type RenderMessage = ChatMessage & { preview?: boolean };
|
||||||
|
|
||||||
|
@ -709,22 +775,6 @@ export function Chat() {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const findLastUserIndex = (messageId: string) => {
|
|
||||||
// find last user input message and resend
|
|
||||||
let lastUserMessageIndex: number | null = null;
|
|
||||||
for (let i = 0; i < session.messages.length; i += 1) {
|
|
||||||
const message = session.messages[i];
|
|
||||||
if (message.role === "user") {
|
|
||||||
lastUserMessageIndex = i;
|
|
||||||
}
|
|
||||||
if (message.id === messageId) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return lastUserMessageIndex;
|
|
||||||
};
|
|
||||||
|
|
||||||
const deleteMessage = (msgId?: string) => {
|
const deleteMessage = (msgId?: string) => {
|
||||||
chatStore.updateCurrentSession(
|
chatStore.updateCurrentSession(
|
||||||
(session) =>
|
(session) =>
|
||||||
|
@ -737,17 +787,56 @@ export function Chat() {
|
||||||
};
|
};
|
||||||
|
|
||||||
const onResend = (message: ChatMessage) => {
|
const onResend = (message: ChatMessage) => {
|
||||||
let content = message.content;
|
// when it is resending a message
|
||||||
|
// 1. for a user's message, find the next bot response
|
||||||
|
// 2. for a bot's message, find the last user's input
|
||||||
|
// 3. delete original user input and bot's message
|
||||||
|
// 4. resend the user's input
|
||||||
|
|
||||||
if (message.role === "assistant" && message.id) {
|
const resendingIndex = session.messages.findIndex(
|
||||||
const userIndex = findLastUserIndex(message.id);
|
(m) => m.id === message.id,
|
||||||
if (userIndex) {
|
);
|
||||||
content = session.messages.at(userIndex)?.content ?? content;
|
|
||||||
|
if (resendingIndex <= 0 || resendingIndex >= session.messages.length) {
|
||||||
|
console.error("[Chat] failed to find resending message", message);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let userMessage: ChatMessage | undefined;
|
||||||
|
let botMessage: ChatMessage | undefined;
|
||||||
|
|
||||||
|
if (message.role === "assistant") {
|
||||||
|
// if it is resending a bot's message, find the user input for it
|
||||||
|
botMessage = message;
|
||||||
|
for (let i = resendingIndex; i >= 0; i -= 1) {
|
||||||
|
if (session.messages[i].role === "user") {
|
||||||
|
userMessage = session.messages[i];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (message.role === "user") {
|
||||||
|
// if it is resending a user's input, find the bot's response
|
||||||
|
userMessage = message;
|
||||||
|
for (let i = resendingIndex; i < session.messages.length; i += 1) {
|
||||||
|
if (session.messages[i].role === "assistant") {
|
||||||
|
botMessage = session.messages[i];
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (userMessage === undefined) {
|
||||||
|
console.error("[Chat] failed to resend", message);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// delete the original messages
|
||||||
|
deleteMessage(userMessage.id);
|
||||||
|
deleteMessage(botMessage?.id);
|
||||||
|
|
||||||
|
// resend the message
|
||||||
setIsLoading(true);
|
setIsLoading(true);
|
||||||
chatStore.onUserInput(content).then(() => setIsLoading(false));
|
chatStore.onUserInput(userMessage.content).then(() => setIsLoading(false));
|
||||||
inputRef.current?.focus();
|
inputRef.current?.focus();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -819,16 +908,6 @@ export function Chat() {
|
||||||
|
|
||||||
const [showPromptModal, setShowPromptModal] = useState(false);
|
const [showPromptModal, setShowPromptModal] = useState(false);
|
||||||
|
|
||||||
const renameSession = () => {
|
|
||||||
showPrompt(Locale.Chat.Rename, session.topic).then((newTopic) => {
|
|
||||||
if (newTopic && newTopic !== session.topic) {
|
|
||||||
chatStore.updateCurrentSession(
|
|
||||||
(session) => (session.topic = newTopic!),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
const clientConfig = useMemo(() => getClientConfig(), []);
|
const clientConfig = useMemo(() => getClientConfig(), []);
|
||||||
|
|
||||||
const location = useLocation();
|
const location = useLocation();
|
||||||
|
@ -842,8 +921,46 @@ export function Chat() {
|
||||||
submit: (text) => {
|
submit: (text) => {
|
||||||
doSubmit(text);
|
doSubmit(text);
|
||||||
},
|
},
|
||||||
|
code: (text) => {
|
||||||
|
console.log("[Command] got code from url: ", text);
|
||||||
|
showConfirm(Locale.URLCommand.Code + `code = ${text}`).then((res) => {
|
||||||
|
if (res) {
|
||||||
|
accessStore.updateCode(text);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
settings: (text) => {
|
||||||
|
try {
|
||||||
|
const payload = JSON.parse(text) as {
|
||||||
|
key?: string;
|
||||||
|
url?: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
console.log("[Command] got settings from url: ", payload);
|
||||||
|
|
||||||
|
if (payload.key || payload.url) {
|
||||||
|
showConfirm(
|
||||||
|
Locale.URLCommand.Settings +
|
||||||
|
`\n${JSON.stringify(payload, null, 4)}`,
|
||||||
|
).then((res) => {
|
||||||
|
if (!res) return;
|
||||||
|
if (payload.key) {
|
||||||
|
accessStore.updateToken(payload.key);
|
||||||
|
}
|
||||||
|
if (payload.url) {
|
||||||
|
accessStore.updateOpenAiUrl(payload.url);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
console.error("[Command] failed to get settings from url: ", text);
|
||||||
|
}
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// edit / insert message modal
|
||||||
|
const [isEditingMessage, setIsEditingMessage] = useState(false);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={styles.chat} key={session.id}>
|
<div className={styles.chat} key={session.id}>
|
||||||
<div className="window-header" data-tauri-drag-region>
|
<div className="window-header" data-tauri-drag-region>
|
||||||
|
@ -863,7 +980,7 @@ export function Chat() {
|
||||||
<div className={`window-header-title ${styles["chat-body-title"]}`}>
|
<div className={`window-header-title ${styles["chat-body-title"]}`}>
|
||||||
<div
|
<div
|
||||||
className={`window-header-main-title ${styles["chat-body-main-title"]}`}
|
className={`window-header-main-title ${styles["chat-body-main-title"]}`}
|
||||||
onClickCapture={renameSession}
|
onClickCapture={() => setIsEditingMessage(true)}
|
||||||
>
|
>
|
||||||
{!session.topic ? DEFAULT_TOPIC : session.topic}
|
{!session.topic ? DEFAULT_TOPIC : session.topic}
|
||||||
</div>
|
</div>
|
||||||
|
@ -877,7 +994,7 @@ export function Chat() {
|
||||||
<IconButton
|
<IconButton
|
||||||
icon={<RenameIcon />}
|
icon={<RenameIcon />}
|
||||||
bordered
|
bordered
|
||||||
onClick={renameSession}
|
onClick={() => setIsEditingMessage(true)}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
@ -936,9 +1053,8 @@ export function Chat() {
|
||||||
const shouldShowClearContextDivider = i === clearContextIndex - 1;
|
const shouldShowClearContextDivider = i === clearContextIndex - 1;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<Fragment key={i}>
|
||||||
<div
|
<div
|
||||||
key={i}
|
|
||||||
className={
|
className={
|
||||||
isUser ? styles["chat-message-user"] : styles["chat-message"]
|
isUser ? styles["chat-message-user"] : styles["chat-message"]
|
||||||
}
|
}
|
||||||
|
@ -1043,7 +1159,7 @@ export function Chat() {
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{shouldShowClearContextDivider && <ClearContextDivider />}
|
{shouldShowClearContextDivider && <ClearContextDivider />}
|
||||||
</>
|
</Fragment>
|
||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
</div>
|
</div>
|
||||||
|
@ -1096,6 +1212,14 @@ export function Chat() {
|
||||||
{showExport && (
|
{showExport && (
|
||||||
<ExportMessageModal onClose={() => setShowExport(false)} />
|
<ExportMessageModal onClose={() => setShowExport(false)} />
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
{isEditingMessage && (
|
||||||
|
<EditMessageModal
|
||||||
|
onClose={() => {
|
||||||
|
setIsEditingMessage(false);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@ import {
|
||||||
Modal,
|
Modal,
|
||||||
Select,
|
Select,
|
||||||
showImageModal,
|
showImageModal,
|
||||||
|
showModal,
|
||||||
showToast,
|
showToast,
|
||||||
} from "./ui-lib";
|
} from "./ui-lib";
|
||||||
import { IconButton } from "./button";
|
import { IconButton } from "./button";
|
||||||
|
@ -244,11 +245,11 @@ export function RenderExport(props: {
|
||||||
}
|
}
|
||||||
|
|
||||||
const renderMsgs = messages.map((v, i) => {
|
const renderMsgs = messages.map((v, i) => {
|
||||||
const [_, role] = v.id.split(":");
|
const [role, _] = v.id.split(":");
|
||||||
return {
|
return {
|
||||||
id: i.toString(),
|
id: i.toString(),
|
||||||
role: role as any,
|
role: role as any,
|
||||||
content: v.innerHTML,
|
content: role === "user" ? v.textContent ?? "" : v.innerHTML,
|
||||||
date: "",
|
date: "",
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
@ -287,7 +288,30 @@ export function PreviewActions(props: {
|
||||||
.share(msgs)
|
.share(msgs)
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
if (!res) return;
|
if (!res) return;
|
||||||
copyToClipboard(res);
|
showModal({
|
||||||
|
title: Locale.Export.Share,
|
||||||
|
children: [
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
value={res}
|
||||||
|
key="input"
|
||||||
|
style={{
|
||||||
|
width: "100%",
|
||||||
|
maxWidth: "unset",
|
||||||
|
}}
|
||||||
|
readOnly
|
||||||
|
onClick={(e) => e.currentTarget.select()}
|
||||||
|
></input>,
|
||||||
|
],
|
||||||
|
actions: [
|
||||||
|
<IconButton
|
||||||
|
icon={<CopyIcon />}
|
||||||
|
text={Locale.Chat.Actions.Copy}
|
||||||
|
key="copy"
|
||||||
|
onClick={() => copyToClipboard(res)}
|
||||||
|
/>,
|
||||||
|
],
|
||||||
|
});
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
window.open(res, "_blank");
|
window.open(res, "_blank");
|
||||||
}, 800);
|
}, 800);
|
||||||
|
|
|
@ -61,24 +61,36 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&:hover,
|
||||||
|
&:active {
|
||||||
|
.sidebar-drag {
|
||||||
|
background-color: rgba($color: #000000, $alpha: 0.01);
|
||||||
|
|
||||||
|
svg {
|
||||||
|
opacity: 0.2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.sidebar-drag {
|
.sidebar-drag {
|
||||||
$width: 10px;
|
$width: 14px;
|
||||||
|
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
right: 0;
|
right: 0;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
width: $width;
|
width: $width;
|
||||||
background-color: var(--black);
|
background-color: rgba($color: #000000, $alpha: 0);
|
||||||
cursor: ew-resize;
|
cursor: ew-resize;
|
||||||
opacity: 0;
|
|
||||||
transition: all ease 0.3s;
|
transition: all ease 0.3s;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
&:hover,
|
svg {
|
||||||
&:active {
|
opacity: 0;
|
||||||
opacity: 0.2;
|
margin-left: -2px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,7 @@ import { useAppConfig } from "../store/config";
|
||||||
import { AuthPage } from "./auth";
|
import { AuthPage } from "./auth";
|
||||||
import { getClientConfig } from "../config/client";
|
import { getClientConfig } from "../config/client";
|
||||||
import { api } from "../client/api";
|
import { api } from "../client/api";
|
||||||
|
import { useAccessStore } from "../store";
|
||||||
|
|
||||||
export function Loading(props: { noLogo?: boolean }) {
|
export function Loading(props: { noLogo?: boolean }) {
|
||||||
return (
|
return (
|
||||||
|
@ -171,6 +172,7 @@ export function Home() {
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
console.log("[Config] got config from build time", getClientConfig());
|
console.log("[Config] got config from build time", getClientConfig());
|
||||||
|
useAccessStore.getState().fetch();
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
if (!useHasHydrated()) {
|
if (!useHasHydrated()) {
|
||||||
|
|
|
@ -11,6 +11,7 @@ import CloseIcon from "../icons/close.svg";
|
||||||
import DeleteIcon from "../icons/delete.svg";
|
import DeleteIcon from "../icons/delete.svg";
|
||||||
import EyeIcon from "../icons/eye.svg";
|
import EyeIcon from "../icons/eye.svg";
|
||||||
import CopyIcon from "../icons/copy.svg";
|
import CopyIcon from "../icons/copy.svg";
|
||||||
|
import DragIcon from "../icons/drag.svg";
|
||||||
|
|
||||||
import { DEFAULT_MASK_AVATAR, Mask, useMaskStore } from "../store/mask";
|
import { DEFAULT_MASK_AVATAR, Mask, useMaskStore } from "../store/mask";
|
||||||
import {
|
import {
|
||||||
|
@ -42,6 +43,20 @@ import { ModelConfigList } from "./model-config";
|
||||||
import { FileName, Path } from "../constant";
|
import { FileName, Path } from "../constant";
|
||||||
import { BUILTIN_MASK_STORE } from "../masks";
|
import { BUILTIN_MASK_STORE } from "../masks";
|
||||||
import { nanoid } from "nanoid";
|
import { nanoid } from "nanoid";
|
||||||
|
import {
|
||||||
|
DragDropContext,
|
||||||
|
Droppable,
|
||||||
|
Draggable,
|
||||||
|
OnDragEndResponder,
|
||||||
|
} from "@hello-pangea/dnd";
|
||||||
|
|
||||||
|
// drag and drop helper function
|
||||||
|
function reorder<T>(list: T[], startIndex: number, endIndex: number): T[] {
|
||||||
|
const result = [...list];
|
||||||
|
const [removed] = result.splice(startIndex, 1);
|
||||||
|
result.splice(endIndex, 0, removed);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
export function MaskAvatar(props: { mask: Mask }) {
|
export function MaskAvatar(props: { mask: Mask }) {
|
||||||
return props.mask.avatar !== DEFAULT_MASK_AVATAR ? (
|
return props.mask.avatar !== DEFAULT_MASK_AVATAR ? (
|
||||||
|
@ -192,6 +207,7 @@ export function MaskConfig(props: {
|
||||||
}
|
}
|
||||||
|
|
||||||
function ContextPromptItem(props: {
|
function ContextPromptItem(props: {
|
||||||
|
index: number;
|
||||||
prompt: ChatMessage;
|
prompt: ChatMessage;
|
||||||
update: (prompt: ChatMessage) => void;
|
update: (prompt: ChatMessage) => void;
|
||||||
remove: () => void;
|
remove: () => void;
|
||||||
|
@ -201,22 +217,27 @@ function ContextPromptItem(props: {
|
||||||
return (
|
return (
|
||||||
<div className={chatStyle["context-prompt-row"]}>
|
<div className={chatStyle["context-prompt-row"]}>
|
||||||
{!focusingInput && (
|
{!focusingInput && (
|
||||||
<Select
|
<>
|
||||||
value={props.prompt.role}
|
<div className={chatStyle["context-drag"]}>
|
||||||
className={chatStyle["context-role"]}
|
<DragIcon />
|
||||||
onChange={(e) =>
|
</div>
|
||||||
props.update({
|
<Select
|
||||||
...props.prompt,
|
value={props.prompt.role}
|
||||||
role: e.target.value as any,
|
className={chatStyle["context-role"]}
|
||||||
})
|
onChange={(e) =>
|
||||||
}
|
props.update({
|
||||||
>
|
...props.prompt,
|
||||||
{ROLES.map((r) => (
|
role: e.target.value as any,
|
||||||
<option key={r} value={r}>
|
})
|
||||||
{r}
|
}
|
||||||
</option>
|
>
|
||||||
))}
|
{ROLES.map((r) => (
|
||||||
</Select>
|
<option key={r} value={r}>
|
||||||
|
{r}
|
||||||
|
</option>
|
||||||
|
))}
|
||||||
|
</Select>
|
||||||
|
</>
|
||||||
)}
|
)}
|
||||||
<Input
|
<Input
|
||||||
value={props.prompt.content}
|
value={props.prompt.content}
|
||||||
|
@ -255,8 +276,8 @@ export function ContextPrompts(props: {
|
||||||
}) {
|
}) {
|
||||||
const context = props.context;
|
const context = props.context;
|
||||||
|
|
||||||
const addContextPrompt = (prompt: ChatMessage) => {
|
const addContextPrompt = (prompt: ChatMessage, i: number) => {
|
||||||
props.updateContext((context) => context.push(prompt));
|
props.updateContext((context) => context.splice(i, 0, prompt));
|
||||||
};
|
};
|
||||||
|
|
||||||
const removeContextPrompt = (i: number) => {
|
const removeContextPrompt = (i: number) => {
|
||||||
|
@ -267,35 +288,90 @@ export function ContextPrompts(props: {
|
||||||
props.updateContext((context) => (context[i] = prompt));
|
props.updateContext((context) => (context[i] = prompt));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const onDragEnd: OnDragEndResponder = (result) => {
|
||||||
|
if (!result.destination) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const newContext = reorder(
|
||||||
|
context,
|
||||||
|
result.source.index,
|
||||||
|
result.destination.index,
|
||||||
|
);
|
||||||
|
props.updateContext((context) => {
|
||||||
|
context.splice(0, context.length, ...newContext);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<div className={chatStyle["context-prompt"]} style={{ marginBottom: 20 }}>
|
<div className={chatStyle["context-prompt"]} style={{ marginBottom: 20 }}>
|
||||||
{context.map((c, i) => (
|
<DragDropContext onDragEnd={onDragEnd}>
|
||||||
<ContextPromptItem
|
<Droppable droppableId="context-prompt-list">
|
||||||
key={i}
|
{(provided) => (
|
||||||
prompt={c}
|
<div ref={provided.innerRef} {...provided.droppableProps}>
|
||||||
update={(prompt) => updateContextPrompt(i, prompt)}
|
{context.map((c, i) => (
|
||||||
remove={() => removeContextPrompt(i)}
|
<Draggable
|
||||||
/>
|
draggableId={c.id || i.toString()}
|
||||||
))}
|
index={i}
|
||||||
|
key={c.id}
|
||||||
|
>
|
||||||
|
{(provided) => (
|
||||||
|
<div
|
||||||
|
ref={provided.innerRef}
|
||||||
|
{...provided.draggableProps}
|
||||||
|
{...provided.dragHandleProps}
|
||||||
|
>
|
||||||
|
<ContextPromptItem
|
||||||
|
index={i}
|
||||||
|
prompt={c}
|
||||||
|
update={(prompt) => updateContextPrompt(i, prompt)}
|
||||||
|
remove={() => removeContextPrompt(i)}
|
||||||
|
/>
|
||||||
|
<div
|
||||||
|
className={chatStyle["context-prompt-insert"]}
|
||||||
|
onClick={() => {
|
||||||
|
addContextPrompt(
|
||||||
|
createMessage({
|
||||||
|
role: "user",
|
||||||
|
content: "",
|
||||||
|
date: new Date().toLocaleString(),
|
||||||
|
}),
|
||||||
|
i + 1,
|
||||||
|
);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<AddIcon />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</Draggable>
|
||||||
|
))}
|
||||||
|
{provided.placeholder}
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</Droppable>
|
||||||
|
</DragDropContext>
|
||||||
|
|
||||||
<div className={chatStyle["context-prompt-row"]}>
|
{props.context.length === 0 && (
|
||||||
<IconButton
|
<div className={chatStyle["context-prompt-row"]}>
|
||||||
icon={<AddIcon />}
|
<IconButton
|
||||||
text={Locale.Context.Add}
|
icon={<AddIcon />}
|
||||||
bordered
|
text={Locale.Context.Add}
|
||||||
className={chatStyle["context-prompt-button"]}
|
bordered
|
||||||
onClick={() =>
|
className={chatStyle["context-prompt-button"]}
|
||||||
addContextPrompt(
|
onClick={() =>
|
||||||
createMessage({
|
addContextPrompt(
|
||||||
role: "user",
|
createMessage({
|
||||||
content: "",
|
role: "user",
|
||||||
date: "",
|
content: "",
|
||||||
}),
|
date: "",
|
||||||
)
|
}),
|
||||||
}
|
props.context.length,
|
||||||
/>
|
)
|
||||||
</div>
|
}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|
|
@ -130,6 +130,22 @@ export function ModelConfigList(props: {
|
||||||
></InputRange>
|
></InputRange>
|
||||||
</ListItem>
|
</ListItem>
|
||||||
|
|
||||||
|
<ListItem
|
||||||
|
title={Locale.Settings.InjectSystemPrompts.Title}
|
||||||
|
subTitle={Locale.Settings.InjectSystemPrompts.SubTitle}
|
||||||
|
>
|
||||||
|
<input
|
||||||
|
type="checkbox"
|
||||||
|
checked={props.modelConfig.enableInjectSystemPrompts}
|
||||||
|
onChange={(e) =>
|
||||||
|
props.updateConfig(
|
||||||
|
(config) =>
|
||||||
|
(config.enableInjectSystemPrompts = e.currentTarget.checked),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
></input>
|
||||||
|
</ListItem>
|
||||||
|
|
||||||
<ListItem
|
<ListItem
|
||||||
title={Locale.Settings.InputTemplate.Title}
|
title={Locale.Settings.InputTemplate.Title}
|
||||||
subTitle={Locale.Settings.InputTemplate.SubTitle}
|
subTitle={Locale.Settings.InputTemplate.SubTitle}
|
||||||
|
|
|
@ -10,6 +10,7 @@ import AddIcon from "../icons/add.svg";
|
||||||
import CloseIcon from "../icons/close.svg";
|
import CloseIcon from "../icons/close.svg";
|
||||||
import MaskIcon from "../icons/mask.svg";
|
import MaskIcon from "../icons/mask.svg";
|
||||||
import PluginIcon from "../icons/plugin.svg";
|
import PluginIcon from "../icons/plugin.svg";
|
||||||
|
import DragIcon from "../icons/drag.svg";
|
||||||
|
|
||||||
import Locale from "../locales";
|
import Locale from "../locales";
|
||||||
|
|
||||||
|
@ -198,7 +199,9 @@ export function SideBar(props: { className?: string }) {
|
||||||
<div
|
<div
|
||||||
className={styles["sidebar-drag"]}
|
className={styles["sidebar-drag"]}
|
||||||
onMouseDown={(e) => onDragMouseDown(e as any)}
|
onMouseDown={(e) => onDragMouseDown(e as any)}
|
||||||
></div>
|
>
|
||||||
|
<DragIcon />
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -108,24 +108,4 @@ export const DEFAULT_MODELS = [
|
||||||
name: "gpt-3.5-turbo-16k-0613",
|
name: "gpt-3.5-turbo-16k-0613",
|
||||||
available: true,
|
available: true,
|
||||||
},
|
},
|
||||||
{
|
|
||||||
name: "qwen-v1", // 通义千问
|
|
||||||
available: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "ernie", // 文心一言
|
|
||||||
available: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "spark", // 讯飞星火
|
|
||||||
available: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "llama", // llama
|
|
||||||
available: false,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "chatglm", // chatglm-6b
|
|
||||||
available: false,
|
|
||||||
},
|
|
||||||
] as const;
|
] as const;
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16" fill="none"><g opacity="1" transform="translate(0 0) rotate(0)"><mask id="bg-mask-0" fill="white"><use transform="translate(0 0) rotate(0)" xlink:href="#path_0"></use></mask><g mask="url(#bg-mask-0)" ><path id="路径 1" fill-rule="evenodd" style="fill:#333333" opacity="1" d="M6.33663,3.33c0,0.74 -0.6,1.34 -1.34,1.34c-0.73,0 -1.33,-0.6 -1.33,-1.34c0,-0.73 0.6,-1.33 1.33,-1.33c0.74,0 1.34,0.6 1.34,1.33zM4.99663,9.33c-0.73,0 -1.33,-0.59 -1.33,-1.33c0,-0.74 0.6,-1.33 1.33,-1.33c0.74,0 1.34,0.59 1.34,1.33c0,0.74 -0.6,1.33 -1.34,1.33zM4.99663,14c-0.73,0 -1.33,-0.6 -1.33,-1.33c0,-0.74 0.6,-1.34 1.33,-1.34c0.74,0 1.34,0.6 1.34,1.34c0,0.73 -0.6,1.33 -1.34,1.33z"></path><path id="路径 2" fill-rule="evenodd" style="fill:#333333" opacity="1" d="M12.3366,3.33c0,0.74 -0.6,1.34 -1.34,1.34c-0.73,0 -1.32997,-0.6 -1.32997,-1.34c0,-0.73 0.59997,-1.33 1.32997,-1.33c0.74,0 1.34,0.6 1.34,1.33zM10.9966,9.33c-0.73,0 -1.32997,-0.59 -1.32997,-1.33c0,-0.74 0.59997,-1.33 1.32997,-1.33c0.74,0 1.34,0.59 1.34,1.33c0,0.74 -0.6,1.33 -1.34,1.33zM10.9966,14c-0.73,0 -1.32997,-0.6 -1.32997,-1.33c0,-0.74 0.59997,-1.34 1.32997,-1.34c0.74,0 1.34,0.6 1.34,1.34c0,0.73 -0.6,1.33 -1.34,1.33z"></path></g></g><defs><rect id="path_0" x="0" y="0" width="16" height="16" /></defs></svg>
|
After Width: | Height: | Size: 1.4 KiB |
|
@ -3,8 +3,9 @@ import "./styles/globals.scss";
|
||||||
import "./styles/markdown.scss";
|
import "./styles/markdown.scss";
|
||||||
import "./styles/highlight.scss";
|
import "./styles/highlight.scss";
|
||||||
import { getClientConfig } from "./config/client";
|
import { getClientConfig } from "./config/client";
|
||||||
|
import { type Metadata } from 'next';
|
||||||
|
|
||||||
export const metadata = {
|
export const metadata: Metadata = {
|
||||||
title: "ChatGPT Next Web",
|
title: "ChatGPT Next Web",
|
||||||
description: "Your personal ChatGPT Chat Bot.",
|
description: "Your personal ChatGPT Chat Bot.",
|
||||||
viewport: {
|
viewport: {
|
||||||
|
|
|
@ -110,6 +110,11 @@ const ar: PartialLocaleType = {
|
||||||
Title: "حجم الخط",
|
Title: "حجم الخط",
|
||||||
SubTitle: "ضبط حجم الخط لمحتوى الدردشة",
|
SubTitle: "ضبط حجم الخط لمحتوى الدردشة",
|
||||||
},
|
},
|
||||||
|
InjectSystemPrompts: {
|
||||||
|
Title: "حقن تلميحات النظام",
|
||||||
|
SubTitle:
|
||||||
|
"قم بإضافة تلميحة نظام محاكاة ChatGPT إلى بداية قائمة الرسائل المُطلَبة في كل طلب",
|
||||||
|
},
|
||||||
InputTemplate: {
|
InputTemplate: {
|
||||||
Title: "نموذج الإدخال",
|
Title: "نموذج الإدخال",
|
||||||
SubTitle: "سيتم ملء أحدث رسالة في هذا النموذج",
|
SubTitle: "سيتم ملء أحدث رسالة في هذا النموذج",
|
||||||
|
|
|
@ -135,7 +135,11 @@ const bn: PartialLocaleType = {
|
||||||
Title: "ফন্ট সাইজ",
|
Title: "ফন্ট সাইজ",
|
||||||
SubTitle: "চ্যাট সামগ্রীর ফন্ট সাইজ সংশোধন করুন",
|
SubTitle: "চ্যাট সামগ্রীর ফন্ট সাইজ সংশোধন করুন",
|
||||||
},
|
},
|
||||||
|
InjectSystemPrompts: {
|
||||||
|
Title: "حقن تلميحات النظام",
|
||||||
|
SubTitle:
|
||||||
|
"قم بإضافة تلميحة نظام محاكاة ChatGPT إلى بداية قائمة الرسائل المُطلَبة في كل طلب",
|
||||||
|
},
|
||||||
InputTemplate: {
|
InputTemplate: {
|
||||||
Title: "ইনপুট টেমপ্লেট",
|
Title: "ইনপুট টেমপ্লেট",
|
||||||
SubTitle: "নতুনতম বার্তা এই টেমপ্লেটে পূরণ হবে",
|
SubTitle: "নতুনতম বার্তা এই টেমপ্লেটে পূরণ হবে",
|
||||||
|
|
|
@ -18,6 +18,12 @@ const cn = {
|
||||||
},
|
},
|
||||||
Chat: {
|
Chat: {
|
||||||
SubTitle: (count: number) => `共 ${count} 条对话`,
|
SubTitle: (count: number) => `共 ${count} 条对话`,
|
||||||
|
EditMessage: {
|
||||||
|
Topic: {
|
||||||
|
Title: "聊天主题",
|
||||||
|
SubTitle: "更改当前聊天主题",
|
||||||
|
},
|
||||||
|
},
|
||||||
Actions: {
|
Actions: {
|
||||||
ChatList: "查看消息列表",
|
ChatList: "查看消息列表",
|
||||||
CompressedHistory: "查看压缩后的历史 Prompt",
|
CompressedHistory: "查看压缩后的历史 Prompt",
|
||||||
|
@ -139,7 +145,10 @@ const cn = {
|
||||||
Title: "字体大小",
|
Title: "字体大小",
|
||||||
SubTitle: "聊天内容的字体大小",
|
SubTitle: "聊天内容的字体大小",
|
||||||
},
|
},
|
||||||
|
InjectSystemPrompts: {
|
||||||
|
Title: "注入系统级提示信息",
|
||||||
|
SubTitle: "强制给每次请求的消息列表开头添加一个模拟 ChatGPT 的系统提示",
|
||||||
|
},
|
||||||
InputTemplate: {
|
InputTemplate: {
|
||||||
Title: "用户输入预处理",
|
Title: "用户输入预处理",
|
||||||
SubTitle: "用户最新的一条消息会填充到此模板",
|
SubTitle: "用户最新的一条消息会填充到此模板",
|
||||||
|
@ -323,6 +332,11 @@ const cn = {
|
||||||
More: "查看全部",
|
More: "查看全部",
|
||||||
},
|
},
|
||||||
|
|
||||||
|
URLCommand: {
|
||||||
|
Code: "检测到链接中已经包含访问码,是否自动填入?",
|
||||||
|
Settings: "检测到链接中包含了预制设置,是否自动填入?",
|
||||||
|
},
|
||||||
|
|
||||||
UI: {
|
UI: {
|
||||||
Confirm: "确认",
|
Confirm: "确认",
|
||||||
Cancel: "取消",
|
Cancel: "取消",
|
||||||
|
|
|
@ -71,6 +71,11 @@ const cs: PartialLocaleType = {
|
||||||
Title: "Velikost písma",
|
Title: "Velikost písma",
|
||||||
SubTitle: "Nastavení velikosti písma obsahu chatu",
|
SubTitle: "Nastavení velikosti písma obsahu chatu",
|
||||||
},
|
},
|
||||||
|
InjectSystemPrompts: {
|
||||||
|
Title: "Vložit systémové prompty",
|
||||||
|
SubTitle:
|
||||||
|
"Vynutit přidání simulovaného systémového promptu ChatGPT na začátek seznamu zpráv každého požadavku",
|
||||||
|
},
|
||||||
Update: {
|
Update: {
|
||||||
Version: (x: string) => `Verze: ${x}`,
|
Version: (x: string) => `Verze: ${x}`,
|
||||||
IsLatest: "Aktuální verze",
|
IsLatest: "Aktuální verze",
|
||||||
|
|
|
@ -71,6 +71,11 @@ const de: PartialLocaleType = {
|
||||||
Title: "Schriftgröße",
|
Title: "Schriftgröße",
|
||||||
SubTitle: "Schriftgröße des Chat-Inhalts anpassen",
|
SubTitle: "Schriftgröße des Chat-Inhalts anpassen",
|
||||||
},
|
},
|
||||||
|
InjectSystemPrompts: {
|
||||||
|
Title: "System-Prompts einfügen",
|
||||||
|
SubTitle:
|
||||||
|
"Erzwingt das Hinzufügen eines simulierten systemweiten Prompts von ChatGPT am Anfang der Nachrichtenliste bei jeder Anfrage",
|
||||||
|
},
|
||||||
Update: {
|
Update: {
|
||||||
Version: (x: string) => `Version: ${x}`,
|
Version: (x: string) => `Version: ${x}`,
|
||||||
IsLatest: "Neueste Version",
|
IsLatest: "Neueste Version",
|
||||||
|
|
|
@ -20,6 +20,12 @@ const en: LocaleType = {
|
||||||
},
|
},
|
||||||
Chat: {
|
Chat: {
|
||||||
SubTitle: (count: number) => `${count} messages`,
|
SubTitle: (count: number) => `${count} messages`,
|
||||||
|
EditMessage: {
|
||||||
|
Topic: {
|
||||||
|
Title: "Topic",
|
||||||
|
SubTitle: "Change the current topic",
|
||||||
|
},
|
||||||
|
},
|
||||||
Actions: {
|
Actions: {
|
||||||
ChatList: "Go To Chat List",
|
ChatList: "Go To Chat List",
|
||||||
CompressedHistory: "Compressed History Memory Prompt",
|
CompressedHistory: "Compressed History Memory Prompt",
|
||||||
|
@ -141,7 +147,10 @@ const en: LocaleType = {
|
||||||
Title: "Font Size",
|
Title: "Font Size",
|
||||||
SubTitle: "Adjust font size of chat content",
|
SubTitle: "Adjust font size of chat content",
|
||||||
},
|
},
|
||||||
|
InjectSystemPrompts: {
|
||||||
|
Title: "Inject System Prompts",
|
||||||
|
SubTitle: "Inject a global system prompt for every request",
|
||||||
|
},
|
||||||
InputTemplate: {
|
InputTemplate: {
|
||||||
Title: "Input Template",
|
Title: "Input Template",
|
||||||
SubTitle: "Newest message will be filled to this template",
|
SubTitle: "Newest message will be filled to this template",
|
||||||
|
@ -341,6 +350,11 @@ const en: LocaleType = {
|
||||||
Topic: "Topic",
|
Topic: "Topic",
|
||||||
Time: "Time",
|
Time: "Time",
|
||||||
},
|
},
|
||||||
|
|
||||||
|
URLCommand: {
|
||||||
|
Code: "Detected access code from url, confirm to apply? ",
|
||||||
|
Settings: "Detected settings from url, confirm to apply?",
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export default en;
|
export default en;
|
||||||
|
|
|
@ -71,6 +71,11 @@ const es: PartialLocaleType = {
|
||||||
Title: "Tamaño de fuente",
|
Title: "Tamaño de fuente",
|
||||||
SubTitle: "Ajustar el tamaño de fuente del contenido del chat",
|
SubTitle: "Ajustar el tamaño de fuente del contenido del chat",
|
||||||
},
|
},
|
||||||
|
InjectSystemPrompts: {
|
||||||
|
Title: "Inyectar Prompts del Sistema",
|
||||||
|
SubTitle:
|
||||||
|
"Agregar forzosamente un prompt de sistema simulado de ChatGPT al comienzo de la lista de mensajes en cada solicitud",
|
||||||
|
},
|
||||||
Update: {
|
Update: {
|
||||||
Version: (x: string) => `Versión: ${x}`,
|
Version: (x: string) => `Versión: ${x}`,
|
||||||
IsLatest: "Última versión",
|
IsLatest: "Última versión",
|
||||||
|
|
|
@ -111,6 +111,11 @@ const fr: PartialLocaleType = {
|
||||||
Title: "Taille des polices",
|
Title: "Taille des polices",
|
||||||
SubTitle: "Ajuste la taille de police du contenu de la conversation",
|
SubTitle: "Ajuste la taille de police du contenu de la conversation",
|
||||||
},
|
},
|
||||||
|
InjectSystemPrompts: {
|
||||||
|
Title: "Injecter des invites système",
|
||||||
|
SubTitle:
|
||||||
|
"Ajoute de force une invite système simulée de ChatGPT au début de la liste des messages pour chaque demande",
|
||||||
|
},
|
||||||
InputTemplate: {
|
InputTemplate: {
|
||||||
Title: "Template",
|
Title: "Template",
|
||||||
SubTitle: "Le message le plus récent sera ajouté à ce template.",
|
SubTitle: "Le message le plus récent sera ajouté à ce template.",
|
||||||
|
|
|
@ -71,6 +71,11 @@ const it: PartialLocaleType = {
|
||||||
Title: "Dimensione carattere",
|
Title: "Dimensione carattere",
|
||||||
SubTitle: "Regolare la dimensione dei caratteri del contenuto della chat",
|
SubTitle: "Regolare la dimensione dei caratteri del contenuto della chat",
|
||||||
},
|
},
|
||||||
|
InjectSystemPrompts: {
|
||||||
|
Title: "Inserisci Prompts di Sistema",
|
||||||
|
SubTitle:
|
||||||
|
"Aggiungi forzatamente un prompt di sistema simulato di ChatGPT all'inizio della lista dei messaggi per ogni richiesta",
|
||||||
|
},
|
||||||
Update: {
|
Update: {
|
||||||
Version: (x: string) => `Versione: ${x}`,
|
Version: (x: string) => `Versione: ${x}`,
|
||||||
IsLatest: "Ultima versione",
|
IsLatest: "Ultima versione",
|
||||||
|
|
|
@ -84,6 +84,11 @@ const jp: PartialLocaleType = {
|
||||||
Title: "フォントサイズ",
|
Title: "フォントサイズ",
|
||||||
SubTitle: "チャット内容のフォントサイズ",
|
SubTitle: "チャット内容のフォントサイズ",
|
||||||
},
|
},
|
||||||
|
InjectSystemPrompts: {
|
||||||
|
Title: "システムプロンプトの挿入",
|
||||||
|
SubTitle:
|
||||||
|
"各リクエストのメッセージリストの先頭に、ChatGPTのシステムプロンプトを強制的に追加します",
|
||||||
|
},
|
||||||
InputTemplate: {
|
InputTemplate: {
|
||||||
Title: "入力の前処理",
|
Title: "入力の前処理",
|
||||||
SubTitle: "新規入力がこのテンプレートに埋め込まれます",
|
SubTitle: "新規入力がこのテンプレートに埋め込まれます",
|
||||||
|
|
|
@ -71,6 +71,11 @@ const ko: PartialLocaleType = {
|
||||||
Title: "글꼴 크기",
|
Title: "글꼴 크기",
|
||||||
SubTitle: "채팅 내용의 글꼴 크기 조정",
|
SubTitle: "채팅 내용의 글꼴 크기 조정",
|
||||||
},
|
},
|
||||||
|
InjectSystemPrompts: {
|
||||||
|
Title: "시스템 프롬프트 주입",
|
||||||
|
SubTitle:
|
||||||
|
"각 요청의 메시지 목록의 시작에 ChatGPT 시스템 프롬프트를 강제로 추가합니다",
|
||||||
|
},
|
||||||
Update: {
|
Update: {
|
||||||
Version: (x: string) => `버전: ${x}`,
|
Version: (x: string) => `버전: ${x}`,
|
||||||
IsLatest: "최신 버전",
|
IsLatest: "최신 버전",
|
||||||
|
|
|
@ -65,6 +65,11 @@ const no: PartialLocaleType = {
|
||||||
Title: "Fontstørrelsen",
|
Title: "Fontstørrelsen",
|
||||||
SubTitle: "Juster fontstørrelsen for samtaleinnholdet.",
|
SubTitle: "Juster fontstørrelsen for samtaleinnholdet.",
|
||||||
},
|
},
|
||||||
|
InjectSystemPrompts: {
|
||||||
|
Title: "Sett inn systemprompter",
|
||||||
|
SubTitle:
|
||||||
|
"Tving tillegg av en simulert ChatGPT-systemprompt i begynnelsen av meldingslisten for hver forespørsel",
|
||||||
|
},
|
||||||
Update: {
|
Update: {
|
||||||
Version: (x: string) => `Versjon: ${x}`,
|
Version: (x: string) => `Versjon: ${x}`,
|
||||||
IsLatest: "Siste versjon",
|
IsLatest: "Siste versjon",
|
||||||
|
|
|
@ -71,6 +71,11 @@ const ru: PartialLocaleType = {
|
||||||
Title: "Размер шрифта",
|
Title: "Размер шрифта",
|
||||||
SubTitle: "Настроить размер шрифта контента чата",
|
SubTitle: "Настроить размер шрифта контента чата",
|
||||||
},
|
},
|
||||||
|
InjectSystemPrompts: {
|
||||||
|
Title: "Вставить системные подсказки",
|
||||||
|
SubTitle:
|
||||||
|
"Принудительно добавить симулированную системную подсказку ChatGPT в начало списка сообщений для каждого запроса",
|
||||||
|
},
|
||||||
Update: {
|
Update: {
|
||||||
Version: (x: string) => `Версия: ${x}`,
|
Version: (x: string) => `Версия: ${x}`,
|
||||||
IsLatest: "Последняя версия",
|
IsLatest: "Последняя версия",
|
||||||
|
|
|
@ -71,6 +71,11 @@ const tr: PartialLocaleType = {
|
||||||
Title: "Yazı Boyutu",
|
Title: "Yazı Boyutu",
|
||||||
SubTitle: "Sohbet içeriğinin yazı boyutunu ayarlayın",
|
SubTitle: "Sohbet içeriğinin yazı boyutunu ayarlayın",
|
||||||
},
|
},
|
||||||
|
InjectSystemPrompts: {
|
||||||
|
Title: "Sistem İpucu Ekleyin",
|
||||||
|
SubTitle:
|
||||||
|
"Her istek için ileti listesinin başına simüle edilmiş bir ChatGPT sistem ipucu ekleyin",
|
||||||
|
},
|
||||||
Update: {
|
Update: {
|
||||||
Version: (x: string) => `Sürüm: ${x}`,
|
Version: (x: string) => `Sürüm: ${x}`,
|
||||||
IsLatest: "En son sürüm",
|
IsLatest: "En son sürüm",
|
||||||
|
|
|
@ -69,6 +69,10 @@ const tw: PartialLocaleType = {
|
||||||
Title: "字型大小",
|
Title: "字型大小",
|
||||||
SubTitle: "聊天內容的字型大小",
|
SubTitle: "聊天內容的字型大小",
|
||||||
},
|
},
|
||||||
|
InjectSystemPrompts: {
|
||||||
|
Title: "注入系統提示",
|
||||||
|
SubTitle: "強制在每個請求的訊息列表開頭添加一個模擬 ChatGPT 的系統提示",
|
||||||
|
},
|
||||||
Update: {
|
Update: {
|
||||||
Version: (x: string) => `當前版本:${x}`,
|
Version: (x: string) => `當前版本:${x}`,
|
||||||
IsLatest: "已是最新版本",
|
IsLatest: "已是最新版本",
|
||||||
|
|
|
@ -71,6 +71,11 @@ const vi: PartialLocaleType = {
|
||||||
Title: "Font chữ",
|
Title: "Font chữ",
|
||||||
SubTitle: "Thay đổi font chữ của nội dung trò chuyện",
|
SubTitle: "Thay đổi font chữ của nội dung trò chuyện",
|
||||||
},
|
},
|
||||||
|
InjectSystemPrompts: {
|
||||||
|
Title: "Tiêm Prompt Hệ thống",
|
||||||
|
SubTitle:
|
||||||
|
"Bắt buộc thêm một prompt hệ thống giả lập ChatGPT ở đầu danh sách tin nhắn cho mỗi yêu cầu",
|
||||||
|
},
|
||||||
Update: {
|
Update: {
|
||||||
Version: (x: string) => `Phiên bản: ${x}`,
|
Version: (x: string) => `Phiên bản: ${x}`,
|
||||||
IsLatest: "Phiên bản mới nhất",
|
IsLatest: "Phiên bản mới nhất",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { create } from "zustand";
|
import { create } from "zustand";
|
||||||
import { persist } from "zustand/middleware";
|
import { persist } from "zustand/middleware";
|
||||||
import { DEFAULT_API_HOST, StoreKey } from "../constant";
|
import { DEFAULT_API_HOST, DEFAULT_MODELS, StoreKey } from "../constant";
|
||||||
import { getHeaders } from "../client/api";
|
import { getHeaders } from "../client/api";
|
||||||
import { BOT_HELLO } from "./chat";
|
import { BOT_HELLO } from "./chat";
|
||||||
import { getClientConfig } from "../config/client";
|
import { getClientConfig } from "../config/client";
|
||||||
|
@ -11,8 +11,10 @@ export interface AccessControlStore {
|
||||||
|
|
||||||
needCode: boolean;
|
needCode: boolean;
|
||||||
hideUserApiKey: boolean;
|
hideUserApiKey: boolean;
|
||||||
openaiUrl: string;
|
|
||||||
hideBalanceQuery: boolean;
|
hideBalanceQuery: boolean;
|
||||||
|
disableGPT4: boolean;
|
||||||
|
|
||||||
|
openaiUrl: string;
|
||||||
|
|
||||||
updateToken: (_: string) => void;
|
updateToken: (_: string) => void;
|
||||||
updateCode: (_: string) => void;
|
updateCode: (_: string) => void;
|
||||||
|
@ -35,8 +37,10 @@ export const useAccessStore = create<AccessControlStore>()(
|
||||||
accessCode: "",
|
accessCode: "",
|
||||||
needCode: true,
|
needCode: true,
|
||||||
hideUserApiKey: false,
|
hideUserApiKey: false,
|
||||||
openaiUrl: DEFAULT_OPENAI_URL,
|
|
||||||
hideBalanceQuery: false,
|
hideBalanceQuery: false,
|
||||||
|
disableGPT4: false,
|
||||||
|
|
||||||
|
openaiUrl: DEFAULT_OPENAI_URL,
|
||||||
|
|
||||||
enabledAccessControl() {
|
enabledAccessControl() {
|
||||||
get().fetch();
|
get().fetch();
|
||||||
|
@ -44,13 +48,13 @@ export const useAccessStore = create<AccessControlStore>()(
|
||||||
return get().needCode;
|
return get().needCode;
|
||||||
},
|
},
|
||||||
updateCode(code: string) {
|
updateCode(code: string) {
|
||||||
set(() => ({ accessCode: code }));
|
set(() => ({ accessCode: code?.trim() }));
|
||||||
},
|
},
|
||||||
updateToken(token: string) {
|
updateToken(token: string) {
|
||||||
set(() => ({ token }));
|
set(() => ({ token: token?.trim() }));
|
||||||
},
|
},
|
||||||
updateOpenAiUrl(url: string) {
|
updateOpenAiUrl(url: string) {
|
||||||
set(() => ({ openaiUrl: url }));
|
set(() => ({ openaiUrl: url?.trim() }));
|
||||||
},
|
},
|
||||||
isAuthorized() {
|
isAuthorized() {
|
||||||
get().fetch();
|
get().fetch();
|
||||||
|
@ -75,8 +79,10 @@ export const useAccessStore = create<AccessControlStore>()(
|
||||||
console.log("[Config] got config from server", res);
|
console.log("[Config] got config from server", res);
|
||||||
set(() => ({ ...res }));
|
set(() => ({ ...res }));
|
||||||
|
|
||||||
if ((res as any).botHello) {
|
if (res.disableGPT4) {
|
||||||
BOT_HELLO.content = (res as any).botHello;
|
DEFAULT_MODELS.forEach(
|
||||||
|
(m: any) => (m.available = !m.name.startsWith("gpt-4")),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(() => {
|
.catch(() => {
|
||||||
|
|
|
@ -289,7 +289,6 @@ export const useChatStore = create<ChatStore>()(
|
||||||
const botMessage: ChatMessage = createMessage({
|
const botMessage: ChatMessage = createMessage({
|
||||||
role: "assistant",
|
role: "assistant",
|
||||||
streaming: true,
|
streaming: true,
|
||||||
id: userMessage.id! + 1,
|
|
||||||
model: modelConfig.model,
|
model: modelConfig.model,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -387,8 +386,7 @@ export const useChatStore = create<ChatStore>()(
|
||||||
const contextPrompts = session.mask.context.slice();
|
const contextPrompts = session.mask.context.slice();
|
||||||
|
|
||||||
// system prompts, to get close to OpenAI Web ChatGPT
|
// system prompts, to get close to OpenAI Web ChatGPT
|
||||||
// only will be injected if user does not use a mask or set none context prompts
|
const shouldInjectSystemPrompts = modelConfig.enableInjectSystemPrompts;
|
||||||
const shouldInjectSystemPrompts = contextPrompts.length === 0;
|
|
||||||
const systemPrompts = shouldInjectSystemPrompts
|
const systemPrompts = shouldInjectSystemPrompts
|
||||||
? [
|
? [
|
||||||
createMessage({
|
createMessage({
|
||||||
|
@ -591,7 +589,7 @@ export const useChatStore = create<ChatStore>()(
|
||||||
}),
|
}),
|
||||||
{
|
{
|
||||||
name: StoreKey.Chat,
|
name: StoreKey.Chat,
|
||||||
version: 3,
|
version: 3.1,
|
||||||
migrate(persistedState, version) {
|
migrate(persistedState, version) {
|
||||||
const state = persistedState as any;
|
const state = persistedState as any;
|
||||||
const newState = JSON.parse(JSON.stringify(state)) as ChatStore;
|
const newState = JSON.parse(JSON.stringify(state)) as ChatStore;
|
||||||
|
@ -619,6 +617,23 @@ export const useChatStore = create<ChatStore>()(
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Enable `enableInjectSystemPrompts` attribute for old sessions.
|
||||||
|
// Resolve issue of old sessions not automatically enabling.
|
||||||
|
if (version < 3.1) {
|
||||||
|
newState.sessions.forEach((s) => {
|
||||||
|
if (
|
||||||
|
// Exclude those already set by user
|
||||||
|
!s.mask.modelConfig.hasOwnProperty("enableInjectSystemPrompts")
|
||||||
|
) {
|
||||||
|
// Because users may have changed this configuration,
|
||||||
|
// the user's current configuration is used instead of the default
|
||||||
|
const config = useAppConfig.getState();
|
||||||
|
s.mask.modelConfig.enableInjectSystemPrompts =
|
||||||
|
config.modelConfig.enableInjectSystemPrompts;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
return newState;
|
return newState;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
@ -47,6 +47,7 @@ export const DEFAULT_CONFIG = {
|
||||||
sendMemory: true,
|
sendMemory: true,
|
||||||
historyMessageCount: 4,
|
historyMessageCount: 4,
|
||||||
compressMessageLengthThreshold: 1000,
|
compressMessageLengthThreshold: 1000,
|
||||||
|
enableInjectSystemPrompts: true,
|
||||||
template: DEFAULT_INPUT_TEMPLATE,
|
template: DEFAULT_INPUT_TEMPLATE,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -146,7 +147,7 @@ export const useAppConfig = create<ChatConfigStore>()(
|
||||||
}),
|
}),
|
||||||
{
|
{
|
||||||
name: StoreKey.Config,
|
name: StoreKey.Config,
|
||||||
version: 3.5,
|
version: 3.6,
|
||||||
migrate(persistedState, version) {
|
migrate(persistedState, version) {
|
||||||
const state = persistedState as ChatConfig;
|
const state = persistedState as ChatConfig;
|
||||||
|
|
||||||
|
@ -165,6 +166,10 @@ export const useAppConfig = create<ChatConfigStore>()(
|
||||||
state.customModels = "claude,claude-100k";
|
state.customModels = "claude,claude-100k";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (version < 3.6) {
|
||||||
|
state.modelConfig.enableInjectSystemPrompts = true;
|
||||||
|
}
|
||||||
|
|
||||||
return state as any;
|
return state as any;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
@ -109,7 +109,7 @@ export const useMaskStore = create<MaskStore>()(
|
||||||
}),
|
}),
|
||||||
{
|
{
|
||||||
name: StoreKey.Mask,
|
name: StoreKey.Mask,
|
||||||
version: 3,
|
version: 3.1,
|
||||||
|
|
||||||
migrate(state, version) {
|
migrate(state, version) {
|
||||||
const newState = JSON.parse(JSON.stringify(state)) as MaskState;
|
const newState = JSON.parse(JSON.stringify(state)) as MaskState;
|
||||||
|
@ -119,6 +119,14 @@ export const useMaskStore = create<MaskStore>()(
|
||||||
Object.values(newState.masks).forEach((m) => (m.id = nanoid()));
|
Object.values(newState.masks).forEach((m) => (m.id = nanoid()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (version < 3.1) {
|
||||||
|
const updatedMasks: Record<string, Mask> = {};
|
||||||
|
Object.values(newState.masks).forEach((m) => {
|
||||||
|
updatedMasks[m.id] = m;
|
||||||
|
});
|
||||||
|
newState.masks = updatedMasks;
|
||||||
|
}
|
||||||
|
|
||||||
return newState as any;
|
return newState as any;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
@ -30,6 +30,9 @@ const nextConfig = {
|
||||||
images: {
|
images: {
|
||||||
unoptimized: mode === "export",
|
unoptimized: mode === "export",
|
||||||
},
|
},
|
||||||
|
experimental: {
|
||||||
|
forceSwcTransforms: true,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
if (mode !== "export") {
|
if (mode !== "export") {
|
||||||
|
|
10
package.json
10
package.json
|
@ -25,12 +25,12 @@
|
||||||
"html-to-image": "^1.11.11",
|
"html-to-image": "^1.11.11",
|
||||||
"mermaid": "^10.2.3",
|
"mermaid": "^10.2.3",
|
||||||
"nanoid": "^4.0.2",
|
"nanoid": "^4.0.2",
|
||||||
"next": "^13.4.6",
|
"next": "^13.4.9",
|
||||||
"node-fetch": "^3.3.1",
|
"node-fetch": "^3.3.1",
|
||||||
"react": "^18.2.0",
|
"react": "^18.2.0",
|
||||||
"react-dom": "^18.2.0",
|
"react-dom": "^18.2.0",
|
||||||
"react-markdown": "^8.0.7",
|
"react-markdown": "^8.0.7",
|
||||||
"react-router-dom": "^6.10.0",
|
"react-router-dom": "^6.14.1",
|
||||||
"rehype-highlight": "^6.0.0",
|
"rehype-highlight": "^6.0.0",
|
||||||
"rehype-katex": "^6.0.3",
|
"rehype-katex": "^6.0.3",
|
||||||
"remark-breaks": "^3.0.2",
|
"remark-breaks": "^3.0.2",
|
||||||
|
@ -42,14 +42,14 @@
|
||||||
"zustand": "^4.3.8"
|
"zustand": "^4.3.8"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@tauri-apps/cli": "^1.3.1",
|
"@tauri-apps/cli": "^1.4.0",
|
||||||
"@types/node": "^20.3.3",
|
"@types/node": "^20.3.3",
|
||||||
"@types/react": "^18.2.12",
|
"@types/react": "^18.2.14",
|
||||||
"@types/react-dom": "^18.0.11",
|
"@types/react-dom": "^18.0.11",
|
||||||
"@types/react-katex": "^3.0.0",
|
"@types/react-katex": "^3.0.0",
|
||||||
"@types/spark-md5": "^3.0.2",
|
"@types/spark-md5": "^3.0.2",
|
||||||
"cross-env": "^7.0.3",
|
"cross-env": "^7.0.3",
|
||||||
"eslint": "^8.36.0",
|
"eslint": "^8.44.0",
|
||||||
"eslint-config-next": "13.2.3",
|
"eslint-config-next": "13.2.3",
|
||||||
"eslint-config-prettier": "^8.8.0",
|
"eslint-config-prettier": "^8.8.0",
|
||||||
"eslint-plugin-prettier": "^4.2.1",
|
"eslint-plugin-prettier": "^4.2.1",
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
},
|
},
|
||||||
"package": {
|
"package": {
|
||||||
"productName": "ChatGPT Next Web",
|
"productName": "ChatGPT Next Web",
|
||||||
"version": "2.8.9"
|
"version": "2.9.1"
|
||||||
},
|
},
|
||||||
"tauri": {
|
"tauri": {
|
||||||
"allowlist": {
|
"allowlist": {
|
||||||
|
|
389
yarn.lock
389
yarn.lock
|
@ -2,6 +2,11 @@
|
||||||
# yarn lockfile v1
|
# yarn lockfile v1
|
||||||
|
|
||||||
|
|
||||||
|
"@aashutoshrathi/word-wrap@^1.2.3":
|
||||||
|
version "1.2.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf"
|
||||||
|
integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==
|
||||||
|
|
||||||
"@ampproject/remapping@^2.2.0":
|
"@ampproject/remapping@^2.2.0":
|
||||||
version "2.2.0"
|
version "2.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d"
|
resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d"
|
||||||
|
@ -1012,14 +1017,14 @@
|
||||||
resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.0.tgz#f6f729b02feee2c749f57e334b7a1b5f40a81724"
|
resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.0.tgz#f6f729b02feee2c749f57e334b7a1b5f40a81724"
|
||||||
integrity sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==
|
integrity sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==
|
||||||
|
|
||||||
"@eslint/eslintrc@^2.0.2":
|
"@eslint/eslintrc@^2.1.0":
|
||||||
version "2.0.2"
|
version "2.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.0.2.tgz#01575e38707add677cf73ca1589abba8da899a02"
|
resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.0.tgz#82256f164cc9e0b59669efc19d57f8092706841d"
|
||||||
integrity sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==
|
integrity sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==
|
||||||
dependencies:
|
dependencies:
|
||||||
ajv "^6.12.4"
|
ajv "^6.12.4"
|
||||||
debug "^4.3.2"
|
debug "^4.3.2"
|
||||||
espree "^9.5.1"
|
espree "^9.6.0"
|
||||||
globals "^13.19.0"
|
globals "^13.19.0"
|
||||||
ignore "^5.2.0"
|
ignore "^5.2.0"
|
||||||
import-fresh "^3.2.1"
|
import-fresh "^3.2.1"
|
||||||
|
@ -1027,10 +1032,10 @@
|
||||||
minimatch "^3.1.2"
|
minimatch "^3.1.2"
|
||||||
strip-json-comments "^3.1.1"
|
strip-json-comments "^3.1.1"
|
||||||
|
|
||||||
"@eslint/js@8.37.0":
|
"@eslint/js@8.44.0":
|
||||||
version "8.37.0"
|
version "8.44.0"
|
||||||
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.37.0.tgz#cf1b5fa24217fe007f6487a26d765274925efa7d"
|
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.44.0.tgz#961a5903c74139390478bdc808bcde3fc45ab7af"
|
||||||
integrity sha512-x5vzdtOOGgFVDCUs81QRB2+liax8rFg3+7hqM+QhBG0/G3F1ZsoYl97UrqgHgQ9KKT7G6c4V+aTUCgu/n22v1A==
|
integrity sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==
|
||||||
|
|
||||||
"@fortaine/fetch-event-source@^3.0.6":
|
"@fortaine/fetch-event-source@^3.0.6":
|
||||||
version "3.0.6"
|
version "3.0.6"
|
||||||
|
@ -1050,10 +1055,10 @@
|
||||||
redux "^4.2.1"
|
redux "^4.2.1"
|
||||||
use-memo-one "^1.1.3"
|
use-memo-one "^1.1.3"
|
||||||
|
|
||||||
"@humanwhocodes/config-array@^0.11.8":
|
"@humanwhocodes/config-array@^0.11.10":
|
||||||
version "0.11.8"
|
version "0.11.10"
|
||||||
resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9"
|
resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2"
|
||||||
integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==
|
integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@humanwhocodes/object-schema" "^1.2.1"
|
"@humanwhocodes/object-schema" "^1.2.1"
|
||||||
debug "^4.1.1"
|
debug "^4.1.1"
|
||||||
|
@ -1126,10 +1131,10 @@
|
||||||
"@jridgewell/resolve-uri" "3.1.0"
|
"@jridgewell/resolve-uri" "3.1.0"
|
||||||
"@jridgewell/sourcemap-codec" "1.4.14"
|
"@jridgewell/sourcemap-codec" "1.4.14"
|
||||||
|
|
||||||
"@next/env@13.4.6":
|
"@next/env@13.4.9":
|
||||||
version "13.4.6"
|
version "13.4.9"
|
||||||
resolved "https://registry.yarnpkg.com/@next/env/-/env-13.4.6.tgz#3f2041c7758660d7255707ae4cb9166519113dea"
|
resolved "https://registry.yarnpkg.com/@next/env/-/env-13.4.9.tgz#b77759514dd56bfa9791770755a2482f4d6ca93e"
|
||||||
integrity sha512-nqUxEtvDqFhmV1/awSg0K2XHNwkftNaiUqCYO9e6+MYmqNObpKVl7OgMkGaQ2SZnFx5YqF0t60ZJTlyJIDAijg==
|
integrity sha512-vuDRK05BOKfmoBYLNi2cujG2jrYbEod/ubSSyqgmEx9n/W3eZaJQdRNhTfumO+qmq/QTzLurW487n/PM/fHOkw==
|
||||||
|
|
||||||
"@next/eslint-plugin-next@13.2.3":
|
"@next/eslint-plugin-next@13.2.3":
|
||||||
version "13.2.3"
|
version "13.2.3"
|
||||||
|
@ -1138,50 +1143,50 @@
|
||||||
dependencies:
|
dependencies:
|
||||||
glob "7.1.7"
|
glob "7.1.7"
|
||||||
|
|
||||||
"@next/swc-darwin-arm64@13.4.6":
|
"@next/swc-darwin-arm64@13.4.9":
|
||||||
version "13.4.6"
|
version "13.4.9"
|
||||||
resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.4.6.tgz#47485f3deaee6681b4a4036c74bb9c4b728d5ddd"
|
resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.4.9.tgz#0ed408d444bbc6b0a20f3506a9b4222684585677"
|
||||||
integrity sha512-ahi6VP98o4HV19rkOXPSUu+ovfHfUxbJQ7VVJ7gL2FnZRr7onEFC1oGQ6NQHpm8CxpIzSSBW79kumlFMOmZVjg==
|
integrity sha512-TVzGHpZoVBk3iDsTOQA/R6MGmFp0+17SWXMEWd6zG30AfuELmSSMe2SdPqxwXU0gbpWkJL1KgfLzy5ReN0crqQ==
|
||||||
|
|
||||||
"@next/swc-darwin-x64@13.4.6":
|
"@next/swc-darwin-x64@13.4.9":
|
||||||
version "13.4.6"
|
version "13.4.9"
|
||||||
resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.4.6.tgz#a6a5b232ec0f2079224fb8ed6bf11dc479af1acf"
|
resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.4.9.tgz#a08fccdee68201522fe6618ec81f832084b222f8"
|
||||||
integrity sha512-13cXxKFsPJIJKzUqrU5XB1mc0xbUgYsRcdH6/rB8c4NMEbWGdtD4QoK9ShN31TZdePpD4k416Ur7p+deMIxnnA==
|
integrity sha512-aSfF1fhv28N2e7vrDZ6zOQ+IIthocfaxuMWGReB5GDriF0caTqtHttAvzOMgJgXQtQx6XhyaJMozLTSEXeNN+A==
|
||||||
|
|
||||||
"@next/swc-linux-arm64-gnu@13.4.6":
|
"@next/swc-linux-arm64-gnu@13.4.9":
|
||||||
version "13.4.6"
|
version "13.4.9"
|
||||||
resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.4.6.tgz#2a67144e863d9c45fdbd13c7827370e7f2a28405"
|
resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.4.9.tgz#1798c2341bb841e96521433eed00892fb24abbd1"
|
||||||
integrity sha512-Ti+NMHEjTNktCVxNjeWbYgmZvA2AqMMI2AMlzkXsU7W4pXCMhrryAmAIoo+7YdJbsx01JQWYVxGe62G6DoCLaA==
|
integrity sha512-JhKoX5ECzYoTVyIy/7KykeO4Z2lVKq7HGQqvAH+Ip9UFn1MOJkOnkPRB7v4nmzqAoY+Je05Aj5wNABR1N18DMg==
|
||||||
|
|
||||||
"@next/swc-linux-arm64-musl@13.4.6":
|
"@next/swc-linux-arm64-musl@13.4.9":
|
||||||
version "13.4.6"
|
version "13.4.9"
|
||||||
resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.4.6.tgz#5a191ac3575a70598e9e9c6e7264fc0b8a90b2db"
|
resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.4.9.tgz#cee04c51610eddd3638ce2499205083656531ea0"
|
||||||
integrity sha512-OHoC6gO7XfjstgwR+z6UHKlvhqJfyMtNaJidjx3sEcfaDwS7R2lqR5AABi8PuilGgi0BO0O0sCXqLlpp3a0emQ==
|
integrity sha512-OOn6zZBIVkm/4j5gkPdGn4yqQt+gmXaLaSjRSO434WplV8vo2YaBNbSHaTM9wJpZTHVDYyjzuIYVEzy9/5RVZw==
|
||||||
|
|
||||||
"@next/swc-linux-x64-gnu@13.4.6":
|
"@next/swc-linux-x64-gnu@13.4.9":
|
||||||
version "13.4.6"
|
version "13.4.9"
|
||||||
resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.4.6.tgz#d38adf842a8b8f9de492454328fd32a2c53350f3"
|
resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.4.9.tgz#1932d0367916adbc6844b244cda1d4182bd11f7a"
|
||||||
integrity sha512-zHZxPGkUlpfNJCboUrFqwlwEX5vI9LSN70b8XEb0DYzzlrZyCyOi7hwDp/+3Urm9AB7YCAJkgR5Sp1XBVjHdfQ==
|
integrity sha512-iA+fJXFPpW0SwGmx/pivVU+2t4zQHNOOAr5T378PfxPHY6JtjV6/0s1vlAJUdIHeVpX98CLp9k5VuKgxiRHUpg==
|
||||||
|
|
||||||
"@next/swc-linux-x64-musl@13.4.6":
|
"@next/swc-linux-x64-musl@13.4.9":
|
||||||
version "13.4.6"
|
version "13.4.9"
|
||||||
resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.4.6.tgz#74c745774358b78be7f958e7a8b7d93936cd6ebc"
|
resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.4.9.tgz#a66aa8c1383b16299b72482f6360facd5cde3c7a"
|
||||||
integrity sha512-K/Y8lYGTwTpv5ME8PSJxwxLolaDRdVy+lOd9yMRMiQE0BLUhtxtCWC9ypV42uh9WpLjoaD0joOsB9Q6mbrSGJg==
|
integrity sha512-rlNf2WUtMM+GAQrZ9gMNdSapkVi3koSW3a+dmBVp42lfugWVvnyzca/xJlN48/7AGx8qu62WyO0ya1ikgOxh6A==
|
||||||
|
|
||||||
"@next/swc-win32-arm64-msvc@13.4.6":
|
"@next/swc-win32-arm64-msvc@13.4.9":
|
||||||
version "13.4.6"
|
version "13.4.9"
|
||||||
resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.4.6.tgz#1e1e02c175573e64808fc1a7e8650e3e217f1edc"
|
resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.4.9.tgz#39482ee856c867177a612a30b6861c75e0736a4a"
|
||||||
integrity sha512-U6LtxEUrjBL2tpW+Kr1nHCSJWNeIed7U7l5o7FiKGGwGgIlFi4UHDiLI6TQ2lxi20fAU33CsruV3U0GuzMlXIw==
|
integrity sha512-5T9ybSugXP77nw03vlgKZxD99AFTHaX8eT1ayKYYnGO9nmYhJjRPxcjU5FyYI+TdkQgEpIcH7p/guPLPR0EbKA==
|
||||||
|
|
||||||
"@next/swc-win32-ia32-msvc@13.4.6":
|
"@next/swc-win32-ia32-msvc@13.4.9":
|
||||||
version "13.4.6"
|
version "13.4.9"
|
||||||
resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.4.6.tgz#2b528ae3ec7f6e727f4f0d81a1015f63da55c7a6"
|
resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.4.9.tgz#29db85e34b597ade1a918235d16a760a9213c190"
|
||||||
integrity sha512-eEBeAqpCfhdPSlCZCayjCiyIllVqy4tcqvm1xmg3BgJG0G5ITiMM4Cw2WVeRSgWDJqQGRyyb+q8Y2ltzhXOWsQ==
|
integrity sha512-ojZTCt1lP2ucgpoiFgrFj07uq4CZsq4crVXpLGgQfoFq00jPKRPgesuGPaz8lg1yLfvafkU3Jd1i8snKwYR3LA==
|
||||||
|
|
||||||
"@next/swc-win32-x64-msvc@13.4.6":
|
"@next/swc-win32-x64-msvc@13.4.9":
|
||||||
version "13.4.6"
|
version "13.4.9"
|
||||||
resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.4.6.tgz#38620bd68267ff13e50ecd432f1822eac51382a8"
|
resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.4.9.tgz#0c2758164cccd61bc5a1c6cd8284fe66173e4a2b"
|
||||||
integrity sha512-OrZs94AuO3ZS5tnqlyPRNgfWvboXaDQCi5aXGve3o3C+Sj0ctMUV9+Do+0zMvvLRumR8E0PTWKvtz9n5vzIsWw==
|
integrity sha512-QbT03FXRNdpuL+e9pLnu+XajZdm/TtIXVYY4lA9t+9l0fLZbHXDYEKitAqxrOj37o3Vx5ufxiRAniaIebYDCgw==
|
||||||
|
|
||||||
"@nodelib/fs.scandir@2.1.5":
|
"@nodelib/fs.scandir@2.1.5":
|
||||||
version "2.1.5"
|
version "2.1.5"
|
||||||
|
@ -1216,10 +1221,10 @@
|
||||||
tiny-glob "^0.2.9"
|
tiny-glob "^0.2.9"
|
||||||
tslib "^2.4.0"
|
tslib "^2.4.0"
|
||||||
|
|
||||||
"@remix-run/router@1.5.0":
|
"@remix-run/router@1.7.1":
|
||||||
version "1.5.0"
|
version "1.7.1"
|
||||||
resolved "https://registry.npmmirror.com/@remix-run/router/-/router-1.5.0.tgz#57618e57942a5f0131374a9fdb0167e25a117fdc"
|
resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.7.1.tgz#fea7ac35ae4014637c130011f59428f618730498"
|
||||||
integrity sha512-bkUDCp8o1MvFO+qxkODcbhSqRa6P2GXgrGZVpt0dCXNW2HCSCqYI0ZoAqEOSAjRWmmlKcYgFvN4B4S+zo/f8kg==
|
integrity sha512-bgVQM4ZJ2u2CM8k1ey70o1ePFXsEzYVZoWghh6WjM8p59jQ7HxzbHW4SbnWFG7V9ig9chLawQxDTZ3xzOF8MkQ==
|
||||||
|
|
||||||
"@rushstack/eslint-patch@^1.1.3":
|
"@rushstack/eslint-patch@^1.1.3":
|
||||||
version "1.2.0"
|
version "1.2.0"
|
||||||
|
@ -1339,65 +1344,71 @@
|
||||||
dependencies:
|
dependencies:
|
||||||
tslib "^2.4.0"
|
tslib "^2.4.0"
|
||||||
|
|
||||||
"@tauri-apps/cli-darwin-arm64@1.3.1":
|
"@tauri-apps/cli-darwin-arm64@1.4.0":
|
||||||
version "1.3.1"
|
version "1.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-1.3.1.tgz#ef0fe290e0a6e3e53fa2cc4f1a72a0c87921427c"
|
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-1.4.0.tgz#e76bb8515ae31f03f2cbd440c1a09b237a79b3ac"
|
||||||
integrity sha512-QlepYVPgOgspcwA/u4kGG4ZUijlXfdRtno00zEy+LxinN/IRXtk+6ErVtsmoLi1ZC9WbuMwzAcsRvqsD+RtNAg==
|
integrity sha512-nA/ml0SfUt6/CYLVbHmT500Y+ijqsuv5+s9EBnVXYSLVg9kbPUZJJHluEYK+xKuOj6xzyuT/+rZFMRapmJD3jQ==
|
||||||
|
|
||||||
"@tauri-apps/cli-darwin-x64@1.3.1":
|
"@tauri-apps/cli-darwin-x64@1.4.0":
|
||||||
version "1.3.1"
|
version "1.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-1.3.1.tgz#4c84ea0f08a5b636b067943d637a38e091a4aad3"
|
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-1.4.0.tgz#dd1472460550d0aa0ec6e699b073be2d77e5b962"
|
||||||
integrity sha512-fKcAUPVFO3jfDKXCSDGY0MhZFF/wDtx3rgFnogWYu4knk38o9RaqRkvMvqJhLYPuWaEM5h6/z1dRrr9KKCbrVg==
|
integrity sha512-ov/F6Zr+dg9B0PtRu65stFo2G0ow2TUlneqYYrkj+vA3n+moWDHfVty0raDjMLQbQt3rv3uayFMXGPMgble9OA==
|
||||||
|
|
||||||
"@tauri-apps/cli-linux-arm-gnueabihf@1.3.1":
|
"@tauri-apps/cli-linux-arm-gnueabihf@1.4.0":
|
||||||
version "1.3.1"
|
version "1.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-1.3.1.tgz#a4f1b237189e4f8f89cc890e1dc2eec76d4345be"
|
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-1.4.0.tgz#325e90e47d260ba71a499850ce769b5a6bdfd48d"
|
||||||
integrity sha512-+4H0dv8ltJHYu/Ma1h9ixUPUWka9EjaYa8nJfiMsdCI4LJLNE6cPveE7RmhZ59v9GW1XB108/k083JUC/OtGvA==
|
integrity sha512-zwjbiMncycXDV7doovymyKD7sCg53ouAmfgpUqEBOTY3vgBi9TwijyPhJOqoG5vUVWhouNBC08akGmE4dja15g==
|
||||||
|
|
||||||
"@tauri-apps/cli-linux-arm64-gnu@1.3.1":
|
"@tauri-apps/cli-linux-arm64-gnu@1.4.0":
|
||||||
version "1.3.1"
|
version "1.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-1.3.1.tgz#e2391326b64dfe13c7442bdcc13c4988ce5e6df9"
|
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-1.4.0.tgz#b5d8f5cba3f8f7c7d44d071681f0ab0a37f2c46e"
|
||||||
integrity sha512-Pj3odVO1JAxLjYmoXKxcrpj/tPxcA8UP8N06finhNtBtBaxAjrjjxKjO4968KB0BUH7AASIss9EL4Tr0FGnDuw==
|
integrity sha512-5MCBcziqXC72mMXnkZU68mutXIR6zavDxopArE2gQtK841IlE06bIgtLi0kUUhlFJk2nhPRgiDgdLbrPlyt7fw==
|
||||||
|
|
||||||
"@tauri-apps/cli-linux-arm64-musl@1.3.1":
|
"@tauri-apps/cli-linux-arm64-musl@1.4.0":
|
||||||
version "1.3.1"
|
version "1.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.3.1.tgz#49354349f80f879ffc6950c0c03c0aea1395efa5"
|
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.4.0.tgz#f805ab2ee415875900f4b456f17dc4900d2a7911"
|
||||||
integrity sha512-tA0JdDLPFaj42UDIVcF2t8V0tSha40rppcmAR/MfQpTCxih6399iMjwihz9kZE1n4b5O4KTq9GliYo50a8zYlQ==
|
integrity sha512-7J3pRB6n6uNYgIfCeKt2Oz8J7oSaz2s8GGFRRH2HPxuTHrBNCinzVYm68UhVpJrL3bnGkU0ziVZLsW/iaOGfUg==
|
||||||
|
|
||||||
"@tauri-apps/cli-linux-x64-gnu@1.3.1":
|
"@tauri-apps/cli-linux-x64-gnu@1.4.0":
|
||||||
version "1.3.1"
|
version "1.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-1.3.1.tgz#9a33ffe9e0d9b1b3825db57cbcfcddeb773682c6"
|
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-1.4.0.tgz#d3f5e69c22420c7ac9e4021b7a94bce2e48cb45d"
|
||||||
integrity sha512-FDU+Mnvk6NLkqQimcNojdKpMN4Y3W51+SQl+NqG9AFCWprCcSg62yRb84751ujZuf2MGT8HQOfmd0i77F4Q3tQ==
|
integrity sha512-Zh5gfAJxOv5AVWxcwuueaQ2vIAhlg0d6nZui6nMyfIJ8dbf3aZQ5ZzP38sYow5h/fbvgL+3GSQxZRBIa3c2E1w==
|
||||||
|
|
||||||
"@tauri-apps/cli-linux-x64-musl@1.3.1":
|
"@tauri-apps/cli-linux-x64-musl@1.4.0":
|
||||||
version "1.3.1"
|
version "1.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-1.3.1.tgz#5283731e894c17bc070c499e73145cfe2633ef21"
|
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-1.4.0.tgz#2e7f718272ffdd9ace80f57a35023ba0c74767ad"
|
||||||
integrity sha512-MpO3akXFmK8lZYEbyQRDfhdxz1JkTBhonVuz5rRqxwA7gnGWHa1aF1+/2zsy7ahjB2tQ9x8DDFDMdVE20o9HrA==
|
integrity sha512-OLAYoICU3FaYiTdBsI+lQTKnDHeMmFMXIApN0M+xGiOkoIOQcV9CConMPjgmJQ867+NHRNgUGlvBEAh9CiJodQ==
|
||||||
|
|
||||||
"@tauri-apps/cli-win32-ia32-msvc@1.3.1":
|
"@tauri-apps/cli-win32-arm64-msvc@1.4.0":
|
||||||
version "1.3.1"
|
version "1.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-1.3.1.tgz#f31538abfd94f27ade1f17d01f30da6be1660c6f"
|
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-1.4.0.tgz#85cdb52a06feb92da785def4d02512099464525e"
|
||||||
integrity sha512-9Boeo3K5sOrSBAZBuYyGkpV2RfnGQz3ZhGJt4hE6P+HxRd62lS6+qDKAiw1GmkZ0l1drc2INWrNeT50gwOKwIQ==
|
integrity sha512-gZ05GENFbI6CB5MlOUsLlU0kZ9UtHn9riYtSXKT6MYs8HSPRffPHaHSL0WxsJweWh9nR5Hgh/TUU8uW3sYCzCg==
|
||||||
|
|
||||||
"@tauri-apps/cli-win32-x64-msvc@1.3.1":
|
"@tauri-apps/cli-win32-ia32-msvc@1.4.0":
|
||||||
version "1.3.1"
|
version "1.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-1.3.1.tgz#1eb09d55b99916a3cd84cb91c75ef906db67d35d"
|
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-1.4.0.tgz#0b7c921204058215aec9a5a00f735e73909bd330"
|
||||||
integrity sha512-wMrTo91hUu5CdpbElrOmcZEoJR4aooTG+fbtcc87SMyPGQy1Ux62b+ZdwLvL1sVTxnIm//7v6QLRIWGiUjCPwA==
|
integrity sha512-JsetT/lTx/Zq98eo8T5CiRyF1nKeX04RO8JlJrI3ZOYsZpp/A5RJvMd/szQ17iOzwiHdge+tx7k2jHysR6oBlQ==
|
||||||
|
|
||||||
"@tauri-apps/cli@^1.3.1":
|
"@tauri-apps/cli-win32-x64-msvc@1.4.0":
|
||||||
version "1.3.1"
|
version "1.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/@tauri-apps/cli/-/cli-1.3.1.tgz#4c5259bf1f9c97084dd016e6b34dca53de380e24"
|
resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-1.4.0.tgz#23abe3f08c0df89111c29602f91c21a23577b908"
|
||||||
integrity sha512-o4I0JujdITsVRm3/0spfJX7FcKYrYV1DXJqzlWIn6IY25/RltjU6qbC1TPgVww3RsRX63jyVUTcWpj5wwFl+EQ==
|
integrity sha512-z8Olcnwp5aYhzqUAarFjqF+oELCjuYWnB2HAJHlfsYNfDCAORY5kct3Fklz8PSsubC3U2EugWn8n42DwnThurg==
|
||||||
|
|
||||||
|
"@tauri-apps/cli@^1.4.0":
|
||||||
|
version "1.4.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@tauri-apps/cli/-/cli-1.4.0.tgz#72732ae61e6b7d097e44a8a2ef5f211b2d01d98b"
|
||||||
|
integrity sha512-VXYr2i2iVFl98etQSQsqLzXgX96bnWiNZd1YADgatqwy/qecbd6Kl5ZAPB5R4ynsgE8A1gU7Fbzh7dCEQYFfmA==
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
"@tauri-apps/cli-darwin-arm64" "1.3.1"
|
"@tauri-apps/cli-darwin-arm64" "1.4.0"
|
||||||
"@tauri-apps/cli-darwin-x64" "1.3.1"
|
"@tauri-apps/cli-darwin-x64" "1.4.0"
|
||||||
"@tauri-apps/cli-linux-arm-gnueabihf" "1.3.1"
|
"@tauri-apps/cli-linux-arm-gnueabihf" "1.4.0"
|
||||||
"@tauri-apps/cli-linux-arm64-gnu" "1.3.1"
|
"@tauri-apps/cli-linux-arm64-gnu" "1.4.0"
|
||||||
"@tauri-apps/cli-linux-arm64-musl" "1.3.1"
|
"@tauri-apps/cli-linux-arm64-musl" "1.4.0"
|
||||||
"@tauri-apps/cli-linux-x64-gnu" "1.3.1"
|
"@tauri-apps/cli-linux-x64-gnu" "1.4.0"
|
||||||
"@tauri-apps/cli-linux-x64-musl" "1.3.1"
|
"@tauri-apps/cli-linux-x64-musl" "1.4.0"
|
||||||
"@tauri-apps/cli-win32-ia32-msvc" "1.3.1"
|
"@tauri-apps/cli-win32-arm64-msvc" "1.4.0"
|
||||||
"@tauri-apps/cli-win32-x64-msvc" "1.3.1"
|
"@tauri-apps/cli-win32-ia32-msvc" "1.4.0"
|
||||||
|
"@tauri-apps/cli-win32-x64-msvc" "1.4.0"
|
||||||
|
|
||||||
"@trysound/sax@0.2.0":
|
"@trysound/sax@0.2.0":
|
||||||
version "0.2.0"
|
version "0.2.0"
|
||||||
|
@ -1508,10 +1519,10 @@
|
||||||
dependencies:
|
dependencies:
|
||||||
"@types/react" "*"
|
"@types/react" "*"
|
||||||
|
|
||||||
"@types/react@*", "@types/react@^18.2.12":
|
"@types/react@*", "@types/react@^18.2.14":
|
||||||
version "18.2.12"
|
version "18.2.14"
|
||||||
resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.12.tgz#95d584338610b78bb9ba0415e3180fb03debdf97"
|
resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.14.tgz#fa7a6fecf1ce35ca94e74874f70c56ce88f7a127"
|
||||||
integrity sha512-ndmBMLCgn38v3SntMeoJaIrO6tGHYKMEBohCUmw8HoLLQdRMOIGXfeYaBTLe2lsFaSB3MOK1VXscYFnmLtTSmw==
|
integrity sha512-A0zjq+QN/O0Kpe30hA1GidzyFjatVvrpIvWLxD+xv67Vt91TWWgco9IvrJBkeyHm1trGaFS/FSGqPlhyeZRm0g==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@types/prop-types" "*"
|
"@types/prop-types" "*"
|
||||||
"@types/scheduler" "*"
|
"@types/scheduler" "*"
|
||||||
|
@ -1732,10 +1743,10 @@ acorn@^8.7.1, acorn@^8.8.2:
|
||||||
resolved "https://registry.npmmirror.com/acorn/-/acorn-8.9.0.tgz#78a16e3b2bcc198c10822786fa6679e245db5b59"
|
resolved "https://registry.npmmirror.com/acorn/-/acorn-8.9.0.tgz#78a16e3b2bcc198c10822786fa6679e245db5b59"
|
||||||
integrity sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==
|
integrity sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==
|
||||||
|
|
||||||
acorn@^8.8.0:
|
acorn@^8.9.0:
|
||||||
version "8.8.2"
|
version "8.10.0"
|
||||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a"
|
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5"
|
||||||
integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==
|
integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==
|
||||||
|
|
||||||
aggregate-error@^3.0.0:
|
aggregate-error@^3.0.0:
|
||||||
version "3.1.0"
|
version "3.1.0"
|
||||||
|
@ -2007,12 +2018,7 @@ camelcase@^6.2.0:
|
||||||
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a"
|
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a"
|
||||||
integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
|
integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
|
||||||
|
|
||||||
caniuse-lite@^1.0.30001406, caniuse-lite@^1.0.30001449:
|
caniuse-lite@^1.0.30001406, caniuse-lite@^1.0.30001449, caniuse-lite@^1.0.30001503:
|
||||||
version "1.0.30001473"
|
|
||||||
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001473.tgz#3859898b3cab65fc8905bb923df36ad35058153c"
|
|
||||||
integrity sha512-ewDad7+D2vlyy+E4UJuVfiBsU69IL+8oVmTuZnH5Q6CIUbxNfI50uVpRHbUPDD6SUaN2o0Lh4DhTrvLG/Tn1yg==
|
|
||||||
|
|
||||||
caniuse-lite@^1.0.30001503:
|
|
||||||
version "1.0.30001509"
|
version "1.0.30001509"
|
||||||
resolved "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001509.tgz#2b7ad5265392d6d2de25cd8776d1ab3899570d14"
|
resolved "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001509.tgz#2b7ad5265392d6d2de25cd8776d1ab3899570d14"
|
||||||
integrity sha512-2uDDk+TRiTX5hMcUYT/7CSyzMZxjfGu0vAUjS2g0LSD8UoXOv0LtpH4LxGMemsiPq6LCVIUjNwVM0erkOkGCDA==
|
integrity sha512-2uDDk+TRiTX5hMcUYT/7CSyzMZxjfGu0vAUjS2g0LSD8UoXOv0LtpH4LxGMemsiPq6LCVIUjNwVM0erkOkGCDA==
|
||||||
|
@ -2999,29 +3005,29 @@ eslint-scope@5.1.1:
|
||||||
esrecurse "^4.3.0"
|
esrecurse "^4.3.0"
|
||||||
estraverse "^4.1.1"
|
estraverse "^4.1.1"
|
||||||
|
|
||||||
eslint-scope@^7.1.1:
|
eslint-scope@^7.2.0:
|
||||||
version "7.1.1"
|
version "7.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642"
|
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b"
|
||||||
integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==
|
integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==
|
||||||
dependencies:
|
dependencies:
|
||||||
esrecurse "^4.3.0"
|
esrecurse "^4.3.0"
|
||||||
estraverse "^5.2.0"
|
estraverse "^5.2.0"
|
||||||
|
|
||||||
eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.0:
|
eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1:
|
||||||
version "3.4.0"
|
version "3.4.1"
|
||||||
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz#c7f0f956124ce677047ddbc192a68f999454dedc"
|
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994"
|
||||||
integrity sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==
|
integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==
|
||||||
|
|
||||||
eslint@^8.36.0:
|
eslint@^8.44.0:
|
||||||
version "8.37.0"
|
version "8.44.0"
|
||||||
resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.37.0.tgz#1f660ef2ce49a0bfdec0b0d698e0b8b627287412"
|
resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.44.0.tgz#51246e3889b259bbcd1d7d736a0c10add4f0e500"
|
||||||
integrity sha512-NU3Ps9nI05GUoVMxcZx1J8CNR6xOvUT4jAUMH5+z8lpp3aEdPVCImKw6PWG4PY+Vfkpr+jvMpxs/qoE7wq0sPw==
|
integrity sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@eslint-community/eslint-utils" "^4.2.0"
|
"@eslint-community/eslint-utils" "^4.2.0"
|
||||||
"@eslint-community/regexpp" "^4.4.0"
|
"@eslint-community/regexpp" "^4.4.0"
|
||||||
"@eslint/eslintrc" "^2.0.2"
|
"@eslint/eslintrc" "^2.1.0"
|
||||||
"@eslint/js" "8.37.0"
|
"@eslint/js" "8.44.0"
|
||||||
"@humanwhocodes/config-array" "^0.11.8"
|
"@humanwhocodes/config-array" "^0.11.10"
|
||||||
"@humanwhocodes/module-importer" "^1.0.1"
|
"@humanwhocodes/module-importer" "^1.0.1"
|
||||||
"@nodelib/fs.walk" "^1.2.8"
|
"@nodelib/fs.walk" "^1.2.8"
|
||||||
ajv "^6.10.0"
|
ajv "^6.10.0"
|
||||||
|
@ -3030,9 +3036,9 @@ eslint@^8.36.0:
|
||||||
debug "^4.3.2"
|
debug "^4.3.2"
|
||||||
doctrine "^3.0.0"
|
doctrine "^3.0.0"
|
||||||
escape-string-regexp "^4.0.0"
|
escape-string-regexp "^4.0.0"
|
||||||
eslint-scope "^7.1.1"
|
eslint-scope "^7.2.0"
|
||||||
eslint-visitor-keys "^3.4.0"
|
eslint-visitor-keys "^3.4.1"
|
||||||
espree "^9.5.1"
|
espree "^9.6.0"
|
||||||
esquery "^1.4.2"
|
esquery "^1.4.2"
|
||||||
esutils "^2.0.2"
|
esutils "^2.0.2"
|
||||||
fast-deep-equal "^3.1.3"
|
fast-deep-equal "^3.1.3"
|
||||||
|
@ -3040,32 +3046,31 @@ eslint@^8.36.0:
|
||||||
find-up "^5.0.0"
|
find-up "^5.0.0"
|
||||||
glob-parent "^6.0.2"
|
glob-parent "^6.0.2"
|
||||||
globals "^13.19.0"
|
globals "^13.19.0"
|
||||||
grapheme-splitter "^1.0.4"
|
graphemer "^1.4.0"
|
||||||
ignore "^5.2.0"
|
ignore "^5.2.0"
|
||||||
import-fresh "^3.0.0"
|
import-fresh "^3.0.0"
|
||||||
imurmurhash "^0.1.4"
|
imurmurhash "^0.1.4"
|
||||||
is-glob "^4.0.0"
|
is-glob "^4.0.0"
|
||||||
is-path-inside "^3.0.3"
|
is-path-inside "^3.0.3"
|
||||||
js-sdsl "^4.1.4"
|
|
||||||
js-yaml "^4.1.0"
|
js-yaml "^4.1.0"
|
||||||
json-stable-stringify-without-jsonify "^1.0.1"
|
json-stable-stringify-without-jsonify "^1.0.1"
|
||||||
levn "^0.4.1"
|
levn "^0.4.1"
|
||||||
lodash.merge "^4.6.2"
|
lodash.merge "^4.6.2"
|
||||||
minimatch "^3.1.2"
|
minimatch "^3.1.2"
|
||||||
natural-compare "^1.4.0"
|
natural-compare "^1.4.0"
|
||||||
optionator "^0.9.1"
|
optionator "^0.9.3"
|
||||||
strip-ansi "^6.0.1"
|
strip-ansi "^6.0.1"
|
||||||
strip-json-comments "^3.1.0"
|
strip-json-comments "^3.1.0"
|
||||||
text-table "^0.2.0"
|
text-table "^0.2.0"
|
||||||
|
|
||||||
espree@^9.5.1:
|
espree@^9.6.0:
|
||||||
version "9.5.1"
|
version "9.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/espree/-/espree-9.5.1.tgz#4f26a4d5f18905bf4f2e0bd99002aab807e96dd4"
|
resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.0.tgz#80869754b1c6560f32e3b6929194a3fe07c5b82f"
|
||||||
integrity sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==
|
integrity sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A==
|
||||||
dependencies:
|
dependencies:
|
||||||
acorn "^8.8.0"
|
acorn "^8.9.0"
|
||||||
acorn-jsx "^5.3.2"
|
acorn-jsx "^5.3.2"
|
||||||
eslint-visitor-keys "^3.4.0"
|
eslint-visitor-keys "^3.4.1"
|
||||||
|
|
||||||
esquery@^1.4.2:
|
esquery@^1.4.2:
|
||||||
version "1.5.0"
|
version "1.5.0"
|
||||||
|
@ -3402,10 +3407,10 @@ graceful-fs@^4.1.2, graceful-fs@^4.2.4, graceful-fs@^4.2.9:
|
||||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
|
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
|
||||||
integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
|
integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
|
||||||
|
|
||||||
grapheme-splitter@^1.0.4:
|
graphemer@^1.4.0:
|
||||||
version "1.0.4"
|
version "1.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e"
|
resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6"
|
||||||
integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==
|
integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==
|
||||||
|
|
||||||
has-bigints@^1.0.1, has-bigints@^1.0.2:
|
has-bigints@^1.0.1, has-bigints@^1.0.2:
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
|
@ -3858,11 +3863,6 @@ jest-worker@^27.4.5:
|
||||||
merge-stream "^2.0.0"
|
merge-stream "^2.0.0"
|
||||||
supports-color "^8.0.0"
|
supports-color "^8.0.0"
|
||||||
|
|
||||||
js-sdsl@^4.1.4:
|
|
||||||
version "4.4.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.0.tgz#8b437dbe642daa95760400b602378ed8ffea8430"
|
|
||||||
integrity sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==
|
|
||||||
|
|
||||||
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
|
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
|
||||||
version "4.0.0"
|
version "4.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
|
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
|
||||||
|
@ -4654,12 +4654,12 @@ neo-async@^2.6.2:
|
||||||
resolved "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
|
resolved "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
|
||||||
integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
|
integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
|
||||||
|
|
||||||
next@^13.4.6:
|
next@^13.4.9:
|
||||||
version "13.4.6"
|
version "13.4.9"
|
||||||
resolved "https://registry.yarnpkg.com/next/-/next-13.4.6.tgz#ebe52f5c74d60176d45b45e73f25a51103713ea4"
|
resolved "https://registry.yarnpkg.com/next/-/next-13.4.9.tgz#473de5997cb4c5d7a4fb195f566952a1cbffbeba"
|
||||||
integrity sha512-sjVqjxU+U2aXZnYt4Ud6CTLNNwWjdSfMgemGpIQJcN3Z7Jni9xRWbR0ie5fQzCg87aLqQVhKA2ud2gPoqJ9lGw==
|
integrity sha512-vtefFm/BWIi/eWOqf1GsmKG3cjKw1k3LjuefKRcL3iiLl3zWzFdPG3as6xtxrGO6gwTzzaO1ktL4oiHt/uvTjA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@next/env" "13.4.6"
|
"@next/env" "13.4.9"
|
||||||
"@swc/helpers" "0.5.1"
|
"@swc/helpers" "0.5.1"
|
||||||
busboy "1.6.0"
|
busboy "1.6.0"
|
||||||
caniuse-lite "^1.0.30001406"
|
caniuse-lite "^1.0.30001406"
|
||||||
|
@ -4668,15 +4668,15 @@ next@^13.4.6:
|
||||||
watchpack "2.4.0"
|
watchpack "2.4.0"
|
||||||
zod "3.21.4"
|
zod "3.21.4"
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
"@next/swc-darwin-arm64" "13.4.6"
|
"@next/swc-darwin-arm64" "13.4.9"
|
||||||
"@next/swc-darwin-x64" "13.4.6"
|
"@next/swc-darwin-x64" "13.4.9"
|
||||||
"@next/swc-linux-arm64-gnu" "13.4.6"
|
"@next/swc-linux-arm64-gnu" "13.4.9"
|
||||||
"@next/swc-linux-arm64-musl" "13.4.6"
|
"@next/swc-linux-arm64-musl" "13.4.9"
|
||||||
"@next/swc-linux-x64-gnu" "13.4.6"
|
"@next/swc-linux-x64-gnu" "13.4.9"
|
||||||
"@next/swc-linux-x64-musl" "13.4.6"
|
"@next/swc-linux-x64-musl" "13.4.9"
|
||||||
"@next/swc-win32-arm64-msvc" "13.4.6"
|
"@next/swc-win32-arm64-msvc" "13.4.9"
|
||||||
"@next/swc-win32-ia32-msvc" "13.4.6"
|
"@next/swc-win32-ia32-msvc" "13.4.9"
|
||||||
"@next/swc-win32-x64-msvc" "13.4.6"
|
"@next/swc-win32-x64-msvc" "13.4.9"
|
||||||
|
|
||||||
node-domexception@^1.0.0:
|
node-domexception@^1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
|
@ -4824,17 +4824,17 @@ open@^8.4.0:
|
||||||
is-docker "^2.1.1"
|
is-docker "^2.1.1"
|
||||||
is-wsl "^2.2.0"
|
is-wsl "^2.2.0"
|
||||||
|
|
||||||
optionator@^0.9.1:
|
optionator@^0.9.3:
|
||||||
version "0.9.1"
|
version "0.9.3"
|
||||||
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499"
|
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64"
|
||||||
integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==
|
integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==
|
||||||
dependencies:
|
dependencies:
|
||||||
|
"@aashutoshrathi/word-wrap" "^1.2.3"
|
||||||
deep-is "^0.1.3"
|
deep-is "^0.1.3"
|
||||||
fast-levenshtein "^2.0.6"
|
fast-levenshtein "^2.0.6"
|
||||||
levn "^0.4.1"
|
levn "^0.4.1"
|
||||||
prelude-ls "^1.2.1"
|
prelude-ls "^1.2.1"
|
||||||
type-check "^0.4.0"
|
type-check "^0.4.0"
|
||||||
word-wrap "^1.2.3"
|
|
||||||
|
|
||||||
p-limit@^3.0.2:
|
p-limit@^3.0.2:
|
||||||
version "3.1.0"
|
version "3.1.0"
|
||||||
|
@ -5039,20 +5039,20 @@ react-redux@^8.1.1:
|
||||||
react-is "^18.0.0"
|
react-is "^18.0.0"
|
||||||
use-sync-external-store "^1.0.0"
|
use-sync-external-store "^1.0.0"
|
||||||
|
|
||||||
react-router-dom@^6.10.0:
|
react-router-dom@^6.14.1:
|
||||||
version "6.10.0"
|
version "6.14.1"
|
||||||
resolved "https://registry.npmmirror.com/react-router-dom/-/react-router-dom-6.10.0.tgz#090ddc5c84dc41b583ce08468c4007c84245f61f"
|
resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.14.1.tgz#0ad7ba7abdf75baa61169d49f096f0494907a36f"
|
||||||
integrity sha512-E5dfxRPuXKJqzwSe/qGcqdwa18QiWC6f3H3cWXM24qj4N0/beCIf/CWTipop2xm7mR0RCS99NnaqPNjHtrAzCg==
|
integrity sha512-ssF6M5UkQjHK70fgukCJyjlda0Dgono2QGwqGvuk7D+EDGHdacEN3Yke2LTMjkrpHuFwBfDFsEjGVXBDmL+bWw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@remix-run/router" "1.5.0"
|
"@remix-run/router" "1.7.1"
|
||||||
react-router "6.10.0"
|
react-router "6.14.1"
|
||||||
|
|
||||||
react-router@6.10.0:
|
react-router@6.14.1:
|
||||||
version "6.10.0"
|
version "6.14.1"
|
||||||
resolved "https://registry.npmmirror.com/react-router/-/react-router-6.10.0.tgz#230f824fde9dd0270781b5cb497912de32c0a971"
|
resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.14.1.tgz#5e82bcdabf21add859dc04b1859f91066b3a5810"
|
||||||
integrity sha512-Nrg0BWpQqrC3ZFFkyewrflCud9dio9ME3ojHCF/WLsprJVzkq3q3UeEhMCAW1dobjeGbWgjNn/PVF6m46ANxXQ==
|
integrity sha512-U4PfgvG55LdvbQjg5Y9QRWyVxIdO1LlpYT7x+tMAxd9/vmiPuJhIwdxZuIQLN/9e3O4KFDHYfR9gzGeYMasW8g==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@remix-run/router" "1.5.0"
|
"@remix-run/router" "1.7.1"
|
||||||
|
|
||||||
react@^18.2.0:
|
react@^18.2.0:
|
||||||
version "18.2.0"
|
version "18.2.0"
|
||||||
|
@ -5322,14 +5322,14 @@ schema-utils@^3.1.1, schema-utils@^3.2.0:
|
||||||
ajv-keywords "^3.5.2"
|
ajv-keywords "^3.5.2"
|
||||||
|
|
||||||
semver@^6.1.1, semver@^6.1.2, semver@^6.3.0:
|
semver@^6.1.1, semver@^6.1.2, semver@^6.3.0:
|
||||||
version "6.3.0"
|
version "6.3.1"
|
||||||
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
|
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
|
||||||
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
|
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
|
||||||
|
|
||||||
semver@^7.3.7:
|
semver@^7.3.7:
|
||||||
version "7.3.8"
|
version "7.5.4"
|
||||||
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798"
|
resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e"
|
||||||
integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==
|
integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==
|
||||||
dependencies:
|
dependencies:
|
||||||
lru-cache "^6.0.0"
|
lru-cache "^6.0.0"
|
||||||
|
|
||||||
|
@ -6027,11 +6027,6 @@ which@^2.0.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
isexe "^2.0.0"
|
isexe "^2.0.0"
|
||||||
|
|
||||||
word-wrap@^1.2.3:
|
|
||||||
version "1.2.3"
|
|
||||||
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
|
|
||||||
integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
|
|
||||||
|
|
||||||
wrap-ansi@^6.2.0:
|
wrap-ansi@^6.2.0:
|
||||||
version "6.2.0"
|
version "6.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
|
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
|
||||||
|
|
Loading…
Reference in New Issue